| Index: chrome/test/data/extensions/json_schema_test.js
|
| diff --git a/chrome/test/data/extensions/json_schema_test.js b/chrome/test/data/extensions/json_schema_test.js
|
| index fe21b37fa6ff44b157d329bf2ab3b3d02d10991f..d7340d19c03c3f766df1b1de929fd93a14debb57 100644
|
| --- a/chrome/test/data/extensions/json_schema_test.js
|
| +++ b/chrome/test/data/extensions/json_schema_test.js
|
| @@ -39,6 +39,21 @@ function assertNotValid(type, instance, schema, errors, types) {
|
| }
|
| }
|
|
|
| +function assertListConsistsOfElements(list, elements) {
|
| + for (var li = 0; li < list.length; li++) {
|
| + for (var ei = 0; ei < elements.length && list[li] != elements[ei]; ei++) { }
|
| + if (ei == elements.length) {
|
| + log("Expected type not found: " + list[li]);
|
| + assert(false);
|
| + }
|
| + }
|
| +}
|
| +
|
| +function assertEqualSets(set1, set2) {
|
| + assertListConsistsOfElements(set1, set2);
|
| + assertListConsistsOfElements(set2, set1);
|
| +}
|
| +
|
| function formatError(key, replacements) {
|
| return chromeHidden.JSONSchemaValidator.formatError(key, replacements);
|
| }
|
| @@ -449,3 +464,147 @@ function testType() {
|
| assertNotValid("Type", {}, {type: "function"},
|
| [formatError("invalidType", ["function", "object"])]);
|
| }
|
| +
|
| +function testGetAllTypesForSchema() {
|
| + var referencedTypes = [
|
| + {
|
| + id: "ChoicesRef",
|
| + choices: [
|
| + { type: "integer" },
|
| + { type: "string" }
|
| + ]
|
| + },
|
| + {
|
| + id: "ObjectRef",
|
| + type: "object",
|
| + }
|
| + ];
|
| +
|
| + var arraySchema = {
|
| + type: "array"
|
| + };
|
| +
|
| + var choicesSchema = {
|
| + choices: [
|
| + { type: "object" },
|
| + { type: "function" }
|
| + ]
|
| + };
|
| +
|
| + var objectRefSchema = {
|
| + $ref: "ObjectRef"
|
| + };
|
| +
|
| + var complexSchema = {
|
| + choices: [
|
| + { $ref: "ChoicesRef" },
|
| + { type: "function" },
|
| + { $ref: "ObjectRef" }
|
| + ]
|
| + };
|
| +
|
| + var validator = new chromeHidden.JSONSchemaValidator();
|
| + validator.addTypes(referencedTypes);
|
| +
|
| + var arraySchemaTypes = validator.getAllTypesForSchema(arraySchema);
|
| + assertEqualSets(arraySchemaTypes, ["array"]);
|
| +
|
| + var choicesSchemaTypes = validator.getAllTypesForSchema(choicesSchema);
|
| + assertEqualSets(choicesSchemaTypes, ["object", "function"]);
|
| +
|
| + var objectRefSchemaTypes = validator.getAllTypesForSchema(objectRefSchema);
|
| + assertEqualSets(objectRefSchemaTypes, ["object"]);
|
| +
|
| + var complexSchemaTypes = validator.getAllTypesForSchema(complexSchema);
|
| + assertEqualSets(complexSchemaTypes,
|
| + ["integer", "string", "function", "object"]);
|
| +}
|
| +
|
| +function testIsValidSchemaType() {
|
| + var referencedTypes = [
|
| + {
|
| + id: "ChoicesRef",
|
| + choices: [
|
| + { type: "integer" },
|
| + { type: "string" }
|
| + ]
|
| + }
|
| + ];
|
| +
|
| + var objectSchema = {
|
| + type: "object",
|
| + optional: true
|
| + };
|
| +
|
| + var complexSchema = {
|
| + choices: [
|
| + { $ref: "ChoicesRef" },
|
| + { type: "function" },
|
| + ]
|
| + };
|
| +
|
| + var validator = new chromeHidden.JSONSchemaValidator();
|
| + validator.addTypes(referencedTypes);
|
| +
|
| + assert(validator.isValidSchemaType("object", objectSchema));
|
| + assert(!validator.isValidSchemaType("integer", objectSchema));
|
| + assert(!validator.isValidSchemaType("array", objectSchema));
|
| + assert(validator.isValidSchemaType("null", objectSchema));
|
| + assert(validator.isValidSchemaType("undefined", objectSchema));
|
| +
|
| + assert(validator.isValidSchemaType("integer", complexSchema));
|
| + assert(validator.isValidSchemaType("function", complexSchema));
|
| + assert(validator.isValidSchemaType("string", complexSchema));
|
| + assert(!validator.isValidSchemaType("object", complexSchema));
|
| + assert(!validator.isValidSchemaType("null", complexSchema));
|
| + assert(!validator.isValidSchemaType("undefined", complexSchema));
|
| +}
|
| +
|
| +function testCheckSchemaOverlap() {
|
| + var referencedTypes = [
|
| + {
|
| + id: "ChoicesRef",
|
| + choices: [
|
| + { type: "integer" },
|
| + { type: "string" }
|
| + ]
|
| + },
|
| + {
|
| + id: "ObjectRef",
|
| + type: "object",
|
| + }
|
| + ];
|
| +
|
| + var arraySchema = {
|
| + type: "array"
|
| + };
|
| +
|
| + var choicesSchema = {
|
| + choices: [
|
| + { type: "object" },
|
| + { type: "function" }
|
| + ]
|
| + };
|
| +
|
| + var objectRefSchema = {
|
| + $ref: "ObjectRef"
|
| + };
|
| +
|
| + var complexSchema = {
|
| + choices: [
|
| + { $ref: "ChoicesRef" },
|
| + { type: "function" },
|
| + { $ref: "ObjectRef" }
|
| + ]
|
| + };
|
| +
|
| + var validator = new chromeHidden.JSONSchemaValidator();
|
| + validator.addTypes(referencedTypes);
|
| +
|
| + assert(!validator.checkSchemaOverlap(arraySchema, choicesSchema));
|
| + assert(!validator.checkSchemaOverlap(arraySchema, objectRefSchema));
|
| + assert(!validator.checkSchemaOverlap(arraySchema, complexSchema));
|
| + assert(validator.checkSchemaOverlap(choicesSchema, objectRefSchema));
|
| + assert(validator.checkSchemaOverlap(choicesSchema, complexSchema));
|
| + assert(validator.checkSchemaOverlap(objectRefSchema, complexSchema));
|
| +}
|
|
|