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