20 #include <ripple/json/MultivarJson.h>
21 #include <ripple/rpc/impl/RPCHelpers.h>
23 #include <ripple/beast/unit_test.h>
24 #include "ripple/beast/unit_test/suite.hpp"
25 #include "ripple/json/json_value.h"
51 static_assert(
sizeof(subject) ==
sizeof(subject.val));
52 static_assert(subject.size == subject.val.size());
56 BEAST_EXPECT(subject.val.size() == 3);
67 testcase(
"default copy construction / assignment");
71 BEAST_EXPECT(x.val.size() == subject.val.size());
72 BEAST_EXPECT(x.val[0] == subject.val[0]);
73 BEAST_EXPECT(x.val[1] == subject.val[1]);
74 BEAST_EXPECT(x.val[2] == subject.val[2]);
75 BEAST_EXPECT(x.val == subject.val);
76 BEAST_EXPECT(&x.val[0] != &subject.val[0]);
77 BEAST_EXPECT(&x.val[1] != &subject.val[1]);
78 BEAST_EXPECT(&x.val[2] != &subject.val[2]);
83 BEAST_EXPECT(y.
val == subject.val);
84 BEAST_EXPECT(&y.
val[0] != &subject.val[0]);
85 BEAST_EXPECT(&y.
val[1] != &subject.val[1]);
86 BEAST_EXPECT(&y.
val[2] != &subject.val[2]);
89 BEAST_EXPECT(y.
val == subject.val);
90 BEAST_EXPECT(&y.
val[0] != &subject.val[0]);
91 BEAST_EXPECT(&y.
val[1] != &subject.val[1]);
92 BEAST_EXPECT(&y.
val[2] != &subject.val[2]);
99 subject.select([]() ->
std::size_t { return 0; }) == str1);
101 subject.select([]() ->
std::size_t { return 1; }) == obj1);
103 subject.select([]() ->
std::size_t { return 2; }) == jsonNull);
106 static_assert([](
auto&& v) {
112 static_assert([](
auto&& v) {
115 v.select([]() constexpr->std::size_t { return 0; });
118 static_assert([](
auto&& v) {
121 v.select([]()
mutable ->
std::size_t {
return 0; });
126 static_assert([](
auto&& a) {
129 subject.select([]() ->
int {
return 0; });
132 static_assert([](
auto&& v) {
135 v.select([]() ->
void {});
138 static_assert([](
auto&& v) {
141 v.select([]() ->
bool {
return false; });
154 BEAST_EXPECT(x.val[0].isMember(
"name1"));
155 BEAST_EXPECT(x.val[1].isMember(
"name1"));
156 BEAST_EXPECT(x.val[0][
"name1"].isInt());
157 BEAST_EXPECT(x.val[1][
"name1"].isInt());
158 BEAST_EXPECT(x.val[0][
"name1"].asInt() == 42);
159 BEAST_EXPECT(x.val[1][
"name1"].asInt() == 42);
161 x.set(
"name2",
"bar");
162 BEAST_EXPECT(x.val[0].isMember(
"name2"));
163 BEAST_EXPECT(x.val[1].isMember(
"name2"));
164 BEAST_EXPECT(x.val[0][
"name2"].isString());
165 BEAST_EXPECT(x.val[1][
"name2"].isString());
166 BEAST_EXPECT(x.val[0][
"name2"].asString() ==
"bar");
167 BEAST_EXPECT(x.val[1][
"name2"].asString() ==
"bar");
170 static_assert([](
auto&& v) {
176 static_assert([](
auto&& v) {
179 v.set(
"name",
"value");
182 static_assert([](
auto&& v) {
188 static_assert([](
auto&& v) {
196 static_assert([](
auto&& v) {
199 v.set(
"name", foo_t{});
202 static_assert([](
auto&& v) {
205 v.set(
"name", std::nullopt);
211 testcase(
"isMember");
214 BEAST_EXPECT(subject.isMember(
"foo") == decltype(subject)::
none);
216 auto const makeJson = [](
const char* key,
int val) {
225 {makeJson(
"One", 12), makeJson(
"One", 42)}};
226 BEAST_EXPECT(s1.isMember(
"One") == decltype(s1)::
all);
227 BEAST_EXPECT(s1.isMember(
"Two") == decltype(s1)::
none);
233 {makeJson(
"One", 12), makeJson(
"Two", 42)}};
234 BEAST_EXPECT(s2.isMember(
"One") == decltype(s2)::
some);
235 BEAST_EXPECT(s2.isMember(
"Two") == decltype(s2)::
some);
241 {makeJson(
"One", 12), makeJson(
"One", 42), {}}};
242 BEAST_EXPECT(s3.isMember(
"One") == decltype(s3)::
some);
243 BEAST_EXPECT(s3.isMember(
"Two") == decltype(s3)::
none);
249 testcase(
"apiVersionSelector");
256 static_assert([](
auto&& v) {
277 testcase(
"apiVersionSelector invariants");