Explorar el Código

Merge pull request #58 from zerotacg/update_unit_tests_47

fixed hrc unit test
paulsapps hace 11 años
padre
commit
a41d9f2e71

+ 2 - 2
QGearsMain/src/data/QGearsHRCFile.cpp

@@ -156,7 +156,7 @@ namespace QGears
 
     //---------------------------------------------------------------------
     String
-    HRCFile::getSkeletonFileName() const
+    HRCFile::getSkeletonFileName( void ) const
     {
         String path;
         StringUtil::splitPath( getName(), path );
@@ -165,7 +165,7 @@ namespace QGears
 
     //---------------------------------------------------------------------
     String
-    HRCFile::getMeshFileName() const
+    HRCFile::getMeshFileName( void ) const
     {
         String base_name;
         StringUtil::splitBase( getName(), base_name );

+ 12 - 1
QGearsMain/src/data/QGearsHRCFileSerializer.cpp

@@ -61,7 +61,7 @@ namespace QGears
             readObject( stream, in_tmp );
             pDest.push_back( in_tmp );
         }
-    };
+    }
 
     //---------------------------------------------------------------------
     void
@@ -83,6 +83,13 @@ namespace QGears
         m_header.bone_count = 0;
         m_header.name       = "";
 
+        if( stream->eof() )
+        {
+            OGRE_EXCEPT(Ogre::Exception::ERR_INVALIDPARAMS
+            ,"Empty file"
+            ,"HRCFileSerializer::readFileHeader" );
+        }
+
         Block header_block;
         readBlock( stream, header_block );
 
@@ -158,6 +165,10 @@ namespace QGears
                                      ,HRCFile* pDest )
     {
         readFileHeader( stream );
+        if( m_header.bone_count == 0 )
+        {
+            m_header.bone_count = 1;
+        }
         pDest->setSkeletonName( m_header.name );
         readVector( stream, pDest->getBones(), m_header.bone_count );
     }

+ 9 - 0
Tests/QGearsMain/CMakeLists.txt

@@ -45,6 +45,15 @@ SET_PROPERTY(TARGET TestQGearsLGPArchive PROPERTY FOLDER "tests")
 target_link_libraries(TestQGearsLGPArchive ${LIBRARIES})
 add_test(TestQGearsLGPArchive TestQGearsLGPArchive)
 
