|
1 /* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ |
|
2 /* This Source Code Form is subject to the terms of the Mozilla Public |
|
3 * License, v. 2.0. If a copy of the MPL was not distributed with this |
|
4 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ |
|
5 |
|
6 #include "gtest/gtest.h" |
|
7 |
|
8 #include <sstream> |
|
9 #include "JSStreamWriter.h" |
|
10 |
|
11 TEST(JSStreamWriter, NoOutput) { |
|
12 std::stringstream ss; |
|
13 JSStreamWriter b(ss); |
|
14 ASSERT_TRUE(ss.str().compare("") == 0); |
|
15 } |
|
16 |
|
17 TEST(JSStreamWriter, EmptyObject) { |
|
18 std::stringstream ss; |
|
19 JSStreamWriter b(ss); |
|
20 b.BeginObject(); |
|
21 b.EndObject(); |
|
22 ASSERT_TRUE(ss.str().compare("{}") == 0); |
|
23 } |
|
24 |
|
25 TEST(JSStreamWriter, OnePropertyObject) { |
|
26 std::stringstream ss; |
|
27 JSStreamWriter b(ss); |
|
28 b.BeginObject(); |
|
29 b.Name("a"); |
|
30 b.Value(1); |
|
31 b.EndObject(); |
|
32 ASSERT_TRUE(ss.str().compare("{\"a\":1}") == 0); |
|
33 } |
|
34 |
|
35 TEST(JSStreamWriter, MultiPropertyObject) { |
|
36 std::stringstream ss; |
|
37 JSStreamWriter b(ss); |
|
38 b.BeginObject(); |
|
39 b.Name("a"); |
|
40 b.Value(1); |
|
41 b.Name("b"); |
|
42 b.Value(2); |
|
43 b.EndObject(); |
|
44 ASSERT_TRUE(ss.str().compare("{\"a\":1,\"b\":2}") == 0); |
|
45 } |
|
46 |
|
47 TEST(JSStreamWriter, OnePropertyArray) { |
|
48 std::stringstream ss; |
|
49 JSStreamWriter b(ss); |
|
50 b.BeginArray(); |
|
51 b.Value(1); |
|
52 b.EndArray(); |
|
53 ASSERT_TRUE(ss.str().compare("[1]") == 0); |
|
54 } |
|
55 |
|
56 TEST(JSStreamWriter, MultiPropertyArray) { |
|
57 std::stringstream ss; |
|
58 JSStreamWriter b(ss); |
|
59 b.BeginArray(); |
|
60 b.Value(1); |
|
61 b.Value(2); |
|
62 b.EndArray(); |
|
63 ASSERT_TRUE(ss.str().compare("[1,2]") == 0); |
|
64 } |
|
65 |
|
66 TEST(JSStreamWriter, NestedObject) { |
|
67 std::stringstream ss; |
|
68 JSStreamWriter b(ss); |
|
69 b.BeginObject(); |
|
70 b.Name("a"); |
|
71 b.BeginObject(); |
|
72 b.Name("b"); |
|
73 b.Value(1); |
|
74 b.EndObject(); |
|
75 b.EndObject(); |
|
76 ASSERT_TRUE(ss.str().compare("{\"a\":{\"b\":1}}") == 0); |
|
77 } |
|
78 |
|
79 TEST(JSStreamWriter, NestedObjectInArray) { |
|
80 std::stringstream ss; |
|
81 JSStreamWriter b(ss); |
|
82 b.BeginArray(); |
|
83 b.BeginObject(); |
|
84 b.Name("a"); |
|
85 b.Value(1); |
|
86 b.EndObject(); |
|
87 b.EndArray(); |
|
88 ASSERT_TRUE(ss.str().compare("[{\"a\":1}]") == 0); |
|
89 } |
|
90 |
|
91 TEST(JSStreamWriter, NestedArrayInObject) { |
|
92 std::stringstream ss; |
|
93 JSStreamWriter b(ss); |
|
94 b.BeginObject(); |
|
95 b.Name("a"); |
|
96 b.BeginArray(); |
|
97 b.Value(1); |
|
98 b.EndArray(); |
|
99 b.EndObject(); |
|
100 ASSERT_TRUE(ss.str().compare("{\"a\":[1]}") == 0); |
|
101 } |
|
102 |
|
103 TEST(JSStreamWriter, StingEscaping) { |
|
104 std::stringstream ss; |
|
105 JSStreamWriter b(ss); |
|
106 b.Value("a\"a"); |
|
107 ASSERT_TRUE(ss.str().compare("\"a\\\"a\"") == 0); |
|
108 |
|
109 std::stringstream ss2; |
|
110 JSStreamWriter b2(ss2); |
|
111 b2.Value("a\na"); |
|
112 ASSERT_TRUE(ss2.str().compare("\"a\\u000Aa\"") == 0); |
|
113 } |
|
114 |
|
115 TEST(JSStreamWriter, ArrayOfOjects) { |
|
116 std::stringstream ss; |
|
117 JSStreamWriter b(ss); |
|
118 b.BeginArray(); |
|
119 b.BeginObject(); |
|
120 b.EndObject(); |
|
121 |
|
122 b.BeginObject(); |
|
123 b.EndObject(); |
|
124 b.EndArray(); |
|
125 ASSERT_TRUE(ss.str().compare("[{},{}]") == 0); |
|
126 } |
|
127 |
|
128 TEST(JSStreamWriter, Complex) { |
|
129 std::stringstream ss; |
|
130 JSStreamWriter b(ss); |
|
131 b.BeginObject(); |
|
132 b.Name("a"); |
|
133 b.BeginArray(); |
|
134 b.Value(1); |
|
135 |
|
136 b.BeginObject(); |
|
137 b.EndObject(); |
|
138 |
|
139 b.BeginObject(); |
|
140 b.Name("b"); |
|
141 b.Value("c"); |
|
142 b.EndObject(); |
|
143 b.EndArray(); |
|
144 |
|
145 b.Name("b"); |
|
146 b.BeginArray(); |
|
147 b.BeginArray(); |
|
148 b.EndArray(); |
|
149 b.EndArray(); |
|
150 b.EndObject(); |
|
151 ASSERT_TRUE(ss.str().compare("{\"a\":[1,{},{\"b\":\"c\"}],\"b\":[[]]}") == 0); |
|
152 } |
|
153 |
|
154 TEST(JSStreamWriter, Complex2) { |
|
155 std::stringstream ss; |
|
156 JSStreamWriter b(ss); |
|
157 b.BeginObject(); |
|
158 b.Name("a"); |
|
159 b.BeginArray(); |
|
160 b.BeginObject(); |
|
161 b.Name("b"); |
|
162 b.Value("c"); |
|
163 b.Name("d"); |
|
164 b.BeginArray(); |
|
165 b.BeginObject(); |
|
166 b.Name("e"); |
|
167 b.BeginArray(); |
|
168 b.BeginObject(); |
|
169 b.Name("f"); |
|
170 b.Value("g"); |
|
171 b.EndObject(); |
|
172 b.BeginObject(); |
|
173 b.Name("h"); |
|
174 b.Value("i"); |
|
175 b.EndObject(); |
|
176 b.EndArray(); |
|
177 b.EndObject(); |
|
178 b.EndArray(); |
|
179 b.EndObject(); |
|
180 b.EndArray(); |
|
181 b.EndObject(); |
|
182 ASSERT_TRUE(ss.str().compare("{\"a\":[{\"b\":\"c\",\"d\":[{\"e\":[{\"f\":\"g\"},{\"h\":\"i\"}]}]}]}") |
|
183 } |