summaryrefslogtreecommitdiffstats
path: root/toolkit/modules/tests/xpcshell/test_JsonSchema.js
diff options
context:
space:
mode:
Diffstat (limited to 'toolkit/modules/tests/xpcshell/test_JsonSchema.js')
-rw-r--r--toolkit/modules/tests/xpcshell/test_JsonSchema.js88
1 files changed, 88 insertions, 0 deletions
diff --git a/toolkit/modules/tests/xpcshell/test_JsonSchema.js b/toolkit/modules/tests/xpcshell/test_JsonSchema.js
new file mode 100644
index 0000000000..b3a09049ac
--- /dev/null
+++ b/toolkit/modules/tests/xpcshell/test_JsonSchema.js
@@ -0,0 +1,88 @@
+/* Any copyright is dedicated to the Public Domain.
+ * http://creativecommons.org/publicdomain/zero/1.0/ */
+
+const { JsonSchema } = ChromeUtils.importESModule(
+ "resource://gre/modules/JsonSchema.sys.mjs"
+);
+
+add_task(function test_basicSchema() {
+ info("Testing validation of a basic schema");
+ const schema = {
+ type: "object",
+ properties: {
+ id: { type: "number" },
+ },
+ required: ["id"],
+ };
+
+ const validator = new JsonSchema.Validator(schema);
+
+ Assert.deepEqual(
+ JsonSchema.validate({ id: 123 }, schema),
+ { valid: true, errors: [] },
+ "Validation of basic schemas with validate()"
+ );
+
+ Assert.deepEqual(
+ validator.validate({ id: 123 }, schema),
+ { valid: true, errors: [] },
+ "Validation of basic schemas with Validator"
+ );
+
+ Assert.ok(
+ !JsonSchema.validate({}, schema).valid,
+ "Validation of basic schemas with validate()"
+ );
+ Assert.ok(
+ !validator.validate({}).valid,
+ "Validation of basic schemas with Validator"
+ );
+});
+
+add_task(function test_mozUrlFormat() {
+ info("Testing custom string format 'moz-url-format'");
+ const schema = {
+ type: "string",
+ format: "moz-url-format",
+ };
+
+ {
+ const obj = "https://www.mozilla.org/%LOCALE%/";
+ Assert.deepEqual(
+ JsonSchema.validate(obj, schema),
+ { valid: true, errors: [] },
+ "Substitution of a valid variable validates"
+ );
+ }
+
+ {
+ const obj = "https://mozilla.org/%BOGUS%/";
+
+ Assert.equal(
+ Services.urlFormatter.formatURL(obj),
+ obj,
+ "BOGUS is an invalid variable for the URL formatter service"
+ );
+
+ Assert.ok(
+ !JsonSchema.validate(obj, { type: "string", format: "uri" }).valid,
+ "A moz-url-format string does not validate as a URI"
+ );
+
+ Assert.deepEqual(
+ JsonSchema.validate(obj, schema),
+ {
+ valid: false,
+ errors: [
+ {
+ instanceLocation: "#",
+ keyword: "format",
+ keywordLocation: "#/format",
+ error: `String does not match format "moz-url-format".`,
+ },
+ ],
+ },
+ "Substitution of an invalid variable does not validate"
+ );
+ }
+});