proxygen
JSONSchemaTest.cpp File Reference

Go to the source code of this file.

Functions

bool check (const dynamic &schema, const dynamic &value, bool check=true)
 
 TEST (JSONSchemaTest, TestMultipleOfInt)
 
 TEST (JSONSchemaTest, TestMultipleOfDouble)
 
 TEST (JSONSchemaTest, TestMinimumIntInclusive)
 
 TEST (JSONSchemaTest, TestMinimumIntExclusive)
 
 TEST (JSONSchemaTest, TestMaximumIntInclusive)
 
 TEST (JSONSchemaTest, TestMaximumIntExclusive)
 
 TEST (JSONSchemaTest, TestMinimumDoubleInclusive)
 
 TEST (JSONSchemaTest, TestMinimumDoubleExclusive)
 
 TEST (JSONSchemaTest, TestMaximumDoubleInclusive)
 
 TEST (JSONSchemaTest, TestMaximumDoubleExclusive)
 
 TEST (JSONSchemaTest, TestInvalidSchema)
 
 TEST (JSONSchemaTest, TestMinimumStringLength)
 
 TEST (JSONSchemaTest, TestMaximumStringLength)
 
 TEST (JSONSchemaTest, TestStringPattern)
 
 TEST (JSONSchemaTest, TestMinimumArrayItems)
 
 TEST (JSONSchemaTest, TestMaximumArrayItems)
 
 TEST (JSONSchemaTest, TestArrayUniqueItems)
 
 TEST (JSONSchemaTest, TestArrayItems)
 
 TEST (JSONSchemaTest, TestArrayAdditionalItems)
 
 TEST (JSONSchemaTest, TestArrayNoAdditionalItems)
 
 TEST (JSONSchemaTest, TestArrayItemsNotPresent)
 
 TEST (JSONSchemaTest, TestRef)
 
 TEST (JSONSchemaTest, TestRecursiveRef)
 
 TEST (JSONSchemaTest, TestDoubleRecursiveRef)
 
 TEST (JSONSchemaTest, TestInfinitelyRecursiveRef)
 
 TEST (JSONSchemaTest, TestRequired)
 
 TEST (JSONSchemaTest, TestMinMaxProperties)
 
 TEST (JSONSchemaTest, TestProperties)
 
 TEST (JSONSchemaTest, TestPropertyAndPattern)
 
 TEST (JSONSchemaTest, TestPropertyDependency)
 
 TEST (JSONSchemaTest, TestSchemaDependency)
 
 TEST (JSONSchemaTest, TestEnum)
 
 TEST (JSONSchemaTest, TestType)
 
 TEST (JSONSchemaTest, TestTypeArray)
 
 TEST (JSONSchemaTest, TestAllOf)
 
 TEST (JSONSchemaTest, TestAnyOf)
 
 TEST (JSONSchemaTest, TestOneOf)
 
 TEST (JSONSchemaTest, TestNot)
 
 TEST (JSONSchemaTest, TestMetaSchema)
 
 TEST (JSONSchemaTest, TestProductSchema)
 

Function Documentation

bool check ( const dynamic schema,
const dynamic value,
bool  check = true 
)

Definition at line 27 of file JSONSchemaTest.cpp.

References folly::jsonschema::makeSchemaValidator(), and folly::jsonschema::makeValidator().

Referenced by fizz::server::test::ServerProtocolTest::acceptEarlyData(), folly::hazptr_domain< DeterministicAtomic >::cleanup(), folly::SingletonThreadLocal< T, Tag, Make, TLTag >::getWrapper(), folly::hazptr_domain_push_retired(), TEST(), fizz::server::test::TEST_F(), and TEST_P().

27  {
28  if (check) {
29  auto schemavalidator = makeSchemaValidator();
30  auto ew = schemavalidator->try_validate(schema);
31  if (ew) {
32  return false;
33  }
34  }
35 
36  auto validator = makeValidator(schema);
37  auto ew = validator->try_validate(value);
38  if (validator->try_validate(value)) {
39  return false;
40  }
41  return true;
42 }
std::shared_ptr< Validator > makeSchemaValidator()
std::unique_ptr< Validator > makeValidator(const dynamic &schema)
bool check(const dynamic &schema, const dynamic &value, bool check=true)
TEST ( JSONSchemaTest  ,
TestMultipleOfInt   
)

Definition at line 44 of file JSONSchemaTest.cpp.

References ASSERT_FALSE, ASSERT_TRUE, check(), folly::dynamic::object(), and schema.

44  {
45  dynamic schema = dynamic::object("multipleOf", 2);
46  ASSERT_TRUE(check(schema, "invalid"));
47  ASSERT_TRUE(check(schema, 30));
48  ASSERT_TRUE(check(schema, 24.0));
49  ASSERT_FALSE(check(schema, 5));
50  ASSERT_FALSE(check(schema, 2.01));
51 }
void * object
Definition: AtFork.cpp:32
const dynamic & schema
Definition: JSONSchema.cpp:103
#define ASSERT_FALSE(condition)
Definition: gtest.h:1868
#define ASSERT_TRUE(condition)
Definition: gtest.h:1865
bool check(const dynamic &schema, const dynamic &value, bool check=true)
TEST ( JSONSchemaTest  ,
TestMultipleOfDouble   
)

