Coverage Report

Created: 2024-07-18 11:41

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