summaryrefslogtreecommitdiff
path: root/tests/test-json-schema-to-grammar.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'tests/test-json-schema-to-grammar.cpp')
-rwxr-xr-xtests/test-json-schema-to-grammar.cpp101
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());