rippled
Loading...
Searching...
No Matches
tests/libxrpl/json/Writer.cpp
1#include <xrpl/json/Writer.h>
2
3#include <doctest/doctest.h>
4#include <google/protobuf/stubs/port.h>
5
6#include <memory>
7#include <string>
8
9using namespace ripple;
10using namespace Json;
11
12TEST_SUITE_BEGIN("JsonWriter");
13
15{
18
23
24 void
30
31 void
32 expectOutput(std::string const& expected) const
33 {
34 CHECK(output == expected);
35 }
36
37 void
39 {
40 expectOutput(expected);
41 reset();
42 }
43};
44
45TEST_CASE_FIXTURE(WriterFixture, "trivial")
46{
47 CHECK(output.empty());
48 checkOutputAndReset("");
49}
50
51TEST_CASE_FIXTURE(WriterFixture, "near trivial")
52{
53 CHECK(output.empty());
54 writer->output(0);
55 checkOutputAndReset("0");
56}
57
58TEST_CASE_FIXTURE(WriterFixture, "primitives")
59{
60 writer->output(true);
61 checkOutputAndReset("true");
62
63 writer->output(false);
64 checkOutputAndReset("false");
65
66 writer->output(23);
67 checkOutputAndReset("23");
68
69 writer->output(23.0);
70 checkOutputAndReset("23.0");
71
72 writer->output(23.5);
73 checkOutputAndReset("23.5");
74
75 writer->output("a string");
76 checkOutputAndReset(R"("a string")");
77
78 writer->output(nullptr);
79 checkOutputAndReset("null");
80}
81
82TEST_CASE_FIXTURE(WriterFixture, "empty")
83{
84 writer->startRoot(Writer::array);
85 writer->finish();
86 checkOutputAndReset("[]");
87
88 writer->startRoot(Writer::object);
89 writer->finish();
90 checkOutputAndReset("{}");
91}
92
93TEST_CASE_FIXTURE(WriterFixture, "escaping")
94{
95 writer->output("\\");
96 checkOutputAndReset(R"("\\")");
97
98 writer->output("\"");
99 checkOutputAndReset(R"("\"")");
100
101 writer->output("\\\"");
102 checkOutputAndReset(R"("\\\"")");
103
104 writer->output("this contains a \\ in the middle of it.");
105 checkOutputAndReset(R"("this contains a \\ in the middle of it.")");
106
107 writer->output("\b\f\n\r\t");
108 checkOutputAndReset(R"("\b\f\n\r\t")");
109}
110
111TEST_CASE_FIXTURE(WriterFixture, "array")
112{
113 writer->startRoot(Writer::array);
114 writer->append(12);
115 writer->finish();
116 checkOutputAndReset("[12]");
117}
118
119TEST_CASE_FIXTURE(WriterFixture, "long array")
120{
121 writer->startRoot(Writer::array);
122 writer->append(12);
123 writer->append(true);
124 writer->append("hello");
125 writer->finish();
126 checkOutputAndReset(R"([12,true,"hello"])");
127}
128
129TEST_CASE_FIXTURE(WriterFixture, "embedded array simple")
130{
131 writer->startRoot(Writer::array);
132 writer->startAppend(Writer::array);
133 writer->finish();
134 writer->finish();
135 checkOutputAndReset("[[]]");
136}
137
138TEST_CASE_FIXTURE(WriterFixture, "object")
139{
140 writer->startRoot(Writer::object);
141 writer->set("hello", "world");
142 writer->finish();
143 checkOutputAndReset(R"({"hello":"world"})");
144}
145
146TEST_CASE_FIXTURE(WriterFixture, "complex object")
147{
148 writer->startRoot(Writer::object);
149 writer->set("hello", "world");
150 writer->startSet(Writer::array, "array");
151 writer->append(true);
152 writer->append(12);
153 writer->startAppend(Writer::array);
154 writer->startAppend(Writer::object);
155 writer->set("goodbye", "cruel world.");
156 writer->startSet(Writer::array, "subarray");
157 writer->append(23.5);
158 writer->finishAll();
159 checkOutputAndReset(
160 R"({"hello":"world","array":[true,12,[{"goodbye":"cruel world.","subarray":[23.5]}]]})");
161}
162
163TEST_CASE_FIXTURE(WriterFixture, "json value")
164{
166 value["foo"] = 23;
167 writer->startRoot(Writer::object);
168 writer->set("hello", value);
169 writer->finish();
170 checkOutputAndReset(R"({"hello":{"foo":23}})");
171}
172
Represents a JSON value.
Definition json_value.h:130
T clear(T... args)
T is_same_v
JSON (JavaScript Object Notation).
Definition json_errors.h:6
Output stringOutput(std::string &s)
@ objectValue
object value (collection of name/value pairs).
Definition json_value.h:26
Use hash_* containers for keys that do not need a cryptographically secure hashing algorithm.
Definition algorithm.h:6
TEST_SUITE_END()
TEST_SUITE_BEGIN("json_value")
void expectOutput(std::string const &expected) const
void checkOutputAndReset(std::string const &expected)
std::unique_ptr< Writer > writer