diff options
Diffstat (limited to 'tests/test-json-schema-to-grammar.cpp')
-rwxr-xr-x | tests/test-json-schema-to-grammar.cpp | 101 |
1 files changed, 53 insertions, 48 deletions
diff --git a/tests/test-json-schema-to-grammar.cpp b/tests/test-json-schema-to-grammar.cpp index 3c40e756..8aa7c37d 100755 --- a/tests/test-json-schema-to-grammar.cpp +++ b/tests/test-json-schema-to-grammar.cpp @@ -90,7 +90,7 @@ static void test_all(const std::string & lang, std::function<void(const TestCase test({ FAILURE, - "invalid type type", + "invalid type", R"""({ "type": 123 })""", @@ -193,21 +193,27 @@ static void test_all(const std::string & lang, std::function<void(const TestCase }); test({ - FAILURE, + SUCCESS, "non-string const", R"""({ "const": 123 })""", - "" + R"""( + root ::= "123" + space ::= " "? + )""" }); test({ - FAILURE, + SUCCESS, "non-string enum", R"""({ - "enum": [123] + "enum": ["red", "amber", "green", null, 42, ["foo"]] })""", - "" + R"""( + root ::= "\"red\"" | "\"amber\"" | "\"green\"" | "null" | "42" | "[\"foo\"]" + space ::= " "? + )""" }); test({ @@ -378,20 +384,18 @@ static void test_all(const std::string & lang, std::function<void(const TestCase test({ SUCCESS, - "required props", + "required props in original order", R"""({ "type": "object", "properties": { - "a": { - "type": "string" - }, - "b": { - "type": "string" - } + "b": {"type": "string"}, + "c": {"type": "string"}, + "a": {"type": "string"} }, "required": [ "a", - "b" + "b", + "c" ], "additionalProperties": false, "definitions": {} @@ -399,7 +403,8 @@ static void test_all(const std::string & lang, std::function<void(const TestCase R"""( a-kv ::= "\"a\"" space ":" space string b-kv ::= "\"b\"" space ":" space string - root ::= "{" space a-kv "," space b-kv "}" space + c-kv ::= "\"c\"" space ":" space string + root ::= "{" space b-kv "," space c-kv "," space a-kv "}" space space ::= " "? string ::= "\"" ( [^"\\] | @@ -458,13 +463,13 @@ static void test_all(const std::string & lang, std::function<void(const TestCase test({ SUCCESS, - "required + optional props", + "required + optional props each in original order", R"""({ "properties": { - "a": {"type": "string"}, "b": {"type": "string"}, - "c": {"type": "string"}, - "d": {"type": "string"} + "a": {"type": "string"}, + "d": {"type": "string"}, + "c": {"type": "string"} }, "required": ["a", "b"], "additionalProperties": false @@ -473,14 +478,14 @@ static void test_all(const std::string & lang, std::function<void(const TestCase a-kv ::= "\"a\"" space ":" space string b-kv ::= "\"b\"" space ":" space string c-kv ::= "\"c\"" space ":" space string - c-rest ::= ( "," space d-kv )? d-kv ::= "\"d\"" space ":" space string - root ::= "{" space a-kv "," space b-kv ( "," space ( c-kv c-rest | d-kv ) )? "}" space + d-rest ::= ( "," space c-kv )? + root ::= "{" space b-kv "," space a-kv ( "," space ( d-kv d-rest | c-kv ) )? "}" space space ::= " "? string ::= "\"" ( [^"\\] | "\\" (["\\/bfnrt] | "u" [0-9a-fA-F] [0-9a-fA-F] [0-9a-fA-F] [0-9a-fA-F]) - )* "\"" space + )* "\"" space )""" }); @@ -648,16 +653,16 @@ static void test_all(const std::string & lang, std::function<void(const TestCase "$ref": "#/definitions/MyType", "definitions": { "MyType": { - "type": "object", - "properties": { - "a": { - "type": "string" - } - }, - "required": [ - "a" - ], - "additionalProperties": false + "type": "object", + "properties": { + "a": { + "type": "string" + } + }, + "required": [ + "a" + ], + "additionalProperties": false } } })""", @@ -683,10 +688,10 @@ static void test_all(const std::string & lang, std::function<void(const TestCase ], "definitions": { "foo": { - "properties": {"a": {"type": "number"}} + "properties": {"a": {"type": "number"}} }, "bar": { - "properties": {"b": {"type": "number"}} + "properties": {"b": {"type": "number"}} } }, "type": "object" @@ -720,16 +725,16 @@ static void test_all(const std::string & lang, std::function<void(const TestCase ], "definitions": { "foo": { - "properties": {"a": {"type": "number"}} + "properties": {"a": {"type": "number"}} }, "bar": { - "properties": {"b": {"type": "number"}} + "properties": {"b": {"type": "number"}} }, "bam": { - "properties": {"c": {"type": "number"}} + "properties": {"c": {"type": "number"}} }, "baz": { - "properties": {"d": {"type": "number"}} + "properties": {"d": {"type": "number"}} } }, "type": "object" @@ -757,15 +762,15 @@ static void test_all(const std::string & lang, std::function<void(const TestCase "properties": { "number": { "type": "object", - "properties": { - "root": { - "type": "number" - } - }, - "required": [ - "root" - ], - "additionalProperties": false + "properties": { + "root": { + "type": "number" + } + }, + "required": [ + "root" + ], + "additionalProperties": false } }, "required": [ @@ -796,7 +801,7 @@ static void test_all(const std::string & lang, std::function<void(const TestCase int main() { test_all("C++", [](const TestCase & tc) { try { - tc.verify(json_schema_to_grammar(nlohmann::json::parse(tc.schema))); + tc.verify(json_schema_to_grammar(nlohmann::ordered_json::parse(tc.schema))); tc.verify_status(SUCCESS); } catch (const std::runtime_error & ex) { fprintf(stderr, "Error: %s\n", ex.what()); |