Skip to content

Commit 8c6a2d9

Browse files
authored
Simplify how the test command accesses subschemas of targets (#286)
Signed-off-by: Juan Cruz Viotti <jv@jviotti.com>
1 parent 5359906 commit 8c6a2d9

175 files changed

Lines changed: 548 additions & 643 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

DEPENDENCIES

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
vendorpull https://github.com/sourcemeta/vendorpull dea311b5bfb53b6926a4140267959ae334d3ecf4
2-
core https://github.com/sourcemeta/core a0587d1bbbb0be07eaa01027f63c15e34b0e2a07
2+
core https://github.com/sourcemeta/core bf0868140c6adc6e58bc3be074ea9ed9ed1efd05
33
hydra https://github.com/sourcemeta/hydra a67b879df800e834ed8a2d056f98398f7211d870
4-
jsonbinpack https://github.com/sourcemeta/jsonbinpack c7bb7f4d903c3b6925b62ce2bb5b8d360e01ce84
4+
jsonbinpack https://github.com/sourcemeta/jsonbinpack 7bf12d9041951e1c8784ef9cd70036937041cf1a
55
blaze https://github.com/sourcemeta/blaze 7aab1200ff5d224aa2167807279ae168529adf89

src/command_test.cc

Lines changed: 3 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -12,29 +12,6 @@
1212
#include "command.h"
1313
#include "utils.h"
1414

15-
static auto get_schema_object(const sourcemeta::core::URI &identifier,
16-
const sourcemeta::core::SchemaResolver &resolver)
17-
-> std::optional<sourcemeta::core::JSON> {
18-
const auto schema{resolver(identifier.recompose())};
19-
if (schema.has_value()) {
20-
return schema;
21-
}
22-
23-
// Resolving a schema identifier that contains a fragment (i.e. a JSON Pointer
24-
// one) can be tricky, as we might end up re-inventing JSON Schema referencing
25-
// all over again. To make it work without much hassle, we do exactly that:
26-
// create an artificial schema wrapper that uses `$ref`.
27-
if (identifier.fragment().has_value()) {
28-
auto result{sourcemeta::core::JSON::make_object()};
29-
result.assign("$schema", sourcemeta::core::JSON{
30-
"http://json-schema.org/draft-07/schema#"});
31-
result.assign("$ref", sourcemeta::core::JSON{identifier.recompose()});
32-
return result;
33-
}
34-
35-
return std::nullopt;
36-
}
37-
3815
static auto get_data(const sourcemeta::core::JSON &test_case,
3916
const std::filesystem::path &base, const bool verbose)
4017
-> sourcemeta::core::JSON {
@@ -124,12 +101,7 @@ auto sourcemeta::jsonschema::cli::test(
124101

125102
sourcemeta::core::URI schema_uri{test.at("target").to_string()};
126103
schema_uri.canonicalize();
127-
const auto schema{get_schema_object(schema_uri, test_resolver)};
128-
if (!schema.has_value()) {
129-
std::cout << "\n";
130-
throw sourcemeta::core::SchemaResolutionError(
131-
test.at("target").to_string(), "Could not resolve schema under test");
132-
}
104+
const auto schema{sourcemeta::core::wrap(schema_uri.recompose())};
133105

134106
unsigned int pass_count{0};
135107
unsigned int index{0};
@@ -144,8 +116,8 @@ auto sourcemeta::jsonschema::cli::test(
144116

145117
try {
146118
schema_template = sourcemeta::blaze::compile(
147-
schema.value(), sourcemeta::core::schema_official_walker,
148-
test_resolver, sourcemeta::blaze::default_schema_compiler);
119+
schema, sourcemeta::core::schema_official_walker, test_resolver,
120+
sourcemeta::blaze::default_schema_compiler);
149121
} catch (const sourcemeta::core::SchemaReferenceError &error) {
150122
if (error.location() == sourcemeta::core::Pointer{"$ref"} &&
151123
error.id() == schema_uri.recompose()) {

test/test/fail_unresolvable.sh

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@ test "$CODE" = "1" || exit 1
2929

3030
cat << EOF > "$TMP/expected.txt"
3131
$(realpath "$TMP")/test.json:
32-
error: Could not resolve schema under test
32+
error: Could not resolve the requested schema
3333
at https://example.com/unknown
3434
EOF
3535

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

Lines changed: 23 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_value.h

Lines changed: 19 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/json_value.cc

Lines changed: 7 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/jsonpointer/CMakeLists.txt

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/jsonpointer/include/sourcemeta/core/jsonpointer.h

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

vendor/core/src/core/jsonpointer/include/sourcemeta/core/jsonpointer_proxy.h

Lines changed: 0 additions & 142 deletions
This file was deleted.

vendor/core/src/core/jsonpointer/include/sourcemeta/core/jsonpointer_template.h

Lines changed: 21 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)