Definition at line 53 of file JSONSchemaTest.cpp.

References ASSERT_FALSE, ASSERT_TRUE, check(), folly::dynamic::object(), and schema.

53  {
54  dynamic schema = dynamic::object("multipleOf", 1.5);
55  ASSERT_TRUE(check(schema, "invalid"));
56  ASSERT_TRUE(check(schema, 30));
57  ASSERT_TRUE(check(schema, 24.0));
58  ASSERT_FALSE(check(schema, 5));
59  ASSERT_FALSE(check(schema, 2.01));
60 
61  schema = dynamic::object("multipleOf", 0.0001);
62  ASSERT_TRUE(check(schema, 0.0075));
63 }
void * object
Definition: AtFork.cpp:32
const dynamic & schema
Definition: JSONSchema.cpp:103
#define ASSERT_FALSE(condition)
Definition: gtest.h:1868
#define ASSERT_TRUE(condition)
Definition: gtest.h:1865
bool check(const dynamic &schema, const dynamic &value, bool check=true)
TEST ( JSONSchemaTest  ,
TestMinimumIntInclusive   
)

Definition at line 65 of file JSONSchemaTest.cpp.

References ASSERT_FALSE, ASSERT_TRUE, check(), folly::dynamic::object(), and schema.

65  {
66  dynamic schema = dynamic::object("minimum", 2);
67  ASSERT_TRUE(check(schema, "invalid"));
68  ASSERT_TRUE(check(schema, 30));
69  ASSERT_TRUE(check(schema, 24.0));
70  ASSERT_TRUE(check(schema, 2));
71  ASSERT_FALSE(check(schema, 1));
72  ASSERT_FALSE(check(schema, 1.9999));
73 }
void * object
Definition: AtFork.cpp:32
const dynamic & schema
Definition: JSONSchema.cpp:103
#define ASSERT_FALSE(condition)
Definition: gtest.h:1868
#define ASSERT_TRUE(condition)
Definition: gtest.h:1865
bool check(const dynamic &schema, const dynamic &value, bool check=true)
TEST ( JSONSchemaTest  ,
TestMinimumIntExclusive   
)

Definition at line 75 of file JSONSchemaTest.cpp.

References ASSERT_FALSE, check(), folly::dynamic::object(), and schema.

75  {
76  dynamic schema = dynamic::object("minimum", 2)("exclusiveMinimum", true);
77  ASSERT_FALSE(check(schema, 2));
78 }
void * object
Definition: AtFork.cpp:32
const dynamic & schema
Definition: JSONSchema.cpp:103
#define ASSERT_FALSE(condition)
Definition: gtest.h:1868
bool check(const dynamic &schema, const dynamic &value, bool check=true)
TEST ( JSONSchemaTest  ,
TestMaximumIntInclusive   
)

Definition at line 80 of file JSONSchemaTest.cpp.

References ASSERT_FALSE, ASSERT_TRUE, check(), folly::dynamic::object(), and schema.

80  {
81  dynamic schema = dynamic::object("maximum", 12);
82  ASSERT_TRUE(check(schema, "invalid"));
83  ASSERT_TRUE(check(schema, 3));
84  ASSERT_TRUE(check(schema, 3.1));
85  ASSERT_TRUE(check(schema, 12));
86  ASSERT_FALSE(check(schema, 13));
87  ASSERT_FALSE(check(schema, 12.0001));
88 }
void * object
Definition: AtFork.cpp:32
const dynamic & schema
Definition: JSONSchema.cpp:103
#define ASSERT_FALSE(condition)
Definition: gtest.h:1868
#define ASSERT_TRUE(condition)
Definition: gtest.h:1865
bool check(const dynamic &schema, const dynamic &value, bool check=true)
TEST ( JSONSchemaTest  ,
TestMaximumIntExclusive   
)

Definition at line 90 of file JSONSchemaTest.cpp.

References ASSERT_FALSE, check(), folly::dynamic::object(), and schema.

90  {
91  dynamic schema = dynamic::object("maximum", 2)("exclusiveMaximum", true);
92  ASSERT_FALSE(check(schema, 2));
93 }
void * object
Definition: AtFork.cpp:32
const dynamic & schema
Definition: JSONSchema.cpp:103
#define ASSERT_FALSE(condition)
Definition: gtest.h:1868
bool check(const dynamic &schema, const dynamic &value, bool check=true)
TEST ( JSONSchemaTest  ,
TestMinimumDoubleInclusive   
)

Definition at line 95 of file JSONSchemaTest.cpp.

References ASSERT_FALSE, ASSERT_TRUE, check(), folly::dynamic::object(), and schema.

95  {
96  dynamic schema = dynamic::object("minimum", 1.75);
97  ASSERT_TRUE(check(schema, "invalid"));
98  ASSERT_TRUE(check(schema, 30));
99  ASSERT_TRUE(check(schema, 24.0));
100  ASSERT_TRUE(check(schema, 1.75));
101  ASSERT_FALSE(check(schema, 1));
102  ASSERT_FALSE(check(schema, 1.74));
103 }
void * object
Definition: AtFork.cpp:32
const dynamic & schema
Definition: JSONSchema.cpp:103
#define ASSERT_FALSE(condition)
Definition: gtest.h:1868
#define ASSERT_TRUE(condition)
Definition: gtest.h:1865
bool check(const dynamic &schema, const dynamic &value, bool check=true)
TEST ( JSONSchemaTest  ,
TestMinimumDoubleExclusive   
)