+# HRC archive
+add_executable(TestQGearsHRCSerializer
+    src/test_QGearsHRCSerializer.cpp
+)
+SET_PROPERTY(TARGET TestQGearsHRCSerializer PROPERTY FOLDER "tests")
+
+target_link_libraries(TestQGearsHRCSerializer ${LIBRARIES})
+add_test(TestQGearsHRCSerializer TestQGearsHRCSerializer)
+
 # world map
 add_executable(TestMapSerializer
     src/test_MapSerializer.cpp

+ 8 - 0
Tests/QGearsMain/misc/test_hrc_empty.hrc

@@ -0,0 +1,8 @@
+:HEADER_BLOCK 2
+:SKELETON test_empty_skeleton
+:BONES 0
+
+null
+root
+1.5
+1 model.1

+ 18 - 0
Tests/QGearsMain/misc/test_hrc_simple.hrc

@@ -0,0 +1,18 @@
+:HEADER_BLOCK 2
+:SKELETON test_skeleton
+:BONES 3
+
+bone.1
+root
+1.5
+1 model.1
+
+bone.1.1
+bone.1
+2
+1 model.1.1
+
+bone.2
+root
+3.125
+3 model.2-1 model.2-2 model.2-3

+ 73 - 7
Tests/QGearsMain/src/test_QGearsHRCSerializer.cpp

@@ -25,25 +25,91 @@ THE SOFTWARE.
 */
 #include <fstream>
 
-#define BOOST_TEST_MODULE QGearsHRCFileSerializer
+//#define BOOST_TEST_MODULE QGearsHRCFileSerializer
 #include <boost/test/unit_test.hpp>
 
-#include "QGearsHRCFileSerializer.h"
+#include <Ogre.h>
 
-BOOST_AUTO_TEST_CASE( read_file )
+#include "data/QGearsHRCFileSerializer.h"
+
+const char* LOG_NAME( "Default Log" );
+
+BOOST_AUTO_TEST_CASE( simple_hrc )
 {
-    const char* file_name( "../../../../output/data_orig/field/char/aaaa.hrc" );
+    class TestFile : public QGears::HRCFile
+    {
+    public:
+        TestFile() : QGears::HRCFile( NULL, "", 0, "" ) {}
+    };
+    Ogre::LogManager            logMgr;
+    logMgr.createLog( LOG_NAME, true, true, true );
+
+    const char* file_name( "misc/test_hrc_simple.hrc" );
     std::ifstream *ifs(  OGRE_NEW_T( std::ifstream, Ogre::MEMCATEGORY_GENERAL )( file_name, std::ifstream::binary ) );
     BOOST_REQUIRE( ifs->is_open() );
     Ogre::DataStreamPtr stream( OGRE_NEW Ogre::FileStreamDataStream( ifs ) );
     BOOST_REQUIRE( stream->isReadable() );
 
-    QGears::HRCFile             file;
+    TestFile                    file;
     QGears::HRCFileSerializer   ser;
     ser.importHRCFile( stream, &file );
 
-    BOOST_CHECK_EQUAL( "n_cloud_sk", file.getName() );
-    BOOST_CHECK_EQUAL( 21, file.getBones().size() );
+    BOOST_CHECK_EQUAL( "test_skeleton", file.getSkeletonName() );
+
+    const QGears::HRCFile::BoneList& bones( file.getBones() );
+    BOOST_CHECK_EQUAL( 3, bones.size() );
+    BOOST_CHECK_EQUAL( "bone.1", bones.at(0).name );
+    BOOST_CHECK_EQUAL( "root", bones.at(0).parent );
+    BOOST_CHECK_CLOSE( 1.5f, bones.at(0).length, 0.0001 );
+    BOOST_CHECK_EQUAL( 1, bones.at(0).rsd_names.size() );
+    BOOST_CHECK_EQUAL( "model.1", bones.at(0).rsd_names.at(0) );
+
+    BOOST_CHECK_EQUAL( "bone.1.1", bones.at(1).name );
+    BOOST_CHECK_EQUAL( bones.at(0).name, bones.at(1).parent );
+    BOOST_CHECK_CLOSE( 2.0f, bones.at(1).length, 0.0001 );
+    BOOST_CHECK_EQUAL( 1, bones.at(1).rsd_names.size() );
+    BOOST_CHECK_EQUAL( "model.1.1", bones.at(1).rsd_names.at(0) );
+
+    BOOST_CHECK_EQUAL( "bone.2", bones.at(2).name );
+    BOOST_CHECK_EQUAL( bones.at(0).parent, bones.at(2).parent );
+    BOOST_CHECK_CLOSE( 3.125f, bones.at(2).length, 0.0001 );
+    BOOST_CHECK_EQUAL( 3, bones.at(2).rsd_names.size() );
+    BOOST_CHECK_EQUAL( "model.2-1", bones.at(2).rsd_names.at(0) );
+    BOOST_CHECK_EQUAL( "model.2-2", bones.at(2).rsd_names.at(1) );
+    BOOST_CHECK_EQUAL( "model.2-3", bones.at(2).rsd_names.at(2) );
+
+    ifs->close();
+}
+
+BOOST_AUTO_TEST_CASE( empty_hrc )
+{
+    class TestFile : public QGears::HRCFile
+    {
+    public:
+        TestFile() : QGears::HRCFile( NULL, "", 0, "" ) {}
+    };
+    Ogre::LogManager            logMgr;
+    logMgr.createLog( LOG_NAME, true, true, true );
+
+    const char* file_name( "misc/test_hrc_empty.hrc" );
+    std::ifstream *ifs(  OGRE_NEW_T( std::ifstream, Ogre::MEMCATEGORY_GENERAL )( file_name, std::ifstream::binary ) );
+    BOOST_REQUIRE( ifs->is_open() );
+    Ogre::DataStreamPtr stream( OGRE_NEW Ogre::FileStreamDataStream( ifs ) );
+    BOOST_REQUIRE( stream->isReadable() );
+
+    TestFile                    file;
+    QGears::HRCFileSerializer   ser;
+    ser.importHRCFile( stream, &file );
+
+    BOOST_CHECK_EQUAL( "test_empty_skeleton", file.getSkeletonName() );
+
+    const QGears::HRCFile::BoneList& bones( file.getBones() );
+    BOOST_CHECK_EQUAL( 1, bones.size() );
+    BOOST_CHECK_EQUAL( "null", bones.at(0).name );
+    BOOST_CHECK_EQUAL( "root", bones.at(0).parent );
+    BOOST_CHECK_CLOSE( 1.5f, bones.at(0).length, 0.0001 );
+    BOOST_CHECK_EQUAL( 1, bones.at(0).rsd_names.size() );
+    BOOST_CHECK_EQUAL( "model.1", bones.at(0).rsd_names.at(0) );
 
     ifs->close();
 }