1 // This file is part of VSTGUI. It is subject to the license terms
2 // in the LICENSE file found in the top-level directory of this
3 // distribution and at http://github.com/steinbergmedia/vstgui/LICENSE
4 
5 #include "../unittests.h"
6 #include "../../../uidescription/xmlparser.h"
7 #include <string>
8 
9 namespace VSTGUI {
10 using namespace Xml;
11 
12 namespace {
13 
14 struct Handler : public IHandler
15 {
16 	bool stopOnStartElement {false};
startXmlElementVSTGUI::__anon04436b330111::Handler17 	void startXmlElement (Parser* parser, IdStringPtr elementName, UTF8StringPtr* elementAttributes) override
18 	{
19 		if (stopOnStartElement)
20 			parser->stop ();
21 	}
endXmlElementVSTGUI::__anon04436b330111::Handler22 	void endXmlElement (Parser* parser, IdStringPtr name) override
23 	{
24 	}
xmlCharDataVSTGUI::__anon04436b330111::Handler25 	void xmlCharData (Parser* parser, const int8_t* data, int32_t length) override
26 	{
27 	}
xmlCommentVSTGUI::__anon04436b330111::Handler28 	void xmlComment (Parser* parser, IdStringPtr comment) override
29 	{
30 	}
31 
32 };
33 
34 } // anonymous
35 
36 constexpr auto validXML =
37 R"(<?xml version="1.0" encoding="UTF-8"?>
38 <tag attr="bla">
39 CHARDATA
40 <!-- comment -->
41 </tag>
42 )";
43 
44 constexpr auto validXMLWithJunkAtEnd =
45 R"(<?xml version="1.0" encoding="UTF-8"?>
46 <tag attr="bla">
47 CHARDATA
48 <!-- comment -->
49 </tag>
50 this is junk
51 )";
52 
53 constexpr auto invalidXML =
54 R"(
55 <tag attr="bla">
56 CHARDATA
57 <!-- comment -->
58 </tag2>
59 )";
60 
61 TESTCASE(XMLParserTest,
62 
63 	TEST(validParse,
64 		MemoryContentProvider provider (validXML, static_cast<uint32_t> (strlen (validXML)));
65 		Handler handler;
66 		Parser p;
67 		EXPECT(p.parse (&provider, &handler) == true);
68 	);
69 
70 	TEST(validParseWithJunkAtEnd,
71 		MemoryContentProvider provider (validXMLWithJunkAtEnd, static_cast<uint32_t> (strlen (validXMLWithJunkAtEnd)));
72 		Handler handler;
73 		Parser p;
74 		EXPECT(p.parse (&provider, &handler) == true);
75 	);
76 
77 	TEST(invalidParse,
78 		MemoryContentProvider provider (invalidXML, static_cast<uint32_t> (strlen (invalidXML)));
79 		Handler handler;
80 		Parser p;
81 		EXPECT(p.parse (&provider, &handler) == false);
82 	);
83 
84 	TEST(stopParse,
85 		MemoryContentProvider provider (validXML, static_cast<uint32_t> (strlen (validXML)));
86 		Handler handler;
87 		handler.stopOnStartElement = true;
88 		Parser p;
89 		EXPECT(p.parse (&provider, &handler) == false);
90 	);
91 
92 );
93 
94 } // VSTGUI
95