Definition at line 105 of file JSONSchemaTest.cpp.

References ASSERT_FALSE, check(), folly::dynamic::object(), and schema.

105  {
106  dynamic schema = dynamic::object("minimum", 1.75)("exclusiveMinimum", true);
107  ASSERT_FALSE(check(schema, 1.75));
108 }
void * object
Definition: AtFork.cpp:32
const dynamic & schema
Definition: JSONSchema.cpp:103
#define ASSERT_FALSE(condition)
Definition: gtest.h:1868
bool check(const dynamic &schema, const dynamic &value, bool check=true)
TEST ( JSONSchemaTest  ,
TestMaximumDoubleInclusive   
)

Definition at line 110 of file JSONSchemaTest.cpp.

References ASSERT_FALSE, ASSERT_TRUE, check(), folly::dynamic::object(), and schema.

110  {
111  dynamic schema = dynamic::object("maximum", 12.75);
112  ASSERT_TRUE(check(schema, "invalid"));
113  ASSERT_TRUE(check(schema, 3));
114  ASSERT_TRUE(check(schema, 3.1));
115  ASSERT_TRUE(check(schema, 12.75));
116  ASSERT_FALSE(check(schema, 13));
117  ASSERT_FALSE(check(schema, 12.76));
118 }
void * object
Definition: AtFork.cpp:32
const dynamic & schema
Definition: JSONSchema.cpp:103
#define ASSERT_FALSE(condition)
Definition: gtest.h:1868
#define ASSERT_TRUE(condition)
Definition: gtest.h:1865
bool check(const dynamic &schema, const dynamic &value, bool check=true)
TEST ( JSONSchemaTest  ,
TestMaximumDoubleExclusive   
)

Definition at line 120 of file JSONSchemaTest.cpp.

References ASSERT_FALSE, check(), folly::dynamic::object(), and schema.

120  {
121  dynamic schema = dynamic::object("maximum", 12.75)("exclusiveMaximum", true);
122  ASSERT_FALSE(check(schema, 12.75));
123 }
void * object
Definition: AtFork.cpp:32
const dynamic & schema
Definition: JSONSchema.cpp:103
#define ASSERT_FALSE(condition)
Definition: gtest.h:1868
bool check(const dynamic &schema, const dynamic &value, bool check=true)
TEST ( JSONSchemaTest  ,
TestInvalidSchema   
)

Definition at line 125 of file JSONSchemaTest.cpp.

References ASSERT_TRUE, check(), folly::dynamic::object(), and schema.

125  {
126  dynamic schema = dynamic::object("multipleOf", "invalid");
127  // don't check the schema since it's meant to be invalid
128  ASSERT_TRUE(check(schema, 30, false));
129 
130  schema = dynamic::object("minimum", "invalid")("maximum", "invalid");
131  ASSERT_TRUE(check(schema, 2, false));
132 
133  schema = dynamic::object("minLength", "invalid")("maxLength", "invalid");
134  ASSERT_TRUE(check(schema, 2, false));
135  ASSERT_TRUE(check(schema, "foo", false));
136 }
void * object
Definition: AtFork.cpp:32
const dynamic & schema
Definition: JSONSchema.cpp:103
#define ASSERT_TRUE(condition)
Definition: gtest.h:1865
bool check(const dynamic &schema, const dynamic &value, bool check=true)
TEST ( JSONSchemaTest  ,
TestMinimumStringLength   
)

Definition at line 138 of file JSONSchemaTest.cpp.

References ASSERT_FALSE, ASSERT_TRUE, check(), folly::dynamic::object(), and schema.

138  {
139  dynamic schema = dynamic::object("minLength", 3);
140  ASSERT_TRUE(check(schema, "abcde"));
141  ASSERT_TRUE(check(schema, "abc"));
142  ASSERT_FALSE(check(schema, "a"));
143 }
void * object
Definition: AtFork.cpp:32
const dynamic & schema
Definition: JSONSchema.cpp:103
#define ASSERT_FALSE(condition)
Definition: gtest.h:1868
#define ASSERT_TRUE(condition)
Definition: gtest.h:1865
bool check(const dynamic &schema, const dynamic &value, bool check=true)
TEST ( JSONSchemaTest  ,
TestMaximumStringLength   
)

Definition at line 145 of file JSONSchemaTest.cpp.

References ASSERT_FALSE, ASSERT_TRUE, check(), folly::dynamic::object(), and schema.

145  {
146  dynamic schema = dynamic::object("maxLength", 3);
147  ASSERT_FALSE(check(schema, "abcde"));
148  ASSERT_TRUE(check(schema, "abc"));
149  ASSERT_TRUE(check(schema, "a"));
150 }
void * object
Definition: AtFork.cpp:32
const dynamic & schema
Definition: JSONSchema.cpp:103
#define ASSERT_FALSE(condition)
Definition: gtest.h:1868
#define ASSERT_TRUE(condition)
Definition: gtest.h:1865
bool check(const dynamic &schema, const dynamic &value, bool check=true)
TEST ( JSONSchemaTest  ,
TestStringPattern   
)

Definition at line 152 of file JSONSchemaTest.cpp.

