Ver código fonte

Merge pull request #1538 from assimp/aavenel-unittest_obj_importer

Aavenel unittest obj importer
Kim Kulling 7 anos atrás
pai
commit
abca0a79f3
2 arquivos alterados com 38 adições e 0 exclusões
  1. 3 0
      code/ObjFileParser.cpp
  2. 35 0
      test/unit/utObjImportExport.cpp

+ 3 - 0
code/ObjFileParser.cpp

@@ -477,6 +477,9 @@ void ObjFileParser::getFace( aiPrimitiveType type ) {
                 }
             } else {
                 //On error, std::atoi will return 0 which is not a valid value
+                delete face;
+                delete m_pModel;
+                m_pModel = nullptr;
                 throw DeadlyImportError("OBJ: Invalid face indice");
             }
 

+ 35 - 0
test/unit/utObjImportExport.cpp

@@ -306,3 +306,38 @@ TEST_F(utObjImportExport, relative_indices_Test) {
     }
 
 }
+
+TEST_F(utObjImportExport, homogeneous_coordinates_Test) {
+    static const std::string ObjModel =
+        "v -0.500000 0.000000 0.400000 0.50000\n"
+        "v -0.500000 0.000000 -0.800000 1.00000\n"
+        "v 0.500000 1.000000 -0.800000 0.5000\n"
+        "f 1 2 3\nB";
+
+    Assimp::Importer myimporter;
+    const aiScene *scene = myimporter.ReadFileFromMemory(ObjModel.c_str(), ObjModel.size(), aiProcess_ValidateDataStructure);
+    EXPECT_NE(nullptr, scene);
+
+    EXPECT_EQ(scene->mNumMeshes, 1);
+    const aiMesh *mesh = scene->mMeshes[0];
+    EXPECT_EQ(mesh->mNumVertices, 3);
+    EXPECT_EQ(mesh->mNumFaces, 1);
+    const aiFace face = mesh->mFaces[0];
+    EXPECT_EQ(face.mNumIndices, 3);
+    const aiVector3D vertice = mesh->mVertices[0];
+    EXPECT_EQ(vertice.x, -1.0f);
+    EXPECT_EQ(vertice.y, 0.0f);
+    EXPECT_EQ(vertice.z, 0.8f);
+}
+
+TEST_F(utObjImportExport, 0based_array_Test) {
+    static const std::string ObjModel =
+        "v -0.500000 0.000000 0.400000\n"
+        "v -0.500000 0.000000 -0.800000\n"
+        "v -0.500000 1.000000 -0.800000\n"
+        "f 0 1 2\nB";
+
+    Assimp::Importer myimporter;
+    const aiScene *scene = myimporter.ReadFileFromMemory(ObjModel.c_str(), ObjModel.size(), 0);
+    EXPECT_EQ(nullptr, scene);
+}