ext/rj_schema/rapidjson/test/unittest/schematest.cpp in rj_schema-0.1.3 vs ext/rj_schema/rapidjson/test/unittest/schematest.cpp in rj_schema-0.1.4
- old
+ new
@@ -2002,8 +2002,37 @@
" \"expected\": [\"integer\"], \"actual\": \"null\""
"}}",
SchemaValidatorType, PointerType);
}
+TEST(SchemaValidator, Ref_remote_issue1210) {
+ class SchemaDocumentProvider : public IRemoteSchemaDocumentProvider {
+ SchemaDocument** collection;
+ public:
+ SchemaDocumentProvider(SchemaDocument** collection) : collection(collection) { }
+ virtual const SchemaDocument* GetRemoteDocument(const char* uri, SizeType length) {
+ int i = 0;
+ while (collection[i] && SchemaDocument::URIType(uri, length) != collection[i]->GetURI()) ++i;
+ return collection[i];
+ }
+ };
+ SchemaDocument* collection[] = { 0, 0, 0 };
+ SchemaDocumentProvider provider(collection);
+
+ Document x, y, z;
+ x.Parse("{\"properties\":{\"country\":{\"$ref\":\"y.json#/definitions/country_remote\"}},\"type\":\"object\"}");
+ y.Parse("{\"definitions\":{\"country_remote\":{\"$ref\":\"z.json#/definitions/country_list\"}}}");
+ z.Parse("{\"definitions\":{\"country_list\":{\"enum\":[\"US\"]}}}");
+
+ SchemaDocument sz(z, "z.json", 6, &provider);
+ collection[0] = &sz;
+ SchemaDocument sy(y, "y.json", 6, &provider);
+ collection[1] = &sy;
+ SchemaDocument sx(x, "x.json", 6, &provider);
+
+ VALIDATE(sx, "{\"country\":\"UK\"}", false);
+ VALIDATE(sx, "{\"country\":\"US\"}", true);
+}
+
#ifdef __clang__
RAPIDJSON_DIAG_POP
#endif