References ASSERT_FALSE, ASSERT_TRUE, check(), folly::dynamic::object(), and schema.

152  {
153  dynamic schema = dynamic::object("pattern", "[1-9]+");
154  ASSERT_TRUE(check(schema, "123"));
155  ASSERT_FALSE(check(schema, "abc"));
156 }
void * object
Definition: AtFork.cpp:32
const dynamic & schema
Definition: JSONSchema.cpp:103
#define ASSERT_FALSE(condition)
Definition: gtest.h:1868
#define ASSERT_TRUE(condition)
Definition: gtest.h:1865
bool check(const dynamic &schema, const dynamic &value, bool check=true)
TEST ( JSONSchemaTest  ,
TestMinimumArrayItems   
)

Definition at line 158 of file JSONSchemaTest.cpp.

References folly::dynamic::array(), ASSERT_FALSE, ASSERT_TRUE, check(), folly::dynamic::object(), and schema.

158  {
159  dynamic schema = dynamic::object("minItems", 3);
160  ASSERT_TRUE(check(schema, dynamic::array(1, 2, 3, 4, 5)));
161  ASSERT_TRUE(check(schema, dynamic::array(1, 2, 3)));
162  ASSERT_FALSE(check(schema, dynamic::array(1)));
163 }
void * object
Definition: AtFork.cpp:32
const dynamic & schema
Definition: JSONSchema.cpp:103
#define ASSERT_FALSE(condition)
Definition: gtest.h:1868
#define ASSERT_TRUE(condition)
Definition: gtest.h:1865
bool check(const dynamic &schema, const dynamic &value, bool check=true)
TEST ( JSONSchemaTest  ,
TestMaximumArrayItems   
)

Definition at line 165 of file JSONSchemaTest.cpp.

References folly::dynamic::array(), ASSERT_FALSE, ASSERT_TRUE, check(), folly::dynamic::object(), and schema.

165  {
166  dynamic schema = dynamic::object("maxItems", 3);
167  ASSERT_FALSE(check(schema, dynamic::array(1, 2, 3, 4, 5)));
168  ASSERT_TRUE(check(schema, dynamic::array(1, 2, 3)));
169  ASSERT_TRUE(check(schema, dynamic::array(1)));
170  ASSERT_TRUE(check(schema, "foobar"));
171 }
void * object
Definition: AtFork.cpp:32
const dynamic & schema
Definition: JSONSchema.cpp:103
#define ASSERT_FALSE(condition)
Definition: gtest.h:1868
#define ASSERT_TRUE(condition)
Definition: gtest.h:1865
bool check(const dynamic &schema, const dynamic &value, bool check=true)
TEST ( JSONSchemaTest  ,
TestArrayUniqueItems   
)

Definition at line 173 of file JSONSchemaTest.cpp.

References folly::dynamic::array(), ASSERT_FALSE, ASSERT_TRUE, check(), folly::dynamic::object(), and schema.

173  {
174  dynamic schema = dynamic::object("uniqueItems", true);
175  ASSERT_TRUE(check(schema, dynamic::array(1, 2, 3)));
176  ASSERT_FALSE(check(schema, dynamic::array(1, 2, 3, 1)));
177  ASSERT_FALSE(check(schema, dynamic::array("cat", "dog", 1, 2, "cat")));
179  schema,
180  dynamic::array(
181  dynamic::object("foo", "bar"), dynamic::object("foo", "baz"))));
182 
183  schema = dynamic::object("uniqueItems", false);
184  ASSERT_TRUE(check(schema, dynamic::array(1, 2, 3, 1)));
185 }
void * object
Definition: AtFork.cpp:32
const dynamic & schema
Definition: JSONSchema.cpp:103
#define ASSERT_FALSE(condition)
Definition: gtest.h:1868
#define ASSERT_TRUE(condition)
Definition: gtest.h:1865
bool check(const dynamic &schema, const dynamic &value, bool check=true)
TEST ( JSONSchemaTest  ,
TestArrayItems   
)

Definition at line 187 of file JSONSchemaTest.cpp.

References folly::dynamic::array(), ASSERT_FALSE, ASSERT_TRUE, check(), folly::dynamic::object(), and schema.

187  {
188  dynamic schema = dynamic::object("items", dynamic::object("minimum", 2));
189  ASSERT_TRUE(check(schema, dynamic::array(2, 3, 4)));
190  ASSERT_FALSE(check(schema, dynamic::array(3, 4, 1)));
191 }
void * object
Definition: AtFork.cpp:32
const dynamic & schema
Definition: JSONSchema.cpp:103
#define ASSERT_FALSE(condition)
Definition: gtest.h:1868
#define ASSERT_TRUE(condition)
Definition: gtest.h:1865
bool check(const dynamic &schema, const dynamic &value, bool check=true)
TEST ( JSONSchemaTest  ,
TestArrayAdditionalItems   
)

Definition at line 193 of file JSONSchemaTest.cpp.

References folly::dynamic::array(), ASSERT_FALSE, ASSERT_TRUE, check(), folly::dynamic::object(), and schema.

