Skip to content

Commit 64cd14e

Browse files
authored
Fix framing given existing and default identifiers at once (#1796)
Signed-off-by: Juan Cruz Viotti <jv@jviotti.com>
1 parent 1fdd2a1 commit 64cd14e

11 files changed

+173
-86
lines changed

src/core/jsonschema/frame.cc

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -467,7 +467,7 @@ auto SchemaFrame::analyse(const JSON &root, const SchemaWalker &walker,
467467
std::nullopt);
468468
}
469469

470-
base_uris.insert({path, {default_id_canonical}});
470+
base_uris.insert({path, {root_id.value(), default_id_canonical}});
471471
}
472472

473473
std::vector<std::size_t> current_subschema_entries;
@@ -569,8 +569,13 @@ auto SchemaFrame::analyse(const JSON &root, const SchemaWalker &walker,
569569
}
570570
}
571571

572-
if (base_uris.contains(entry.common.pointer)) {
573-
base_uris.at(entry.common.pointer).push_back(new_id);
572+
auto base_uri_match{base_uris.find(entry.common.pointer)};
573+
if (base_uri_match != base_uris.cend()) {
574+
if (std::find(base_uri_match->second.cbegin(),
575+
base_uri_match->second.cend(),
576+
new_id) == base_uri_match->second.cend()) {
577+
base_uri_match->second.push_back(new_id);
578+
}
574579
} else {
575580
base_uris.insert({entry.common.pointer, {new_id}});
576581
}

test/jsonschema/jsonschema_frame_2019_09_test.cc

Lines changed: 12 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -771,36 +771,36 @@ TEST(JSONSchema_frame_2019_09, explicit_argument_id_different) {
771771

772772
EXPECT_FRAME_STATIC_2019_09_POINTER(
773773
frame, "https://www.sourcemeta.com/schema#/$id",
774-
"https://www.sourcemeta.com/schema", "/$id", "https://www.example.com",
775-
"/$id", {}, "");
774+
"https://www.sourcemeta.com/schema", "/$id",
775+
"https://www.sourcemeta.com/schema", "/$id", {}, "");
776776
EXPECT_FRAME_STATIC_2019_09_POINTER(
777777
frame, "https://www.sourcemeta.com/schema#/$schema",
778778
"https://www.sourcemeta.com/schema", "/$schema",
779-
"https://www.example.com", "/$schema", {}, "");
779+
"https://www.sourcemeta.com/schema", "/$schema", {}, "");
780780
EXPECT_FRAME_STATIC_2019_09_SUBSCHEMA(
781781
frame, "https://www.sourcemeta.com/schema#/items",
782-
"https://www.sourcemeta.com/schema", "/items", "https://www.example.com",
783-
"/items", {"/~I~"}, "");
782+
"https://www.sourcemeta.com/schema", "/items",
783+
"https://www.sourcemeta.com/schema", "/items", {"/~I~"}, "");
784784
EXPECT_FRAME_STATIC_2019_09_POINTER(
785785
frame, "https://www.sourcemeta.com/schema#/items/$anchor",
786786
"https://www.sourcemeta.com/schema", "/items/$anchor",
787-
"https://www.example.com", "/items/$anchor", {}, "/items");
787+
"https://www.sourcemeta.com/schema", "/items/$anchor", {}, "/items");
788788
EXPECT_FRAME_STATIC_2019_09_POINTER(
789789
frame, "https://www.sourcemeta.com/schema#/properties",
790790
"https://www.sourcemeta.com/schema", "/properties",
791-
"https://www.example.com", "/properties", {}, "");
791+
"https://www.sourcemeta.com/schema", "/properties", {}, "");
792792
EXPECT_FRAME_STATIC_2019_09_SUBSCHEMA(
793793
frame, "https://www.sourcemeta.com/schema#/properties/one",
794794
"https://www.sourcemeta.com/schema", "/properties/one",
795-
"https://www.example.com/test", "", {"/one"}, "");
795+
"https://www.sourcemeta.com/test", "", {"/one"}, "");
796796
EXPECT_FRAME_STATIC_2019_09_POINTER(
797797
frame, "https://www.sourcemeta.com/schema#/properties/one/$id",
798798
"https://www.sourcemeta.com/schema", "/properties/one/$id",
799-
"https://www.example.com/test", "/$id", {}, "/properties/one");
799+
"https://www.sourcemeta.com/test", "/$id", {}, "/properties/one");
800800
EXPECT_FRAME_STATIC_2019_09_POINTER(
801801
frame, "https://www.sourcemeta.com/schema#/properties/one/$anchor",
802802
"https://www.sourcemeta.com/schema", "/properties/one/$anchor",
803-
"https://www.example.com/test", "/$anchor", {}, "/properties/one");
803+
"https://www.sourcemeta.com/test", "/$anchor", {}, "/properties/one");
804804
EXPECT_FRAME_STATIC_2019_09_SUBSCHEMA(
805805
frame, "https://www.sourcemeta.com/schema#/properties/two",
806806
"https://www.sourcemeta.com/schema", "/properties/two",
@@ -816,11 +816,11 @@ TEST(JSONSchema_frame_2019_09, explicit_argument_id_different) {
816816
EXPECT_FRAME_STATIC_2019_09_POINTER(
817817
frame, "https://www.sourcemeta.com/test#/$id",
818818
"https://www.sourcemeta.com/schema", "/properties/one/$id",
819-
"https://www.example.com/test", "/$id", {}, "/properties/one");
819+
"https://www.sourcemeta.com/test", "/$id", {}, "/properties/one");
820820
EXPECT_FRAME_STATIC_2019_09_POINTER(
821821
frame, "https://www.sourcemeta.com/test#/$anchor",
822822
"https://www.sourcemeta.com/schema", "/properties/one/$anchor",
823-
"https://www.example.com/test", "/$anchor", {}, "/properties/one");
823+
"https://www.sourcemeta.com/test", "/$anchor", {}, "/properties/one");
824824
EXPECT_FRAME_STATIC_2019_09_POINTER(
825825
frame, "https://www.test.com#/$id", "https://www.sourcemeta.com/schema",
826826
"/properties/two/$id", "https://www.test.com", "/$id", {},

test/jsonschema/jsonschema_frame_2020_12_test.cc

Lines changed: 13 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -765,36 +765,36 @@ TEST(JSONSchema_frame_2020_12, explicit_argument_id_different) {
765765

766766
EXPECT_FRAME_STATIC_2020_12_POINTER(
767767
frame, "https://www.sourcemeta.com/schema#/$id",
768-
"https://www.sourcemeta.com/schema", "/$id", "https://www.example.com",
769-
"/$id", {}, "");
768+
"https://www.sourcemeta.com/schema", "/$id",
769+
"https://www.sourcemeta.com/schema", "/$id", {}, "");
770770
EXPECT_FRAME_STATIC_2020_12_POINTER(
771771
frame, "https://www.sourcemeta.com/schema#/$schema",
772772
"https://www.sourcemeta.com/schema", "/$schema",
773-
"https://www.example.com", "/$schema", {}, "");
773+
"https://www.sourcemeta.com/schema", "/$schema", {}, "");
774774
EXPECT_FRAME_STATIC_2020_12_SUBSCHEMA(
775775
frame, "https://www.sourcemeta.com/schema#/items",
776-
"https://www.sourcemeta.com/schema", "/items", "https://www.example.com",
777-
"/items", {"/~?items~/~I~"}, "");
776+
"https://www.sourcemeta.com/schema", "/items",
777+
"https://www.sourcemeta.com/schema", "/items", {"/~?items~/~I~"}, "");
778778
EXPECT_FRAME_STATIC_2020_12_POINTER(
779779
frame, "https://www.sourcemeta.com/schema#/items/$anchor",
780780
"https://www.sourcemeta.com/schema", "/items/$anchor",
781-
"https://www.example.com", "/items/$anchor", {}, "/items");
781+
"https://www.sourcemeta.com/schema", "/items/$anchor", {}, "/items");
782782
EXPECT_FRAME_STATIC_2020_12_POINTER(
783783
frame, "https://www.sourcemeta.com/schema#/properties",
784784
"https://www.sourcemeta.com/schema", "/properties",
785-
"https://www.example.com", "/properties", {}, "");
785+
"https://www.sourcemeta.com/schema", "/properties", {}, "");
786786
EXPECT_FRAME_STATIC_2020_12_SUBSCHEMA(
787787
frame, "https://www.sourcemeta.com/schema#/properties/one",
788788
"https://www.sourcemeta.com/schema", "/properties/one",
789-
"https://www.example.com/test", "", {"/one"}, "");
789+
"https://www.sourcemeta.com/test", "", {"/one"}, "");
790790
EXPECT_FRAME_STATIC_2020_12_POINTER(
791791
frame, "https://www.sourcemeta.com/schema#/properties/one/$id",
792792
"https://www.sourcemeta.com/schema", "/properties/one/$id",
793-
"https://www.example.com/test", "/$id", {}, "/properties/one");
793+
"https://www.sourcemeta.com/test", "/$id", {}, "/properties/one");
794794
EXPECT_FRAME_STATIC_2020_12_POINTER(
795795
frame, "https://www.sourcemeta.com/schema#/properties/one/$anchor",
796796
"https://www.sourcemeta.com/schema", "/properties/one/$anchor",
797-
"https://www.example.com/test", "/$anchor", {}, "/properties/one");
797+
"https://www.sourcemeta.com/test", "/$anchor", {}, "/properties/one");
798798
EXPECT_FRAME_STATIC_2020_12_SUBSCHEMA(
799799
frame, "https://www.sourcemeta.com/schema#/properties/two",
800800
"https://www.sourcemeta.com/schema", "/properties/two",
@@ -810,11 +810,12 @@ TEST(JSONSchema_frame_2020_12, explicit_argument_id_different) {
810810
EXPECT_FRAME_STATIC_2020_12_POINTER(
811811
frame, "https://www.sourcemeta.com/test#/$id",
812812
"https://www.sourcemeta.com/schema", "/properties/one/$id",
813-
"https://www.example.com/test", "/$id", {}, "/properties/one");
813+
"https://www.sourcemeta.com/test", "/$id", {}, "/properties/one");
814814
EXPECT_FRAME_STATIC_2020_12_POINTER(
815815
frame, "https://www.sourcemeta.com/test#/$anchor",
816816
"https://www.sourcemeta.com/schema", "/properties/one/$anchor",
817-
"https://www.example.com/test", "/$anchor", {}, "/properties/one");
817+
"https://www.sourcemeta.com/test", "/$anchor", {}, "/properties/one");
818+
818819
EXPECT_FRAME_STATIC_2020_12_POINTER(
819820
frame, "https://www.test.com#/$id", "https://www.sourcemeta.com/schema",
820821
"/properties/two/$id", "https://www.test.com", "/$id", {},

test/jsonschema/jsonschema_frame_draft0_test.cc

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -454,26 +454,26 @@ TEST(JSONSchema_frame_draft0, explicit_argument_id_different) {
454454

455455
// JSON Pointers
456456

457-
EXPECT_FRAME_STATIC_DRAFT0_POINTER(frame,
458-
"https://www.sourcemeta.com/schema#/id",
459-
"https://www.sourcemeta.com/schema", "/id",
460-
"https://www.example.com", "/id", {}, "");
457+
EXPECT_FRAME_STATIC_DRAFT0_POINTER(
458+
frame, "https://www.sourcemeta.com/schema#/id",
459+
"https://www.sourcemeta.com/schema", "/id",
460+
"https://www.sourcemeta.com/schema", "/id", {}, "");
461461
EXPECT_FRAME_STATIC_DRAFT0_POINTER(
462462
frame, "https://www.sourcemeta.com/schema#/$schema",
463463
"https://www.sourcemeta.com/schema", "/$schema",
464-
"https://www.example.com", "/$schema", {}, "");
464+
"https://www.sourcemeta.com/schema", "/$schema", {}, "");
465465
EXPECT_FRAME_STATIC_DRAFT0_POINTER(
466466
frame, "https://www.sourcemeta.com/schema#/properties",
467467
"https://www.sourcemeta.com/schema", "/properties",
468-
"https://www.example.com", "/properties", {}, "");
468+
"https://www.sourcemeta.com/schema", "/properties", {}, "");
469469
EXPECT_FRAME_STATIC_DRAFT0_SUBSCHEMA(
470470
frame, "https://www.sourcemeta.com/schema#/properties/one",
471471
"https://www.sourcemeta.com/schema", "/properties/one",
472-
"https://www.example.com/test", "", {"/one"}, "");
472+
"https://www.sourcemeta.com/test", "", {"/one"}, "");
473473
EXPECT_FRAME_STATIC_DRAFT0_POINTER(
474474
frame, "https://www.sourcemeta.com/schema#/properties/one/id",
475475
"https://www.sourcemeta.com/schema", "/properties/one/id",
476-
"https://www.example.com/test", "/id", {}, "/properties/one");
476+
"https://www.sourcemeta.com/test", "/id", {}, "/properties/one");
477477
EXPECT_FRAME_STATIC_DRAFT0_SUBSCHEMA(
478478
frame, "https://www.sourcemeta.com/schema#/properties/two",
479479
"https://www.sourcemeta.com/schema", "/properties/two",
@@ -485,7 +485,7 @@ TEST(JSONSchema_frame_draft0, explicit_argument_id_different) {
485485
EXPECT_FRAME_STATIC_DRAFT0_POINTER(
486486
frame, "https://www.sourcemeta.com/test#/id",
487487
"https://www.sourcemeta.com/schema", "/properties/one/id",
488-
"https://www.example.com/test", "/id", {}, "/properties/one");
488+
"https://www.sourcemeta.com/test", "/id", {}, "/properties/one");
489489
EXPECT_FRAME_STATIC_DRAFT0_POINTER(
490490
frame, "https://www.test.com#/id", "https://www.sourcemeta.com/schema",
491491
"/properties/two/id", "https://www.test.com", "/id", {},

test/jsonschema/jsonschema_frame_draft1_test.cc

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -454,26 +454,26 @@ TEST(JSONSchema_frame_draft1, explicit_argument_id_different) {
454454

455455
// JSON Pointers
456456

457-
EXPECT_FRAME_STATIC_DRAFT1_POINTER(frame,
458-
"https://www.sourcemeta.com/schema#/id",
459-
"https://www.sourcemeta.com/schema", "/id",
460-
"https://www.example.com", "/id", {}, "");
457+
EXPECT_FRAME_STATIC_DRAFT1_POINTER(
458+
frame, "https://www.sourcemeta.com/schema#/id",
459+
"https://www.sourcemeta.com/schema", "/id",
460+
"https://www.sourcemeta.com/schema", "/id", {}, "");
461461
EXPECT_FRAME_STATIC_DRAFT1_POINTER(
462462
frame, "https://www.sourcemeta.com/schema#/$schema",
463463
"https://www.sourcemeta.com/schema", "/$schema",
464-
"https://www.example.com", "/$schema", {}, "");
464+
"https://www.sourcemeta.com/schema", "/$schema", {}, "");
465465
EXPECT_FRAME_STATIC_DRAFT1_POINTER(
466466
frame, "https://www.sourcemeta.com/schema#/properties",
467467
"https://www.sourcemeta.com/schema", "/properties",
468-
"https://www.example.com", "/properties", {}, "");
468+
"https://www.sourcemeta.com/schema", "/properties", {}, "");
469469
EXPECT_FRAME_STATIC_DRAFT1_SUBSCHEMA(
470470
frame, "https://www.sourcemeta.com/schema#/properties/one",
471471
"https://www.sourcemeta.com/schema", "/properties/one",
472-
"https://www.example.com/test", "", {"/one"}, "");
472+
"https://www.sourcemeta.com/test", "", {"/one"}, "");
473473
EXPECT_FRAME_STATIC_DRAFT1_POINTER(
474474
frame, "https://www.sourcemeta.com/schema#/properties/one/id",
475475
"https://www.sourcemeta.com/schema", "/properties/one/id",
476-
"https://www.example.com/test", "/id", {}, "/properties/one");
476+
"https://www.sourcemeta.com/test", "/id", {}, "/properties/one");
477477
EXPECT_FRAME_STATIC_DRAFT1_SUBSCHEMA(
478478
frame, "https://www.sourcemeta.com/schema#/properties/two",
479479
"https://www.sourcemeta.com/schema", "/properties/two",
@@ -485,7 +485,7 @@ TEST(JSONSchema_frame_draft1, explicit_argument_id_different) {
485485
EXPECT_FRAME_STATIC_DRAFT1_POINTER(
486486
frame, "https://www.sourcemeta.com/test#/id",
487487
"https://www.sourcemeta.com/schema", "/properties/one/id",
488-
"https://www.example.com/test", "/id", {}, "/properties/one");
488+
"https://www.sourcemeta.com/test", "/id", {}, "/properties/one");
489489
EXPECT_FRAME_STATIC_DRAFT1_POINTER(
490490
frame, "https://www.test.com#/id", "https://www.sourcemeta.com/schema",
491491
"/properties/two/id", "https://www.test.com", "/id", {},

test/jsonschema/jsonschema_frame_draft2_test.cc

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -454,26 +454,26 @@ TEST(JSONSchema_frame_draft2, explicit_argument_id_different) {
454454

455455
// JSON Pointers
456456

457-
EXPECT_FRAME_STATIC_DRAFT2_POINTER(frame,
458-
"https://www.sourcemeta.com/schema#/id",
459-
"https://www.sourcemeta.com/schema", "/id",
460-
"https://www.example.com", "/id", {}, "");
457+
EXPECT_FRAME_STATIC_DRAFT2_POINTER(
458+
frame, "https://www.sourcemeta.com/schema#/id",
459+
"https://www.sourcemeta.com/schema", "/id",
460+
"https://www.sourcemeta.com/schema", "/id", {}, "");
461461
EXPECT_FRAME_STATIC_DRAFT2_POINTER(
462462
frame, "https://www.sourcemeta.com/schema#/$schema",
463463
"https://www.sourcemeta.com/schema", "/$schema",
464-
"https://www.example.com", "/$schema", {}, "");
464+
"https://www.sourcemeta.com/schema", "/$schema", {}, "");
465465
EXPECT_FRAME_STATIC_DRAFT2_POINTER(
466466
frame, "https://www.sourcemeta.com/schema#/properties",
467467
"https://www.sourcemeta.com/schema", "/properties",
468-
"https://www.example.com", "/properties", {}, "");
468+
"https://www.sourcemeta.com/schema", "/properties", {}, "");
469469
EXPECT_FRAME_STATIC_DRAFT2_SUBSCHEMA(
470470
frame, "https://www.sourcemeta.com/schema#/properties/one",
471471
"https://www.sourcemeta.com/schema", "/properties/one",
472-
"https://www.example.com/test", "", {"/one"}, "");
472+
"https://www.sourcemeta.com/test", "", {"/one"}, "");
473473
EXPECT_FRAME_STATIC_DRAFT2_POINTER(
474474
frame, "https://www.sourcemeta.com/schema#/properties/one/id",
475475
"https://www.sourcemeta.com/schema", "/properties/one/id",
476-
"https://www.example.com/test", "/id", {}, "/properties/one");
476+
"https://www.sourcemeta.com/test", "/id", {}, "/properties/one");
477477
EXPECT_FRAME_STATIC_DRAFT2_SUBSCHEMA(
478478
frame, "https://www.sourcemeta.com/schema#/properties/two",
479479
"https://www.sourcemeta.com/schema", "/properties/two",
@@ -485,7 +485,7 @@ TEST(JSONSchema_frame_draft2, explicit_argument_id_different) {
485485
EXPECT_FRAME_STATIC_DRAFT2_POINTER(
486486
frame, "https://www.sourcemeta.com/test#/id",
487487
"https://www.sourcemeta.com/schema", "/properties/one/id",
488-
"https://www.example.com/test", "/id", {}, "/properties/one");
488+
"https://www.sourcemeta.com/test", "/id", {}, "/properties/one");
489489
EXPECT_FRAME_STATIC_DRAFT2_POINTER(
490490
frame, "https://www.test.com#/id", "https://www.sourcemeta.com/schema",
491491
"/properties/two/id", "https://www.test.com", "/id", {},

test/jsonschema/jsonschema_frame_draft3_test.cc

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -450,26 +450,26 @@ TEST(JSONSchema_frame_draft3, explicit_argument_id_different) {
450450

451451
// JSON Pointers
452452

453-
EXPECT_FRAME_STATIC_DRAFT3_POINTER(frame,
454-
"https://www.sourcemeta.com/schema#/id",
455-
"https://www.sourcemeta.com/schema", "/id",
456-
"https://www.example.com", "/id", {}, "");
453+
EXPECT_FRAME_STATIC_DRAFT3_POINTER(
454+
frame, "https://www.sourcemeta.com/schema#/id",
455+
"https://www.sourcemeta.com/schema", "/id",
456+
"https://www.sourcemeta.com/schema", "/id", {}, "");
457457
EXPECT_FRAME_STATIC_DRAFT3_POINTER(
458458
frame, "https://www.sourcemeta.com/schema#/$schema",
459459
"https://www.sourcemeta.com/schema", "/$schema",
460-
"https://www.example.com", "/$schema", {}, "");
460+
"https://www.sourcemeta.com/schema", "/$schema", {}, "");
461461
EXPECT_FRAME_STATIC_DRAFT3_POINTER(
462462
frame, "https://www.sourcemeta.com/schema#/properties",
463463
"https://www.sourcemeta.com/schema", "/properties",
464-
"https://www.example.com", "/properties", {}, "");
464+
"https://www.sourcemeta.com/schema", "/properties", {}, "");
465465
EXPECT_FRAME_STATIC_DRAFT3_SUBSCHEMA(
466466
frame, "https://www.sourcemeta.com/schema#/properties/one",
467467
"https://www.sourcemeta.com/schema", "/properties/one",
468-
"https://www.example.com/test", "", {"/one"}, "");
468+
"https://www.sourcemeta.com/test", "", {"/one"}, "");
469469
EXPECT_FRAME_STATIC_DRAFT3_POINTER(
470470
frame, "https://www.sourcemeta.com/schema#/properties/one/id",
471471
"https://www.sourcemeta.com/schema", "/properties/one/id",
472-
"https://www.example.com/test", "/id", {}, "/properties/one");
472+
"https://www.sourcemeta.com/test", "/id", {}, "/properties/one");
473473
EXPECT_FRAME_STATIC_DRAFT3_SUBSCHEMA(
474474
frame, "https://www.sourcemeta.com/schema#/properties/two",
475475
"https://www.sourcemeta.com/schema", "/properties/two",
@@ -481,7 +481,7 @@ TEST(JSONSchema_frame_draft3, explicit_argument_id_different) {
481481
EXPECT_FRAME_STATIC_DRAFT3_POINTER(
482482
frame, "https://www.sourcemeta.com/test#/id",
483483
"https://www.sourcemeta.com/schema", "/properties/one/id",
484-
"https://www.example.com/test", "/id", {}, "/properties/one");
484+
"https://www.sourcemeta.com/test", "/id", {}, "/properties/one");
485485
EXPECT_FRAME_STATIC_DRAFT3_POINTER(
486486
frame, "https://www.test.com#/id", "https://www.sourcemeta.com/schema",
487487
"/properties/two/id", "https://www.test.com", "/id", {},

0 commit comments

Comments
 (0)