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
30class JSONTest: public CppUnit::TestCase
31{
32public:
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
90private:
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