193  {
195  "items",
196  dynamic::array(
197  dynamic::object("minimum", 2), dynamic::object("minimum", 1)))(
198  "additionalItems", dynamic::object("minimum", 3));
199  ASSERT_TRUE(check(schema, dynamic::array(2, 1, 3, 3, 3, 3, 4)));
200  ASSERT_FALSE(check(schema, dynamic::array(2, 1, 3, 3, 3, 3, 1)));
201 }
void * object
Definition: AtFork.cpp:32
const dynamic & schema
Definition: JSONSchema.cpp:103
#define ASSERT_FALSE(condition)
Definition: gtest.h:1868
#define ASSERT_TRUE(condition)
Definition: gtest.h:1865
bool check(const dynamic &schema, const dynamic &value, bool check=true)
TEST ( JSONSchemaTest  ,
TestArrayNoAdditionalItems   
)

Definition at line 203 of file JSONSchemaTest.cpp.

References folly::dynamic::array(), ASSERT_FALSE, check(), folly::dynamic::object(), and schema.

203  {
204  dynamic schema =
205  dynamic::object("items", dynamic::array(dynamic::object("minimum", 2)))(
206  "additionalItems", false);
207  ASSERT_FALSE(check(schema, dynamic::array(3, 3, 3)));
208 }
void * object
Definition: AtFork.cpp:32
const dynamic & schema
Definition: JSONSchema.cpp:103
#define ASSERT_FALSE(condition)
Definition: gtest.h:1868
bool check(const dynamic &schema, const dynamic &value, bool check=true)
TEST ( JSONSchemaTest  ,
TestArrayItemsNotPresent   
)

Definition at line 210 of file JSONSchemaTest.cpp.

References folly::dynamic::array(), ASSERT_TRUE, check(), folly::dynamic::object(), and schema.

210  {
211  dynamic schema = dynamic::object("additionalItems", false);
212  ASSERT_TRUE(check(schema, dynamic::array(3, 3, 3)));
213 }
void * object
Definition: AtFork.cpp:32
const dynamic & schema
Definition: JSONSchema.cpp:103
#define ASSERT_TRUE(condition)
Definition: gtest.h:1865
bool check(const dynamic &schema, const dynamic &value, bool check=true)
TEST ( JSONSchemaTest  ,
TestRef   
)

Definition at line 215 of file JSONSchemaTest.cpp.

References folly::dynamic::array(), ASSERT_FALSE, ASSERT_TRUE, check(), folly::dynamic::object(), and schema.

215  {
217  "definitions",
219  "positiveInteger", dynamic::object("minimum", 1)("type", "integer")))(
220  "items", dynamic::object("$ref", "#/definitions/positiveInteger"));
221  ASSERT_TRUE(check(schema, dynamic::array(1, 2, 3, 4)));
222  ASSERT_FALSE(check(schema, dynamic::array(4, -5)));
223 }
void * object
Definition: AtFork.cpp:32
const dynamic & schema
Definition: JSONSchema.cpp:103
#define ASSERT_FALSE(condition)
Definition: gtest.h:1868
#define ASSERT_TRUE(condition)
Definition: gtest.h:1865
bool check(const dynamic &schema, const dynamic &value, bool check=true)
TEST ( JSONSchemaTest  ,
TestRecursiveRef   
)

Definition at line 225 of file JSONSchemaTest.cpp.

References ASSERT_TRUE, check(), folly::dynamic::object(), and schema.

225  {
227  "properties", dynamic::object("more", dynamic::object("$ref", "#")));
229  ASSERT_TRUE(check(schema, d));
230  d["more"] = dynamic::object;
231  ASSERT_TRUE(check(schema, d));
232  d["more"]["more"] = dynamic::object;
233  ASSERT_TRUE(check(schema, d));
234  d["more"]["more"]["more"] = dynamic::object;
235  ASSERT_TRUE(check(schema, d));
236 }
void * object
Definition: AtFork.cpp:32
const dynamic & schema
Definition: JSONSchema.cpp:103
#define ASSERT_TRUE(condition)
Definition: gtest.h:1865
bool check(const dynamic &schema, const dynamic &value, bool check=true)
TEST ( JSONSchemaTest  ,
TestDoubleRecursiveRef   
)

Definition at line 238 of file JSONSchemaTest.cpp.

References ASSERT_TRUE, check(), folly::dynamic::object(), and schema.

238  {
240  "properties",
241  dynamic::object("more", dynamic::object("$ref", "#"))(
242  "less", dynamic::object("$ref", "#")));
244  ASSERT_TRUE(check(schema, d));
245  d["more"] = dynamic::object;
246  d["less"] = dynamic::object;
247  ASSERT_TRUE(check(schema, d));
248  d["more"]["less"] = dynamic::object;
249  d["less"]["mode"] = dynamic::object;
250  ASSERT_TRUE(check(schema, d));
251 }
void * object
Definition: AtFork.cpp:32
const dynamic & schema
Definition: JSONSchema.cpp:103
#define ASSERT_TRUE(condition)
Definition: gtest.h:1865
bool check(const dynamic &schema, const dynamic &value, bool check=true)
TEST ( JSONSchemaTest  ,
TestInfinitelyRecursiveRef   
)

Definition at line 253 of file JSONSchemaTest.cpp.

References folly::dynamic::array(), ASSERT_THROW, folly::jsonschema::makeValidator(), folly::dynamic::object(), and schema.

