1 | // |
---|---|
2 | // JSONTest.h |
3 | // |
4 | // Definition of the JSONTest class. |
5 | // |
6 | // Copyright (c) 2004-2006, Applied Informatics Software Engineering GmbH. |
7 | // and Contributors. |
8 | // |
9 | // SPDX-License-Identifier: BSL-1.0 |
10 | // |
11 | |
12 | |
13 | #ifndef JSONTest_INCLUDED |
14 | #define JSONTest_INCLUDED |
15 | |
16 | |
17 | #include "Poco/JSON/JSON.h" |
18 | #include "Poco/CppUnit/TestCase.h" |
19 | #include "Poco/JSON/Object.h" |
20 | #include "Poco/JSON/Parser.h" |
21 | #include "Poco/JSON/Query.h" |
22 | #include "Poco/JSON/JSONException.h" |
23 | #include "Poco/JSON/Stringifier.h" |
24 | #include "Poco/JSON/ParseHandler.h" |
25 | #include "Poco/JSON/PrintHandler.h" |
26 | #include "Poco/JSON/Template.h" |
27 | #include <sstream> |
28 | |
29 | |
30 | class JSONTest: public CppUnit::TestCase |
31 | { |
32 | public: |
33 | JSONTest(const std::string& name); |
34 | ~JSONTest(); |
35 | |
36 | void testNullProperty(); |
37 | void testTrueProperty(); |
38 | void testFalseProperty(); |
39 | void testNumberProperty(); |
40 | void testUnsignedNumberProperty(); |
41 | #if defined(POCO_HAVE_INT64) |
42 | void testNumber64Property(); |
43 | void testUnsignedNumber64Property(); |
44 | #endif |
45 | void testStringProperty(); |
46 | void testEmptyObject(); |
47 | void testEmptyPropertyName(); |
48 | void testComplexObject(); |
49 | void testDoubleProperty(); |
50 | void testDouble2Property(); |
51 | void testDouble3Property(); |
52 | void testObjectProperty(); |
53 | void testObjectArray(); |
54 | void testArrayOfObjects(); |
55 | void testEmptyArray(); |
56 | void testNestedArray(); |
57 | void testNullElement(); |
58 | void testTrueElement(); |
59 | void testFalseElement(); |
60 | void testNumberElement(); |
61 | void testStringElement(); |
62 | void testEmptyObjectElement(); |
63 | void testDoubleElement(); |
64 | void testSetArrayElement(); |
65 | void testOptValue(); |
66 | void testQuery(); |
67 | void testComment(); |
68 | void testPrintHandler(); |
69 | void testStringify(); |
70 | void testStringifyPreserveOrder(); |
71 | |
72 | void testValidJanssonFiles(); |
73 | void testInvalidJanssonFiles(); |
74 | void testTemplate(); |
75 | void testUnicode(); |
76 | void testInvalidUnicodeJanssonFiles(); |
77 | void testSmallBuffer(); |
78 | void testEscape0(); |
79 | void testNonEscapeUnicode(); |
80 | void testEscapeUnicode(); |
81 | |
82 | void testCopy(); |
83 | void testMove(); |
84 | |
85 | void setUp(); |
86 | void tearDown(); |
87 | |
88 | static CppUnit::Test* suite(); |
89 | |
90 | private: |
91 | std::string getTestFilesPath(const std::string& type); |
92 | |
93 | template <typename T> |
94 | void testNumber(T number) |
95 | { |
96 | std::ostringstream os; |
97 | os << "{ \"test\" : "<< number << " }"; |
98 | std::string json = os.str(); |
99 | Poco::JSON::Parser parser; |
100 | Poco::Dynamic::Var result; |
101 | |
102 | try |
103 | { |
104 | result = parser.parse(json); |
105 | } |
106 | catch (Poco::JSON::JSONException& jsone) |
107 | { |
108 | std::cout << jsone.message() << std::endl; |
109 | assertTrue (false); |
110 | } |
111 | |
112 | assertTrue (result.type() == typeid(Poco::JSON::Object::Ptr)); |
113 | |
114 | Poco::JSON::Object::Ptr object = result.extract<Poco::JSON::Object::Ptr>(); |
115 | Poco::Dynamic::Var test = object->get("test"); |
116 | assertTrue (test.isNumeric()); |
117 | T value = test; |
118 | assertTrue (value == number); |
119 | |
120 | Poco::DynamicStruct ds = *object; |
121 | assertTrue (!ds["test"].isEmpty()); |
122 | assertTrue (ds["test"].isNumeric()); |
123 | assertTrue (ds["test"] == number); |
124 | |
125 | const Poco::DynamicStruct& rds = *object; |
126 | assertTrue (!rds["test"].isEmpty()); |
127 | assertTrue (rds["test"].isNumeric()); |
128 | assertTrue (rds["test"] == number); |
129 | } |
130 | }; |
131 | |
132 | |
133 | #endif // JSONTest_INCLUDED |
134 |