diff --git a/ReflexToQ3/test/catch-parser.cpp b/ReflexToQ3/test/catch-parser.cpp index cba2e15..47792c5 100644 --- a/ReflexToQ3/test/catch-parser.cpp +++ b/ReflexToQ3/test/catch-parser.cpp @@ -1,51 +1,60 @@ #include "oopless-parser.hpp" #include "catch.hpp" -#include #include #include #include -std::vector readin(const std::string &filename, const int ln = 0) { - std::ifstream fin; - fin.open(filename); - if (!fin.good()) { - std::cerr << "error: can not open file with test cases." << std::endl; - } - std::vector output; - std::string data; - while (getline(fin, data)) { - output.push_back(data); - } - return output; -} - -bool test_parseface(const std::string &filename, const int &cnt_indices) { - std::vector test = readin(filename); - std::stringstream ss; - copy(test.begin(), test.end(), std::ostream_iterator(ss, "\n")); - std::vector x = parse_face(ss); - bool is_ok = true; - for (struct TFace face : x) { - if (face.m_Indices.size() != cnt_indices) { - is_ok = false; - break; - } - } - return is_ok; +std::vector getfaces(const std::string &test) { +using namespace std; + stringstream ss; + ss << test; + return parse_face(ss); } TEST_CASE ("face parsing case: faces with 3 indices", "[Parser]" ) { - bool k = test_parseface("ReflexToQ3/test/cases-face/parser-face-3indices.txt", 3); - REQUIRE (k == true); + std::string sample = " 0.000000 0.000000 1.000000 1.000000 0.000000 6 0 7 0xff727278 common/materials/stone/stone"; + struct TFace f = getfaces(sample).front(); + REQUIRE (f.m_Indices.size() == 3); } TEST_CASE ("face parsing case: faces with 4 indices", "[Parser]") { - bool k = test_parseface("ReflexToQ3/test/cases-face/parser-face-4indices.txt", 4); - REQUIRE (k == true); + std::string sample = " 0.000000 0.000000 1.000000 1.000000 0.000000 3 1 0 4 0xffffffff common/materials/metal/aluminum"; + struct TFace f = getfaces(sample).front(); + REQUIRE (f.m_Indices.size() == 4); } TEST_CASE ("face parsing case: faces with 5 indices", "[Parser]") { - bool k = test_parseface("ReflexToQ3/test/cases-face/parser-face-5indices.txt", 5); - REQUIRE (k == true); + std::string sample = " 0.000000 0.000000 1.000000 1.000000 0.000000 2 7 5 7 4 0xff727278 common/materials/stone/stone"; + struct TFace f = getfaces(sample).front(); + REQUIRE (f.m_Indices.size() == 5); } +TEST_CASE ("face parsing case: faces with 9 indices", "[Parser]") { + std::string sample = " 0.000000 0.000000 1.000000 1.000000 0.000000 2 7 5 7 4 7 5 7 4 0xff727278 common/materials/stone/stone"; + struct TFace f = getfaces(sample).front(); + REQUIRE (f.m_Indices.size() == 9); +} + +TEST_CASE("face parsing case: faces with no material", "[Parser]") { + std::string sample = + " 0.000000 0.000000 1.000000 1.000000 0.000000 1 0 4 5 0x00000000 "; + std::string answer; //empty string + struct TFace f = getfaces(sample).front(); + REQUIRE (f.m_Material == answer); +} + +TEST_CASE("face parsing case: face's material name is preserved", "[Parser]") { + std::string sample = + " 0.000000 0.000000 1.000000 1.000000 0.000000 3 1 0 4 0xffffffff common/materials/metal/aluminum"; + std::string answer = "common/materials/metal/aluminum"; + struct TFace f = getfaces(sample).front(); + REQUIRE (f.m_Material == answer); +} + +TEST_CASE("face parsing case: face's color code is preserved", "[Parser]") { + std::string sample = + " 0.000000 0.000000 1.000000 1.000000 0.000000 2 4 1 5 0xffa5a5a5 common/materials/metal/p_metal3"; + std::string answer = "0xffa5a5a5"; + struct TFace f = getfaces(sample).front(); + REQUIRE (f.hex == answer); +}