From 398e358826035929795171740433e96fe2061e5a Mon Sep 17 00:00:00 2001 From: Merlyn Morgan-Graham Date: Sun, 2 Oct 2016 01:25:07 -0700 Subject: [PATCH] Add unit tests for reading from existing file stream --- tests/tester.cc | 52 +++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 52 insertions(+) diff --git a/tests/tester.cc b/tests/tester.cc index 5573bb6..00b4eb0 100644 --- a/tests/tester.cc +++ b/tests/tester.cc @@ -184,6 +184,48 @@ TestLoadObj( return true; } +static bool +TestLoadObjFromPreopenedFile( + const char* filename, + const char* basepath = NULL, + bool readMaterials = true, + bool triangulate = true) +{ + std::string fullFilename = std::string(basepath) + filename; + std::cout << "Loading " << fullFilename << std::endl; + + std::ifstream fileStream(fullFilename); + + if (!fileStream) { + std::cerr << "Could not find specified file: " << fullFilename << std::endl; + return false; + } + + tinyobj::MaterialStreamReader materialStreamReader(fileStream); + tinyobj::MaterialStreamReader* materialReader = readMaterials + ? &materialStreamReader + : NULL; + + tinyobj::attrib_t attrib; + std::vector shapes; + std::vector materials; + + std::string err; + bool ret = tinyobj::LoadObj(&attrib, &shapes, &materials, &err, &fileStream, materialReader); + + if (!err.empty()) { + std::cerr << err << std::endl; + } + + if (!ret) { + printf("Failed to load/parse .obj.\n"); + return false; + } + + std::cout << "Loaded material count: " << materials.size() << "\n"; + + return true; +} static bool TestStreamLoadObj() @@ -351,6 +393,16 @@ TEST_CASE("stream_load", "[Stream]") { REQUIRE(true == TestStreamLoadObj()); } +TEST_CASE("stream_load_from_file_skipping_materials", "[Stream]") { + REQUIRE(true == TestLoadObjFromPreopenedFile( + "../models/pbr-mat-ext.obj", gMtlBasePath, /*readMaterials*/false, /*triangulate*/false)); +} + +TEST_CASE("stream_load_from_file_with_materials", "[Stream]") { + REQUIRE(true == TestLoadObjFromPreopenedFile( + "../models/pbr-mat-ext.obj", gMtlBasePath, /*readMaterials*/true, /*triangulate*/false)); +} + TEST_CASE("trailing_whitespace_in_mtl", "[Issue92]") { tinyobj::attrib_t attrib; std::vector shapes;