1 //Copyright (c) 2020 Ultimaker B.V. 2 //libSavitar is released under the terms of the AGPLv3 or higher. 3 4 #include "../src/Namespace.h" 5 6 #include <fstream> 7 #include <gtest/gtest.h> 8 #include <iostream> 9 #include <string> 10 #include "../pugixml/src/pugixml.hpp" 11 12 namespace xml_namespace 13 { 14 class NamespaceTest : public testing::Test 15 { 16 public: 17 pugi::xml_document document; 18 pugi::xml_node main_xml_node; 19 SetUp()20 void SetUp() 21 { 22 std::ifstream test_model_file("../tests/namespaces.xml"); 23 if (test_model_file.is_open()) 24 { 25 const std::string xml_string(std::istreambuf_iterator<char>{test_model_file}, {}); 26 27 pugi::xml_parse_result result = document.load_string(xml_string.c_str()); 28 main_xml_node = document.child("main"); 29 } 30 } 31 }; 32 TEST_F(NamespaceTest,getAncestralNamespaces)33 TEST_F(NamespaceTest, getAncestralNamespaces) 34 { 35 ASSERT_TRUE(main_xml_node); 36 37 pugi::xml_node node; 38 xml_namespace::xmlns_map_t result; 39 40 node = main_xml_node.child("simple"); 41 result = xml_namespace::getAncestralNamespaces(node); 42 ASSERT_EQ(result.size(), 2); // <-- including default namespace 43 ASSERT_EQ(result["_a_"].size(), 1); 44 ASSERT_EQ(result["_a_"].count("a"), 1); 45 46 node = main_xml_node.child("multiple"); 47 result = xml_namespace::getAncestralNamespaces(node); 48 ASSERT_EQ(result["_a_"].count("a"), 1); 49 ASSERT_EQ(result["_b_"].count("b"), 1); 50 ASSERT_EQ(result["_c_"].count("c"), 1); 51 52 node = main_xml_node.child("overwrite"); // _before_ overwrite 53 result = xml_namespace::getAncestralNamespaces(node); 54 ASSERT_EQ(result.size(), 2); 55 ASSERT_EQ(result["_b_"].size(), 1); 56 ASSERT_EQ(result["_b_"].count("b"), 1); 57 58 node = main_xml_node.child("overwrite").child("sub"); // _after_ overwrite 59 result = xml_namespace::getAncestralNamespaces(node); 60 ASSERT_EQ(result.size(), 2); 61 ASSERT_EQ(result.count("_b_"), 0); 62 ASSERT_EQ(result["_c_"].size(), 1); 63 ASSERT_EQ(result["_c_"].count("b"), 1); 64 65 node = main_xml_node.child("combine").child("sub"); 66 result = xml_namespace::getAncestralNamespaces(node); 67 ASSERT_EQ(result.size(), 2); 68 ASSERT_EQ(result["_s_"].size(), 2); 69 ASSERT_EQ(result["_s_"].count("s"), 1); 70 ASSERT_EQ(result["_s_"].count("n"), 1); 71 72 node = main_xml_node.child("deep").child("sub"); 73 result = xml_namespace::getAncestralNamespaces(node); 74 ASSERT_EQ(result.size(), 3); 75 ASSERT_EQ(result.count("_w_"), 0); 76 ASSERT_EQ(result.count("_x_"), 1); 77 78 node = main_xml_node.child("deep").child("sub").child("subber").child("subbest"); 79 result = xml_namespace::getAncestralNamespaces(node); 80 ASSERT_EQ(result.size(), 6); 81 ASSERT_EQ(result.count("_w_"), 1); 82 ASSERT_EQ(result.count("_x_"), 1); 83 84 node = main_xml_node.child("multideep").child("sub").child("subber").child("subbest"); 85 result = xml_namespace::getAncestralNamespaces(node); 86 ASSERT_EQ(result.size(), 6); 87 ASSERT_EQ(result.count("_w_"), 1); 88 ASSERT_EQ(result.count("_x_"), 1); 89 90 node = main_xml_node.child("multideep").child("subber").child("subbest"); 91 result = xml_namespace::getAncestralNamespaces(node); 92 ASSERT_EQ(result.size(), 5); 93 ASSERT_EQ(result.count("_w_"), 0); 94 ASSERT_EQ(result.count("_e_"), 1); 95 ASSERT_EQ(result.count("_q_"), 1); 96 ASSERT_EQ(result.count("_r_"), 1); 97 98 node = main_xml_node.child("multideep").child("subbest"); 99 result = xml_namespace::getAncestralNamespaces(node); 100 ASSERT_EQ(result.size(), 3); 101 ASSERT_EQ(result.count("_e_"), 0); 102 ASSERT_EQ(result.count("_q_"), 1); 103 } 104 105 // std::set<std::string> getNamesFor(const xmlns_map_t& map, const std::string& uri); TEST_F(NamespaceTest,getNamesFor)106 TEST_F(NamespaceTest, getNamesFor) 107 { 108 ASSERT_TRUE(main_xml_node); 109 pugi::xml_node node = main_xml_node.child("multideep").child("sub").child("subber").child("subbest"); 110 xml_namespace::xmlns_map_t map = xml_namespace::getAncestralNamespaces(node); 111 ASSERT_EQ(xml_namespace::getNamesFor(map, "_w_").count("w"), 1); 112 ASSERT_EQ(xml_namespace::getNamesFor(map, "_p_").size(), 0); 113 } 114 115 } // namespace xml_namespace 116