Browse Source

ObjImporter: test all cases of invalid mixed primitives.

This might eventually be a supported case (an object referencing three
meshes with different primitives), but let's just cover the existing
code for now.
pull/578/head
Vladimír Vondruš 4 years ago
parent
commit
d3e16d8435
  1. 34
      src/MagnumPlugins/ObjImporter/Test/ObjImporterTest.cpp
  2. 19
      src/MagnumPlugins/ObjImporter/Test/invalid-mixed-primitives.obj

34
src/MagnumPlugins/ObjImporter/Test/ObjImporterTest.cpp

@ -70,6 +70,7 @@ struct ObjImporterTest: TestSuite::Tester {
with each case testing one file and just the invalid() case testing
separate files. */
void invalid();
void invalidMixedPrimitives();
void invalidNumbers();
void invalidNumberCount();
void invalidInconsistentIndexTuple();
@ -88,12 +89,22 @@ const struct {
const char* filename;
const char* message;
} InvalidData[]{
{"mixed primitives", "invalid-mixed-primitives.obj",
"mixed primitive MeshPrimitive::Points and MeshPrimitive::Lines"},
{"unknown keyword", "invalid-keyword.obj",
"unknown keyword bleh"}
};
const struct {
const char* name;
const char* message;
} InvalidMixedPrimitivesData[]{
{"points after some other",
"mixed primitive MeshPrimitive::Triangles and MeshPrimitive::Points"},
{"lines after some other",
"mixed primitive MeshPrimitive::Points and MeshPrimitive::Lines"},
{"triangles after some other",
"mixed primitive MeshPrimitive::Lines and MeshPrimitive::Triangles"},
};
const struct {
const char* name;
const char* message;
@ -171,6 +182,9 @@ ObjImporterTest::ObjImporterTest() {
addInstancedTests({&ObjImporterTest::invalid},
Containers::arraySize(InvalidData));
addInstancedTests({&ObjImporterTest::invalidMixedPrimitives},
Containers::arraySize(InvalidMixedPrimitivesData));
addInstancedTests({&ObjImporterTest::invalidNumbers},
Containers::arraySize(InvalidNumbersData));
@ -543,6 +557,22 @@ void ObjImporterTest::invalid() {
CORRADE_COMPARE(out.str(), Utility::formatString("Trade::ObjImporter::mesh(): {}\n", data.message));
}
void ObjImporterTest::invalidMixedPrimitives() {
auto&& data = InvalidMixedPrimitivesData[testCaseInstanceId()];
setTestCaseDescription(data.name);
Containers::Pointer<AbstractImporter> importer = _manager.instantiate("ObjImporter");
CORRADE_VERIFY(importer->openFile(Utility::Path::join(OBJIMPORTER_TEST_DIR, "invalid-mixed-primitives.obj")));
/* Ensure we didn't forget to test any case */
CORRADE_COMPARE(importer->meshCount(), Containers::arraySize(InvalidMixedPrimitivesData));
std::ostringstream out;
Error redirectError{&out};
CORRADE_VERIFY(!importer->mesh(data.name));
CORRADE_COMPARE(out.str(), Utility::formatString("Trade::ObjImporter::mesh(): {}\n", data.message));
}
void ObjImporterTest::invalidNumbers() {
auto&& data = InvalidNumbersData[testCaseInstanceId()];
setTestCaseDescription(data.name);

19
src/MagnumPlugins/ObjImporter/Test/invalid-mixed-primitives.obj

@ -1,13 +1,14 @@
# Positions
v 0.5 2 3
v 0 1.5 1
o points after some other
v 2 3 5.0
# Points
f 1 1 1
p 1
p 3
o lines after some other
v 2 3 5.0
p 2
l 2 2 2
# Lines
l 1 2
l 2 3
o triangles after some other
v 2 3 5.0
l 3 3
f 3 3 3

Loading…
Cancel
Save