1 #include "Common.h"
2 #include "Dae.h"
3 #include "XmlDoc.h"
4 
5 using namespace opencollada;
6 using namespace std;
7 
8 namespace Microsoft
9 {
10 	namespace VisualStudio
11 	{
12 		namespace CppUnitTestFramework
13 		{
14 			template<>
ToString(const XmlNode & n)15 			std::wstring ToString(const XmlNode & n)
16 			{
17 				wstringstream s;
18 				s << n.name().c_str();
19 				return s.str();
20 			}
21 		}
22 	}
23 }
24 
25 namespace opencollada_test
26 {
TEST_CLASS(XmlDocTest)27 	TEST_CLASS(XmlDocTest)
28 	{
29 	public:
30 		TEST_METHOD(Constructor)
31 		{
32 			XmlDoc doc;
33 			Assert::IsFalse(doc);
34 		}
35 
36 		TEST_METHOD(MoveConstructor)
37 		{
38 			XmlDoc doc1;
39 			Assert::IsFalse(doc1);
40 			doc1.readFile(data_path("xml/file.dae"));
41 			Assert::IsTrue(doc1);
42 
43 			XmlDoc doc2(move(doc1));
44 			Assert::IsFalse(doc1);
45 			Assert::IsTrue(doc2);
46 		}
47 
48 		TEST_METHOD(Destructor)
49 		{
50 			XmlDoc doc;
51 			Assert::IsFalse(doc);
52 			doc.readFile(data_path("xml/file.dae"));
53 			Assert::IsTrue(doc);
54 			const auto & nodes = doc.root().selectNodes("//collada:COLLADA");
55 			Assert::AreEqual(static_cast<size_t>(1), nodes.size());
56 		}
57 
58 		TEST_METHOD(OperatorEqual)
59 		{
60 			XmlDoc doc1;
61 			Assert::IsFalse(doc1);
62 			doc1.readFile(data_path("xml/file.dae"));
63 			Assert::IsTrue(doc1);
64 
65 			XmlDoc doc2;
66 			Assert::IsFalse(doc2);
67 			doc2 = move(doc1);
68 			Assert::IsFalse(doc1);
69 			Assert::IsTrue(doc2);
70 		}
71 
72 		TEST_METHOD(ReadFile)
73 		{
74 			{
75 				XmlDoc doc;
76 				Assert::IsFalse(doc);
77 				doc.readFile(data_path("xml/file.dae"));
78 				Assert::IsTrue(doc);
79 				doc.readFile(data_path("xml"));
80 				Assert::IsFalse(doc);
81 				doc.readFile(data_path("xml/bad_file.dae"));
82 				Assert::IsFalse(doc);
83 			}
84 			{
85 				XmlDoc doc;
86 				Assert::IsFalse(doc);
87 				doc.readFile(data_path("xml/empty.dae"));
88 				Assert::IsFalse(doc);
89 			}
90 			{
91 				XmlDoc doc;
92 				Assert::IsFalse(doc);
93 				doc.readFile(data_path("xml/compressed_file.dae"));
94 				Assert::IsTrue(doc);
95 			}
96 		}
97 
98 		TEST_METHOD(OperatorBool)
99 		{
100 			XmlDoc doc;
101 			Assert::IsFalse(doc);
102 			doc.readFile(data_path("xml/file.dae"));
103 			Assert::IsTrue(doc);
104 		}
105 
106 		TEST_METHOD(Reset)
107 		{
108 			XmlDoc doc;
109 			Assert::IsFalse(doc);
110 			doc.readFile(data_path("xml/file.dae"));
111 			Assert::IsTrue(doc);
112 			doc.reset();
113 			Assert::IsFalse(doc);
114 		}
115 
116 		TEST_METHOD(Root)
117 		{
118 			XmlDoc doc;
119 			Assert::IsFalse(doc);
120 			auto root = doc.root();
121 			Assert::IsFalse(root);
122 			doc.readFile(data_path("xml/file.dae"));
123 			Assert::IsTrue(doc);
124 			root = doc.root();
125 			Assert::IsTrue(root);
126 		}
127 
128 		TEST_METHOD(GetRootNamespace)
129 		{
130 			XmlDoc doc;
131 			Assert::IsFalse(doc);
132 			string ns = doc.getRootNamespace();
133 			Assert::IsTrue(ns.empty());
134 			doc.readFile(data_path("xml/file.dae"));
135 			Assert::IsTrue(doc);
136 			Assert::AreEqual(Dae::GetColladaNamespace141(), doc.getRootNamespace());
137 		}
138 
139 		TEST_METHOD(SetTempRoot)
140 		{
141 			XmlDoc doc;
142 			Assert::IsFalse(doc);
143 			doc.readFile(data_path("xml/file.dae"));
144 			auto root = doc.root();
145 			auto node = doc.root().firstChild();
146 			Assert::AreNotEqual(root, node);
147 			{
148 				auto tempRootMod = doc.setTempRoot(node);
149 				auto new_root = doc.root();
150 				Assert::AreEqual(new_root, node);
151 				Assert::AreNotEqual(new_root, root);
152 			}
153 			auto restored_root = doc.root();
154 			Assert::AreNotEqual(restored_root, node);
155 			Assert::AreEqual(restored_root, root);
156 		}
157 	};
158 }