253  {
254  dynamic schema = dynamic::object("not", dynamic::object("$ref", "#"));
255  auto validator = makeValidator(schema);
256  ASSERT_THROW(validator->validate(dynamic::array(1, 2)), std::runtime_error);
257 }
void * object
Definition: AtFork.cpp:32
const dynamic & schema
Definition: JSONSchema.cpp:103
std::unique_ptr< Validator > makeValidator(const dynamic &schema)
#define ASSERT_THROW(statement, expected_exception)
Definition: gtest.h:1849
TEST ( JSONSchemaTest  ,
TestRequired   
)

Definition at line 259 of file JSONSchemaTest.cpp.

References folly::dynamic::array(), ASSERT_FALSE, ASSERT_TRUE, check(), folly::dynamic::object(), and schema.

259  {
260  dynamic schema = dynamic::object("required", dynamic::array("foo", "bar"));
261  ASSERT_FALSE(check(schema, dynamic::object("foo", 123)));
262  ASSERT_FALSE(check(schema, dynamic::object("bar", 123)));
263  ASSERT_TRUE(check(schema, dynamic::object("bar", 123)("foo", 456)));
264 }
void * object
Definition: AtFork.cpp:32
const dynamic & schema
Definition: JSONSchema.cpp:103
#define ASSERT_FALSE(condition)
Definition: gtest.h:1868
#define ASSERT_TRUE(condition)
Definition: gtest.h:1865
bool check(const dynamic &schema, const dynamic &value, bool check=true)
TEST ( JSONSchemaTest  ,
TestMinMaxProperties   
)

Definition at line 266 of file JSONSchemaTest.cpp.

References ASSERT_FALSE, ASSERT_TRUE, check(), folly::dynamic::object(), and schema.

266  {
267  dynamic schema = dynamic::object("minProperties", 1)("maxProperties", 3);
269  ASSERT_FALSE(check(schema, d));
270  d["a"] = 1;
271  ASSERT_TRUE(check(schema, d));
272  d["b"] = 2;
273  ASSERT_TRUE(check(schema, d));
274  d["c"] = 3;
275  ASSERT_TRUE(check(schema, d));
276  d["d"] = 4;
277  ASSERT_FALSE(check(schema, d));
278 }
void * object
Definition: AtFork.cpp:32
const dynamic & schema
Definition: JSONSchema.cpp:103
#define ASSERT_FALSE(condition)
Definition: gtest.h:1868
#define ASSERT_TRUE(condition)
Definition: gtest.h:1865
bool check(const dynamic &schema, const dynamic &value, bool check=true)
TEST ( JSONSchemaTest  ,
TestProperties   
)

Definition at line 280 of file JSONSchemaTest.cpp.

References ASSERT_FALSE, ASSERT_TRUE, check(), folly::dynamic::object(), and schema.

280  {
282  "properties", dynamic::object("p1", dynamic::object("minimum", 1)))(
283  "patternProperties", dynamic::object("[0-9]+", dynamic::object))(
284  "additionalProperties", dynamic::object("maximum", 5));
285  ASSERT_TRUE(check(schema, dynamic::object("p1", 1)));
286  ASSERT_FALSE(check(schema, dynamic::object("p1", 0)));
287  ASSERT_TRUE(check(schema, dynamic::object("123", "anything")));
288  ASSERT_TRUE(check(schema, dynamic::object("123", 500)));
289  ASSERT_TRUE(check(schema, dynamic::object("other_property", 4)));
290  ASSERT_FALSE(check(schema, dynamic::object("other_property", 6)));
291 }
void * object
Definition: AtFork.cpp:32
const dynamic & schema
Definition: JSONSchema.cpp:103
#define ASSERT_FALSE(condition)
Definition: gtest.h:1868
#define ASSERT_TRUE(condition)
Definition: gtest.h:1865
bool check(const dynamic &schema, const dynamic &value, bool check=true)
TEST ( JSONSchemaTest  ,
TestPropertyAndPattern   
)

Definition at line 292 of file JSONSchemaTest.cpp.

References ASSERT_FALSE, ASSERT_TRUE, check(), folly::dynamic::object(), and schema.

292  {
294  "properties", dynamic::object("p1", dynamic::object("minimum", 1)))(
295  "patternProperties",
296  dynamic::object("p.", dynamic::object("maximum", 5)));
297  ASSERT_TRUE(check(schema, dynamic::object("p1", 3)));
298  ASSERT_FALSE(check(schema, dynamic::object("p1", 0)));
299  ASSERT_FALSE(check(schema, dynamic::object("p1", 6)));
300 }
void * object
Definition: AtFork.cpp:32
const dynamic & schema
Definition: JSONSchema.cpp:103
#define ASSERT_FALSE(condition)
Definition: gtest.h:1868
#define ASSERT_TRUE(condition)
Definition: gtest.h:1865
bool check(const dynamic &schema, const dynamic &value, bool check=true)
TEST ( JSONSchemaTest  ,
TestPropertyDependency   
)

Definition at line 302 of file JSONSchemaTest.cpp.

References folly::dynamic::array(), ASSERT_FALSE, ASSERT_TRUE, check(), folly::dynamic::object(), and schema.

302  {
304  "dependencies", dynamic::object("p1", dynamic::array("p2")));
306  ASSERT_TRUE(check(schema, dynamic::object("p1", 1)("p2", 1)));
307  ASSERT_FALSE(check(schema, dynamic::object("p1", 1)));
308 }
void * object
Definition: AtFork.cpp:32
const dynamic & schema
Definition: JSONSchema.cpp:103
#define ASSERT_FALSE(condition)
Definition: gtest.h:1868
#define ASSERT_TRUE(condition)
Definition: gtest.h:1865
bool check(const dynamic &schema, const dynamic &value, bool check=true)
TEST ( JSONSchemaTest  ,
TestSchemaDependency   
)

Definition at line 310 of file JSONSchemaTest.cpp.

References folly::dynamic::array(), ASSERT_FALSE, ASSERT_TRUE, check(), folly::dynamic::object(), and schema.

310  {
312  "dependencies",
313  dynamic::object("p1", dynamic::object("required", dynamic::array("p2"))));
315  ASSERT_TRUE(check(schema, dynamic::object("p1", 1)("p2", 1)));
316  ASSERT_FALSE(check(schema, dynamic::object("p1", 1)));
317 }
void * object
Definition: AtFork.cpp:32
const dynamic & schema
Definition: JSONSchema.cpp:103
#define ASSERT_FALSE(condition)
Definition: gtest.h:1868
#define ASSERT_TRUE(condition)
Definition: gtest.h:1865
bool check(const dynamic &schema, const dynamic &value, bool check=true)
TEST ( JSONSchemaTest  ,
TestEnum   
)

Definition at line 319 of file JSONSchemaTest.cpp.

References folly::dynamic::array(), ASSERT_FALSE, ASSERT_TRUE, check(), folly::dynamic::object(), and schema.

319  {
320  dynamic schema = dynamic::object("enum", dynamic::array("a", 1));
321  ASSERT_TRUE(check(schema, "a"));
322  ASSERT_TRUE(check(schema, 1));
323  ASSERT_FALSE(check(schema, "b"));
324 }
void * object
Definition: AtFork.cpp:32
const dynamic & schema
Definition: JSONSchema.cpp:103
#define ASSERT_FALSE(condition)
Definition: gtest.h:1868
#define ASSERT_TRUE(condition)
Definition: gtest.h:1865
bool check(const dynamic &schema, const dynamic &value, bool check=true)
TEST ( JSONSchemaTest  ,
TestType   
)

Definition at line 326 of file JSONSchemaTest.cpp.

References ASSERT_FALSE, ASSERT_TRUE, check(), folly::dynamic::object(), and schema.

326  {
327  dynamic schema = dynamic::object("type", "object");
329  ASSERT_FALSE(check(schema, dynamic(5)));
330 }
void * object
Definition: AtFork.cpp:32
const dynamic & schema
Definition: JSONSchema.cpp:103
#define ASSERT_FALSE(condition)
Definition: gtest.h:1868
#define ASSERT_TRUE(condition)
Definition: gtest.h:1865
bool check(const dynamic &schema, const dynamic &value, bool check=true)
TEST ( JSONSchemaTest  ,
TestTypeArray   
)

Definition at line 332 of file JSONSchemaTest.cpp.

References folly::dynamic::array(), ASSERT_FALSE, ASSERT_TRUE, check(), folly::dynamic::object(), and schema.

332  {
333  dynamic schema = dynamic::object("type", dynamic::array("array", "number"));
334  ASSERT_TRUE(check(schema, dynamic(5)));
335  ASSERT_TRUE(check(schema, dynamic(1.1)));
337 }
void * object
Definition: AtFork.cpp:32
const dynamic & schema
Definition: JSONSchema.cpp:103
#define ASSERT_FALSE(condition)
Definition: gtest.h:1868
#define ASSERT_TRUE(condition)
Definition: gtest.h:1865
bool check(const dynamic &schema, const dynamic &value, bool check=true)
TEST ( JSONSchemaTest  ,
TestAllOf   
)

Definition at line 339 of file JSONSchemaTest.cpp.

References folly::dynamic::array(), ASSERT_FALSE, ASSERT_TRUE, check(), folly::dynamic::object(), and schema.

339  {
341  "allOf",
342  dynamic::array(
343  dynamic::object("minimum", 1), dynamic::object("type", "integer")));
344  ASSERT_TRUE(check(schema, 2));
345  ASSERT_FALSE(check(schema, 0));
346  ASSERT_FALSE(check(schema, 1.1));
347 }
void * object
Definition: AtFork.cpp:32
const dynamic & schema
Definition: JSONSchema.cpp:103
#define ASSERT_FALSE(condition)
Definition: gtest.h:1868
#define ASSERT_TRUE(condition)
Definition: gtest.h:1865
bool check(const dynamic &schema, const dynamic &value, bool check=true)
TEST ( JSONSchemaTest  ,
TestAnyOf   
)

Definition at line 349 of file JSONSchemaTest.cpp.

References folly::dynamic::array(), ASSERT_FALSE, ASSERT_TRUE, check(), folly::dynamic::object(), and schema.

349  {
351  "anyOf",
352  dynamic::array(
353  dynamic::object("minimum", 1), dynamic::object("type", "integer")));
354  ASSERT_TRUE(check(schema, 2)); // matches both
355  ASSERT_FALSE(check(schema, 0.1)); // matches neither
356  ASSERT_TRUE(check(schema, 1.1)); // matches first one
357  ASSERT_TRUE(check(schema, 0)); // matches second one
358 }
void * object
Definition: AtFork.cpp:32
const dynamic & schema
Definition: JSONSchema.cpp:103
#define ASSERT_FALSE(condition)
Definition: gtest.h:1868
#define ASSERT_TRUE(condition)
Definition: gtest.h:1865
bool check(const dynamic &schema, const dynamic &value, bool check=true)
TEST ( JSONSchemaTest  ,
TestOneOf   
)

