Skip to content

Commit a859726

Browse files
authored
Fix default/examples linting with references to relative IDs (#436)
Fixes: sourcemeta/jsonschema#338 Signed-off-by: Juan Cruz Viotti <jv@jviotti.com>
1 parent 2c9abbd commit a859726

40 files changed

+361
-249
lines changed

DEPENDENCIES

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,3 @@
11
vendorpull https://github.com/sourcemeta/vendorpull dea311b5bfb53b6926a4140267959ae334d3ecf4
2-
core https://github.com/sourcemeta/core 69fcfff678e0183fa68852c05ed1e2a266a3f1b3
2+
core https://github.com/sourcemeta/core acfa98a6ab6bbc76f85c84bd7b38c060e558e829
33
jsonschema-test-suite https://github.com/json-schema-org/JSON-Schema-Test-Suite bc919bdb266a4949f8a2425f2f540371604d82b4

test/linter/linter_valid_default_test.cc

Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -309,3 +309,45 @@ TEST(Linter, valid_default_8) {
309309

310310
EXPECT_EQ(schema, expected);
311311
}
312+
313+
TEST(Linter, valid_default_9) {
314+
sourcemeta::core::SchemaTransformer bundle;
315+
bundle.add<sourcemeta::blaze::ValidDefault>(
316+
sourcemeta::blaze::default_schema_compiler);
317+
318+
auto schema{sourcemeta::core::parse_json(R"JSON({
319+
"$schema": "https://json-schema.org/draft/2020-12/schema",
320+
"properties": {
321+
"foo": { "default": 1 },
322+
"bar": { "$ref": "ref.schema.json" }
323+
}
324+
})JSON")};
325+
326+
auto resolver = [](const std::string_view identifier)
327+
-> std::optional<sourcemeta::core::JSON> {
328+
if (identifier == "ref.schema.json") {
329+
return sourcemeta::core::parse_json(R"JSON({
330+
"$schema": "https://json-schema.org/draft/2020-12/schema",
331+
"$id": "ref.schema.json"
332+
})JSON");
333+
}
334+
335+
return sourcemeta::core::schema_official_resolver(identifier);
336+
};
337+
338+
const auto result =
339+
bundle.apply(schema, sourcemeta::core::schema_official_walker, resolver,
340+
transformer_callback_error);
341+
342+
EXPECT_TRUE(result);
343+
344+
const auto expected{sourcemeta::core::parse_json(R"JSON({
345+
"$schema": "https://json-schema.org/draft/2020-12/schema",
346+
"properties": {
347+
"foo": { "default": 1 },
348+
"bar": { "$ref": "ref.schema.json" }
349+
}
350+
})JSON")};
351+
352+
EXPECT_EQ(schema, expected);
353+
}

test/linter/linter_valid_examples_test.cc

Lines changed: 43 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -325,7 +325,7 @@ TEST(Linter, valid_examples_8) {
325325

326326
TEST(Linter, valid_examples_9) {
327327
sourcemeta::core::SchemaTransformer bundle;
328-
bundle.add<sourcemeta::blaze::ValidDefault>(
328+
bundle.add<sourcemeta::blaze::ValidExamples>(
329329
sourcemeta::blaze::default_schema_compiler);
330330

331331
auto schema{sourcemeta::core::parse_json(R"JSON({
@@ -348,3 +348,45 @@ TEST(Linter, valid_examples_9) {
348348

349349
EXPECT_EQ(schema, expected);
350350
}
351+
352+
TEST(Linter, valid_examples_10) {
353+
sourcemeta::core::SchemaTransformer bundle;
354+
bundle.add<sourcemeta::blaze::ValidExamples>(
355+
sourcemeta::blaze::default_schema_compiler);
356+
357+
auto schema{sourcemeta::core::parse_json(R"JSON({
358+
"$schema": "https://json-schema.org/draft/2020-12/schema",
359+
"properties": {
360+
"foo": { "examples": [ 1 ] },
361+
"bar": { "$ref": "ref.schema.json" }
362+
}
363+
})JSON")};
364+
365+
auto resolver = [](const std::string_view identifier)
366+
-> std::optional<sourcemeta::core::JSON> {
367+
if (identifier == "ref.schema.json") {
368+
return sourcemeta::core::parse_json(R"JSON({
369+
"$schema": "https://json-schema.org/draft/2020-12/schema",
370+
"$id": "ref.schema.json"
371+
})JSON");
372+
}
373+
374+
return sourcemeta::core::schema_official_resolver(identifier);
375+
};
376+
377+
const auto result =
378+
bundle.apply(schema, sourcemeta::core::schema_official_walker, resolver,
379+
transformer_callback_error);
380+
381+
EXPECT_TRUE(result);
382+
383+
const auto expected{sourcemeta::core::parse_json(R"JSON({
384+
"$schema": "https://json-schema.org/draft/2020-12/schema",
385+
"properties": {
386+
"foo": { "examples": [ 1 ] },
387+
"bar": { "$ref": "ref.schema.json" }
388+
}
389+
})JSON")};
390+
391+
EXPECT_EQ(schema, expected);
392+
}

vendor/core/CMakeLists.txt

Lines changed: 1 addition & 2 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

vendor/core/cmake/common/targets/clang-tidy.cmake

Lines changed: 6 additions & 6 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

vendor/core/cmake/common/targets/clang-tidy.config

Lines changed: 5 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

vendor/core/src/core/json/include/sourcemeta/core/json.h

Lines changed: 2 additions & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

vendor/core/src/core/json/include/sourcemeta/core/json_error.h

Lines changed: 2 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

vendor/core/src/core/json/include/sourcemeta/core/json_object.h

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

vendor/core/src/core/json/include/sourcemeta/core/json_value.h

Lines changed: 89 additions & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)