/** \file
 *
 *  Contains unit tests for the DataAccess class
 *
 *  Copyright (c) 2007,2008,2009 MBARI
 *  MBARI Proprietary Information.  All Rights Reserved
 */

#ifndef _DATAACCESS_TEST_H_
#define _DATAACCESS_TEST_H_


#include "DataAccess.h"
#include "io/StrIOStream.h"

#include <cxxtest/TestSuite.h>

/**
 *  Unit tests for DataAccess class
 *
 *  \ingroup data
 */
class DataAccess_Test : public CxxTest::TestSuite
{
public:

    /// Test DataAccess::Read
    void testRead( void )
    {
        Str str( " code=0190 owner=0020 element=0190 universal=0012 unitName=\"degree\" type=2F size=0004 rw=01\n" );
        StrIOStream strIOStream( str );

        DataAccess* dataAccess = DataAccess::Read( strIOStream );
        TS_ASSERT( NULL != dataAccess );
        if( NULL != dataAccess )
        {
            TS_ASSERT_EQUALS( dataAccess->getCode(), 0x0190 );
            TS_ASSERT_EQUALS( dataAccess->getOwnerCode(), 0x0020 );
            TS_ASSERT_EQUALS( dataAccess->getElementCode(), 0x0190 );
            TS_ASSERT_EQUALS( dataAccess->getUniversalCode(), 0x0012 );
            TS_ASSERT( NULL != dataAccess->getUnit() );
            if( NULL != dataAccess->getUnit() )
            {
                TS_ASSERT_SAME_DATA( dataAccess->getUnit()->getName(), "degree", 7 );
            }
            TS_ASSERT_EQUALS( dataAccess->getBinaryType(), DOUBLE4 );
            TS_ASSERT_EQUALS( dataAccess->getTypeSize(), 4 );
            TS_ASSERT_EQUALS( dataAccess->getAccessorType(), DataAccessor::DATA_WRITER );
            delete dataAccess;
        }
    }

};

#endif // _DATAACCESS_TEST_H