Definition at line 360 of file JSONSchemaTest.cpp.

References folly::dynamic::array(), ASSERT_FALSE, ASSERT_TRUE, check(), folly::dynamic::object(), and schema.

360  {
362  "oneOf",
363  dynamic::array(
364  dynamic::object("minimum", 1), dynamic::object("type", "integer")));
365  ASSERT_FALSE(check(schema, 2)); // matches both
366  ASSERT_FALSE(check(schema, 0.1)); // matches neither
367  ASSERT_TRUE(check(schema, 1.1)); // matches first one
368  ASSERT_TRUE(check(schema, 0)); // matches second one
369 }
void * object
Definition: AtFork.cpp:32
const dynamic & schema
Definition: JSONSchema.cpp:103
#define ASSERT_FALSE(condition)
Definition: gtest.h:1868
#define ASSERT_TRUE(condition)
Definition: gtest.h:1865
bool check(const dynamic &schema, const dynamic &value, bool check=true)
TEST ( JSONSchemaTest  ,
TestNot   
)

Definition at line 371 of file JSONSchemaTest.cpp.

References ASSERT_FALSE, ASSERT_TRUE, check(), folly::dynamic::object(), and schema.

371  {
372  dynamic schema =
373  dynamic::object("not", dynamic::object("minimum", 5)("maximum", 10));
374  ASSERT_TRUE(check(schema, 4));
375  ASSERT_FALSE(check(schema, 7));
376  ASSERT_TRUE(check(schema, 11));
377 }
void * object
Definition: AtFork.cpp:32
const dynamic & schema
Definition: JSONSchema.cpp:103
#define ASSERT_FALSE(condition)
Definition: gtest.h:1868
#define ASSERT_TRUE(condition)
Definition: gtest.h:1865
bool check(const dynamic &schema, const dynamic &value, bool check=true)
TEST ( JSONSchemaTest  ,
TestMetaSchema   
)

Definition at line 381 of file JSONSchemaTest.cpp.

References ASSERT_THROW, folly::jsonschema::makeSchemaValidator(), folly::parseJson(), and val.

381  {
382  const char* example1 =
383  "\
384  { \
385  \"title\": \"Example Schema\", \
386  \"type\": \"object\", \
387  \"properties\": { \
388  \"firstName\": { \
389  \"type\": \"string\" \
390  }, \
391  \"lastName\": { \
392  \"type\": \"string\" \
393  }, \
394  \"age\": { \
395  \"description\": \"Age in years\", \
396  \"type\": \"integer\", \
397  \"minimum\": 0 \
398  } \
399  }, \
400  \"required\": [\"firstName\", \"lastName\"] \
401  }";
402 
403  auto val = makeSchemaValidator();
404  val->validate(parseJson(example1)); // doesn't throw
405 
406  ASSERT_THROW(val->validate("123"), std::runtime_error);
407 }
dynamic parseJson(StringPiece range)
Definition: json.cpp:900
std::shared_ptr< Validator > makeSchemaValidator()
double val
Definition: String.cpp:273
#define ASSERT_THROW(statement, expected_exception)
Definition: gtest.h:1849
TEST ( JSONSchemaTest  ,
TestProductSchema   
)

Definition at line 409 of file JSONSchemaTest.cpp.

References ASSERT_TRUE, check(), folly::parseJson(), and product.

409  {
410  const char* productSchema =
411  "\
412  { \
413  \"$schema\": \"http://json-schema.org/draft-04/schema#\", \
414  \"title\": \"Product\", \
415  \"description\": \"A product from Acme's catalog\", \
416  \"type\": \"object\", \
417  \"properties\": { \
418  \"id\": { \
419  \"description\": \"The unique identifier for a product\", \
420  \"type\": \"integer\" \
421  }, \
422  \"name\": { \
423  \"description\": \"Name of the product\", \
424  \"type\": \"string\" \
425  }, \
426  \"price\": { \
427  \"type\": \"number\", \
428  \"minimum\": 0, \
429  \"exclusiveMinimum\": true \
430  }, \
431  \"tags\": { \
432  \"type\": \"array\", \
433  \"items\": { \
434  \"type\": \"string\" \
435  }, \
436  \"minItems\": 1, \
437  \"uniqueItems\": true \
438  } \
439  }, \
440  \"required\": [\"id\", \"name\", \"price\"] \
441  }";
442  const char* product =
443  "\
444  { \
445  \"id\": 1, \
446  \"name\": \"A green door\", \
447  \"price\": 12.50, \
448  \"tags\": [\"home\", \"green\"] \
449  }";
450  ASSERT_TRUE(check(parseJson(productSchema), parseJson(product)));
451 }
auto product
Definition: BaseTest.cpp:73
dynamic parseJson(StringPiece range)
Definition: json.cpp:900
#define ASSERT_TRUE(condition)
Definition: gtest.h:1865
bool check(const dynamic &schema, const dynamic &value, bool check=true)