summaryrefslogtreecommitdiffstats
path: root/xbmc/utils/test/TestJSONVariantParser.cpp
diff options
context:
space:
mode:
authormanuel <manuel@mausz.at>2020-10-19 00:52:24 +0200
committermanuel <manuel@mausz.at>2020-10-19 00:52:24 +0200
commitbe933ef2241d79558f91796cc5b3a161f72ebf9c (patch)
treefe3ab2f130e20c99001f2d7a81d610c78c96a3f4 /xbmc/utils/test/TestJSONVariantParser.cpp
parent5f8335c1e49ce108ef3481863833c98efa00411b (diff)
downloadkodi-pvr-build-be933ef2241d79558f91796cc5b3a161f72ebf9c.tar.gz
kodi-pvr-build-be933ef2241d79558f91796cc5b3a161f72ebf9c.tar.bz2
kodi-pvr-build-be933ef2241d79558f91796cc5b3a161f72ebf9c.zip
sync with upstream
Diffstat (limited to 'xbmc/utils/test/TestJSONVariantParser.cpp')
-rw-r--r--xbmc/utils/test/TestJSONVariantParser.cpp189
1 files changed, 189 insertions, 0 deletions
diff --git a/xbmc/utils/test/TestJSONVariantParser.cpp b/xbmc/utils/test/TestJSONVariantParser.cpp
new file mode 100644
index 0000000..b8556b0
--- /dev/null
+++ b/xbmc/utils/test/TestJSONVariantParser.cpp
@@ -0,0 +1,189 @@
1/*
2 * Copyright (C) 2005-2018 Team Kodi
3 * This file is part of Kodi - https://kodi.tv
4 *
5 * SPDX-License-Identifier: GPL-2.0-or-later
6 * See LICENSES/README.md for more information.
7 */
8
9#include "utils/JSONVariantParser.h"
10#include "utils/Variant.h"
11
12#include <gtest/gtest.h>
13
14TEST(TestJSONVariantParser, CannotParseNullptr)
15{
16 CVariant variant;
17 ASSERT_FALSE(CJSONVariantParser::Parse(nullptr, variant));
18}
19
20TEST(TestJSONVariantParser, CannotParseEmptyString)
21{
22 CVariant variant;
23 ASSERT_FALSE(CJSONVariantParser::Parse("", variant));
24 ASSERT_FALSE(CJSONVariantParser::Parse(std::string(), variant));
25}
26
27TEST(TestJSONVariantParser, CannotParseInvalidJson)
28{
29 CVariant variant;
30 ASSERT_FALSE(CJSONVariantParser::Parse("{", variant));
31 ASSERT_FALSE(CJSONVariantParser::Parse("}", variant));
32 ASSERT_FALSE(CJSONVariantParser::Parse("[", variant));
33 ASSERT_FALSE(CJSONVariantParser::Parse("]", variant));
34 ASSERT_FALSE(CJSONVariantParser::Parse("foo", variant));
35}
36
37TEST(TestJSONVariantParser, CanParseNull)
38{
39 CVariant variant;
40 ASSERT_TRUE(CJSONVariantParser::Parse("null", variant));
41 ASSERT_TRUE(variant.isNull());
42}
43
44TEST(TestJSONVariantParser, CanParseBoolean)
45{
46 CVariant variant;
47 ASSERT_TRUE(CJSONVariantParser::Parse("true", variant));
48 ASSERT_TRUE(variant.isBoolean());
49 ASSERT_TRUE(variant.asBoolean());
50
51 ASSERT_TRUE(CJSONVariantParser::Parse("false", variant));
52 ASSERT_TRUE(variant.isBoolean());
53 ASSERT_FALSE(variant.asBoolean());
54}
55
56TEST(TestJSONVariantParser, CanParseSignedInteger)
57{
58 CVariant variant;
59 ASSERT_TRUE(CJSONVariantParser::Parse("-1", variant));
60 ASSERT_TRUE(variant.isInteger());
61 ASSERT_EQ(-1, variant.asInteger());
62}
63
64TEST(TestJSONVariantParser, CanParseUnsignedInteger)
65{
66 CVariant variant;
67 ASSERT_TRUE(CJSONVariantParser::Parse("0", variant));
68 ASSERT_TRUE(variant.isUnsignedInteger());
69 ASSERT_EQ(0U, variant.asUnsignedInteger());
70
71 ASSERT_TRUE(CJSONVariantParser::Parse("1", variant));
72 ASSERT_TRUE(variant.isUnsignedInteger());
73 ASSERT_EQ(1U, variant.asUnsignedInteger());
74}
75
76TEST(TestJSONVariantParser, CanParseSignedInteger64)
77{
78 CVariant variant;
79 ASSERT_TRUE(CJSONVariantParser::Parse("-4294967296", variant));
80 ASSERT_TRUE(variant.isInteger());
81 ASSERT_EQ(-4294967296, variant.asInteger());
82}
83
84TEST(TestJSONVariantParser, CanParseUnsignedInteger64)
85{
86 CVariant variant;
87 ASSERT_TRUE(CJSONVariantParser::Parse("4294967296", variant));
88 ASSERT_TRUE(variant.isUnsignedInteger());
89 ASSERT_EQ(4294967296U, variant.asUnsignedInteger());
90}
91
92TEST(TestJSONVariantParser, CanParseDouble)
93{
94 CVariant variant;
95 ASSERT_TRUE(CJSONVariantParser::Parse("0.0", variant));
96 ASSERT_TRUE(variant.isDouble());
97 ASSERT_EQ(0.0, variant.asDouble());
98
99 ASSERT_TRUE(CJSONVariantParser::Parse("1.0", variant));
100 ASSERT_TRUE(variant.isDouble());
101 ASSERT_EQ(1.0, variant.asDouble());
102
103 ASSERT_TRUE(CJSONVariantParser::Parse("-1.0", variant));
104 ASSERT_TRUE(variant.isDouble());
105 ASSERT_EQ(-1.0, variant.asDouble());
106}
107
108TEST(TestJSONVariantParser, CanParseString)
109{
110 CVariant variant;
111 ASSERT_TRUE(CJSONVariantParser::Parse("\"\"", variant));
112 ASSERT_TRUE(variant.isString());
113 ASSERT_TRUE(variant.empty());
114
115 ASSERT_TRUE(CJSONVariantParser::Parse("\"foo\"", variant));
116 ASSERT_TRUE(variant.isString());
117 ASSERT_STREQ("foo", variant.asString().c_str());
118
119 ASSERT_TRUE(CJSONVariantParser::Parse("\"foo bar\"", variant));
120 ASSERT_TRUE(variant.isString());
121 ASSERT_STREQ("foo bar", variant.asString().c_str());
122}
123
124TEST(TestJSONVariantParser, CanParseObject)
125{
126 CVariant variant;
127 ASSERT_TRUE(CJSONVariantParser::Parse("{}", variant));
128 ASSERT_TRUE(variant.isObject());
129 ASSERT_TRUE(variant.empty());
130
131 variant.clear();
132 ASSERT_TRUE(CJSONVariantParser::Parse("{ \"foo\": \"bar\" }", variant));
133 ASSERT_TRUE(variant.isObject());
134 ASSERT_TRUE(variant.isMember("foo"));
135 ASSERT_TRUE(variant["foo"].isString());
136 ASSERT_STREQ("bar", variant["foo"].asString().c_str());
137
138 variant.clear();
139 ASSERT_TRUE(CJSONVariantParser::Parse("{ \"foo\": \"bar\", \"bar\": true }", variant));
140 ASSERT_TRUE(variant.isObject());
141 ASSERT_TRUE(variant.isMember("foo"));
142 ASSERT_TRUE(variant["foo"].isString());
143 ASSERT_STREQ("bar", variant["foo"].asString().c_str());
144 ASSERT_TRUE(variant.isMember("bar"));
145 ASSERT_TRUE(variant["bar"].isBoolean());
146 ASSERT_TRUE(variant["bar"].asBoolean());
147
148 variant.clear();
149 ASSERT_TRUE(CJSONVariantParser::Parse("{ \"foo\": { \"sub-foo\": \"bar\" } }", variant));
150 ASSERT_TRUE(variant.isObject());
151 ASSERT_TRUE(variant.isMember("foo"));
152 ASSERT_TRUE(variant["foo"].isObject());
153 ASSERT_TRUE(variant["foo"].isMember("sub-foo"));
154 ASSERT_TRUE(variant["foo"]["sub-foo"].isString());
155 ASSERT_STREQ("bar", variant["foo"]["sub-foo"].asString().c_str());
156}
157
158TEST(TestJSONVariantParser, CanParseArray)
159{
160 CVariant variant;
161 ASSERT_TRUE(CJSONVariantParser::Parse("[]", variant));
162 ASSERT_TRUE(variant.isArray());
163 ASSERT_TRUE(variant.empty());
164
165 variant.clear();
166 ASSERT_TRUE(CJSONVariantParser::Parse("[ true ]", variant));
167 ASSERT_TRUE(variant.isArray());
168 ASSERT_EQ(1U, variant.size());
169 ASSERT_TRUE(variant[0].isBoolean());
170 ASSERT_TRUE(variant[0].asBoolean());
171
172 variant.clear();
173 ASSERT_TRUE(CJSONVariantParser::Parse("[ true, \"foo\" ]", variant));
174 ASSERT_TRUE(variant.isArray());
175 ASSERT_EQ(2U, variant.size());
176 ASSERT_TRUE(variant[0].isBoolean());
177 ASSERT_TRUE(variant[0].asBoolean());
178 ASSERT_TRUE(variant[1].isString());
179 ASSERT_STREQ("foo", variant[1].asString().c_str());
180
181 variant.clear();
182 ASSERT_TRUE(CJSONVariantParser::Parse("[ { \"foo\": \"bar\" } ]", variant));
183 ASSERT_TRUE(variant.isArray());
184 ASSERT_EQ(1U, variant.size());
185 ASSERT_TRUE(variant[0].isObject());
186 ASSERT_TRUE(variant[0].isMember("foo"));
187 ASSERT_TRUE(variant[0]["foo"].isString());
188 ASSERT_STREQ("bar", variant[0]["foo"].asString().c_str());
189}