test/zserio/JsonEncoderTest.cpp
Line | Count | Source |
1 | | #include <cmath> |
2 | | #include <sstream> |
3 | | |
4 | | #include "gtest/gtest.h" |
5 | | #include "zserio/JsonEncoder.h" |
6 | | |
7 | | namespace zserio |
8 | | { |
9 | | |
10 | | TEST(JsonEncoderTest, encodeNull) |
11 | 1 | { |
12 | 1 | std::ostringstream stream; |
13 | 1 | JsonEncoder::encodeNull(stream); |
14 | 1 | ASSERT_EQ("null", stream.str()); |
15 | 1 | } |
16 | | |
17 | | TEST(JsonEncoderTest, encodeBool) |
18 | 1 | { |
19 | 1 | std::ostringstream stream; |
20 | 1 | JsonEncoder::encodeBool(stream, true); |
21 | 1 | ASSERT_EQ("true", stream.str()); |
22 | | |
23 | 1 | stream.str(""); |
24 | 1 | JsonEncoder::encodeBool(stream, false); |
25 | 1 | ASSERT_EQ("false", stream.str()); |
26 | 1 | } |
27 | | |
28 | | TEST(JsonEncoderTest, encodeIntegral) |
29 | 1 | { |
30 | 1 | std::ostringstream stream; |
31 | 1 | JsonEncoder::encodeIntegral(stream, static_cast<uint8_t>(UINT8_MAX)); |
32 | 1 | ASSERT_EQ(std::to_string(UINT8_MAX), stream.str()); |
33 | 1 | stream.str(""); |
34 | 1 | JsonEncoder::encodeIntegral(stream, static_cast<uint16_t>(UINT16_MAX)); |
35 | 1 | ASSERT_EQ(std::to_string(UINT16_MAX), stream.str()); |
36 | 1 | stream.str(""); |
37 | 1 | JsonEncoder::encodeIntegral(stream, static_cast<uint32_t>(UINT32_MAX)); |
38 | 1 | ASSERT_EQ(std::to_string(UINT32_MAX), stream.str()); |
39 | 1 | stream.str(""); |
40 | 1 | JsonEncoder::encodeIntegral(stream, static_cast<uint64_t>(UINT64_MAX)); |
41 | 1 | ASSERT_EQ(std::to_string(UINT64_MAX), stream.str()); |
42 | | |
43 | 1 | stream.str(""); |
44 | 1 | JsonEncoder::encodeIntegral(stream, static_cast<int8_t>(INT8_MIN)); |
45 | 1 | ASSERT_EQ(std::to_string(INT8_MIN), stream.str()); |
46 | 1 | stream.str(""); |
47 | 1 | JsonEncoder::encodeIntegral(stream, static_cast<int8_t>(INT8_MAX)); |
48 | 1 | ASSERT_EQ(std::to_string(INT8_MAX), stream.str()); |
49 | 1 | stream.str(""); |
50 | 1 | JsonEncoder::encodeIntegral(stream, static_cast<int16_t>(INT16_MIN)); |
51 | 1 | ASSERT_EQ(std::to_string(INT16_MIN), stream.str()); |
52 | 1 | stream.str(""); |
53 | 1 | JsonEncoder::encodeIntegral(stream, static_cast<int16_t>(INT16_MAX)); |
54 | 1 | ASSERT_EQ(std::to_string(INT16_MAX), stream.str()); |
55 | 1 | stream.str(""); |
56 | 1 | JsonEncoder::encodeIntegral(stream, static_cast<int32_t>(INT32_MIN)); |
57 | 1 | ASSERT_EQ(std::to_string(INT32_MIN), stream.str()); |
58 | 1 | stream.str(""); |
59 | 1 | JsonEncoder::encodeIntegral(stream, static_cast<int32_t>(INT32_MAX)); |
60 | 1 | ASSERT_EQ(std::to_string(INT32_MAX), stream.str()); |
61 | 1 | stream.str(""); |
62 | 1 | JsonEncoder::encodeIntegral(stream, static_cast<int64_t>(INT64_MIN)); |
63 | 1 | ASSERT_EQ(std::to_string(INT64_MIN), stream.str()); |
64 | 1 | stream.str(""); |
65 | 1 | JsonEncoder::encodeIntegral(stream, static_cast<int64_t>(INT64_MAX)); |
66 | 1 | ASSERT_EQ(std::to_string(INT64_MAX), stream.str()); |
67 | | |
68 | 1 | stream.str(""); |
69 | 1 | JsonEncoder::encodeIntegral(stream, INT64_MIN); |
70 | 1 | ASSERT_EQ("-9223372036854775808", stream.str()); |
71 | 1 | stream.str(""); |
72 | 1 | JsonEncoder::encodeIntegral(stream, -1000); |
73 | 1 | ASSERT_EQ("-1000", stream.str()); |
74 | 1 | stream.str(""); |
75 | 1 | JsonEncoder::encodeIntegral(stream, 0); |
76 | 1 | ASSERT_EQ("0", stream.str()); |
77 | 1 | stream.str(""); |
78 | 1 | JsonEncoder::encodeIntegral(stream, 1000); |
79 | 1 | ASSERT_EQ("1000", stream.str()); |
80 | 1 | stream.str(""); |
81 | 1 | JsonEncoder::encodeIntegral(stream, UINT64_MAX); |
82 | 1 | ASSERT_EQ("18446744073709551615", stream.str()); |
83 | 1 | } |
84 | | |
85 | | TEST(JsonEncoderTest, encodeFloatingPoint) |
86 | 1 | { |
87 | 1 | std::ostringstream stream; |
88 | 1 | JsonEncoder::encodeFloatingPoint(stream, -1.0); |
89 | 1 | ASSERT_EQ("-1.0", stream.str()); |
90 | 1 | stream.str(""); |
91 | 1 | JsonEncoder::encodeFloatingPoint(stream, 0.0); |
92 | 1 | ASSERT_EQ("0.0", stream.str()); |
93 | 1 | stream.str(""); |
94 | 1 | JsonEncoder::encodeFloatingPoint(stream, 1.0); |
95 | 1 | ASSERT_EQ("1.0", stream.str()); |
96 | | |
97 | 1 | stream.str(""); |
98 | 1 | JsonEncoder::encodeFloatingPoint(stream, 3.5); |
99 | 1 | ASSERT_EQ("3.5", stream.str()); |
100 | 1 | stream.str(""); |
101 | 1 | JsonEncoder::encodeFloatingPoint(stream, 9.875); |
102 | 1 | ASSERT_EQ("9.875", stream.str()); |
103 | 1 | stream.str(""); |
104 | 1 | JsonEncoder::encodeFloatingPoint(stream, 0.6171875); |
105 | 1 | ASSERT_EQ("0.6171875", stream.str()); |
106 | | |
107 | 1 | stream.str(""); |
108 | 1 | JsonEncoder::encodeFloatingPoint(stream, 1e20); |
109 | 2 | ASSERT_TRUE("1e+20" == stream.str() || "1e+020" == stream.str()) |
110 | 2 | << "Value '" << stream.str() << "' does not match to neither '1e+20' nor '1e+020'"; |
111 | | |
112 | 1 | stream.str(""); |
113 | 1 | JsonEncoder::encodeFloatingPoint(stream, -1e+16); |
114 | 2 | ASSERT_TRUE("-1e+16" == stream.str() || "-1e+016" == stream.str()) |
115 | 2 | << "Value '" << stream.str() << "' does not match to neither '-1e+16' nor '-1e+016'"; |
116 | | |
117 | 1 | stream.str(""); |
118 | 1 | JsonEncoder::encodeFloatingPoint(stream, static_cast<double>(NAN)); |
119 | 1 | ASSERT_EQ("NaN", stream.str()); |
120 | 1 | stream.str(""); |
121 | 1 | JsonEncoder::encodeFloatingPoint(stream, static_cast<double>(INFINITY)); |
122 | 1 | ASSERT_EQ("Infinity", stream.str()); |
123 | 1 | stream.str(""); |
124 | 1 | JsonEncoder::encodeFloatingPoint(stream, -static_cast<double>(INFINITY)); |
125 | 1 | ASSERT_EQ("-Infinity", stream.str()); |
126 | 1 | } |
127 | | |
128 | | TEST(JsonEncoderTest, encodeString) |
129 | 1 | { |
130 | 1 | std::ostringstream stream; |
131 | 1 | JsonEncoder::encodeString(stream, ""); |
132 | 1 | ASSERT_EQ("\"\"", stream.str()); |
133 | 1 | stream.str(""); |
134 | 1 | JsonEncoder::encodeString(stream, "test"); |
135 | 1 | ASSERT_EQ("\"test\"", stream.str()); |
136 | 1 | stream.str(""); |
137 | 1 | JsonEncoder::encodeString(stream, "München"); |
138 | 1 | ASSERT_EQ("\"München\"", stream.str()); |
139 | 1 | stream.str(""); |
140 | 1 | JsonEncoder::encodeString(stream, "€"); |
141 | 1 | ASSERT_EQ("\"€\"", stream.str()); |
142 | | |
143 | | // escapes |
144 | 1 | stream.str(""); |
145 | 1 | JsonEncoder::encodeString(stream, "\\"); |
146 | 1 | ASSERT_EQ("\"\\\\\"", stream.str()); |
147 | 1 | stream.str(""); |
148 | 1 | JsonEncoder::encodeString(stream, "\""); |
149 | 1 | ASSERT_EQ("\"\\\"\"", stream.str()); |
150 | 1 | stream.str(""); |
151 | 1 | JsonEncoder::encodeString(stream, "\b"); |
152 | 1 | ASSERT_EQ("\"\\b\"", stream.str()); |
153 | 1 | stream.str(""); |
154 | 1 | JsonEncoder::encodeString(stream, "\f"); |
155 | 1 | ASSERT_EQ("\"\\f\"", stream.str()); |
156 | 1 | stream.str(""); |
157 | 1 | JsonEncoder::encodeString(stream, "\n"); |
158 | 1 | ASSERT_EQ("\"\\n\"", stream.str()); |
159 | 1 | stream.str(""); |
160 | 1 | JsonEncoder::encodeString(stream, "\r"); |
161 | 1 | ASSERT_EQ("\"\\r\"", stream.str()); |
162 | 1 | stream.str(""); |
163 | 1 | JsonEncoder::encodeString(stream, "\t"); |
164 | 1 | ASSERT_EQ("\"\\t\"", stream.str()); |
165 | | |
166 | 1 | stream.str(""); |
167 | 1 | JsonEncoder::encodeString(stream, "\n\t%^@(*aAzZ01234569$%^!?<>[]](){}-=+~:;/|\\\"\'Hello World2"); |
168 | 1 | ASSERT_EQ("\"\\n\\t%^@(*aAzZ01234569$%^!?<>[]](){}-=+~:;/|\\\\\\\"'Hello World2\"", stream.str()); |
169 | | |
170 | | // <= 0x1F -> unicode escape |
171 | 1 | stream.str(""); |
172 | 1 | JsonEncoder::encodeString(stream, "\x1F"); |
173 | 1 | ASSERT_EQ("\"\\u001f\"", stream.str()); |
174 | 1 | } |
175 | | |
176 | | } // namespace zserio |