Commit c8530d02 authored by Christian Semmler's avatar Christian Semmler

add test case for remote ref issue

parent 8a6c345b
...@@ -2004,6 +2004,35 @@ TEST(SchemaValidator, Ref_remote) { ...@@ -2004,6 +2004,35 @@ TEST(SchemaValidator, Ref_remote) {
SchemaValidatorType, PointerType); 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] && typename 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__ #ifdef __clang__
RAPIDJSON_DIAG_POP RAPIDJSON_DIAG_POP
#endif #endif
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment