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