@fluid-experimental/property-changeset 2.81.0 → 2.82.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"version":3,"file":"templateValidator.spec.js","sourceRoot":"","sources":["../../../src/test/validator/templateValidator.spec.ts"],"names":[],"mappings":"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","sourcesContent":["/*!\n * Copyright (c) Microsoft Corporation and contributors. All rights reserved.\n * Licensed under the MIT License.\n */\n\n/* eslint no-unused-expressions: 0 */\n\n// Lint disable to avoid needing to place `async` on many test functions\n// as validity of testing is in general questionable and trying to avoid\n// changes.\n/* eslint-disable @typescript-eslint/promise-function-async */\n\n/**\n * @fileoverview In this file, we will test template validation.\n */\n\nimport { constants } from \"@fluid-experimental/property-common\";\nimport { expect } from \"chai\";\nimport semver from \"semver\";\n\nimport { TemplateValidator } from \"../../templateValidator.js\";\nimport type { SchemaValidationResult } from \"../../validationResultBuilder.js\";\nimport { SchemaValidator } from \"../schemaValidator.js\";\nimport {\n\tbadInvalidSemverInTypeid,\n\tbadMissingSemverInTypeid,\n\tbadPrimitiveTypeid,\n\tgoodPointId,\n\tgoodReservedTypes,\n\tgoodUIBorder,\n} from \"../schemas/index.js\";\n\n(function () {\n\tconst MSG = constants.MSG;\n\n\tconst performValidation = function (\n\t\tasync: boolean,\n\t\ttemplate,\n\t\ttemplatePrevious,\n\t\tskipSemver,\n\t\tasyncErrorMessage?,\n\t): Promise<SchemaValidationResult> {\n\t\tlet schemaValidator = new SchemaValidator();\n\n\t\t// @ts-expect-error - per the catch and no throw below\n\t\treturn async\n\t\t\t? schemaValidator\n\t\t\t\t\t.validate(template, templatePrevious, async, skipSemver)\n\t\t\t\t\t.catch((error) => {\n\t\t\t\t\t\texpect(error.message).to.have.string(asyncErrorMessage);\n\t\t\t\t\t\t// This really should re-throw the error. As it stands this\n\t\t\t\t\t\t// catch returns `undefined` which is not SchemaValidationResult.\n\t\t\t\t\t\t// Throwing will cause \"fail: previous template: invalid semver\"\n\t\t\t\t\t\t// test case to fail with uncaught error.\n\t\t\t\t\t\t// This also has impact on the malformed validate function below.\n\t\t\t\t\t\t// throw error;\n\t\t\t\t\t})\n\t\t\t: // A better pattern is simply Promise.resolve(...). However without all callers\n\t\t\t\t// properly specifying they are `async` (lint disabled for file), they may fail.\n\t\t\t\t// In particular see test case\n\t\t\t\t// \"should fail if map with context key type typeid is not constant\"\n\t\t\t\tnew Promise((resolve) => {\n\t\t\t\t\tresolve(schemaValidator.validate(template, templatePrevious, async, skipSemver));\n\t\t\t\t});\n\t};\n\n\t// Performs both synchronous and asynchronous validation\n\tlet validate = function (\n\t\texpectations: (result: SchemaValidationResult) => SchemaValidationResult,\n\t\ttemplate?,\n\t\ttemplatePrevious?,\n\t\tskipSemver?,\n\t\tasyncErrorMessage?,\n\t) {\n\t\treturn performValidation(false, template, templatePrevious, skipSemver)\n\t\t\t.then(expectations)\n\t\t\t.then(\n\t\t\t\t// This patten is invalid. The `then` parameter is expected to be callable.\n\t\t\t\t// Instead performValidation is called and its result is is called. Or at least\n\t\t\t\t// should be. As set up the following .then is executed (apparently) on the\n\t\t\t\t// results of the prior performValidation. This could be address with this prefix:\n\t\t\t\t// async () =>\n\t\t\t\t// However doing so causes tests to fail. Testing coming through here appears\n\t\t\t\t// invalid.\n\t\t\t\t// @ts-expect-error\n\t\t\t\tperformValidation(true, template, templatePrevious, skipSemver, asyncErrorMessage),\n\t\t\t)\n\t\t\t.then(expectations);\n\t};\n\n\tdescribe(\"Template Validation\", function () {\n\t\t// --- INPUT ---\n\t\tdescribe(\"input validation\", function () {\n\t\t\tit(\"fail: empty template\", function () {\n\t\t\t\tlet expectations = function (result) {\n\t\t\t\t\texpect(result).property(\"isValid\", false);\n\t\t\t\t\texpect(result.errors.length).to.be.at.least(1);\n\t\t\t\t\texpect(result.errors[0].message).to.have.string(MSG.NO_TEMPLATE);\n\t\t\t\t\treturn result;\n\t\t\t\t};\n\t\t\t\treturn validate(expectations);\n\t\t\t});\n\n\t\t\tit(\"fail: template with no typeid\", function () {\n\t\t\t\tlet expectations = function (result) {\n\t\t\t\t\texpect(result).property(\"isValid\", false);\n\t\t\t\t\texpect(result.errors.length).to.be.at.least(1);\n\t\t\t\t\texpect(result.errors[0].message).to.have.string(MSG.MISSING_TYPE_ID);\n\t\t\t\t\treturn result;\n\t\t\t\t};\n\t\t\t\treturn validate(expectations, {});\n\t\t\t});\n\t\t});\n\n\t\t// --- TYPEID ---\n\t\tdescribe(\"typeid validation\", function () {\n\t\t\tit(\"pass: valid typeid\", function () {\n\t\t\t\tlet template = JSON.parse(JSON.stringify(goodPointId.templateSchema));\n\n\t\t\t\tlet expectations = function (result) {\n\t\t\t\t\texpect(result).property(\"isValid\", true);\n\t\t\t\t\texpect(result.typeid).to.equal(template.typeid);\n\t\t\t\t\texpect(result.errors).to.be.empty;\n\t\t\t\t\texpect(result.warnings).to.be.empty;\n\t\t\t\t\treturn result;\n\t\t\t\t};\n\n\t\t\t\treturn validate(expectations, template);\n\t\t\t});\n\n\t\t\tit(\"fail: missing semver\", function () {\n\t\t\t\tlet template = JSON.parse(JSON.stringify(badMissingSemverInTypeid.templateSchema));\n\t\t\t\tlet expectations = function (result) {\n\t\t\t\t\texpect(result).property(\"isValid\", false);\n\t\t\t\t\texpect(result.typeid).to.equal(template.typeid);\n\t\t\t\t\texpect(result.errors.length).to.be.at.least(1);\n\t\t\t\t\texpect(result.errors[0].message).to.have.string(\n\t\t\t\t\t\t\"'TeamLeoValidation2:PointID' is not valid\",\n\t\t\t\t\t);\n\t\t\t\t\texpect(result.errors[0].instancePath).to.equal(\"/typeid\");\n\t\t\t\t\treturn result;\n\t\t\t\t};\n\t\t\t\treturn validate(expectations, template);\n\t\t\t});\n\n\t\t\tit(\"fail: invalid semver 1\", function () {\n\t\t\t\tlet template = JSON.parse(JSON.stringify(badInvalidSemverInTypeid.templateSchema));\n\n\t\t\t\tlet expectations = function (result) {\n\t\t\t\t\texpect(result).property(\"isValid\", false);\n\t\t\t\t\texpect(result.typeid).to.equal(template.typeid);\n\t\t\t\t\texpect(result.errors.length).to.be.at.least(1);\n\t\t\t\t\texpect(result.errors[0].instancePath).to.equal(\"/typeid\");\n\t\t\t\t\treturn result;\n\t\t\t\t};\n\n\t\t\t\treturn validate(expectations, template);\n\t\t\t});\n\n\t\t\tit(\"fail: invalid semver 2\", function () {\n\t\t\t\tlet template = JSON.parse(JSON.stringify(badInvalidSemverInTypeid.templateSchema));\n\t\t\t\ttemplate.typeid = \"TeamLeoValidation2:PointID-1.0.01\";\n\t\t\t\tlet expectations = function (result) {\n\t\t\t\t\texpect(result).property(\"isValid\", false);\n\t\t\t\t\texpect(result.typeid).to.equal(template.typeid);\n\t\t\t\t\texpect(result.errors.length).to.be.at.least(1);\n\t\t\t\t\texpect(result.errors[0].message).to.have.string(MSG.INVALID_VERSION_1);\n\t\t\t\t\treturn result;\n\t\t\t\t};\n\t\t\t\treturn validate(expectations, template);\n\t\t\t});\n\n\t\t\tit(\"fail: previous template: invalid semver\", function () {\n\t\t\t\tlet templatePrevious = JSON.parse(JSON.stringify(goodPointId.templateSchema));\n\t\t\t\tlet template = JSON.parse(JSON.stringify(templatePrevious));\n\t\t\t\tlet badTypeId = \"TeamLeoValidation2:PointID-1.0.0.1\";\n\t\t\t\ttemplatePrevious.typeid = badTypeId;\n\t\t\t\tlet expectations = function (result) {\n\t\t\t\t\texpect(result).property(\"isValid\", false);\n\t\t\t\t\texpect(result.typeid).to.equal(badTypeId);\n\t\t\t\t\texpect(result.errors.length).to.be.at.least(1);\n\t\t\t\t\texpect(result.errors[0].message).to.have.string(`'${badTypeId}' is not valid`);\n\t\t\t\t\treturn result;\n\t\t\t\t};\n\t\t\t\treturn validate(\n\t\t\t\t\texpectations,\n\t\t\t\t\ttemplate,\n\t\t\t\t\ttemplatePrevious,\n\t\t\t\t\tfalse,\n\t\t\t\t\t\"Invalid Version: 1.0.0.1\",\n\t\t\t\t);\n\t\t\t});\n\t\t});\n\n\t\t// --- Template versioning ---\n\t\tdescribe(\"template versioning\", function () {\n\t\t\tit(\"fail: version regression: 1.0.0 -> 0.9.9\", function () {\n\t\t\t\tlet templatePrevious = JSON.parse(JSON.stringify(goodPointId.templateSchema));\n\t\t\t\tlet template = JSON.parse(JSON.stringify(templatePrevious));\n\t\t\t\ttemplate.typeid = \"TeamLeoValidation2:PointID-0.9.9\";\n\t\t\t\tlet expectations = function (result) {\n\t\t\t\t\texpect(result).property(\"isValid\", false);\n\t\t\t\t\texpect(result.errors.length).to.be.at.least(1);\n\t\t\t\t\texpect(result.errors[0].message).to.have.string(MSG.VERSION_REGRESSION_1);\n\t\t\t\t\treturn result;\n\t\t\t\t};\n\t\t\t\treturn validate(expectations, template, templatePrevious);\n\t\t\t});\n\n\t\t\tdescribe(\"same version\", function () {\n\t\t\t\tit(\"pass: same content\", function () {\n\t\t\t\t\tlet templatePrevious = JSON.parse(JSON.stringify(goodPointId.templateSchema));\n\t\t\t\t\tlet template = JSON.parse(JSON.stringify(templatePrevious));\n\t\t\t\t\tlet expectations = function (result) {\n\t\t\t\t\t\texpect(result).property(\"isValid\", true);\n\t\t\t\t\t\texpect(result.errors).to.be.empty;\n\t\t\t\t\t\texpect(result.warnings).to.be.empty;\n\t\t\t\t\t\treturn result;\n\t\t\t\t\t};\n\t\t\t\t\treturn validate(expectations, template, templatePrevious);\n\t\t\t\t});\n\n\t\t\t\tit(\"fail: changed 'annotation'\", function () {\n\t\t\t\t\tlet templatePrevious = JSON.parse(JSON.stringify(goodPointId.templateSchema));\n\t\t\t\t\ttemplatePrevious.annotation = { description: \"Test\" };\n\t\t\t\t\tlet template = JSON.parse(JSON.stringify(templatePrevious));\n\t\t\t\t\ttemplate.annotation.description = \"Changed!\";\n\t\t\t\t\tlet expectations = function (result) {\n\t\t\t\t\t\texpect(result).property(\"isValid\", false);\n\t\t\t\t\t\texpect(result.errors.length).to.be.at.least(1);\n\t\t\t\t\t\texpect(result.errors[0].message).to.have.string(\n\t\t\t\t\t\t\tMSG.MODIFIED_TEMPLATE_SAME_VERSION_1,\n\t\t\t\t\t\t);\n\t\t\t\t\t\treturn result;\n\t\t\t\t\t};\n\n\t\t\t\t\treturn validate(expectations, template, templatePrevious);\n\t\t\t\t});\n\n\t\t\t\tit(\"fail: deleted 'annotation'\", function () {\n\t\t\t\t\tlet templatePrevious = JSON.parse(JSON.stringify(goodPointId.templateSchema));\n\t\t\t\t\ttemplatePrevious.annotation = { description: \"Test\" };\n\t\t\t\t\tlet template = JSON.parse(JSON.stringify(templatePrevious));\n\t\t\t\t\tdelete template.annotation;\n\n\t\t\t\t\tlet expectations = function (result) {\n\t\t\t\t\t\texpect(result).property(\"isValid\", false);\n\t\t\t\t\t\texpect(result.errors.length).to.be.at.least(1);\n\t\t\t\t\t\texpect(result.errors[0].message).to.have.string(\n\t\t\t\t\t\t\tMSG.MODIFIED_TEMPLATE_SAME_VERSION_1,\n\t\t\t\t\t\t);\n\t\t\t\t\t\treturn result;\n\t\t\t\t\t};\n\t\t\t\t\treturn validate(expectations, template, templatePrevious);\n\t\t\t\t});\n\n\t\t\t\tit(\"fail: added 'annotation'\", function () {\n\t\t\t\t\tlet templatePrevious = JSON.parse(JSON.stringify(goodPointId.templateSchema));\n\t\t\t\t\tlet template = JSON.parse(JSON.stringify(templatePrevious));\n\t\t\t\t\ttemplate.annotation = { description: \"Test\" };\n\n\t\t\t\t\tlet expectations = function (result) {\n\t\t\t\t\t\texpect(result).property(\"isValid\", false);\n\t\t\t\t\t\texpect(result.errors.length).to.be.at.least(1);\n\t\t\t\t\t\texpect(result.errors[0].message).to.have.string(\n\t\t\t\t\t\t\tMSG.MODIFIED_TEMPLATE_SAME_VERSION_1,\n\t\t\t\t\t\t);\n\t\t\t\t\t\treturn result;\n\t\t\t\t\t};\n\t\t\t\t\treturn validate(expectations, template, templatePrevious);\n\t\t\t\t});\n\n\t\t\t\tit(\"fail: changed 'value'\", function () {\n\t\t\t\t\tlet templatePrevious = JSON.parse(JSON.stringify(goodUIBorder.templateSchema));\n\t\t\t\t\tlet template = JSON.parse(JSON.stringify(templatePrevious));\n\t\t\t\t\ttemplate.properties[0].properties[0].value = 123456;\n\n\t\t\t\t\tlet expectations = function (result) {\n\t\t\t\t\t\texpect(result).property(\"isValid\", false);\n\t\t\t\t\t\texpect(result.errors.length).to.be.at.least(1);\n\t\t\t\t\t\texpect(result.errors[0].message).to.have.string(\n\t\t\t\t\t\t\tMSG.MODIFIED_TEMPLATE_SAME_VERSION_1,\n\t\t\t\t\t\t);\n\t\t\t\t\t\treturn result;\n\t\t\t\t\t};\n\t\t\t\t\treturn validate(expectations, template, templatePrevious);\n\t\t\t\t});\n\n\t\t\t\tit(\"fail: changed 'id'\", function () {\n\t\t\t\t\tlet templatePrevious = JSON.parse(JSON.stringify(goodPointId.templateSchema));\n\t\t\t\t\tlet template = JSON.parse(JSON.stringify(templatePrevious));\n\t\t\t\t\ttemplate.properties[0].properties[0].id = \"xx\";\n\n\t\t\t\t\tlet expectations = function (result) {\n\t\t\t\t\t\texpect(result).property(\"isValid\", false);\n\t\t\t\t\t\texpect(result.errors.length).to.be.at.least(1);\n\t\t\t\t\t\texpect(result.errors[0].message).to.have.string(\n\t\t\t\t\t\t\tMSG.MODIFIED_TEMPLATE_SAME_VERSION_1,\n\t\t\t\t\t\t);\n\t\t\t\t\t\treturn result;\n\t\t\t\t\t};\n\t\t\t\t\treturn validate(expectations, template, templatePrevious);\n\t\t\t\t});\n\n\t\t\t\tit(\"fail: changed 'inherits'\", function () {\n\t\t\t\t\tlet templatePrevious = JSON.parse(JSON.stringify(goodReservedTypes.templateSchema));\n\t\t\t\t\tlet template = JSON.parse(JSON.stringify(templatePrevious));\n\t\t\t\t\ttemplate.inherits = \"Reference<Adsk.Core:Math.Color-1.0.0>\";\n\n\t\t\t\t\tlet expectations = function (result) {\n\t\t\t\t\t\texpect(result).property(\"isValid\", false);\n\t\t\t\t\t\texpect(result.errors.length).to.be.at.least(1);\n\t\t\t\t\t\texpect(result.errors[0].message).to.have.string(\n\t\t\t\t\t\t\tMSG.MODIFIED_TEMPLATE_SAME_VERSION_1,\n\t\t\t\t\t\t);\n\t\t\t\t\t\treturn result;\n\t\t\t\t\t};\n\t\t\t\t\treturn validate(expectations, template, templatePrevious);\n\t\t\t\t});\n\n\t\t\t\tit(\"fail: added property\", function () {\n\t\t\t\t\tlet templatePrevious = JSON.parse(JSON.stringify(goodPointId.templateSchema));\n\t\t\t\t\ttemplatePrevious.annotation = { description: \"Test\" };\n\t\t\t\t\tlet template = JSON.parse(JSON.stringify(templatePrevious));\n\t\t\t\t\ttemplate.properties[0].properties.push({ id: \"newPropId\", typeid: \"Float32\" });\n\n\t\t\t\t\tlet expectations = function (result) {\n\t\t\t\t\t\texpect(result).property(\"isValid\", false);\n\t\t\t\t\t\texpect(result.errors.length).to.be.at.least(1);\n\t\t\t\t\t\texpect(result.errors[0].message).to.have.string(\n\t\t\t\t\t\t\tMSG.MODIFIED_TEMPLATE_SAME_VERSION_1,\n\t\t\t\t\t\t);\n\t\t\t\t\t\treturn result;\n\t\t\t\t\t};\n\t\t\t\t\treturn validate(expectations, template, templatePrevious);\n\t\t\t\t});\n\n\t\t\t\tit(\"fail: deleted property\", function () {\n\t\t\t\t\tlet templatePrevious = JSON.parse(JSON.stringify(goodPointId.templateSchema));\n\t\t\t\t\ttemplatePrevious.annotation = { description: \"Test\" };\n\t\t\t\t\tlet template = JSON.parse(JSON.stringify(templatePrevious));\n\t\t\t\t\ttemplate.properties[0].properties.pop();\n\n\t\t\t\t\tlet expectations = function (result) {\n\t\t\t\t\t\texpect(result).property(\"isValid\", false);\n\t\t\t\t\t\texpect(result.errors.length).to.be.at.least(1);\n\t\t\t\t\t\texpect(result.errors[0].message).to.have.string(\n\t\t\t\t\t\t\tMSG.MODIFIED_TEMPLATE_SAME_VERSION_1,\n\t\t\t\t\t\t);\n\t\t\t\t\t\treturn result;\n\t\t\t\t\t};\n\t\t\t\t\treturn validate(expectations, template, templatePrevious);\n\t\t\t\t});\n\t\t\t});\n\n\t\t\tdescribe(\"incremented patch level\", function () {\n\t\t\t\tit(\"pass: same content\", function () {\n\t\t\t\t\tlet templatePrevious = JSON.parse(JSON.stringify(goodPointId.templateSchema));\n\t\t\t\t\tlet template = JSON.parse(JSON.stringify(templatePrevious));\n\t\t\t\t\ttemplate.typeid = \"TeamLeoValidation2:PointID-\" + semver.inc(\"1.0.0\", \"patch\");\n\n\t\t\t\t\tlet expectations = function (result) {\n\t\t\t\t\t\texpect(result).property(\"isValid\", true);\n\t\t\t\t\t\texpect(result.errors).to.be.empty;\n\t\t\t\t\t\texpect(result.warnings).to.be.empty;\n\t\t\t\t\t\treturn result;\n\t\t\t\t\t};\n\t\t\t\t\treturn validate(expectations, template, templatePrevious);\n\t\t\t\t});\n\n\t\t\t\tit(\"pass: unstable with major content change: 0.0.1 -> 0.0.2\", function () {\n\t\t\t\t\tlet templatePrevious = JSON.parse(JSON.stringify(goodPointId.templateSchema));\n\t\t\t\t\ttemplatePrevious.typeid = \"TeamLeoValidation2:PointID-0.0.1\";\n\t\t\t\t\tlet template = JSON.parse(JSON.stringify(templatePrevious));\n\t\t\t\t\ttemplate.typeid = \"TeamLeoValidation2:PointID-0.0.2\";\n\t\t\t\t\ttemplate.properties[1].typeid = \"TeamLeoValidation2:ColorID-9.0.0\";\n\n\t\t\t\t\tlet expectations = function (result) {\n\t\t\t\t\t\texpect(result).property(\"isValid\", true);\n\t\t\t\t\t\texpect(result.errors).to.be.empty;\n\t\t\t\t\t\texpect(result.warnings).to.be.empty;\n\t\t\t\t\t\treturn result;\n\t\t\t\t\t};\n\t\t\t\t\treturn validate(expectations, template, templatePrevious);\n\t\t\t\t});\n\n\t\t\t\tit(\"pass: changed 'annotation'\", function () {\n\t\t\t\t\tlet templatePrevious = JSON.parse(JSON.stringify(goodPointId.templateSchema));\n\t\t\t\t\ttemplatePrevious.annotation = { description: \"Test\" };\n\t\t\t\t\tlet template = JSON.parse(JSON.stringify(templatePrevious));\n\t\t\t\t\ttemplate.typeid = \"TeamLeoValidation2:PointID-\" + semver.inc(\"1.0.0\", \"patch\");\n\t\t\t\t\ttemplate.annotation.description = \"Changed!\";\n\n\t\t\t\t\tlet expectations = function (result) {\n\t\t\t\t\t\texpect(result).property(\"isValid\", true);\n\t\t\t\t\t\texpect(result.errors).to.be.empty;\n\t\t\t\t\t\texpect(result.warnings).to.be.empty;\n\t\t\t\t\t\treturn result;\n\t\t\t\t\t};\n\t\t\t\t\treturn validate(expectations, template, templatePrevious);\n\t\t\t\t});\n\n\t\t\t\tit(\"pass: deleted 'annotation'\", function () {\n\t\t\t\t\tlet templatePrevious = JSON.parse(JSON.stringify(goodPointId.templateSchema));\n\t\t\t\t\ttemplatePrevious.annotation = { description: \"Test\" };\n\t\t\t\t\tlet template = JSON.parse(JSON.stringify(templatePrevious));\n\t\t\t\t\ttemplate.typeid = \"TeamLeoValidation2:PointID-\" + semver.inc(\"1.0.0\", \"patch\");\n\t\t\t\t\tdelete template.annotation;\n\n\t\t\t\t\tlet expectations = function (result) {\n\t\t\t\t\t\texpect(result).property(\"isValid\", true);\n\t\t\t\t\t\texpect(result.errors).to.be.empty;\n\t\t\t\t\t\texpect(result.warnings).to.be.empty;\n\t\t\t\t\t\treturn result;\n\t\t\t\t\t};\n\t\t\t\t\treturn validate(expectations, template, templatePrevious);\n\t\t\t\t});\n\n\t\t\t\tit(\"pass: added 'annotation'\", function () {\n\t\t\t\t\tlet templatePrevious = JSON.parse(JSON.stringify(goodPointId.templateSchema));\n\t\t\t\t\tlet template = JSON.parse(JSON.stringify(templatePrevious));\n\t\t\t\t\ttemplate.typeid = \"TeamLeoValidation2:PointID-\" + semver.inc(\"1.0.0\", \"patch\");\n\t\t\t\t\ttemplate.annotation = { description: \"Test\" };\n\n\t\t\t\t\tlet expectations = function (result) {\n\t\t\t\t\t\texpect(result).property(\"isValid\", true);\n\t\t\t\t\t\texpect(result.errors).to.be.empty;\n\t\t\t\t\t\texpect(result.warnings).to.be.empty;\n\t\t\t\t\t\treturn result;\n\t\t\t\t\t};\n\t\t\t\t\treturn validate(expectations, template, templatePrevious);\n\t\t\t\t});\n\n\t\t\t\tit(\"warn: changed 'value'\", function () {\n\t\t\t\t\tlet templatePrevious = JSON.parse(JSON.stringify(goodUIBorder.templateSchema));\n\t\t\t\t\tlet template = JSON.parse(JSON.stringify(templatePrevious));\n\t\t\t\t\ttemplate.typeid = \"Adsk.Core:UI.Border-\" + semver.inc(\"1.0.0\", \"patch\");\n\t\t\t\t\ttemplate.properties[0].properties[0].value = 123456;\n\n\t\t\t\t\tlet expectations = function (result) {\n\t\t\t\t\t\texpect(result).property(\"isValid\", true);\n\t\t\t\t\t\texpect(result.errors).to.be.empty;\n\t\t\t\t\t\texpect(result.warnings.length).to.be.at.least(1);\n\t\t\t\t\t\texpect(result.warnings[0]).to.have.string(MSG.CHANGE_LEVEL_TOO_LOW_1);\n\t\t\t\t\t\treturn result;\n\t\t\t\t\t};\n\t\t\t\t\treturn validate(expectations, template, templatePrevious);\n\t\t\t\t});\n\n\t\t\t\tit(\"warn: changed 'id' (delete, add)\", function () {\n\t\t\t\t\tlet templatePrevious = JSON.parse(JSON.stringify(goodPointId.templateSchema));\n\t\t\t\t\tlet template = JSON.parse(JSON.stringify(templatePrevious));\n\t\t\t\t\ttemplate.typeid = \"TeamLeoValidation2:PointID-\" + semver.inc(\"1.0.0\", \"patch\");\n\t\t\t\t\ttemplate.properties[0].properties[0].id = \"xx\";\n\n\t\t\t\t\tlet expectations = function (result) {\n\t\t\t\t\t\texpect(result).property(\"isValid\", true);\n\t\t\t\t\t\texpect(result.errors).to.be.empty;\n\t\t\t\t\t\texpect(result.warnings.length).to.be.at.least(2); // 1st for the delete and the 2nd for the add\n\t\t\t\t\t\texpect(result.warnings[0]).to.have.string(MSG.CHANGE_LEVEL_TOO_LOW_1);\n\t\t\t\t\t\treturn result;\n\t\t\t\t\t};\n\t\t\t\t\treturn validate(expectations, template, templatePrevious);\n\t\t\t\t});\n\n\t\t\t\tit(\"warn: changed 'inherits'\", function () {\n\t\t\t\t\tlet templatePrevious = JSON.parse(JSON.stringify(goodReservedTypes.templateSchema));\n\t\t\t\t\tlet template = JSON.parse(JSON.stringify(templatePrevious));\n\t\t\t\t\ttemplate.typeid = \"TeamLeoValidation2:Example-\" + semver.inc(\"1.0.0\", \"patch\");\n\t\t\t\t\ttemplate.inherits = \"Reference<Adsk.Core:Math.Color-1.0.0>\";\n\n\t\t\t\t\tlet expectations = function (result) {\n\t\t\t\t\t\texpect(result).property(\"isValid\", true);\n\t\t\t\t\t\texpect(result.errors).to.be.empty;\n\t\t\t\t\t\texpect(result.warnings.length).to.be.at.least(1);\n\t\t\t\t\t\texpect(result.warnings[0]).to.have.string(MSG.CHANGE_LEVEL_TOO_LOW_1);\n\t\t\t\t\t\treturn result;\n\t\t\t\t\t};\n\t\t\t\t\treturn validate(expectations, template, templatePrevious);\n\t\t\t\t});\n\n\t\t\t\tit(\"warn: added property\", function () {\n\t\t\t\t\tlet templatePrevious = JSON.parse(JSON.stringify(goodPointId.templateSchema));\n\t\t\t\t\ttemplatePrevious.annotation = { description: \"Test\" };\n\t\t\t\t\tlet template = JSON.parse(JSON.stringify(templatePrevious));\n\t\t\t\t\ttemplate.typeid = \"TeamLeoValidation2:PointID-\" + semver.inc(\"1.0.0\", \"patch\");\n\t\t\t\t\ttemplate.properties[0].properties.push({ id: \"newPropId\", typeid: \"Float32\" });\n\n\t\t\t\t\tlet expectations = function (result) {\n\t\t\t\t\t\texpect(result).property(\"isValid\", true);\n\t\t\t\t\t\texpect(result.errors).to.be.empty;\n\t\t\t\t\t\texpect(result.warnings.length).to.be.at.least(1);\n\t\t\t\t\t\texpect(result.warnings[0]).to.have.string(MSG.CHANGE_LEVEL_TOO_LOW_1);\n\t\t\t\t\t\treturn result;\n\t\t\t\t\t};\n\t\t\t\t\treturn validate(expectations, template, templatePrevious);\n\t\t\t\t});\n\n\t\t\t\tit(\"warn: deleted property\", function () {\n\t\t\t\t\tlet templatePrevious = JSON.parse(JSON.stringify(goodPointId.templateSchema));\n\t\t\t\t\ttemplatePrevious.annotation = { description: \"Test\" };\n\t\t\t\t\tlet template = JSON.parse(JSON.stringify(templatePrevious));\n\t\t\t\t\ttemplate.typeid = \"TeamLeoValidation2:PointID-\" + semver.inc(\"1.0.0\", \"patch\");\n\t\t\t\t\ttemplate.properties[0].properties.pop();\n\n\t\t\t\t\tlet expectations = function (result) {\n\t\t\t\t\t\texpect(result).property(\"isValid\", true);\n\t\t\t\t\t\texpect(result.errors).to.be.empty;\n\t\t\t\t\t\texpect(result.warnings.length).to.be.at.least(1);\n\t\t\t\t\t\texpect(result.warnings[0]).to.have.string(MSG.CHANGE_LEVEL_TOO_LOW_1);\n\t\t\t\t\t\treturn result;\n\t\t\t\t\t};\n\t\t\t\t\treturn validate(expectations, template, templatePrevious);\n\t\t\t\t});\n\t\t\t});\n\n\t\t\tdescribe(\"incremented minor level\", function () {\n\t\t\t\tit(\"pass: same content\", function () {\n\t\t\t\t\tlet templatePrevious = JSON.parse(JSON.stringify(goodPointId.templateSchema));\n\t\t\t\t\tlet template = JSON.parse(JSON.stringify(templatePrevious));\n\t\t\t\t\ttemplate.typeid = \"TeamLeoValidation2:PointID-\" + semver.inc(\"1.0.0\", \"minor\");\n\n\t\t\t\t\tlet expectations = function (result) {\n\t\t\t\t\t\texpect(result).property(\"isValid\", true);\n\t\t\t\t\t\texpect(result.errors).to.be.empty;\n\t\t\t\t\t\texpect(result.warnings).to.be.empty;\n\t\t\t\t\t\treturn result;\n\t\t\t\t\t};\n\t\t\t\t\treturn validate(expectations, template, templatePrevious);\n\t\t\t\t});\n\n\t\t\t\tit(\"pass: changed 'annotation'\", function () {\n\t\t\t\t\tlet templatePrevious = JSON.parse(JSON.stringify(goodPointId.templateSchema));\n\t\t\t\t\ttemplatePrevious.annotation = { description: \"Test\" };\n\t\t\t\t\tlet template = JSON.parse(JSON.stringify(templatePrevious));\n\t\t\t\t\ttemplate.typeid = \"TeamLeoValidation2:PointID-\" + semver.inc(\"1.0.0\", \"minor\");\n\t\t\t\t\ttemplate.annotation.description = \"Changed!\";\n\n\t\t\t\t\tlet expectations = function (result) {\n\t\t\t\t\t\texpect(result).property(\"isValid\", true);\n\t\t\t\t\t\texpect(result.errors).to.be.empty;\n\t\t\t\t\t\texpect(result.warnings).to.be.empty;\n\t\t\t\t\t\treturn result;\n\t\t\t\t\t};\n\t\t\t\t\treturn validate(expectations, template, templatePrevious);\n\t\t\t\t});\n\n\t\t\t\tit(\"pass: deleted 'annotation'\", function () {\n\t\t\t\t\tlet templatePrevious = JSON.parse(JSON.stringify(goodPointId.templateSchema));\n\t\t\t\t\ttemplatePrevious.annotation = { description: \"Test\" };\n\t\t\t\t\tlet template = JSON.parse(JSON.stringify(templatePrevious));\n\t\t\t\t\ttemplate.typeid = \"TeamLeoValidation2:PointID-\" + semver.inc(\"1.0.0\", \"minor\");\n\t\t\t\t\tdelete template.annotation;\n\n\t\t\t\t\tlet expectations = function (result) {\n\t\t\t\t\t\texpect(result).property(\"isValid\", true);\n\t\t\t\t\t\texpect(result.errors).to.be.empty;\n\t\t\t\t\t\texpect(result.warnings).to.be.empty;\n\t\t\t\t\t\treturn result;\n\t\t\t\t\t};\n\t\t\t\t\treturn validate(expectations, template, templatePrevious);\n\t\t\t\t});\n\n\t\t\t\tit(\"pass: added 'annotation'\", function () {\n\t\t\t\t\tlet templatePrevious = JSON.parse(JSON.stringify(goodPointId.templateSchema));\n\t\t\t\t\tlet template = JSON.parse(JSON.stringify(templatePrevious));\n\t\t\t\t\ttemplate.typeid = \"TeamLeoValidation2:PointID-\" + semver.inc(\"1.0.0\", \"minor\");\n\t\t\t\t\ttemplate.annotation = { description: \"Test\" };\n\n\t\t\t\t\tlet expectations = function (result) {\n\t\t\t\t\t\texpect(result).property(\"isValid\", true);\n\t\t\t\t\t\texpect(result.errors).to.be.empty;\n\t\t\t\t\t\texpect(result.warnings).to.be.empty;\n\t\t\t\t\t\treturn result;\n\t\t\t\t\t};\n\t\t\t\t\treturn validate(expectations, template, templatePrevious);\n\t\t\t\t});\n\n\t\t\t\tit(\"pass: changed 'value'\", function () {\n\t\t\t\t\tlet templatePrevious = JSON.parse(JSON.stringify(goodUIBorder.templateSchema));\n\t\t\t\t\tlet template = JSON.parse(JSON.stringify(templatePrevious));\n\t\t\t\t\ttemplate.typeid = \"Adsk.Core:UI.Border-\" + semver.inc(\"1.0.0\", \"minor\");\n\t\t\t\t\ttemplate.properties[0].properties[0].value = 123456;\n\n\t\t\t\t\tlet expectations = function (result) {\n\t\t\t\t\t\texpect(result).property(\"isValid\", true);\n\t\t\t\t\t\texpect(result.errors).to.be.empty;\n\t\t\t\t\t\texpect(result.warnings).to.be.empty;\n\t\t\t\t\t\treturn result;\n\t\t\t\t\t};\n\t\t\t\t\treturn validate(expectations, template, templatePrevious);\n\t\t\t\t});\n\n\t\t\t\tit(\"warn: changed 'id' (delete, add)\", function () {\n\t\t\t\t\tlet templatePrevious = JSON.parse(JSON.stringify(goodPointId.templateSchema));\n\t\t\t\t\tlet template = JSON.parse(JSON.stringify(templatePrevious));\n\t\t\t\t\ttemplate.typeid = \"TeamLeoValidation2:PointID-\" + semver.inc(\"1.0.0\", \"minor\");\n\t\t\t\t\ttemplate.properties[0].properties[0].id = \"xx\";\n\n\t\t\t\t\tlet expectations = function (result) {\n\t\t\t\t\t\texpect(result).property(\"isValid\", true);\n\t\t\t\t\t\texpect(result.errors).to.be.empty;\n\t\t\t\t\t\texpect(result.warnings.length).to.be.at.least(1);\n\t\t\t\t\t\texpect(result.warnings[0]).to.have.string(MSG.CHANGE_LEVEL_TOO_LOW_1);\n\t\t\t\t\t\treturn result;\n\t\t\t\t\t};\n\t\t\t\t\treturn validate(expectations, template, templatePrevious);\n\t\t\t\t});\n\n\t\t\t\tit(\"warn: changed 'inherits'\", function () {\n\t\t\t\t\tlet templatePrevious = JSON.parse(JSON.stringify(goodReservedTypes.templateSchema));\n\t\t\t\t\tlet template = JSON.parse(JSON.stringify(templatePrevious));\n\t\t\t\t\ttemplate.typeid = \"TeamLeoValidation2:Example-\" + semver.inc(\"1.0.0\", \"minor\");\n\t\t\t\t\ttemplate.inherits = \"Reference<Adsk.Core:Math.Color-1.0.0>\";\n\n\t\t\t\t\tlet expectations = function (result) {\n\t\t\t\t\t\texpect(result).property(\"isValid\", true);\n\t\t\t\t\t\texpect(result.errors).to.be.empty;\n\t\t\t\t\t\texpect(result.warnings.length).to.be.at.least(1);\n\t\t\t\t\t\texpect(result.warnings[0]).to.have.string(MSG.CHANGE_LEVEL_TOO_LOW_1);\n\t\t\t\t\t\treturn result;\n\t\t\t\t\t};\n\t\t\t\t\treturn validate(expectations, template, templatePrevious);\n\t\t\t\t});\n\n\t\t\t\tit(\"pass: added property\", function () {\n\t\t\t\t\tlet templatePrevious = JSON.parse(JSON.stringify(goodPointId.templateSchema));\n\t\t\t\t\ttemplatePrevious.annotation = { description: \"Test\" };\n\t\t\t\t\tlet template = JSON.parse(JSON.stringify(templatePrevious));\n\t\t\t\t\ttemplate.typeid = \"TeamLeoValidation2:PointID-\" + semver.inc(\"1.0.0\", \"minor\");\n\t\t\t\t\ttemplate.properties[0].properties.push({ id: \"newPropId\", typeid: \"Float32\" });\n\n\t\t\t\t\tlet expectations = function (result) {\n\t\t\t\t\t\texpect(result).property(\"isValid\", true);\n\t\t\t\t\t\texpect(result.errors).to.be.empty;\n\t\t\t\t\t\texpect(result.warnings).to.be.empty;\n\t\t\t\t\t\treturn result;\n\t\t\t\t\t};\n\t\t\t\t\treturn validate(expectations, template, templatePrevious);\n\t\t\t\t});\n\n\t\t\t\tit(\"warn: deleted property\", function () {\n\t\t\t\t\tlet templatePrevious = JSON.parse(JSON.stringify(goodPointId.templateSchema));\n\t\t\t\t\ttemplatePrevious.annotation = { description: \"Test\" };\n\t\t\t\t\tlet template = JSON.parse(JSON.stringify(templatePrevious));\n\t\t\t\t\ttemplate.typeid = \"TeamLeoValidation2:PointID-\" + semver.inc(\"1.0.0\", \"minor\");\n\t\t\t\t\ttemplate.properties[0].properties.pop();\n\n\t\t\t\t\tlet expectations = function (result) {\n\t\t\t\t\t\texpect(result).property(\"isValid\", true);\n\t\t\t\t\t\texpect(result.errors).to.be.empty;\n\t\t\t\t\t\texpect(result.warnings.length).to.be.at.least(1);\n\t\t\t\t\t\texpect(result.warnings[0]).to.have.string(MSG.CHANGE_LEVEL_TOO_LOW_1);\n\t\t\t\t\t\treturn result;\n\t\t\t\t\t};\n\t\t\t\t\treturn validate(expectations, template, templatePrevious);\n\t\t\t\t});\n\t\t\t});\n\n\t\t\tdescribe(\"incremented major level\", function () {\n\t\t\t\tit(\"pass: same content\", function () {\n\t\t\t\t\tlet templatePrevious = JSON.parse(JSON.stringify(goodPointId.templateSchema));\n\t\t\t\t\tlet template = JSON.parse(JSON.stringify(templatePrevious));\n\t\t\t\t\ttemplate.typeid = \"TeamLeoValidation2:PointID-\" + semver.inc(\"1.0.0\", \"major\");\n\n\t\t\t\t\tlet expectations = function (result) {\n\t\t\t\t\t\texpect(result).property(\"isValid\", true);\n\t\t\t\t\t\texpect(result.errors).to.be.empty;\n\t\t\t\t\t\texpect(result.warnings).to.be.empty;\n\t\t\t\t\t\treturn result;\n\t\t\t\t\t};\n\t\t\t\t\treturn validate(expectations, template, templatePrevious);\n\t\t\t\t});\n\n\t\t\t\tit(\"pass: changed 'annotation'\", function () {\n\t\t\t\t\tlet templatePrevious = JSON.parse(JSON.stringify(goodPointId.templateSchema));\n\t\t\t\t\ttemplatePrevious.annotation = { description: \"Test\" };\n\t\t\t\t\tlet template = JSON.parse(JSON.stringify(templatePrevious));\n\t\t\t\t\ttemplate.typeid = \"TeamLeoValidation2:PointID-\" + semver.inc(\"1.0.0\", \"major\");\n\t\t\t\t\ttemplate.annotation.description = \"Changed!\";\n\n\t\t\t\t\tlet expectations = function (result) {\n\t\t\t\t\t\texpect(result).property(\"isValid\", true);\n\t\t\t\t\t\texpect(result.errors).to.be.empty;\n\t\t\t\t\t\texpect(result.warnings).to.be.empty;\n\t\t\t\t\t\treturn result;\n\t\t\t\t\t};\n\t\t\t\t\treturn validate(expectations, template, templatePrevious);\n\t\t\t\t});\n\n\t\t\t\tit(\"pass: deleted 'annotation'\", function () {\n\t\t\t\t\tlet templatePrevious = JSON.parse(JSON.stringify(goodPointId.templateSchema));\n\t\t\t\t\ttemplatePrevious.annotation = { description: \"Test\" };\n\t\t\t\t\tlet template = JSON.parse(JSON.stringify(templatePrevious));\n\t\t\t\t\ttemplate.typeid = \"TeamLeoValidation2:PointID-\" + semver.inc(\"1.0.0\", \"major\");\n\t\t\t\t\tdelete template.annotation;\n\n\t\t\t\t\tlet expectations = function (result) {\n\t\t\t\t\t\texpect(result).property(\"isValid\", true);\n\t\t\t\t\t\texpect(result.errors).to.be.empty;\n\t\t\t\t\t\texpect(result.warnings).to.be.empty;\n\t\t\t\t\t\treturn result;\n\t\t\t\t\t};\n\t\t\t\t\treturn validate(expectations, template, templatePrevious);\n\t\t\t\t});\n\n\t\t\t\tit(\"pass: added 'annotation'\", function () {\n\t\t\t\t\tlet templatePrevious = JSON.parse(JSON.stringify(goodPointId.templateSchema));\n\t\t\t\t\tlet template = JSON.parse(JSON.stringify(templatePrevious));\n\t\t\t\t\ttemplate.typeid = \"TeamLeoValidation2:PointID-\" + semver.inc(\"1.0.0\", \"major\");\n\t\t\t\t\ttemplate.annotation = { description: \"Test\" };\n\n\t\t\t\t\tlet expectations = function (result) {\n\t\t\t\t\t\texpect(result).property(\"isValid\", true);\n\t\t\t\t\t\texpect(result.errors).to.be.empty;\n\t\t\t\t\t\texpect(result.warnings).to.be.empty;\n\t\t\t\t\t\treturn result;\n\t\t\t\t\t};\n\t\t\t\t\treturn validate(expectations, template, templatePrevious);\n\t\t\t\t});\n\n\t\t\t\tit(\"pass: changed 'value'\", function () {\n\t\t\t\t\tlet templatePrevious = JSON.parse(JSON.stringify(goodUIBorder.templateSchema));\n\t\t\t\t\tlet template = JSON.parse(JSON.stringify(templatePrevious));\n\t\t\t\t\ttemplate.typeid = \"Adsk.Core:UI.Border-\" + semver.inc(\"1.0.0\", \"major\");\n\t\t\t\t\ttemplate.properties[0].properties[0].value = 123456;\n\n\t\t\t\t\tlet expectations = function (result) {\n\t\t\t\t\t\texpect(result).property(\"isValid\", true);\n\t\t\t\t\t\texpect(result.errors).to.be.empty;\n\t\t\t\t\t\texpect(result.warnings).to.be.empty;\n\t\t\t\t\t\treturn result;\n\t\t\t\t\t};\n\t\t\t\t\treturn validate(expectations, template, templatePrevious);\n\t\t\t\t});\n\n\t\t\t\tit(\"pass: changed 'id' (delete, add)\", function () {\n\t\t\t\t\tlet templatePrevious = JSON.parse(JSON.stringify(goodPointId.templateSchema));\n\t\t\t\t\tlet template = JSON.parse(JSON.stringify(templatePrevious));\n\t\t\t\t\ttemplate.typeid = \"TeamLeoValidation2:PointID-\" + semver.inc(\"1.0.0\", \"major\");\n\t\t\t\t\ttemplate.properties[0].properties[0].id = \"xx\";\n\n\t\t\t\t\tlet expectations = function (result) {\n\t\t\t\t\t\texpect(result).property(\"isValid\", true);\n\t\t\t\t\t\texpect(result.errors).to.be.empty;\n\t\t\t\t\t\texpect(result.warnings).to.be.empty;\n\t\t\t\t\t\treturn result;\n\t\t\t\t\t};\n\t\t\t\t\treturn validate(expectations, template, templatePrevious);\n\t\t\t\t});\n\n\t\t\t\tit(\"pass: changed 'inherits'\", function () {\n\t\t\t\t\tlet templatePrevious = JSON.parse(JSON.stringify(goodReservedTypes.templateSchema));\n\t\t\t\t\tlet template = JSON.parse(JSON.stringify(templatePrevious));\n\t\t\t\t\ttemplate.typeid = \"TeamLeoValidation2:Example-\" + semver.inc(\"1.0.0\", \"major\");\n\t\t\t\t\ttemplate.inherits = \"Reference<Adsk.Core:Math.Color-1.0.0>\";\n\n\t\t\t\t\tlet expectations = function (result) {\n\t\t\t\t\t\texpect(result).property(\"isValid\", true);\n\t\t\t\t\t\texpect(result.errors).to.be.empty;\n\t\t\t\t\t\texpect(result.warnings).to.be.empty;\n\t\t\t\t\t\treturn result;\n\t\t\t\t\t};\n\t\t\t\t\treturn validate(expectations, template, templatePrevious);\n\t\t\t\t});\n\n\t\t\t\tit(\"pass: added property\", function () {\n\t\t\t\t\tlet templatePrevious = JSON.parse(JSON.stringify(goodPointId.templateSchema));\n\t\t\t\t\ttemplatePrevious.annotation = { description: \"Test\" };\n\t\t\t\t\tlet template = JSON.parse(JSON.stringify(templatePrevious));\n\t\t\t\t\ttemplate.typeid = \"TeamLeoValidation2:PointID-\" + semver.inc(\"1.0.0\", \"major\");\n\t\t\t\t\ttemplate.properties[0].properties.push({ id: \"newPropId\", typeid: \"Float32\" });\n\n\t\t\t\t\tlet expectations = function (result) {\n\t\t\t\t\t\texpect(result).property(\"isValid\", true);\n\t\t\t\t\t\texpect(result.errors).to.be.empty;\n\t\t\t\t\t\texpect(result.warnings).to.be.empty;\n\t\t\t\t\t\treturn result;\n\t\t\t\t\t};\n\t\t\t\t\treturn validate(expectations, template, templatePrevious);\n\t\t\t\t});\n\n\t\t\t\tit(\"pass: deleted property\", function () {\n\t\t\t\t\tlet templatePrevious = JSON.parse(JSON.stringify(goodPointId.templateSchema));\n\t\t\t\t\ttemplatePrevious.annotation = { description: \"Test\" };\n\t\t\t\t\tlet template = JSON.parse(JSON.stringify(templatePrevious));\n\t\t\t\t\ttemplate.typeid = \"TeamLeoValidation2:PointID-\" + semver.inc(\"1.0.0\", \"major\");\n\t\t\t\t\ttemplate.properties[0].properties.pop();\n\n\t\t\t\t\tlet expectations = function (result) {\n\t\t\t\t\t\texpect(result).property(\"isValid\", true);\n\t\t\t\t\t\texpect(result.errors).to.be.empty;\n\t\t\t\t\t\texpect(result.warnings).to.be.empty;\n\t\t\t\t\t\treturn result;\n\t\t\t\t\t};\n\t\t\t\t\treturn validate(expectations, template, templatePrevious);\n\t\t\t\t});\n\t\t\t});\n\t\t});\n\n\t\tdescribe(\"skip semver validation\", function () {\n\t\t\tit(\"pass: deep equal on scrambled arrays\", function () {\n\t\t\t\tlet templatePrevious = JSON.parse(JSON.stringify(goodPointId.templateSchema));\n\t\t\t\tlet template = JSON.parse(JSON.stringify(templatePrevious));\n\t\t\t\tlet tmp = template.properties[0].properties[0];\n\t\t\t\ttemplate.properties[0].properties[0] = template.properties[0].properties[2];\n\t\t\t\ttemplate.properties[0].properties[2] = tmp;\n\t\t\t\ttmp = template.properties[1];\n\t\t\t\ttemplate.properties[1] = template.properties[2];\n\t\t\t\ttemplate.properties[2] = tmp;\n\t\t\t\t// Skip semver validation to cause a deep compare\n\n\t\t\t\tlet expectations = function (result) {\n\t\t\t\t\texpect(result).property(\"isValid\", true);\n\t\t\t\t\texpect(result.errors).to.be.empty;\n\t\t\t\t\texpect(result.warnings).to.be.empty;\n\t\t\t\t\treturn result;\n\t\t\t\t};\n\t\t\t\treturn validate(expectations, template, templatePrevious, true);\n\t\t\t});\n\n\t\t\tit(\"pass: deep equal with version regression\", function () {\n\t\t\t\tlet templatePrevious = JSON.parse(JSON.stringify(goodPointId.templateSchema));\n\t\t\t\tlet template = JSON.parse(JSON.stringify(templatePrevious));\n\n\t\t\t\tlet expectations = function (result) {\n\t\t\t\t\texpect(result).property(\"isValid\", true);\n\t\t\t\t\texpect(result.errors).to.be.empty;\n\t\t\t\t\texpect(result.warnings).to.be.empty;\n\t\t\t\t\treturn result;\n\t\t\t\t};\n\t\t\t\treturn validate(expectations, template, templatePrevious, true);\n\t\t\t});\n\n\t\t\tit(\"pass: preserves input templates\", function () {\n\t\t\t\tlet templatePrevious = JSON.parse(JSON.stringify(goodPointId.templateSchema));\n\t\t\t\tlet template = JSON.parse(JSON.stringify(templatePrevious));\n\n\t\t\t\tlet copies = [\n\t\t\t\t\tJSON.parse(JSON.stringify(templatePrevious)),\n\t\t\t\t\tJSON.parse(JSON.stringify(template)),\n\t\t\t\t];\n\n\t\t\t\tlet expectations = function (result) {\n\t\t\t\t\texpect(result).property(\"isValid\", true);\n\t\t\t\t\texpect(result.errors).to.be.empty;\n\t\t\t\t\texpect(result.warnings).to.be.empty;\n\t\t\t\t\texpect(templatePrevious).to.deep.equal(copies[0]);\n\t\t\t\t\texpect(template).to.deep.equal(copies[1]);\n\t\t\t\t\treturn result;\n\t\t\t\t};\n\t\t\t\treturn validate(expectations, template, templatePrevious);\n\t\t\t});\n\n\t\t\tit(\"fail: changed value\", function () {\n\t\t\t\tlet templatePrevious = JSON.parse(JSON.stringify(goodUIBorder.templateSchema));\n\t\t\t\tlet template = JSON.parse(JSON.stringify(templatePrevious));\n\t\t\t\ttemplate.properties[0].properties[0].value = 123456;\n\n\t\t\t\tlet expectations = function (result) {\n\t\t\t\t\texpect(result).property(\"isValid\", false);\n\t\t\t\t\texpect(result.warnings).to.be.empty;\n\t\t\t\t\texpect(result.errors.length).to.be.at.least(1);\n\t\t\t\t\texpect(result.errors[0].message).to.have.string(MSG.MODIFIED_TEMPLATE_1);\n\t\t\t\t\treturn result;\n\t\t\t\t};\n\n\t\t\t\treturn validate(expectations, template, templatePrevious, true);\n\t\t\t});\n\t\t});\n\n\t\tdescribe(\"syntax validation\", function () {\n\t\t\tit(\"pass: validate a simple file\", function () {\n\t\t\t\tlet template = goodPointId.templateSchema;\n\n\t\t\t\tlet expectations = function (result) {\n\t\t\t\t\texpect(result.isValid).to.equal(true);\n\t\t\t\t\treturn result;\n\t\t\t\t};\n\t\t\t\treturn validate(expectations, template, null, true);\n\t\t\t});\n\n\t\t\tit(\"fail: invalid file\", function () {\n\t\t\t\tlet template = badPrimitiveTypeid.templateSchema;\n\n\t\t\t\tlet expectations = function (result) {\n\t\t\t\t\texpect(result.isValid).to.equal(false);\n\t\t\t\t\texpect(result.errors.length).to.be.greaterThan(0);\n\t\t\t\t\texpect(result.unresolvedTypes.length).to.equal(1);\n\t\t\t\t\treturn result;\n\t\t\t\t};\n\t\t\t\treturn validate(expectations, template, null, true);\n\t\t\t});\n\n\t\t\tit(\"should pass a schema with an empty array of properties\", function () {\n\t\t\t\tlet EmptyPropertySchema = {\n\t\t\t\t\ttypeid: \"Test:EmptyPropertySchema-1.0.0\",\n\t\t\t\t\tproperties: [],\n\t\t\t\t};\n\n\t\t\t\tlet expectations = function (result) {\n\t\t\t\t\texpect(result.isValid).to.equal(true);\n\t\t\t\t\treturn result;\n\t\t\t\t};\n\t\t\t\treturn validate(expectations, EmptyPropertySchema, null);\n\t\t\t});\n\t\t});\n\n\t\tdescribe(\"bugs\", function () {\n\t\t\tdescribe(\"@bugfix Template validation with multiple inheritance\", function () {\n\t\t\t\tit(\"pass: deep equal with multiple inheritance\", function () {\n\t\t\t\t\tlet templateString =\n\t\t\t\t\t\t'{\"typeid\":\"autodesk.core:translation.controller-1.0.0\",\"inherits\":[\"NamedProperty\",\"NodeProperty\"]}';\n\t\t\t\t\tlet templatePrevious = JSON.parse(templateString);\n\t\t\t\t\tlet template = JSON.parse(templateString);\n\n\t\t\t\t\tlet expectations = function (result) {\n\t\t\t\t\t\texpect(result).property(\"isValid\", true);\n\t\t\t\t\t\texpect(result.errors).to.be.empty;\n\t\t\t\t\t\texpect(result.warnings).to.be.empty;\n\t\t\t\t\t\treturn result;\n\t\t\t\t\t};\n\t\t\t\t\treturn validate(expectations, template, templatePrevious, true);\n\t\t\t\t});\n\n\t\t\t\tit(\"fail: deep equal with out of order multiple inheritance\", function () {\n\t\t\t\t\tlet template = JSON.parse(\n\t\t\t\t\t\t'{\"typeid\":\"autodesk.core:translation.controller-1.0.0\",' +\n\t\t\t\t\t\t\t'\"inherits\":[\"NamedProperty\",\"NodeProperty\"]}',\n\t\t\t\t\t);\n\t\t\t\t\tlet templatePrevious = JSON.parse(\n\t\t\t\t\t\t'{\"typeid\":\"autodesk.core:translation.controller-1.0.0\",' +\n\t\t\t\t\t\t\t'\"inherits\":[\"NodeProperty\",\"NamedProperty\"]}',\n\t\t\t\t\t);\n\n\t\t\t\t\tlet expectations = function (result) {\n\t\t\t\t\t\texpect(result).property(\"isValid\", false);\n\t\t\t\t\t\texpect(result.errors.length).to.be.greaterThan(0);\n\t\t\t\t\t\texpect(result.errors[0].message).to.have.string(MSG.MODIFIED_TEMPLATE_1);\n\t\t\t\t\t\treturn result;\n\t\t\t\t\t};\n\t\t\t\t\treturn validate(expectations, template, templatePrevious, true);\n\t\t\t\t});\n\t\t\t});\n\n\t\t\tdescribe(\"@bugfix Local templates with 'abstract' properties fail validation \" +\n\t\t\t\t\"with remote one.\", () => {\n\t\t\t\tdescribe(\"pass: deep equal between no properties and an empty properties array\", () => {\n\t\t\t\t\tlet templateArray = {\n\t\t\t\t\t\ttypeid: \"SimpleTest:Shape-1.0.0\",\n\t\t\t\t\t\tproperties: [],\n\t\t\t\t\t};\n\t\t\t\t\tlet templateAbstract = {\n\t\t\t\t\t\ttypeid: \"SimpleTest:Shape-1.0.0\",\n\t\t\t\t\t};\n\n\t\t\t\t\tit(\"source is abstract and target is an empty properties array\", function () {\n\t\t\t\t\t\tlet expectations = function (result) {\n\t\t\t\t\t\t\texpect(result).property(\"isValid\", true);\n\t\t\t\t\t\t\texpect(result.errors).to.be.empty;\n\t\t\t\t\t\t\texpect(result.warnings).to.be.empty;\n\t\t\t\t\t\t\treturn result;\n\t\t\t\t\t\t};\n\n\t\t\t\t\t\treturn validate(expectations, templateAbstract, templateArray);\n\t\t\t\t\t});\n\n\t\t\t\t\tit(\"target is abstract and source is an empty properties array\", function () {\n\t\t\t\t\t\tlet expectations = function (result) {\n\t\t\t\t\t\t\texpect(result).property(\"isValid\", true);\n\t\t\t\t\t\t\texpect(result.errors).to.be.empty;\n\t\t\t\t\t\t\texpect(result.warnings).to.be.empty;\n\t\t\t\t\t\t\treturn result;\n\t\t\t\t\t\t};\n\n\t\t\t\t\t\treturn validate(expectations, templateArray, templateAbstract);\n\t\t\t\t\t});\n\t\t\t\t});\n\t\t\t});\n\t\t});\n\n\t\tdescribe(\"Constants\", function () {\n\t\t\tbefore(function () {\n\t\t\t\tlet schemaValidator = new SchemaValidator();\n\n\t\t\t\tnew TemplateValidator({\n\t\t\t\t\tskipSemver: true,\n\t\t\t\t\tinheritsFrom: schemaValidator.inheritsFrom as any,\n\t\t\t\t\thasSchema: schemaValidator.hasSchema as any,\n\t\t\t\t});\n\t\t\t});\n\n\t\t\tlet expectationsGenerator = function (msg) {\n\t\t\t\treturn function (result) {\n\t\t\t\t\texpect(result.isValid).to.equal(false);\n\t\t\t\t\texpect(result.errors.length).to.equal(1);\n\t\t\t\t\texpect(result.errors[0].message).to.equal(msg);\n\n\t\t\t\t\treturn result;\n\t\t\t\t};\n\t\t\t};\n\n\t\t\tit(\"should pass a valid template\", function () {\n\t\t\t\tlet ConstantValid = {\n\t\t\t\t\ttypeid: \"ConstantTest:ConstantValid-1.0.0\",\n\t\t\t\t\tconstants: [{ id: \"valid\", typeid: \"String\", value: \"value\" }],\n\t\t\t\t};\n\n\t\t\t\tlet expectations = function (result) {\n\t\t\t\t\texpect(result.isValid).to.equal(true);\n\t\t\t\t\treturn result;\n\t\t\t\t};\n\n\t\t\t\treturn validate(expectations, ConstantValid, null);\n\t\t\t});\n\n\t\t\tit(\"should fail if constants array has no elements\", function () {\n\t\t\t\tlet ConstantEmptyArray = {\n\t\t\t\t\ttypeid: \"ConstantTest:ConstantEmptyArray-1.0.0\",\n\t\t\t\t\tconstants: [],\n\t\t\t\t};\n\n\t\t\t\treturn validate(\n\t\t\t\t\texpectationsGenerator(\"/constants must NOT have fewer than 1 items\"),\n\t\t\t\t\tConstantEmptyArray,\n\t\t\t\t\tnull,\n\t\t\t\t\ttrue,\n\t\t\t\t);\n\t\t\t});\n\n\t\t\tit(\"should fail if constant does not have an id\", function () {\n\t\t\t\tlet ConstantNoId = {\n\t\t\t\t\ttypeid: \"ConstantTest:ConstantNoId-1.0.0\",\n\t\t\t\t\tconstants: [{ typeid: \"String\", value: \"value\" }],\n\t\t\t\t};\n\n\t\t\t\treturn validate(\n\t\t\t\t\texpectationsGenerator(\"/constants/0 must have required property 'id'\"),\n\t\t\t\t\tConstantNoId,\n\t\t\t\t\tnull,\n\t\t\t\t\ttrue,\n\t\t\t\t);\n\t\t\t});\n\n\t\t\tit(\"should fail if constant does not have a typeid\", function () {\n\t\t\t\tlet ConstantNoTypeid = {\n\t\t\t\t\ttypeid: \"ConstantTest:ConstantNoTypeid-1.0.0\",\n\t\t\t\t\tconstants: [{ id: \"id\", value: \"value\" }],\n\t\t\t\t};\n\n\t\t\t\treturn validate(\n\t\t\t\t\tfunction (result) {\n\t\t\t\t\t\texpect(result.isValid).to.equal(false);\n\t\t\t\t\t\t// console.log(result.errors);\n\t\t\t\t\t\texpect(result.errors.length).to.equal(5);\n\t\t\t\t\t\texpect(result.errors[3].message).to.include(\n\t\t\t\t\t\t\t\"must have required property 'inherits'\",\n\t\t\t\t\t\t);\n\t\t\t\t\t\texpect(result.errors[4].message).to.include(\n\t\t\t\t\t\t\t\"/constants/0 must have required property 'typeid'\",\n\t\t\t\t\t\t);\n\t\t\t\t\t\treturn result;\n\t\t\t\t\t},\n\t\t\t\t\tConstantNoTypeid,\n\t\t\t\t\tnull,\n\t\t\t\t\ttrue,\n\t\t\t\t);\n\t\t\t});\n\n\t\t\tit(\"should pass if constant does not have a typeid but maybe inherits from elsewhere\", function () {\n\t\t\t\tlet ConstantNoTypeid = {\n\t\t\t\t\ttypeid: \"ConstantTest:ConstantNoTypeid-1.0.0\",\n\t\t\t\t\tinherits: \"ConstantTest:ConstantParentWithTypeid-1.0.0\",\n\t\t\t\t\tconstants: [{ id: \"id\", value: \"value\" }],\n\t\t\t\t};\n\n\t\t\t\tlet expectations = function (result) {\n\t\t\t\t\texpect(result.isValid).to.equal(true);\n\t\t\t\t\treturn result;\n\t\t\t\t};\n\n\t\t\t\treturn validate(expectations, ConstantNoTypeid, null);\n\t\t\t});\n\n\t\t\tit(\"should not fail if constant does not have a value or typedValue\", function () {\n\t\t\t\tlet ConstantNoValue = {\n\t\t\t\t\ttypeid: \"ConstantTest:ConstantNoValue-1.0.0\",\n\t\t\t\t\tconstants: [{ id: \"id\", typeid: \"String\" }],\n\t\t\t\t};\n\n\t\t\t\tlet expectations = function (result) {\n\t\t\t\t\texpect(result.isValid).to.equal(true);\n\t\t\t\t\treturn result;\n\t\t\t\t};\n\n\t\t\t\treturn validate(expectations, ConstantNoValue, null, true);\n\t\t\t});\n\n\t\t\tit(\"should pass if constant map with context key type typeid has typeids as keys\", function () {\n\t\t\t\tlet Constant = {\n\t\t\t\t\ttypeid: \"ConstantTest:Constant-1.0.0\",\n\t\t\t\t\tconstants: [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tid: \"map\",\n\t\t\t\t\t\t\ttypeid: \"Int32\",\n\t\t\t\t\t\t\tcontext: \"map\",\n\t\t\t\t\t\t\tcontextKeyType: \"typeid\",\n\t\t\t\t\t\t\tvalue: {\n\t\t\t\t\t\t\t\t\"SimpleTest:ConstantTemplate1-1.0.0\": 1,\n\t\t\t\t\t\t\t\t\"SimpleTest:ConstantTemplate2-1.0.0\": -1,\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t],\n\t\t\t\t};\n\n\t\t\t\tlet expectations = function (result) {\n\t\t\t\t\texpect(result.isValid).to.equal(true);\n\t\t\t\t\treturn result;\n\t\t\t\t};\n\n\t\t\t\treturn validate(expectations, Constant, null, true);\n\t\t\t});\n\n\t\t\tit(\"should fail if constant map with context key type that is not a valid value\", function () {\n\t\t\t\tlet ConstantNoValue = {\n\t\t\t\t\ttypeid: \"ConstantTest:ConstantNoValue-1.0.0\",\n\t\t\t\t\tconstants: [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tid: \"map\",\n\t\t\t\t\t\t\ttypeid: \"Int32\",\n\t\t\t\t\t\t\tcontext: \"map\",\n\t\t\t\t\t\t\tcontextKeyType: \"badvalue\",\n\t\t\t\t\t\t\tvalue: {\n\t\t\t\t\t\t\t\t\"SimpleTest:ConstantTemplate1-1.0.0\": 1,\n\t\t\t\t\t\t\t\t\"SimpleTest:ConstantTemplate2-1.0.0\": -1,\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t],\n\t\t\t\t};\n\n\t\t\t\treturn validate(\n\t\t\t\t\tfunction (result) {\n\t\t\t\t\t\texpect(result.isValid).to.equal(false);\n\t\t\t\t\t\texpect(result.errors.length).to.equal(1);\n\t\t\t\t\t\texpect(result.errors[0].message).to.include(\n\t\t\t\t\t\t\t\"should match one of the following: typeid,string\",\n\t\t\t\t\t\t);\n\t\t\t\t\t\treturn result;\n\t\t\t\t\t},\n\t\t\t\t\tConstantNoValue,\n\t\t\t\t\tnull,\n\t\t\t\t\ttrue,\n\t\t\t\t);\n\t\t\t});\n\n\t\t\tit(\"should fail if constant map with context key type typeid has invalid typeids as keys\", function () {\n\t\t\t\tlet ConstantMapWithBadKeys = {\n\t\t\t\t\ttypeid: \"ConstantTest:ConstantMapWithBadKeys-1.0.0\",\n\t\t\t\t\tconstants: [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tid: \"map\",\n\t\t\t\t\t\t\ttypeid: \"Int32\",\n\t\t\t\t\t\t\tcontext: \"map\",\n\t\t\t\t\t\t\tcontextKeyType: \"typeid\",\n\t\t\t\t\t\t\tvalue: { NotATypeId: 1, AlsoNotATypeId: -1 },\n\t\t\t\t\t\t},\n\t\t\t\t\t],\n\t\t\t\t};\n\n\t\t\t\tlet expectations = function (result) {\n\t\t\t\t\texpect(result.isValid).to.equal(false);\n\t\t\t\t\texpect(result.errors.length).to.equal(2);\n\t\t\t\t\texpect(result.errors[0].message).to.include(MSG.KEY_MUST_BE_TYPEID + \"NotATypeId\");\n\t\t\t\t\texpect(result.errors[1].message).to.include(\n\t\t\t\t\t\tMSG.KEY_MUST_BE_TYPEID + \"AlsoNotATypeId\",\n\t\t\t\t\t);\n\n\t\t\t\t\treturn result;\n\t\t\t\t};\n\n\t\t\t\treturn validate(expectations, ConstantMapWithBadKeys, null, true);\n\t\t\t});\n\n\t\t\tit(\"should fail if map with context key type typeid is not constant\", function () {\n\t\t\t\tlet ConstantMapWithProperty = {\n\t\t\t\t\ttypeid: \"ConstantTest:Outerprop-1.0.0\",\n\t\t\t\t\tproperties: [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tid: \"map\",\n\t\t\t\t\t\t\ttypeid: \"Int32\",\n\t\t\t\t\t\t\tcontext: \"map\",\n\t\t\t\t\t\t\tcontextKeyType: \"typeid\",\n\t\t\t\t\t\t\tvalue: {\n\t\t\t\t\t\t\t\t\"SimpleTest:ConstantTemplate1-1.0.0\": 1,\n\t\t\t\t\t\t\t\t\"SimpleTest:ConstantTemplate2-1.0.0\": -1,\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t],\n\t\t\t\t};\n\n\t\t\t\tlet expectations = function (result) {\n\t\t\t\t\tthrow new Error(\"This should not be called\");\n\t\t\t\t};\n\t\t\t\tlet failExpectations = function (error) {\n\t\t\t\t\texpect(error.toString()).to.include(\n\t\t\t\t\t\t\"SV-013: A map with typeids as keys must be constant\",\n\t\t\t\t\t);\n\t\t\t\t};\n\t\t\t\treturn performValidation(false, ConstantMapWithProperty, null, true)\n\t\t\t\t\t.then(expectations)\n\t\t\t\t\t.catch(failExpectations);\n\t\t\t});\n\t\t});\n\n\t\tdescribe(\"Async validation\", function () {\n\t\t\tit(\"can perform context validation asynchronously\", function (done) {\n\t\t\t\tlet schemaValidator = new SchemaValidator();\n\n\t\t\t\tlet templateValidator = new TemplateValidator({\n\t\t\t\t\tinheritsFromAsync: schemaValidator.inheritsFromAsync as any,\n\t\t\t\t\thasSchemaAsync: schemaValidator.hasSchemaAsync as any,\n\t\t\t\t});\n\n\t\t\t\t// Doesn't inherit from 'NamedProperty'. Will cause an error\n\t\t\t\tlet grandParentSchema = {\n\t\t\t\t\ttypeid: \"test:grandparentschema-1.0.0\",\n\t\t\t\t};\n\n\t\t\t\tlet parentSchema = {\n\t\t\t\t\ttypeid: \"test:parentschema-1.0.0\",\n\t\t\t\t\tinherits: [\"test:grandparentschema-1.0.0\"],\n\t\t\t\t};\n\n\t\t\t\tlet childSchema = {\n\t\t\t\t\ttypeid: \"test:childchema-1.0.0\",\n\t\t\t\t\tproperties: [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tid: \"set\",\n\t\t\t\t\t\t\ttypeid: \"test:parentschema-1.0.0\",\n\t\t\t\t\t\t\tcontext: \"set\",\n\t\t\t\t\t\t},\n\t\t\t\t\t],\n\t\t\t\t};\n\n\t\t\t\tschemaValidator.register(grandParentSchema);\n\t\t\t\tschemaValidator.register(parentSchema);\n\n\t\t\t\ttemplateValidator.validateAsync(childSchema as any).then(\n\t\t\t\t\t() => {\n\t\t\t\t\t\tdone(new Error(\"Should not be valid!\"));\n\t\t\t\t\t},\n\t\t\t\t\t(error) => {\n\t\t\t\t\t\texpect(error).to.exist;\n\t\t\t\t\t\tdone();\n\t\t\t\t\t},\n\t\t\t\t);\n\t\t\t});\n\t\t});\n\t});\n})();\n"]}
1
+ {"version":3,"file":"templateValidator.spec.js","sourceRoot":"","sources":["../../../src/test/validator/templateValidator.spec.ts"],"names":[],"mappings":"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","sourcesContent":["/*!\n * Copyright (c) Microsoft Corporation and contributors. All rights reserved.\n * Licensed under the MIT License.\n */\n\n/* eslint no-unused-expressions: 0 */\n\n// Lint disable to avoid needing to place `async` on many test functions\n// as validity of testing is in general questionable and trying to avoid\n// changes.\n/* eslint-disable @typescript-eslint/promise-function-async */\n\n/**\n * @fileoverview In this file, we will test template validation.\n */\n\nimport { constants } from \"@fluid-experimental/property-common\";\nimport { expect } from \"chai\";\nimport semver from \"semver\";\n\nimport { TemplateValidator } from \"../../templateValidator.js\";\nimport type { SchemaValidationResult } from \"../../validationResultBuilder.js\";\nimport { SchemaValidator } from \"../schemaValidator.js\";\nimport {\n\tbadInvalidSemverInTypeid,\n\tbadMissingSemverInTypeid,\n\tbadPrimitiveTypeid,\n\tgoodPointId,\n\tgoodReservedTypes,\n\tgoodUIBorder,\n} from \"../schemas/index.js\";\n\n(function () {\n\tconst MSG = constants.MSG;\n\n\tconst performValidation = function (\n\t\tasync: boolean,\n\t\ttemplate,\n\t\ttemplatePrevious,\n\t\tskipSemver,\n\t\tasyncErrorMessage?,\n\t): Promise<SchemaValidationResult> {\n\t\tlet schemaValidator = new SchemaValidator();\n\n\t\t// @ts-expect-error - per the catch and no throw below\n\t\treturn async\n\t\t\t? schemaValidator\n\t\t\t\t\t.validate(template, templatePrevious, async, skipSemver)\n\t\t\t\t\t.catch((error) => {\n\t\t\t\t\t\texpect(error.message).to.have.string(asyncErrorMessage);\n\t\t\t\t\t\t// This really should re-throw the error. As it stands this\n\t\t\t\t\t\t// catch returns `undefined` which is not SchemaValidationResult.\n\t\t\t\t\t\t// Throwing will cause \"fail: previous template: invalid semver\"\n\t\t\t\t\t\t// test case to fail with uncaught error.\n\t\t\t\t\t\t// This also has impact on the malformed validate function below.\n\t\t\t\t\t\t// throw error;\n\t\t\t\t\t})\n\t\t\t: // A better pattern is simply Promise.resolve(...). However without all callers\n\t\t\t\t// properly specifying they are `async` (lint disabled for file), they may fail.\n\t\t\t\t// In particular see test case\n\t\t\t\t// \"should fail if map with context key type typeid is not constant\"\n\t\t\t\tnew Promise((resolve) => {\n\t\t\t\t\tresolve(schemaValidator.validate(template, templatePrevious, async, skipSemver));\n\t\t\t\t});\n\t};\n\n\t// Performs both synchronous and asynchronous validation\n\tlet validate = function (\n\t\texpectations: (result: SchemaValidationResult) => SchemaValidationResult,\n\t\ttemplate?,\n\t\ttemplatePrevious?,\n\t\tskipSemver?,\n\t\tasyncErrorMessage?,\n\t) {\n\t\treturn performValidation(false, template, templatePrevious, skipSemver)\n\t\t\t.then(expectations)\n\t\t\t.then(\n\t\t\t\t// This patten is invalid. The `then` parameter is expected to be callable.\n\t\t\t\t// Instead performValidation is called and its result is is called. Or at least\n\t\t\t\t// should be. As set up the following .then is executed (apparently) on the\n\t\t\t\t// results of the prior performValidation. This could be address with this prefix:\n\t\t\t\t// async () =>\n\t\t\t\t// However doing so causes tests to fail. Testing coming through here appears\n\t\t\t\t// invalid.\n\t\t\t\t// @ts-expect-error\n\t\t\t\tperformValidation(true, template, templatePrevious, skipSemver, asyncErrorMessage),\n\t\t\t)\n\t\t\t.then(expectations);\n\t};\n\n\tdescribe(\"Template Validation\", function () {\n\t\t// --- INPUT ---\n\t\tdescribe(\"input validation\", function () {\n\t\t\tit(\"fail: empty template\", function () {\n\t\t\t\tlet expectations = function (result) {\n\t\t\t\t\texpect(result).property(\"isValid\", false);\n\t\t\t\t\texpect(result.errors.length).to.be.at.least(1);\n\t\t\t\t\texpect(result.errors[0].message).to.have.string(MSG.NO_TEMPLATE);\n\t\t\t\t\treturn result;\n\t\t\t\t};\n\t\t\t\treturn validate(expectations);\n\t\t\t});\n\n\t\t\tit(\"fail: template with no typeid\", function () {\n\t\t\t\tlet expectations = function (result) {\n\t\t\t\t\texpect(result).property(\"isValid\", false);\n\t\t\t\t\texpect(result.errors.length).to.be.at.least(1);\n\t\t\t\t\texpect(result.errors[0].message).to.have.string(MSG.MISSING_TYPE_ID);\n\t\t\t\t\treturn result;\n\t\t\t\t};\n\t\t\t\treturn validate(expectations, {});\n\t\t\t});\n\t\t});\n\n\t\t// --- TYPEID ---\n\t\tdescribe(\"typeid validation\", function () {\n\t\t\tit(\"pass: valid typeid\", function () {\n\t\t\t\tlet template = JSON.parse(JSON.stringify(goodPointId.templateSchema));\n\n\t\t\t\tlet expectations = function (result) {\n\t\t\t\t\texpect(result).property(\"isValid\", true);\n\t\t\t\t\texpect(result.typeid).to.equal(template.typeid);\n\t\t\t\t\texpect(result.errors).to.be.empty;\n\t\t\t\t\texpect(result.warnings).to.be.empty;\n\t\t\t\t\treturn result;\n\t\t\t\t};\n\n\t\t\t\treturn validate(expectations, template);\n\t\t\t});\n\n\t\t\tit(\"fail: missing semver\", function () {\n\t\t\t\tlet template = JSON.parse(JSON.stringify(badMissingSemverInTypeid.templateSchema));\n\t\t\t\tlet expectations = function (result) {\n\t\t\t\t\texpect(result).property(\"isValid\", false);\n\t\t\t\t\texpect(result.typeid).to.equal(template.typeid);\n\t\t\t\t\texpect(result.errors.length).to.be.at.least(1);\n\t\t\t\t\texpect(result.errors[0].message).to.have.string(\n\t\t\t\t\t\t\"'TeamLeoValidation2:PointID' is not valid\",\n\t\t\t\t\t);\n\t\t\t\t\texpect(result.errors[0].instancePath).to.equal(\"/typeid\");\n\t\t\t\t\treturn result;\n\t\t\t\t};\n\t\t\t\treturn validate(expectations, template);\n\t\t\t});\n\n\t\t\tit(\"fail: invalid semver 1\", function () {\n\t\t\t\tlet template = JSON.parse(JSON.stringify(badInvalidSemverInTypeid.templateSchema));\n\n\t\t\t\tlet expectations = function (result) {\n\t\t\t\t\texpect(result).property(\"isValid\", false);\n\t\t\t\t\texpect(result.typeid).to.equal(template.typeid);\n\t\t\t\t\texpect(result.errors.length).to.be.at.least(1);\n\t\t\t\t\texpect(result.errors[0].instancePath).to.equal(\"/typeid\");\n\t\t\t\t\treturn result;\n\t\t\t\t};\n\n\t\t\t\treturn validate(expectations, template);\n\t\t\t});\n\n\t\t\tit(\"fail: invalid semver 2\", function () {\n\t\t\t\tlet template = JSON.parse(JSON.stringify(badInvalidSemverInTypeid.templateSchema));\n\t\t\t\ttemplate.typeid = \"TeamLeoValidation2:PointID-1.0.01\";\n\t\t\t\tlet expectations = function (result) {\n\t\t\t\t\texpect(result).property(\"isValid\", false);\n\t\t\t\t\texpect(result.typeid).to.equal(template.typeid);\n\t\t\t\t\texpect(result.errors.length).to.be.at.least(1);\n\t\t\t\t\texpect(result.errors[0].message).to.have.string(MSG.INVALID_VERSION_1);\n\t\t\t\t\treturn result;\n\t\t\t\t};\n\t\t\t\treturn validate(expectations, template);\n\t\t\t});\n\n\t\t\tit(\"fail: previous template: invalid semver\", function () {\n\t\t\t\tlet templatePrevious = JSON.parse(JSON.stringify(goodPointId.templateSchema));\n\t\t\t\tlet template = JSON.parse(JSON.stringify(templatePrevious));\n\t\t\t\tlet badTypeId = \"TeamLeoValidation2:PointID-1.0.0.1\";\n\t\t\t\ttemplatePrevious.typeid = badTypeId;\n\t\t\t\tlet expectations = function (result) {\n\t\t\t\t\texpect(result).property(\"isValid\", false);\n\t\t\t\t\texpect(result.typeid).to.equal(badTypeId);\n\t\t\t\t\texpect(result.errors.length).to.be.at.least(1);\n\t\t\t\t\texpect(result.errors[0].message).to.have.string(`'${badTypeId}' is not valid`);\n\t\t\t\t\treturn result;\n\t\t\t\t};\n\t\t\t\treturn validate(\n\t\t\t\t\texpectations,\n\t\t\t\t\ttemplate,\n\t\t\t\t\ttemplatePrevious,\n\t\t\t\t\tfalse,\n\t\t\t\t\t\"Invalid Version: 1.0.0.1\",\n\t\t\t\t);\n\t\t\t});\n\t\t});\n\n\t\t// --- Template versioning ---\n\t\tdescribe(\"template versioning\", function () {\n\t\t\tit(\"fail: version regression: 1.0.0 -> 0.9.9\", function () {\n\t\t\t\tlet templatePrevious = JSON.parse(JSON.stringify(goodPointId.templateSchema));\n\t\t\t\tlet template = JSON.parse(JSON.stringify(templatePrevious));\n\t\t\t\ttemplate.typeid = \"TeamLeoValidation2:PointID-0.9.9\";\n\t\t\t\tlet expectations = function (result) {\n\t\t\t\t\texpect(result).property(\"isValid\", false);\n\t\t\t\t\texpect(result.errors.length).to.be.at.least(1);\n\t\t\t\t\texpect(result.errors[0].message).to.have.string(MSG.VERSION_REGRESSION_1);\n\t\t\t\t\treturn result;\n\t\t\t\t};\n\t\t\t\treturn validate(expectations, template, templatePrevious);\n\t\t\t});\n\n\t\t\tdescribe(\"same version\", function () {\n\t\t\t\tit(\"pass: same content\", function () {\n\t\t\t\t\tlet templatePrevious = JSON.parse(JSON.stringify(goodPointId.templateSchema));\n\t\t\t\t\tlet template = JSON.parse(JSON.stringify(templatePrevious));\n\t\t\t\t\tlet expectations = function (result) {\n\t\t\t\t\t\texpect(result).property(\"isValid\", true);\n\t\t\t\t\t\texpect(result.errors).to.be.empty;\n\t\t\t\t\t\texpect(result.warnings).to.be.empty;\n\t\t\t\t\t\treturn result;\n\t\t\t\t\t};\n\t\t\t\t\treturn validate(expectations, template, templatePrevious);\n\t\t\t\t});\n\n\t\t\t\tit(\"fail: changed 'annotation'\", function () {\n\t\t\t\t\tlet templatePrevious = JSON.parse(JSON.stringify(goodPointId.templateSchema));\n\t\t\t\t\ttemplatePrevious.annotation = { description: \"Test\" };\n\t\t\t\t\tlet template = JSON.parse(JSON.stringify(templatePrevious));\n\t\t\t\t\ttemplate.annotation.description = \"Changed!\";\n\t\t\t\t\tlet expectations = function (result) {\n\t\t\t\t\t\texpect(result).property(\"isValid\", false);\n\t\t\t\t\t\texpect(result.errors.length).to.be.at.least(1);\n\t\t\t\t\t\texpect(result.errors[0].message).to.have.string(\n\t\t\t\t\t\t\tMSG.MODIFIED_TEMPLATE_SAME_VERSION_1,\n\t\t\t\t\t\t);\n\t\t\t\t\t\treturn result;\n\t\t\t\t\t};\n\n\t\t\t\t\treturn validate(expectations, template, templatePrevious);\n\t\t\t\t});\n\n\t\t\t\tit(\"fail: deleted 'annotation'\", function () {\n\t\t\t\t\tlet templatePrevious = JSON.parse(JSON.stringify(goodPointId.templateSchema));\n\t\t\t\t\ttemplatePrevious.annotation = { description: \"Test\" };\n\t\t\t\t\tlet template = JSON.parse(JSON.stringify(templatePrevious));\n\t\t\t\t\tdelete template.annotation;\n\n\t\t\t\t\tlet expectations = function (result) {\n\t\t\t\t\t\texpect(result).property(\"isValid\", false);\n\t\t\t\t\t\texpect(result.errors.length).to.be.at.least(1);\n\t\t\t\t\t\texpect(result.errors[0].message).to.have.string(\n\t\t\t\t\t\t\tMSG.MODIFIED_TEMPLATE_SAME_VERSION_1,\n\t\t\t\t\t\t);\n\t\t\t\t\t\treturn result;\n\t\t\t\t\t};\n\t\t\t\t\treturn validate(expectations, template, templatePrevious);\n\t\t\t\t});\n\n\t\t\t\tit(\"fail: added 'annotation'\", function () {\n\t\t\t\t\tlet templatePrevious = JSON.parse(JSON.stringify(goodPointId.templateSchema));\n\t\t\t\t\tlet template = JSON.parse(JSON.stringify(templatePrevious));\n\t\t\t\t\ttemplate.annotation = { description: \"Test\" };\n\n\t\t\t\t\tlet expectations = function (result) {\n\t\t\t\t\t\texpect(result).property(\"isValid\", false);\n\t\t\t\t\t\texpect(result.errors.length).to.be.at.least(1);\n\t\t\t\t\t\texpect(result.errors[0].message).to.have.string(\n\t\t\t\t\t\t\tMSG.MODIFIED_TEMPLATE_SAME_VERSION_1,\n\t\t\t\t\t\t);\n\t\t\t\t\t\treturn result;\n\t\t\t\t\t};\n\t\t\t\t\treturn validate(expectations, template, templatePrevious);\n\t\t\t\t});\n\n\t\t\t\tit(\"fail: changed 'value'\", function () {\n\t\t\t\t\tlet templatePrevious = JSON.parse(JSON.stringify(goodUIBorder.templateSchema));\n\t\t\t\t\tlet template = JSON.parse(JSON.stringify(templatePrevious));\n\t\t\t\t\ttemplate.properties[0].properties[0].value = 123456;\n\n\t\t\t\t\tlet expectations = function (result) {\n\t\t\t\t\t\texpect(result).property(\"isValid\", false);\n\t\t\t\t\t\texpect(result.errors.length).to.be.at.least(1);\n\t\t\t\t\t\texpect(result.errors[0].message).to.have.string(\n\t\t\t\t\t\t\tMSG.MODIFIED_TEMPLATE_SAME_VERSION_1,\n\t\t\t\t\t\t);\n\t\t\t\t\t\treturn result;\n\t\t\t\t\t};\n\t\t\t\t\treturn validate(expectations, template, templatePrevious);\n\t\t\t\t});\n\n\t\t\t\tit(\"fail: changed 'id'\", function () {\n\t\t\t\t\tlet templatePrevious = JSON.parse(JSON.stringify(goodPointId.templateSchema));\n\t\t\t\t\tlet template = JSON.parse(JSON.stringify(templatePrevious));\n\t\t\t\t\ttemplate.properties[0].properties[0].id = \"xx\";\n\n\t\t\t\t\tlet expectations = function (result) {\n\t\t\t\t\t\texpect(result).property(\"isValid\", false);\n\t\t\t\t\t\texpect(result.errors.length).to.be.at.least(1);\n\t\t\t\t\t\texpect(result.errors[0].message).to.have.string(\n\t\t\t\t\t\t\tMSG.MODIFIED_TEMPLATE_SAME_VERSION_1,\n\t\t\t\t\t\t);\n\t\t\t\t\t\treturn result;\n\t\t\t\t\t};\n\t\t\t\t\treturn validate(expectations, template, templatePrevious);\n\t\t\t\t});\n\n\t\t\t\tit(\"fail: changed 'inherits'\", function () {\n\t\t\t\t\tlet templatePrevious = JSON.parse(JSON.stringify(goodReservedTypes.templateSchema));\n\t\t\t\t\tlet template = JSON.parse(JSON.stringify(templatePrevious));\n\t\t\t\t\ttemplate.inherits = \"Reference<Adsk.Core:Math.Color-1.0.0>\";\n\n\t\t\t\t\tlet expectations = function (result) {\n\t\t\t\t\t\texpect(result).property(\"isValid\", false);\n\t\t\t\t\t\texpect(result.errors.length).to.be.at.least(1);\n\t\t\t\t\t\texpect(result.errors[0].message).to.have.string(\n\t\t\t\t\t\t\tMSG.MODIFIED_TEMPLATE_SAME_VERSION_1,\n\t\t\t\t\t\t);\n\t\t\t\t\t\treturn result;\n\t\t\t\t\t};\n\t\t\t\t\treturn validate(expectations, template, templatePrevious);\n\t\t\t\t});\n\n\t\t\t\tit(\"fail: added property\", function () {\n\t\t\t\t\tlet templatePrevious = JSON.parse(JSON.stringify(goodPointId.templateSchema));\n\t\t\t\t\ttemplatePrevious.annotation = { description: \"Test\" };\n\t\t\t\t\tlet template = JSON.parse(JSON.stringify(templatePrevious));\n\t\t\t\t\ttemplate.properties[0].properties.push({ id: \"newPropId\", typeid: \"Float32\" });\n\n\t\t\t\t\tlet expectations = function (result) {\n\t\t\t\t\t\texpect(result).property(\"isValid\", false);\n\t\t\t\t\t\texpect(result.errors.length).to.be.at.least(1);\n\t\t\t\t\t\texpect(result.errors[0].message).to.have.string(\n\t\t\t\t\t\t\tMSG.MODIFIED_TEMPLATE_SAME_VERSION_1,\n\t\t\t\t\t\t);\n\t\t\t\t\t\treturn result;\n\t\t\t\t\t};\n\t\t\t\t\treturn validate(expectations, template, templatePrevious);\n\t\t\t\t});\n\n\t\t\t\tit(\"fail: deleted property\", function () {\n\t\t\t\t\tlet templatePrevious = JSON.parse(JSON.stringify(goodPointId.templateSchema));\n\t\t\t\t\ttemplatePrevious.annotation = { description: \"Test\" };\n\t\t\t\t\tlet template = JSON.parse(JSON.stringify(templatePrevious));\n\t\t\t\t\ttemplate.properties[0].properties.pop();\n\n\t\t\t\t\tlet expectations = function (result) {\n\t\t\t\t\t\texpect(result).property(\"isValid\", false);\n\t\t\t\t\t\texpect(result.errors.length).to.be.at.least(1);\n\t\t\t\t\t\texpect(result.errors[0].message).to.have.string(\n\t\t\t\t\t\t\tMSG.MODIFIED_TEMPLATE_SAME_VERSION_1,\n\t\t\t\t\t\t);\n\t\t\t\t\t\treturn result;\n\t\t\t\t\t};\n\t\t\t\t\treturn validate(expectations, template, templatePrevious);\n\t\t\t\t});\n\t\t\t});\n\n\t\t\tdescribe(\"incremented patch level\", function () {\n\t\t\t\tit(\"pass: same content\", function () {\n\t\t\t\t\tlet templatePrevious = JSON.parse(JSON.stringify(goodPointId.templateSchema));\n\t\t\t\t\tlet template = JSON.parse(JSON.stringify(templatePrevious));\n\t\t\t\t\ttemplate.typeid = \"TeamLeoValidation2:PointID-\" + semver.inc(\"1.0.0\", \"patch\");\n\n\t\t\t\t\tlet expectations = function (result) {\n\t\t\t\t\t\texpect(result).property(\"isValid\", true);\n\t\t\t\t\t\texpect(result.errors).to.be.empty;\n\t\t\t\t\t\texpect(result.warnings).to.be.empty;\n\t\t\t\t\t\treturn result;\n\t\t\t\t\t};\n\t\t\t\t\treturn validate(expectations, template, templatePrevious);\n\t\t\t\t});\n\n\t\t\t\tit(\"pass: unstable with major content change: 0.0.1 -> 0.0.2\", function () {\n\t\t\t\t\tlet templatePrevious = JSON.parse(JSON.stringify(goodPointId.templateSchema));\n\t\t\t\t\ttemplatePrevious.typeid = \"TeamLeoValidation2:PointID-0.0.1\";\n\t\t\t\t\tlet template = JSON.parse(JSON.stringify(templatePrevious));\n\t\t\t\t\ttemplate.typeid = \"TeamLeoValidation2:PointID-0.0.2\";\n\t\t\t\t\ttemplate.properties[1].typeid = \"TeamLeoValidation2:ColorID-9.0.0\";\n\n\t\t\t\t\tlet expectations = function (result) {\n\t\t\t\t\t\texpect(result).property(\"isValid\", true);\n\t\t\t\t\t\texpect(result.errors).to.be.empty;\n\t\t\t\t\t\texpect(result.warnings).to.be.empty;\n\t\t\t\t\t\treturn result;\n\t\t\t\t\t};\n\t\t\t\t\treturn validate(expectations, template, templatePrevious);\n\t\t\t\t});\n\n\t\t\t\tit(\"pass: changed 'annotation'\", function () {\n\t\t\t\t\tlet templatePrevious = JSON.parse(JSON.stringify(goodPointId.templateSchema));\n\t\t\t\t\ttemplatePrevious.annotation = { description: \"Test\" };\n\t\t\t\t\tlet template = JSON.parse(JSON.stringify(templatePrevious));\n\t\t\t\t\ttemplate.typeid = \"TeamLeoValidation2:PointID-\" + semver.inc(\"1.0.0\", \"patch\");\n\t\t\t\t\ttemplate.annotation.description = \"Changed!\";\n\n\t\t\t\t\tlet expectations = function (result) {\n\t\t\t\t\t\texpect(result).property(\"isValid\", true);\n\t\t\t\t\t\texpect(result.errors).to.be.empty;\n\t\t\t\t\t\texpect(result.warnings).to.be.empty;\n\t\t\t\t\t\treturn result;\n\t\t\t\t\t};\n\t\t\t\t\treturn validate(expectations, template, templatePrevious);\n\t\t\t\t});\n\n\t\t\t\tit(\"pass: deleted 'annotation'\", function () {\n\t\t\t\t\tlet templatePrevious = JSON.parse(JSON.stringify(goodPointId.templateSchema));\n\t\t\t\t\ttemplatePrevious.annotation = { description: \"Test\" };\n\t\t\t\t\tlet template = JSON.parse(JSON.stringify(templatePrevious));\n\t\t\t\t\ttemplate.typeid = \"TeamLeoValidation2:PointID-\" + semver.inc(\"1.0.0\", \"patch\");\n\t\t\t\t\tdelete template.annotation;\n\n\t\t\t\t\tlet expectations = function (result) {\n\t\t\t\t\t\texpect(result).property(\"isValid\", true);\n\t\t\t\t\t\texpect(result.errors).to.be.empty;\n\t\t\t\t\t\texpect(result.warnings).to.be.empty;\n\t\t\t\t\t\treturn result;\n\t\t\t\t\t};\n\t\t\t\t\treturn validate(expectations, template, templatePrevious);\n\t\t\t\t});\n\n\t\t\t\tit(\"pass: added 'annotation'\", function () {\n\t\t\t\t\tlet templatePrevious = JSON.parse(JSON.stringify(goodPointId.templateSchema));\n\t\t\t\t\tlet template = JSON.parse(JSON.stringify(templatePrevious));\n\t\t\t\t\ttemplate.typeid = \"TeamLeoValidation2:PointID-\" + semver.inc(\"1.0.0\", \"patch\");\n\t\t\t\t\ttemplate.annotation = { description: \"Test\" };\n\n\t\t\t\t\tlet expectations = function (result) {\n\t\t\t\t\t\texpect(result).property(\"isValid\", true);\n\t\t\t\t\t\texpect(result.errors).to.be.empty;\n\t\t\t\t\t\texpect(result.warnings).to.be.empty;\n\t\t\t\t\t\treturn result;\n\t\t\t\t\t};\n\t\t\t\t\treturn validate(expectations, template, templatePrevious);\n\t\t\t\t});\n\n\t\t\t\tit(\"warn: changed 'value'\", function () {\n\t\t\t\t\tlet templatePrevious = JSON.parse(JSON.stringify(goodUIBorder.templateSchema));\n\t\t\t\t\tlet template = JSON.parse(JSON.stringify(templatePrevious));\n\t\t\t\t\ttemplate.typeid = \"Adsk.Core:UI.Border-\" + semver.inc(\"1.0.0\", \"patch\");\n\t\t\t\t\ttemplate.properties[0].properties[0].value = 123456;\n\n\t\t\t\t\tlet expectations = function (result) {\n\t\t\t\t\t\texpect(result).property(\"isValid\", true);\n\t\t\t\t\t\texpect(result.errors).to.be.empty;\n\t\t\t\t\t\texpect(result.warnings.length).to.be.at.least(1);\n\t\t\t\t\t\texpect(result.warnings[0]).to.have.string(MSG.CHANGE_LEVEL_TOO_LOW_1);\n\t\t\t\t\t\treturn result;\n\t\t\t\t\t};\n\t\t\t\t\treturn validate(expectations, template, templatePrevious);\n\t\t\t\t});\n\n\t\t\t\tit(\"warn: changed 'id' (delete, add)\", function () {\n\t\t\t\t\tlet templatePrevious = JSON.parse(JSON.stringify(goodPointId.templateSchema));\n\t\t\t\t\tlet template = JSON.parse(JSON.stringify(templatePrevious));\n\t\t\t\t\ttemplate.typeid = \"TeamLeoValidation2:PointID-\" + semver.inc(\"1.0.0\", \"patch\");\n\t\t\t\t\ttemplate.properties[0].properties[0].id = \"xx\";\n\n\t\t\t\t\tlet expectations = function (result) {\n\t\t\t\t\t\texpect(result).property(\"isValid\", true);\n\t\t\t\t\t\texpect(result.errors).to.be.empty;\n\t\t\t\t\t\texpect(result.warnings.length).to.be.at.least(2); // 1st for the delete and the 2nd for the add\n\t\t\t\t\t\texpect(result.warnings[0]).to.have.string(MSG.CHANGE_LEVEL_TOO_LOW_1);\n\t\t\t\t\t\treturn result;\n\t\t\t\t\t};\n\t\t\t\t\treturn validate(expectations, template, templatePrevious);\n\t\t\t\t});\n\n\t\t\t\tit(\"warn: changed 'inherits'\", function () {\n\t\t\t\t\tlet templatePrevious = JSON.parse(JSON.stringify(goodReservedTypes.templateSchema));\n\t\t\t\t\tlet template = JSON.parse(JSON.stringify(templatePrevious));\n\t\t\t\t\ttemplate.typeid = \"TeamLeoValidation2:Example-\" + semver.inc(\"1.0.0\", \"patch\");\n\t\t\t\t\ttemplate.inherits = \"Reference<Adsk.Core:Math.Color-1.0.0>\";\n\n\t\t\t\t\tlet expectations = function (result) {\n\t\t\t\t\t\texpect(result).property(\"isValid\", true);\n\t\t\t\t\t\texpect(result.errors).to.be.empty;\n\t\t\t\t\t\texpect(result.warnings.length).to.be.at.least(1);\n\t\t\t\t\t\texpect(result.warnings[0]).to.have.string(MSG.CHANGE_LEVEL_TOO_LOW_1);\n\t\t\t\t\t\treturn result;\n\t\t\t\t\t};\n\t\t\t\t\treturn validate(expectations, template, templatePrevious);\n\t\t\t\t});\n\n\t\t\t\tit(\"warn: added property\", function () {\n\t\t\t\t\tlet templatePrevious = JSON.parse(JSON.stringify(goodPointId.templateSchema));\n\t\t\t\t\ttemplatePrevious.annotation = { description: \"Test\" };\n\t\t\t\t\tlet template = JSON.parse(JSON.stringify(templatePrevious));\n\t\t\t\t\ttemplate.typeid = \"TeamLeoValidation2:PointID-\" + semver.inc(\"1.0.0\", \"patch\");\n\t\t\t\t\ttemplate.properties[0].properties.push({ id: \"newPropId\", typeid: \"Float32\" });\n\n\t\t\t\t\tlet expectations = function (result) {\n\t\t\t\t\t\texpect(result).property(\"isValid\", true);\n\t\t\t\t\t\texpect(result.errors).to.be.empty;\n\t\t\t\t\t\texpect(result.warnings.length).to.be.at.least(1);\n\t\t\t\t\t\texpect(result.warnings[0]).to.have.string(MSG.CHANGE_LEVEL_TOO_LOW_1);\n\t\t\t\t\t\treturn result;\n\t\t\t\t\t};\n\t\t\t\t\treturn validate(expectations, template, templatePrevious);\n\t\t\t\t});\n\n\t\t\t\tit(\"warn: deleted property\", function () {\n\t\t\t\t\tlet templatePrevious = JSON.parse(JSON.stringify(goodPointId.templateSchema));\n\t\t\t\t\ttemplatePrevious.annotation = { description: \"Test\" };\n\t\t\t\t\tlet template = JSON.parse(JSON.stringify(templatePrevious));\n\t\t\t\t\ttemplate.typeid = \"TeamLeoValidation2:PointID-\" + semver.inc(\"1.0.0\", \"patch\");\n\t\t\t\t\ttemplate.properties[0].properties.pop();\n\n\t\t\t\t\tlet expectations = function (result) {\n\t\t\t\t\t\texpect(result).property(\"isValid\", true);\n\t\t\t\t\t\texpect(result.errors).to.be.empty;\n\t\t\t\t\t\texpect(result.warnings.length).to.be.at.least(1);\n\t\t\t\t\t\texpect(result.warnings[0]).to.have.string(MSG.CHANGE_LEVEL_TOO_LOW_1);\n\t\t\t\t\t\treturn result;\n\t\t\t\t\t};\n\t\t\t\t\treturn validate(expectations, template, templatePrevious);\n\t\t\t\t});\n\t\t\t});\n\n\t\t\tdescribe(\"incremented minor level\", function () {\n\t\t\t\tit(\"pass: same content\", function () {\n\t\t\t\t\tlet templatePrevious = JSON.parse(JSON.stringify(goodPointId.templateSchema));\n\t\t\t\t\tlet template = JSON.parse(JSON.stringify(templatePrevious));\n\t\t\t\t\ttemplate.typeid = \"TeamLeoValidation2:PointID-\" + semver.inc(\"1.0.0\", \"minor\");\n\n\t\t\t\t\tlet expectations = function (result) {\n\t\t\t\t\t\texpect(result).property(\"isValid\", true);\n\t\t\t\t\t\texpect(result.errors).to.be.empty;\n\t\t\t\t\t\texpect(result.warnings).to.be.empty;\n\t\t\t\t\t\treturn result;\n\t\t\t\t\t};\n\t\t\t\t\treturn validate(expectations, template, templatePrevious);\n\t\t\t\t});\n\n\t\t\t\tit(\"pass: changed 'annotation'\", function () {\n\t\t\t\t\tlet templatePrevious = JSON.parse(JSON.stringify(goodPointId.templateSchema));\n\t\t\t\t\ttemplatePrevious.annotation = { description: \"Test\" };\n\t\t\t\t\tlet template = JSON.parse(JSON.stringify(templatePrevious));\n\t\t\t\t\ttemplate.typeid = \"TeamLeoValidation2:PointID-\" + semver.inc(\"1.0.0\", \"minor\");\n\t\t\t\t\ttemplate.annotation.description = \"Changed!\";\n\n\t\t\t\t\tlet expectations = function (result) {\n\t\t\t\t\t\texpect(result).property(\"isValid\", true);\n\t\t\t\t\t\texpect(result.errors).to.be.empty;\n\t\t\t\t\t\texpect(result.warnings).to.be.empty;\n\t\t\t\t\t\treturn result;\n\t\t\t\t\t};\n\t\t\t\t\treturn validate(expectations, template, templatePrevious);\n\t\t\t\t});\n\n\t\t\t\tit(\"pass: deleted 'annotation'\", function () {\n\t\t\t\t\tlet templatePrevious = JSON.parse(JSON.stringify(goodPointId.templateSchema));\n\t\t\t\t\ttemplatePrevious.annotation = { description: \"Test\" };\n\t\t\t\t\tlet template = JSON.parse(JSON.stringify(templatePrevious));\n\t\t\t\t\ttemplate.typeid = \"TeamLeoValidation2:PointID-\" + semver.inc(\"1.0.0\", \"minor\");\n\t\t\t\t\tdelete template.annotation;\n\n\t\t\t\t\tlet expectations = function (result) {\n\t\t\t\t\t\texpect(result).property(\"isValid\", true);\n\t\t\t\t\t\texpect(result.errors).to.be.empty;\n\t\t\t\t\t\texpect(result.warnings).to.be.empty;\n\t\t\t\t\t\treturn result;\n\t\t\t\t\t};\n\t\t\t\t\treturn validate(expectations, template, templatePrevious);\n\t\t\t\t});\n\n\t\t\t\tit(\"pass: added 'annotation'\", function () {\n\t\t\t\t\tlet templatePrevious = JSON.parse(JSON.stringify(goodPointId.templateSchema));\n\t\t\t\t\tlet template = JSON.parse(JSON.stringify(templatePrevious));\n\t\t\t\t\ttemplate.typeid = \"TeamLeoValidation2:PointID-\" + semver.inc(\"1.0.0\", \"minor\");\n\t\t\t\t\ttemplate.annotation = { description: \"Test\" };\n\n\t\t\t\t\tlet expectations = function (result) {\n\t\t\t\t\t\texpect(result).property(\"isValid\", true);\n\t\t\t\t\t\texpect(result.errors).to.be.empty;\n\t\t\t\t\t\texpect(result.warnings).to.be.empty;\n\t\t\t\t\t\treturn result;\n\t\t\t\t\t};\n\t\t\t\t\treturn validate(expectations, template, templatePrevious);\n\t\t\t\t});\n\n\t\t\t\tit(\"pass: changed 'value'\", function () {\n\t\t\t\t\tlet templatePrevious = JSON.parse(JSON.stringify(goodUIBorder.templateSchema));\n\t\t\t\t\tlet template = JSON.parse(JSON.stringify(templatePrevious));\n\t\t\t\t\ttemplate.typeid = \"Adsk.Core:UI.Border-\" + semver.inc(\"1.0.0\", \"minor\");\n\t\t\t\t\ttemplate.properties[0].properties[0].value = 123456;\n\n\t\t\t\t\tlet expectations = function (result) {\n\t\t\t\t\t\texpect(result).property(\"isValid\", true);\n\t\t\t\t\t\texpect(result.errors).to.be.empty;\n\t\t\t\t\t\texpect(result.warnings).to.be.empty;\n\t\t\t\t\t\treturn result;\n\t\t\t\t\t};\n\t\t\t\t\treturn validate(expectations, template, templatePrevious);\n\t\t\t\t});\n\n\t\t\t\tit(\"warn: changed 'id' (delete, add)\", function () {\n\t\t\t\t\tlet templatePrevious = JSON.parse(JSON.stringify(goodPointId.templateSchema));\n\t\t\t\t\tlet template = JSON.parse(JSON.stringify(templatePrevious));\n\t\t\t\t\ttemplate.typeid = \"TeamLeoValidation2:PointID-\" + semver.inc(\"1.0.0\", \"minor\");\n\t\t\t\t\ttemplate.properties[0].properties[0].id = \"xx\";\n\n\t\t\t\t\tlet expectations = function (result) {\n\t\t\t\t\t\texpect(result).property(\"isValid\", true);\n\t\t\t\t\t\texpect(result.errors).to.be.empty;\n\t\t\t\t\t\texpect(result.warnings.length).to.be.at.least(1);\n\t\t\t\t\t\texpect(result.warnings[0]).to.have.string(MSG.CHANGE_LEVEL_TOO_LOW_1);\n\t\t\t\t\t\treturn result;\n\t\t\t\t\t};\n\t\t\t\t\treturn validate(expectations, template, templatePrevious);\n\t\t\t\t});\n\n\t\t\t\tit(\"warn: changed 'inherits'\", function () {\n\t\t\t\t\tlet templatePrevious = JSON.parse(JSON.stringify(goodReservedTypes.templateSchema));\n\t\t\t\t\tlet template = JSON.parse(JSON.stringify(templatePrevious));\n\t\t\t\t\ttemplate.typeid = \"TeamLeoValidation2:Example-\" + semver.inc(\"1.0.0\", \"minor\");\n\t\t\t\t\ttemplate.inherits = \"Reference<Adsk.Core:Math.Color-1.0.0>\";\n\n\t\t\t\t\tlet expectations = function (result) {\n\t\t\t\t\t\texpect(result).property(\"isValid\", true);\n\t\t\t\t\t\texpect(result.errors).to.be.empty;\n\t\t\t\t\t\texpect(result.warnings.length).to.be.at.least(1);\n\t\t\t\t\t\texpect(result.warnings[0]).to.have.string(MSG.CHANGE_LEVEL_TOO_LOW_1);\n\t\t\t\t\t\treturn result;\n\t\t\t\t\t};\n\t\t\t\t\treturn validate(expectations, template, templatePrevious);\n\t\t\t\t});\n\n\t\t\t\tit(\"pass: added property\", function () {\n\t\t\t\t\tlet templatePrevious = JSON.parse(JSON.stringify(goodPointId.templateSchema));\n\t\t\t\t\ttemplatePrevious.annotation = { description: \"Test\" };\n\t\t\t\t\tlet template = JSON.parse(JSON.stringify(templatePrevious));\n\t\t\t\t\ttemplate.typeid = \"TeamLeoValidation2:PointID-\" + semver.inc(\"1.0.0\", \"minor\");\n\t\t\t\t\ttemplate.properties[0].properties.push({ id: \"newPropId\", typeid: \"Float32\" });\n\n\t\t\t\t\tlet expectations = function (result) {\n\t\t\t\t\t\texpect(result).property(\"isValid\", true);\n\t\t\t\t\t\texpect(result.errors).to.be.empty;\n\t\t\t\t\t\texpect(result.warnings).to.be.empty;\n\t\t\t\t\t\treturn result;\n\t\t\t\t\t};\n\t\t\t\t\treturn validate(expectations, template, templatePrevious);\n\t\t\t\t});\n\n\t\t\t\tit(\"warn: deleted property\", function () {\n\t\t\t\t\tlet templatePrevious = JSON.parse(JSON.stringify(goodPointId.templateSchema));\n\t\t\t\t\ttemplatePrevious.annotation = { description: \"Test\" };\n\t\t\t\t\tlet template = JSON.parse(JSON.stringify(templatePrevious));\n\t\t\t\t\ttemplate.typeid = \"TeamLeoValidation2:PointID-\" + semver.inc(\"1.0.0\", \"minor\");\n\t\t\t\t\ttemplate.properties[0].properties.pop();\n\n\t\t\t\t\tlet expectations = function (result) {\n\t\t\t\t\t\texpect(result).property(\"isValid\", true);\n\t\t\t\t\t\texpect(result.errors).to.be.empty;\n\t\t\t\t\t\texpect(result.warnings.length).to.be.at.least(1);\n\t\t\t\t\t\texpect(result.warnings[0]).to.have.string(MSG.CHANGE_LEVEL_TOO_LOW_1);\n\t\t\t\t\t\treturn result;\n\t\t\t\t\t};\n\t\t\t\t\treturn validate(expectations, template, templatePrevious);\n\t\t\t\t});\n\t\t\t});\n\n\t\t\tdescribe(\"incremented major level\", function () {\n\t\t\t\tit(\"pass: same content\", function () {\n\t\t\t\t\tlet templatePrevious = JSON.parse(JSON.stringify(goodPointId.templateSchema));\n\t\t\t\t\tlet template = JSON.parse(JSON.stringify(templatePrevious));\n\t\t\t\t\ttemplate.typeid = \"TeamLeoValidation2:PointID-\" + semver.inc(\"1.0.0\", \"major\");\n\n\t\t\t\t\tlet expectations = function (result) {\n\t\t\t\t\t\texpect(result).property(\"isValid\", true);\n\t\t\t\t\t\texpect(result.errors).to.be.empty;\n\t\t\t\t\t\texpect(result.warnings).to.be.empty;\n\t\t\t\t\t\treturn result;\n\t\t\t\t\t};\n\t\t\t\t\treturn validate(expectations, template, templatePrevious);\n\t\t\t\t});\n\n\t\t\t\tit(\"pass: changed 'annotation'\", function () {\n\t\t\t\t\tlet templatePrevious = JSON.parse(JSON.stringify(goodPointId.templateSchema));\n\t\t\t\t\ttemplatePrevious.annotation = { description: \"Test\" };\n\t\t\t\t\tlet template = JSON.parse(JSON.stringify(templatePrevious));\n\t\t\t\t\ttemplate.typeid = \"TeamLeoValidation2:PointID-\" + semver.inc(\"1.0.0\", \"major\");\n\t\t\t\t\ttemplate.annotation.description = \"Changed!\";\n\n\t\t\t\t\tlet expectations = function (result) {\n\t\t\t\t\t\texpect(result).property(\"isValid\", true);\n\t\t\t\t\t\texpect(result.errors).to.be.empty;\n\t\t\t\t\t\texpect(result.warnings).to.be.empty;\n\t\t\t\t\t\treturn result;\n\t\t\t\t\t};\n\t\t\t\t\treturn validate(expectations, template, templatePrevious);\n\t\t\t\t});\n\n\t\t\t\tit(\"pass: deleted 'annotation'\", function () {\n\t\t\t\t\tlet templatePrevious = JSON.parse(JSON.stringify(goodPointId.templateSchema));\n\t\t\t\t\ttemplatePrevious.annotation = { description: \"Test\" };\n\t\t\t\t\tlet template = JSON.parse(JSON.stringify(templatePrevious));\n\t\t\t\t\ttemplate.typeid = \"TeamLeoValidation2:PointID-\" + semver.inc(\"1.0.0\", \"major\");\n\t\t\t\t\tdelete template.annotation;\n\n\t\t\t\t\tlet expectations = function (result) {\n\t\t\t\t\t\texpect(result).property(\"isValid\", true);\n\t\t\t\t\t\texpect(result.errors).to.be.empty;\n\t\t\t\t\t\texpect(result.warnings).to.be.empty;\n\t\t\t\t\t\treturn result;\n\t\t\t\t\t};\n\t\t\t\t\treturn validate(expectations, template, templatePrevious);\n\t\t\t\t});\n\n\t\t\t\tit(\"pass: added 'annotation'\", function () {\n\t\t\t\t\tlet templatePrevious = JSON.parse(JSON.stringify(goodPointId.templateSchema));\n\t\t\t\t\tlet template = JSON.parse(JSON.stringify(templatePrevious));\n\t\t\t\t\ttemplate.typeid = \"TeamLeoValidation2:PointID-\" + semver.inc(\"1.0.0\", \"major\");\n\t\t\t\t\ttemplate.annotation = { description: \"Test\" };\n\n\t\t\t\t\tlet expectations = function (result) {\n\t\t\t\t\t\texpect(result).property(\"isValid\", true);\n\t\t\t\t\t\texpect(result.errors).to.be.empty;\n\t\t\t\t\t\texpect(result.warnings).to.be.empty;\n\t\t\t\t\t\treturn result;\n\t\t\t\t\t};\n\t\t\t\t\treturn validate(expectations, template, templatePrevious);\n\t\t\t\t});\n\n\t\t\t\tit(\"pass: changed 'value'\", function () {\n\t\t\t\t\tlet templatePrevious = JSON.parse(JSON.stringify(goodUIBorder.templateSchema));\n\t\t\t\t\tlet template = JSON.parse(JSON.stringify(templatePrevious));\n\t\t\t\t\ttemplate.typeid = \"Adsk.Core:UI.Border-\" + semver.inc(\"1.0.0\", \"major\");\n\t\t\t\t\ttemplate.properties[0].properties[0].value = 123456;\n\n\t\t\t\t\tlet expectations = function (result) {\n\t\t\t\t\t\texpect(result).property(\"isValid\", true);\n\t\t\t\t\t\texpect(result.errors).to.be.empty;\n\t\t\t\t\t\texpect(result.warnings).to.be.empty;\n\t\t\t\t\t\treturn result;\n\t\t\t\t\t};\n\t\t\t\t\treturn validate(expectations, template, templatePrevious);\n\t\t\t\t});\n\n\t\t\t\tit(\"pass: changed 'id' (delete, add)\", function () {\n\t\t\t\t\tlet templatePrevious = JSON.parse(JSON.stringify(goodPointId.templateSchema));\n\t\t\t\t\tlet template = JSON.parse(JSON.stringify(templatePrevious));\n\t\t\t\t\ttemplate.typeid = \"TeamLeoValidation2:PointID-\" + semver.inc(\"1.0.0\", \"major\");\n\t\t\t\t\ttemplate.properties[0].properties[0].id = \"xx\";\n\n\t\t\t\t\tlet expectations = function (result) {\n\t\t\t\t\t\texpect(result).property(\"isValid\", true);\n\t\t\t\t\t\texpect(result.errors).to.be.empty;\n\t\t\t\t\t\texpect(result.warnings).to.be.empty;\n\t\t\t\t\t\treturn result;\n\t\t\t\t\t};\n\t\t\t\t\treturn validate(expectations, template, templatePrevious);\n\t\t\t\t});\n\n\t\t\t\tit(\"pass: changed 'inherits'\", function () {\n\t\t\t\t\tlet templatePrevious = JSON.parse(JSON.stringify(goodReservedTypes.templateSchema));\n\t\t\t\t\tlet template = JSON.parse(JSON.stringify(templatePrevious));\n\t\t\t\t\ttemplate.typeid = \"TeamLeoValidation2:Example-\" + semver.inc(\"1.0.0\", \"major\");\n\t\t\t\t\ttemplate.inherits = \"Reference<Adsk.Core:Math.Color-1.0.0>\";\n\n\t\t\t\t\tlet expectations = function (result) {\n\t\t\t\t\t\texpect(result).property(\"isValid\", true);\n\t\t\t\t\t\texpect(result.errors).to.be.empty;\n\t\t\t\t\t\texpect(result.warnings).to.be.empty;\n\t\t\t\t\t\treturn result;\n\t\t\t\t\t};\n\t\t\t\t\treturn validate(expectations, template, templatePrevious);\n\t\t\t\t});\n\n\t\t\t\tit(\"pass: added property\", function () {\n\t\t\t\t\tlet templatePrevious = JSON.parse(JSON.stringify(goodPointId.templateSchema));\n\t\t\t\t\ttemplatePrevious.annotation = { description: \"Test\" };\n\t\t\t\t\tlet template = JSON.parse(JSON.stringify(templatePrevious));\n\t\t\t\t\ttemplate.typeid = \"TeamLeoValidation2:PointID-\" + semver.inc(\"1.0.0\", \"major\");\n\t\t\t\t\ttemplate.properties[0].properties.push({ id: \"newPropId\", typeid: \"Float32\" });\n\n\t\t\t\t\tlet expectations = function (result) {\n\t\t\t\t\t\texpect(result).property(\"isValid\", true);\n\t\t\t\t\t\texpect(result.errors).to.be.empty;\n\t\t\t\t\t\texpect(result.warnings).to.be.empty;\n\t\t\t\t\t\treturn result;\n\t\t\t\t\t};\n\t\t\t\t\treturn validate(expectations, template, templatePrevious);\n\t\t\t\t});\n\n\t\t\t\tit(\"pass: deleted property\", function () {\n\t\t\t\t\tlet templatePrevious = JSON.parse(JSON.stringify(goodPointId.templateSchema));\n\t\t\t\t\ttemplatePrevious.annotation = { description: \"Test\" };\n\t\t\t\t\tlet template = JSON.parse(JSON.stringify(templatePrevious));\n\t\t\t\t\ttemplate.typeid = \"TeamLeoValidation2:PointID-\" + semver.inc(\"1.0.0\", \"major\");\n\t\t\t\t\ttemplate.properties[0].properties.pop();\n\n\t\t\t\t\tlet expectations = function (result) {\n\t\t\t\t\t\texpect(result).property(\"isValid\", true);\n\t\t\t\t\t\texpect(result.errors).to.be.empty;\n\t\t\t\t\t\texpect(result.warnings).to.be.empty;\n\t\t\t\t\t\treturn result;\n\t\t\t\t\t};\n\t\t\t\t\treturn validate(expectations, template, templatePrevious);\n\t\t\t\t});\n\t\t\t});\n\t\t});\n\n\t\tdescribe(\"skip semver validation\", function () {\n\t\t\tit(\"pass: deep equal on scrambled arrays\", function () {\n\t\t\t\tlet templatePrevious = JSON.parse(JSON.stringify(goodPointId.templateSchema));\n\t\t\t\tlet template = JSON.parse(JSON.stringify(templatePrevious));\n\t\t\t\tlet tmp = template.properties[0].properties[0];\n\t\t\t\ttemplate.properties[0].properties[0] = template.properties[0].properties[2];\n\t\t\t\ttemplate.properties[0].properties[2] = tmp;\n\t\t\t\ttmp = template.properties[1];\n\t\t\t\ttemplate.properties[1] = template.properties[2];\n\t\t\t\ttemplate.properties[2] = tmp;\n\t\t\t\t// Skip semver validation to cause a deep compare\n\n\t\t\t\tlet expectations = function (result) {\n\t\t\t\t\texpect(result).property(\"isValid\", true);\n\t\t\t\t\texpect(result.errors).to.be.empty;\n\t\t\t\t\texpect(result.warnings).to.be.empty;\n\t\t\t\t\treturn result;\n\t\t\t\t};\n\t\t\t\treturn validate(expectations, template, templatePrevious, true);\n\t\t\t});\n\n\t\t\tit(\"pass: deep equal with version regression\", function () {\n\t\t\t\tlet templatePrevious = JSON.parse(JSON.stringify(goodPointId.templateSchema));\n\t\t\t\tlet template = JSON.parse(JSON.stringify(templatePrevious));\n\n\t\t\t\tlet expectations = function (result) {\n\t\t\t\t\texpect(result).property(\"isValid\", true);\n\t\t\t\t\texpect(result.errors).to.be.empty;\n\t\t\t\t\texpect(result.warnings).to.be.empty;\n\t\t\t\t\treturn result;\n\t\t\t\t};\n\t\t\t\treturn validate(expectations, template, templatePrevious, true);\n\t\t\t});\n\n\t\t\tit(\"pass: preserves input templates\", function () {\n\t\t\t\tlet templatePrevious = JSON.parse(JSON.stringify(goodPointId.templateSchema));\n\t\t\t\tlet template = JSON.parse(JSON.stringify(templatePrevious));\n\n\t\t\t\tlet copies = [\n\t\t\t\t\tJSON.parse(JSON.stringify(templatePrevious)),\n\t\t\t\t\tJSON.parse(JSON.stringify(template)),\n\t\t\t\t];\n\n\t\t\t\tlet expectations = function (result) {\n\t\t\t\t\texpect(result).property(\"isValid\", true);\n\t\t\t\t\texpect(result.errors).to.be.empty;\n\t\t\t\t\texpect(result.warnings).to.be.empty;\n\t\t\t\t\texpect(templatePrevious).to.deep.equal(copies[0]);\n\t\t\t\t\texpect(template).to.deep.equal(copies[1]);\n\t\t\t\t\treturn result;\n\t\t\t\t};\n\t\t\t\treturn validate(expectations, template, templatePrevious);\n\t\t\t});\n\n\t\t\tit(\"fail: changed value\", function () {\n\t\t\t\tlet templatePrevious = JSON.parse(JSON.stringify(goodUIBorder.templateSchema));\n\t\t\t\tlet template = JSON.parse(JSON.stringify(templatePrevious));\n\t\t\t\ttemplate.properties[0].properties[0].value = 123456;\n\n\t\t\t\tlet expectations = function (result) {\n\t\t\t\t\texpect(result).property(\"isValid\", false);\n\t\t\t\t\texpect(result.warnings).to.be.empty;\n\t\t\t\t\texpect(result.errors.length).to.be.at.least(1);\n\t\t\t\t\texpect(result.errors[0].message).to.have.string(MSG.MODIFIED_TEMPLATE_1);\n\t\t\t\t\treturn result;\n\t\t\t\t};\n\n\t\t\t\treturn validate(expectations, template, templatePrevious, true);\n\t\t\t});\n\t\t});\n\n\t\tdescribe(\"syntax validation\", function () {\n\t\t\tit(\"pass: validate a simple file\", function () {\n\t\t\t\tlet template = goodPointId.templateSchema;\n\n\t\t\t\tlet expectations = function (result) {\n\t\t\t\t\texpect(result.isValid).to.equal(true);\n\t\t\t\t\treturn result;\n\t\t\t\t};\n\t\t\t\treturn validate(expectations, template, null, true);\n\t\t\t});\n\n\t\t\tit(\"fail: invalid file\", function () {\n\t\t\t\tlet template = badPrimitiveTypeid.templateSchema;\n\n\t\t\t\tlet expectations = function (result) {\n\t\t\t\t\texpect(result.isValid).to.equal(false);\n\t\t\t\t\texpect(result.errors.length).to.be.greaterThan(0);\n\t\t\t\t\texpect(result.unresolvedTypes.length).to.equal(1);\n\t\t\t\t\treturn result;\n\t\t\t\t};\n\t\t\t\treturn validate(expectations, template, null, true);\n\t\t\t});\n\n\t\t\tit(\"should pass a schema with an empty array of properties\", function () {\n\t\t\t\tlet EmptyPropertySchema = {\n\t\t\t\t\ttypeid: \"Test:EmptyPropertySchema-1.0.0\",\n\t\t\t\t\tproperties: [],\n\t\t\t\t};\n\n\t\t\t\tlet expectations = function (result) {\n\t\t\t\t\texpect(result.isValid).to.equal(true);\n\t\t\t\t\treturn result;\n\t\t\t\t};\n\t\t\t\treturn validate(expectations, EmptyPropertySchema, null);\n\t\t\t});\n\t\t});\n\n\t\tdescribe(\"bugs\", function () {\n\t\t\tdescribe(\"@bugfix Template validation with multiple inheritance\", function () {\n\t\t\t\tit(\"pass: deep equal with multiple inheritance\", function () {\n\t\t\t\t\tlet templateString =\n\t\t\t\t\t\t'{\"typeid\":\"autodesk.core:translation.controller-1.0.0\",\"inherits\":[\"NamedProperty\",\"NodeProperty\"]}';\n\t\t\t\t\tlet templatePrevious = JSON.parse(templateString);\n\t\t\t\t\tlet template = JSON.parse(templateString);\n\n\t\t\t\t\tlet expectations = function (result) {\n\t\t\t\t\t\texpect(result).property(\"isValid\", true);\n\t\t\t\t\t\texpect(result.errors).to.be.empty;\n\t\t\t\t\t\texpect(result.warnings).to.be.empty;\n\t\t\t\t\t\treturn result;\n\t\t\t\t\t};\n\t\t\t\t\treturn validate(expectations, template, templatePrevious, true);\n\t\t\t\t});\n\n\t\t\t\tit(\"fail: deep equal with out of order multiple inheritance\", function () {\n\t\t\t\t\tlet template = JSON.parse(\n\t\t\t\t\t\t'{\"typeid\":\"autodesk.core:translation.controller-1.0.0\",' +\n\t\t\t\t\t\t\t'\"inherits\":[\"NamedProperty\",\"NodeProperty\"]}',\n\t\t\t\t\t);\n\t\t\t\t\tlet templatePrevious = JSON.parse(\n\t\t\t\t\t\t'{\"typeid\":\"autodesk.core:translation.controller-1.0.0\",' +\n\t\t\t\t\t\t\t'\"inherits\":[\"NodeProperty\",\"NamedProperty\"]}',\n\t\t\t\t\t);\n\n\t\t\t\t\tlet expectations = function (result) {\n\t\t\t\t\t\texpect(result).property(\"isValid\", false);\n\t\t\t\t\t\texpect(result.errors.length).to.be.greaterThan(0);\n\t\t\t\t\t\texpect(result.errors[0].message).to.have.string(MSG.MODIFIED_TEMPLATE_1);\n\t\t\t\t\t\treturn result;\n\t\t\t\t\t};\n\t\t\t\t\treturn validate(expectations, template, templatePrevious, true);\n\t\t\t\t});\n\t\t\t});\n\n\t\t\tdescribe(\n\t\t\t\t\"@bugfix Local templates with 'abstract' properties fail validation \" +\n\t\t\t\t\t\"with remote one.\",\n\t\t\t\t() => {\n\t\t\t\t\tdescribe(\"pass: deep equal between no properties and an empty properties array\", () => {\n\t\t\t\t\t\tlet templateArray = {\n\t\t\t\t\t\t\ttypeid: \"SimpleTest:Shape-1.0.0\",\n\t\t\t\t\t\t\tproperties: [],\n\t\t\t\t\t\t};\n\t\t\t\t\t\tlet templateAbstract = {\n\t\t\t\t\t\t\ttypeid: \"SimpleTest:Shape-1.0.0\",\n\t\t\t\t\t\t};\n\n\t\t\t\t\t\tit(\"source is abstract and target is an empty properties array\", function () {\n\t\t\t\t\t\t\tlet expectations = function (result) {\n\t\t\t\t\t\t\t\texpect(result).property(\"isValid\", true);\n\t\t\t\t\t\t\t\texpect(result.errors).to.be.empty;\n\t\t\t\t\t\t\t\texpect(result.warnings).to.be.empty;\n\t\t\t\t\t\t\t\treturn result;\n\t\t\t\t\t\t\t};\n\n\t\t\t\t\t\t\treturn validate(expectations, templateAbstract, templateArray);\n\t\t\t\t\t\t});\n\n\t\t\t\t\t\tit(\"target is abstract and source is an empty properties array\", function () {\n\t\t\t\t\t\t\tlet expectations = function (result) {\n\t\t\t\t\t\t\t\texpect(result).property(\"isValid\", true);\n\t\t\t\t\t\t\t\texpect(result.errors).to.be.empty;\n\t\t\t\t\t\t\t\texpect(result.warnings).to.be.empty;\n\t\t\t\t\t\t\t\treturn result;\n\t\t\t\t\t\t\t};\n\n\t\t\t\t\t\t\treturn validate(expectations, templateArray, templateAbstract);\n\t\t\t\t\t\t});\n\t\t\t\t\t});\n\t\t\t\t},\n\t\t\t);\n\t\t});\n\n\t\tdescribe(\"Constants\", function () {\n\t\t\tbefore(function () {\n\t\t\t\tlet schemaValidator = new SchemaValidator();\n\n\t\t\t\tnew TemplateValidator({\n\t\t\t\t\tskipSemver: true,\n\t\t\t\t\tinheritsFrom: schemaValidator.inheritsFrom as any,\n\t\t\t\t\thasSchema: schemaValidator.hasSchema as any,\n\t\t\t\t});\n\t\t\t});\n\n\t\t\tlet expectationsGenerator = function (msg) {\n\t\t\t\treturn function (result) {\n\t\t\t\t\texpect(result.isValid).to.equal(false);\n\t\t\t\t\texpect(result.errors.length).to.equal(1);\n\t\t\t\t\texpect(result.errors[0].message).to.equal(msg);\n\n\t\t\t\t\treturn result;\n\t\t\t\t};\n\t\t\t};\n\n\t\t\tit(\"should pass a valid template\", function () {\n\t\t\t\tlet ConstantValid = {\n\t\t\t\t\ttypeid: \"ConstantTest:ConstantValid-1.0.0\",\n\t\t\t\t\tconstants: [{ id: \"valid\", typeid: \"String\", value: \"value\" }],\n\t\t\t\t};\n\n\t\t\t\tlet expectations = function (result) {\n\t\t\t\t\texpect(result.isValid).to.equal(true);\n\t\t\t\t\treturn result;\n\t\t\t\t};\n\n\t\t\t\treturn validate(expectations, ConstantValid, null);\n\t\t\t});\n\n\t\t\tit(\"should fail if constants array has no elements\", function () {\n\t\t\t\tlet ConstantEmptyArray = {\n\t\t\t\t\ttypeid: \"ConstantTest:ConstantEmptyArray-1.0.0\",\n\t\t\t\t\tconstants: [],\n\t\t\t\t};\n\n\t\t\t\treturn validate(\n\t\t\t\t\texpectationsGenerator(\"/constants must NOT have fewer than 1 items\"),\n\t\t\t\t\tConstantEmptyArray,\n\t\t\t\t\tnull,\n\t\t\t\t\ttrue,\n\t\t\t\t);\n\t\t\t});\n\n\t\t\tit(\"should fail if constant does not have an id\", function () {\n\t\t\t\tlet ConstantNoId = {\n\t\t\t\t\ttypeid: \"ConstantTest:ConstantNoId-1.0.0\",\n\t\t\t\t\tconstants: [{ typeid: \"String\", value: \"value\" }],\n\t\t\t\t};\n\n\t\t\t\treturn validate(\n\t\t\t\t\texpectationsGenerator(\"/constants/0 must have required property 'id'\"),\n\t\t\t\t\tConstantNoId,\n\t\t\t\t\tnull,\n\t\t\t\t\ttrue,\n\t\t\t\t);\n\t\t\t});\n\n\t\t\tit(\"should fail if constant does not have a typeid\", function () {\n\t\t\t\tlet ConstantNoTypeid = {\n\t\t\t\t\ttypeid: \"ConstantTest:ConstantNoTypeid-1.0.0\",\n\t\t\t\t\tconstants: [{ id: \"id\", value: \"value\" }],\n\t\t\t\t};\n\n\t\t\t\treturn validate(\n\t\t\t\t\tfunction (result) {\n\t\t\t\t\t\texpect(result.isValid).to.equal(false);\n\t\t\t\t\t\t// console.log(result.errors);\n\t\t\t\t\t\texpect(result.errors.length).to.equal(5);\n\t\t\t\t\t\texpect(result.errors[3].message).to.include(\n\t\t\t\t\t\t\t\"must have required property 'inherits'\",\n\t\t\t\t\t\t);\n\t\t\t\t\t\texpect(result.errors[4].message).to.include(\n\t\t\t\t\t\t\t\"/constants/0 must have required property 'typeid'\",\n\t\t\t\t\t\t);\n\t\t\t\t\t\treturn result;\n\t\t\t\t\t},\n\t\t\t\t\tConstantNoTypeid,\n\t\t\t\t\tnull,\n\t\t\t\t\ttrue,\n\t\t\t\t);\n\t\t\t});\n\n\t\t\tit(\"should pass if constant does not have a typeid but maybe inherits from elsewhere\", function () {\n\t\t\t\tlet ConstantNoTypeid = {\n\t\t\t\t\ttypeid: \"ConstantTest:ConstantNoTypeid-1.0.0\",\n\t\t\t\t\tinherits: \"ConstantTest:ConstantParentWithTypeid-1.0.0\",\n\t\t\t\t\tconstants: [{ id: \"id\", value: \"value\" }],\n\t\t\t\t};\n\n\t\t\t\tlet expectations = function (result) {\n\t\t\t\t\texpect(result.isValid).to.equal(true);\n\t\t\t\t\treturn result;\n\t\t\t\t};\n\n\t\t\t\treturn validate(expectations, ConstantNoTypeid, null);\n\t\t\t});\n\n\t\t\tit(\"should not fail if constant does not have a value or typedValue\", function () {\n\t\t\t\tlet ConstantNoValue = {\n\t\t\t\t\ttypeid: \"ConstantTest:ConstantNoValue-1.0.0\",\n\t\t\t\t\tconstants: [{ id: \"id\", typeid: \"String\" }],\n\t\t\t\t};\n\n\t\t\t\tlet expectations = function (result) {\n\t\t\t\t\texpect(result.isValid).to.equal(true);\n\t\t\t\t\treturn result;\n\t\t\t\t};\n\n\t\t\t\treturn validate(expectations, ConstantNoValue, null, true);\n\t\t\t});\n\n\t\t\tit(\"should pass if constant map with context key type typeid has typeids as keys\", function () {\n\t\t\t\tlet Constant = {\n\t\t\t\t\ttypeid: \"ConstantTest:Constant-1.0.0\",\n\t\t\t\t\tconstants: [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tid: \"map\",\n\t\t\t\t\t\t\ttypeid: \"Int32\",\n\t\t\t\t\t\t\tcontext: \"map\",\n\t\t\t\t\t\t\tcontextKeyType: \"typeid\",\n\t\t\t\t\t\t\tvalue: {\n\t\t\t\t\t\t\t\t\"SimpleTest:ConstantTemplate1-1.0.0\": 1,\n\t\t\t\t\t\t\t\t\"SimpleTest:ConstantTemplate2-1.0.0\": -1,\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t],\n\t\t\t\t};\n\n\t\t\t\tlet expectations = function (result) {\n\t\t\t\t\texpect(result.isValid).to.equal(true);\n\t\t\t\t\treturn result;\n\t\t\t\t};\n\n\t\t\t\treturn validate(expectations, Constant, null, true);\n\t\t\t});\n\n\t\t\tit(\"should fail if constant map with context key type that is not a valid value\", function () {\n\t\t\t\tlet ConstantNoValue = {\n\t\t\t\t\ttypeid: \"ConstantTest:ConstantNoValue-1.0.0\",\n\t\t\t\t\tconstants: [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tid: \"map\",\n\t\t\t\t\t\t\ttypeid: \"Int32\",\n\t\t\t\t\t\t\tcontext: \"map\",\n\t\t\t\t\t\t\tcontextKeyType: \"badvalue\",\n\t\t\t\t\t\t\tvalue: {\n\t\t\t\t\t\t\t\t\"SimpleTest:ConstantTemplate1-1.0.0\": 1,\n\t\t\t\t\t\t\t\t\"SimpleTest:ConstantTemplate2-1.0.0\": -1,\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t],\n\t\t\t\t};\n\n\t\t\t\treturn validate(\n\t\t\t\t\tfunction (result) {\n\t\t\t\t\t\texpect(result.isValid).to.equal(false);\n\t\t\t\t\t\texpect(result.errors.length).to.equal(1);\n\t\t\t\t\t\texpect(result.errors[0].message).to.include(\n\t\t\t\t\t\t\t\"should match one of the following: typeid,string\",\n\t\t\t\t\t\t);\n\t\t\t\t\t\treturn result;\n\t\t\t\t\t},\n\t\t\t\t\tConstantNoValue,\n\t\t\t\t\tnull,\n\t\t\t\t\ttrue,\n\t\t\t\t);\n\t\t\t});\n\n\t\t\tit(\"should fail if constant map with context key type typeid has invalid typeids as keys\", function () {\n\t\t\t\tlet ConstantMapWithBadKeys = {\n\t\t\t\t\ttypeid: \"ConstantTest:ConstantMapWithBadKeys-1.0.0\",\n\t\t\t\t\tconstants: [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tid: \"map\",\n\t\t\t\t\t\t\ttypeid: \"Int32\",\n\t\t\t\t\t\t\tcontext: \"map\",\n\t\t\t\t\t\t\tcontextKeyType: \"typeid\",\n\t\t\t\t\t\t\tvalue: { NotATypeId: 1, AlsoNotATypeId: -1 },\n\t\t\t\t\t\t},\n\t\t\t\t\t],\n\t\t\t\t};\n\n\t\t\t\tlet expectations = function (result) {\n\t\t\t\t\texpect(result.isValid).to.equal(false);\n\t\t\t\t\texpect(result.errors.length).to.equal(2);\n\t\t\t\t\texpect(result.errors[0].message).to.include(MSG.KEY_MUST_BE_TYPEID + \"NotATypeId\");\n\t\t\t\t\texpect(result.errors[1].message).to.include(\n\t\t\t\t\t\tMSG.KEY_MUST_BE_TYPEID + \"AlsoNotATypeId\",\n\t\t\t\t\t);\n\n\t\t\t\t\treturn result;\n\t\t\t\t};\n\n\t\t\t\treturn validate(expectations, ConstantMapWithBadKeys, null, true);\n\t\t\t});\n\n\t\t\tit(\"should fail if map with context key type typeid is not constant\", function () {\n\t\t\t\tlet ConstantMapWithProperty = {\n\t\t\t\t\ttypeid: \"ConstantTest:Outerprop-1.0.0\",\n\t\t\t\t\tproperties: [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tid: \"map\",\n\t\t\t\t\t\t\ttypeid: \"Int32\",\n\t\t\t\t\t\t\tcontext: \"map\",\n\t\t\t\t\t\t\tcontextKeyType: \"typeid\",\n\t\t\t\t\t\t\tvalue: {\n\t\t\t\t\t\t\t\t\"SimpleTest:ConstantTemplate1-1.0.0\": 1,\n\t\t\t\t\t\t\t\t\"SimpleTest:ConstantTemplate2-1.0.0\": -1,\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t],\n\t\t\t\t};\n\n\t\t\t\tlet expectations = function (result) {\n\t\t\t\t\tthrow new Error(\"This should not be called\");\n\t\t\t\t};\n\t\t\t\tlet failExpectations = function (error) {\n\t\t\t\t\texpect(error.toString()).to.include(\n\t\t\t\t\t\t\"SV-013: A map with typeids as keys must be constant\",\n\t\t\t\t\t);\n\t\t\t\t};\n\t\t\t\treturn performValidation(false, ConstantMapWithProperty, null, true)\n\t\t\t\t\t.then(expectations)\n\t\t\t\t\t.catch(failExpectations);\n\t\t\t});\n\t\t});\n\n\t\tdescribe(\"Async validation\", function () {\n\t\t\tit(\"can perform context validation asynchronously\", function (done) {\n\t\t\t\tlet schemaValidator = new SchemaValidator();\n\n\t\t\t\tlet templateValidator = new TemplateValidator({\n\t\t\t\t\tinheritsFromAsync: schemaValidator.inheritsFromAsync as any,\n\t\t\t\t\thasSchemaAsync: schemaValidator.hasSchemaAsync as any,\n\t\t\t\t});\n\n\t\t\t\t// Doesn't inherit from 'NamedProperty'. Will cause an error\n\t\t\t\tlet grandParentSchema = {\n\t\t\t\t\ttypeid: \"test:grandparentschema-1.0.0\",\n\t\t\t\t};\n\n\t\t\t\tlet parentSchema = {\n\t\t\t\t\ttypeid: \"test:parentschema-1.0.0\",\n\t\t\t\t\tinherits: [\"test:grandparentschema-1.0.0\"],\n\t\t\t\t};\n\n\t\t\t\tlet childSchema = {\n\t\t\t\t\ttypeid: \"test:childchema-1.0.0\",\n\t\t\t\t\tproperties: [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tid: \"set\",\n\t\t\t\t\t\t\ttypeid: \"test:parentschema-1.0.0\",\n\t\t\t\t\t\t\tcontext: \"set\",\n\t\t\t\t\t\t},\n\t\t\t\t\t],\n\t\t\t\t};\n\n\t\t\t\tschemaValidator.register(grandParentSchema);\n\t\t\t\tschemaValidator.register(parentSchema);\n\n\t\t\t\ttemplateValidator.validateAsync(childSchema as any).then(\n\t\t\t\t\t() => {\n\t\t\t\t\t\tdone(new Error(\"Should not be valid!\"));\n\t\t\t\t\t},\n\t\t\t\t\t(error) => {\n\t\t\t\t\t\texpect(error).to.exist;\n\t\t\t\t\t\tdone();\n\t\t\t\t\t},\n\t\t\t\t);\n\t\t\t});\n\t\t});\n\t});\n})();\n"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@fluid-experimental/property-changeset",
3
- "version": "2.81.0",
3
+ "version": "2.82.0",
4
4
  "description": "property changeset definitions and related functionalities",
5
5
  "homepage": "https://fluidframework.com",
6
6
  "repository": {
@@ -53,7 +53,7 @@
53
53
  "temp-directory": "nyc/.nyc_output"
54
54
  },
55
55
  "dependencies": {
56
- "@fluid-experimental/property-common": "~2.81.0",
56
+ "@fluid-experimental/property-common": "~2.82.0",
57
57
  "ajv": "^8.17.1",
58
58
  "ajv-keywords": "^5.1.0",
59
59
  "async": "^3.2.2",
@@ -64,12 +64,12 @@
64
64
  "devDependencies": {
65
65
  "@arethetypeswrong/cli": "^0.18.2",
66
66
  "@biomejs/biome": "~1.9.3",
67
- "@fluid-internal/mocha-test-setup": "~2.81.0",
67
+ "@fluid-internal/mocha-test-setup": "~2.82.0",
68
68
  "@fluidframework/build-common": "^2.0.3",
69
69
  "@fluidframework/build-tools": "^0.63.0",
70
70
  "@types/lodash": "^4.14.118",
71
71
  "@types/mocha": "^10.0.10",
72
- "@types/node": "^18.19.0",
72
+ "@types/node": "~20.19.30",
73
73
  "@types/semver": "^7.7.0",
74
74
  "@types/sinon": "^17.0.3",
75
75
  "c8": "^10.1.3",