summaryrefslogtreecommitdiffstats
path: root/xbmc/utils/test/TestVariant.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'xbmc/utils/test/TestVariant.cpp')
-rw-r--r--xbmc/utils/test/TestVariant.cpp334
1 files changed, 334 insertions, 0 deletions
diff --git a/xbmc/utils/test/TestVariant.cpp b/xbmc/utils/test/TestVariant.cpp
new file mode 100644
index 0000000..3c96cd0
--- /dev/null
+++ b/xbmc/utils/test/TestVariant.cpp
@@ -0,0 +1,334 @@
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/Variant.h"
10
11#include <gtest/gtest.h>
12
13TEST(TestVariant, VariantTypeInteger)
14{
15 CVariant a((int)0), b((int64_t)1);
16
17 EXPECT_TRUE(a.isInteger());
18 EXPECT_EQ(CVariant::VariantTypeInteger, a.type());
19 EXPECT_TRUE(b.isInteger());
20 EXPECT_EQ(CVariant::VariantTypeInteger, b.type());
21
22 EXPECT_EQ((int64_t)1, b.asInteger());
23}
24
25TEST(TestVariant, VariantTypeUnsignedInteger)
26{
27 CVariant a((unsigned int)0), b((uint64_t)1);
28
29 EXPECT_TRUE(a.isUnsignedInteger());
30 EXPECT_EQ(CVariant::VariantTypeUnsignedInteger, a.type());
31 EXPECT_TRUE(b.isUnsignedInteger());
32 EXPECT_EQ(CVariant::VariantTypeUnsignedInteger, b.type());
33
34 EXPECT_EQ((uint64_t)1, b.asUnsignedInteger());
35}
36
37TEST(TestVariant, VariantTypeBoolean)
38{
39 CVariant a(true);
40
41 EXPECT_TRUE(a.isBoolean());
42 EXPECT_EQ(CVariant::VariantTypeBoolean, a.type());
43
44 EXPECT_TRUE(a.asBoolean());
45}
46
47TEST(TestVariant, VariantTypeString)
48{
49 CVariant a("VariantTypeString");
50 CVariant b("VariantTypeString2", sizeof("VariantTypeString2") - 1);
51 std::string str("VariantTypeString3");
52 CVariant c(str);
53
54 EXPECT_TRUE(a.isString());
55 EXPECT_EQ(CVariant::VariantTypeString, a.type());
56 EXPECT_TRUE(b.isString());
57 EXPECT_EQ(CVariant::VariantTypeString, b.type());
58 EXPECT_TRUE(c.isString());
59 EXPECT_EQ(CVariant::VariantTypeString, c.type());
60
61 EXPECT_STREQ("VariantTypeString", a.asString().c_str());
62 EXPECT_STREQ("VariantTypeString2", b.asString().c_str());
63 EXPECT_STREQ("VariantTypeString3", c.asString().c_str());
64}
65
66TEST(TestVariant, VariantTypeWideString)
67{
68 CVariant a(L"VariantTypeWideString");
69 CVariant b(L"VariantTypeWideString2", sizeof(L"VariantTypeWideString2") - 1);
70 std::wstring str(L"VariantTypeWideString3");
71 CVariant c(str);
72
73 EXPECT_TRUE(a.isWideString());
74 EXPECT_EQ(CVariant::VariantTypeWideString, a.type());
75 EXPECT_TRUE(b.isWideString());
76 EXPECT_EQ(CVariant::VariantTypeWideString, b.type());
77 EXPECT_TRUE(c.isWideString());
78 EXPECT_EQ(CVariant::VariantTypeWideString, c.type());
79
80 EXPECT_STREQ(L"VariantTypeWideString", a.asWideString().c_str());
81 EXPECT_STREQ(L"VariantTypeWideString2", b.asWideString().c_str());
82 EXPECT_STREQ(L"VariantTypeWideString3", c.asWideString().c_str());
83}
84
85TEST(TestVariant, VariantTypeDouble)
86{
87 CVariant a((float)0.0f), b((double)0.1f);
88
89 EXPECT_TRUE(a.isDouble());
90 EXPECT_EQ(CVariant::VariantTypeDouble, a.type());
91 EXPECT_TRUE(b.isDouble());
92 EXPECT_EQ(CVariant::VariantTypeDouble, b.type());
93
94 EXPECT_EQ((float)0.0f, a.asDouble());
95 EXPECT_EQ((double)0.1f, b.asDouble());
96}
97
98TEST(TestVariant, VariantTypeArray)
99{
100 std::vector<std::string> strarray;
101 strarray.emplace_back("string1");
102 strarray.emplace_back("string2");
103 strarray.emplace_back("string3");
104 strarray.emplace_back("string4");
105 CVariant a(strarray);
106
107 EXPECT_TRUE(a.isArray());
108 EXPECT_EQ(CVariant::VariantTypeArray, a.type());
109}
110
111TEST(TestVariant, VariantTypeObject)
112{
113 CVariant a;
114 a["key"] = "value";
115
116 EXPECT_TRUE(a.isObject());
117 EXPECT_EQ(CVariant::VariantTypeObject, a.type());
118}
119
120TEST(TestVariant, VariantTypeNull)
121{
122 CVariant a;
123
124 EXPECT_TRUE(a.isNull());
125 EXPECT_EQ(CVariant::VariantTypeNull, a.type());
126}
127
128TEST(TestVariant, VariantFromMap)
129{
130 std::map<std::string, std::string> strMap;
131 strMap["key"] = "value";
132 CVariant a = strMap;
133
134 EXPECT_TRUE(a.isObject());
135 EXPECT_TRUE(a.size() == 1);
136 EXPECT_EQ(CVariant::VariantTypeObject, a.type());
137 EXPECT_TRUE(a.isMember("key"));
138 EXPECT_TRUE(a["key"].isString());
139 EXPECT_STREQ(a["key"].asString().c_str(), "value");
140
141 std::map<std::string, CVariant> variantMap;
142 variantMap["key"] = CVariant("value");
143 CVariant b = variantMap;
144
145 EXPECT_TRUE(b.isObject());
146 EXPECT_TRUE(b.size() == 1);
147 EXPECT_EQ(CVariant::VariantTypeObject, b.type());
148 EXPECT_TRUE(b.isMember("key"));
149 EXPECT_TRUE(b["key"].isString());
150 EXPECT_STREQ(b["key"].asString().c_str(), "value");
151}
152
153TEST(TestVariant, operatorTest)
154{
155 std::vector<std::string> strarray;
156 strarray.emplace_back("string1");
157 CVariant a, b, c(strarray), d;
158 a["key"] = "value";
159 b = a;
160 c[0] = "value2";
161 d = c;
162
163 EXPECT_TRUE(a.isObject());
164 EXPECT_EQ(CVariant::VariantTypeObject, a.type());
165 EXPECT_TRUE(b.isObject());
166 EXPECT_EQ(CVariant::VariantTypeObject, b.type());
167 EXPECT_TRUE(c.isArray());
168 EXPECT_EQ(CVariant::VariantTypeArray, c.type());
169 EXPECT_TRUE(d.isArray());
170 EXPECT_EQ(CVariant::VariantTypeArray, d.type());
171
172 EXPECT_TRUE(a == b);
173 EXPECT_TRUE(c == d);
174 EXPECT_FALSE(a == d);
175
176 EXPECT_STREQ("value", a["key"].asString().c_str());
177 EXPECT_STREQ("value2", c[0].asString().c_str());
178}
179
180TEST(TestVariant, push_back)
181{
182 CVariant a, b("variant1"), c("variant2"), d("variant3");
183 a.push_back(b);
184 a.push_back(c);
185 a.push_back(d);
186
187 EXPECT_TRUE(a.isArray());
188 EXPECT_EQ(CVariant::VariantTypeArray, a.type());
189 EXPECT_STREQ("variant1", a[0].asString().c_str());
190 EXPECT_STREQ("variant2", a[1].asString().c_str());
191 EXPECT_STREQ("variant3", a[2].asString().c_str());
192}
193
194TEST(TestVariant, append)
195{
196 CVariant a, b("variant1"), c("variant2"), d("variant3");
197 a.append(b);
198 a.append(c);
199 a.append(d);
200
201 EXPECT_TRUE(a.isArray());
202 EXPECT_EQ(CVariant::VariantTypeArray, a.type());
203 EXPECT_STREQ("variant1", a[0].asString().c_str());
204 EXPECT_STREQ("variant2", a[1].asString().c_str());
205 EXPECT_STREQ("variant3", a[2].asString().c_str());
206}
207
208TEST(TestVariant, c_str)
209{
210 CVariant a("variant");
211
212 EXPECT_STREQ("variant", a.c_str());
213}
214
215TEST(TestVariant, swap)
216{
217 CVariant a((int)0), b("variant");
218
219 EXPECT_TRUE(a.isInteger());
220 EXPECT_TRUE(b.isString());
221
222 a.swap(b);
223 EXPECT_TRUE(b.isInteger());
224 EXPECT_TRUE(a.isString());
225}
226
227TEST(TestVariant, iterator_array)
228{
229 std::vector<std::string> strarray;
230 strarray.emplace_back("string");
231 strarray.emplace_back("string");
232 strarray.emplace_back("string");
233 strarray.emplace_back("string");
234 CVariant a(strarray);
235
236 EXPECT_TRUE(a.isArray());
237 EXPECT_EQ(CVariant::VariantTypeArray, a.type());
238
239 for (auto it = a.begin_array(); it != a.end_array(); it++)
240 {
241 EXPECT_STREQ("string", it->c_str());
242 }
243
244 for (auto const_it = a.begin_array(); const_it != a.end_array(); const_it++)
245 {
246 EXPECT_STREQ("string", const_it->c_str());
247 }
248}
249
250TEST(TestVariant, iterator_map)
251{
252 CVariant a;
253 a["key1"] = "string";
254 a["key2"] = "string";
255 a["key3"] = "string";
256 a["key4"] = "string";
257
258 EXPECT_TRUE(a.isObject());
259 EXPECT_EQ(CVariant::VariantTypeObject, a.type());
260
261 for (auto it = a.begin_map(); it != a.end_map(); it++)
262 {
263 EXPECT_STREQ("string", it->second.c_str());
264 }
265
266 for (auto const_it = a.begin_map(); const_it != a.end_map(); const_it++)
267 {
268 EXPECT_STREQ("string", const_it->second.c_str());
269 }
270}
271
272TEST(TestVariant, size)
273{
274 std::vector<std::string> strarray;
275 strarray.emplace_back("string");
276 strarray.emplace_back("string");
277 strarray.emplace_back("string");
278 strarray.emplace_back("string");
279 CVariant a(strarray);
280
281 EXPECT_EQ((unsigned int)4, a.size());
282}
283
284TEST(TestVariant, empty)
285{
286 std::vector<std::string> strarray;
287 CVariant a(strarray);
288
289 EXPECT_TRUE(a.empty());
290}
291
292TEST(TestVariant, clear)
293{
294 std::vector<std::string> strarray;
295 strarray.emplace_back("string");
296 strarray.emplace_back("string");
297 strarray.emplace_back("string");
298 strarray.emplace_back("string");
299 CVariant a(strarray);
300
301 EXPECT_FALSE(a.empty());
302 a.clear();
303 EXPECT_TRUE(a.empty());
304}
305
306TEST(TestVariant, erase)
307{
308 std::vector<std::string> strarray;
309 strarray.emplace_back("string1");
310 strarray.emplace_back("string2");
311 strarray.emplace_back("string3");
312 strarray.emplace_back("string4");
313 CVariant a, b(strarray);
314 a["key1"] = "string1";
315 a["key2"] = "string2";
316 a["key3"] = "string3";
317 a["key4"] = "string4";
318
319 EXPECT_STREQ("string2", a["key2"].c_str());
320 EXPECT_STREQ("string2", b[1].c_str());
321 a.erase("key2");
322 b.erase(1);
323 EXPECT_FALSE(a["key2"].c_str());
324 EXPECT_STREQ("string3", b[1].c_str());
325}
326
327TEST(TestVariant, isMember)
328{
329 CVariant a;
330 a["key1"] = "string1";
331
332 EXPECT_TRUE(a.isMember("key1"));
333 EXPECT_FALSE(a.isMember("key2"));
334}