UNPKG

nope-js-node

Version:

NoPE Runtime for Nodejs. For Browser-Support please use nope-browser

402 lines (401 loc) 19 kB
"use strict"; /** * @author Martin Karkowski * @email m.karkowski@zema.de * @desc [description] */ Object.defineProperty(exports, "__esModule", { value: true }); const chai_1 = require("chai"); const mocha_1 = require("mocha"); const pathMatchingMethods_1 = require("./pathMatchingMethods"); (0, mocha_1.describe)("pathMatchingMethods", function () { // Describe the required Test: (0, mocha_1.describe)("comparePatternAndPath", function () { (0, mocha_1.describe)("pattern test", function () { const functionTests = [ { desc: "simple matching topics", pattern: "test", path: "test", expectedResult: (0, pathMatchingMethods_1.generateResult)({ pathToExtractData: "test", affectedOnSameLevel: true, patternLengthComparedToPathLength: "=", }), }, { desc: "topics should match", pattern: "test1", path: "test2", expectedResult: (0, pathMatchingMethods_1.generateResult)({ patternLengthComparedToPathLength: "=", }), }, { desc: "simple root topic compare topics", pattern: "test", path: "", expectedResult: (0, pathMatchingMethods_1.generateResult)({ pathToExtractData: "test", affectedByParent: true, patternLengthComparedToPathLength: ">", }), }, { desc: "match with multilevel wildcard", pattern: "test/#", path: "test/test/test", expectedResult: (0, pathMatchingMethods_1.generateResult)({ pathToExtractData: "test/test/test", affectedByChild: true, containsWildcards: true, patternLengthComparedToPathLength: "<", }), }, { desc: "match with multilevel wildcard and same length", pattern: "test/test/#", path: "test/test/test", expectedResult: (0, pathMatchingMethods_1.generateResult)({ pathToExtractData: "test/test/test", affectedOnSameLevel: true, containsWildcards: true, patternLengthComparedToPathLength: "=", }), }, { desc: "match with singlelevel wildcard", pattern: "test/+/test", path: "test/test/test", expectedResult: (0, pathMatchingMethods_1.generateResult)({ pathToExtractData: "test/test/test", affectedOnSameLevel: true, containsWildcards: true, patternLengthComparedToPathLength: "=", }), }, { desc: "match with singlelevel wildcard as first element in pattern", pattern: "+/test/test", path: "test/test/test", expectedResult: (0, pathMatchingMethods_1.generateResult)({ pathToExtractData: "test/test/test", affectedOnSameLevel: true, containsWildcards: true, patternLengthComparedToPathLength: "=", }), }, { desc: "match with singlelevel wildcard as last element in pattern", pattern: "test/test/+", path: "test/test/test", expectedResult: (0, pathMatchingMethods_1.generateResult)({ pathToExtractData: "test/test/test", affectedOnSameLevel: true, containsWildcards: true, patternLengthComparedToPathLength: "=", }), }, { desc: "match with multiple singlelevel wildcards in pattern", pattern: "test/+/+", path: "test/test/test", expectedResult: (0, pathMatchingMethods_1.generateResult)({ pathToExtractData: "test/test/test", affectedOnSameLevel: true, containsWildcards: true, patternLengthComparedToPathLength: "=", }), }, { desc: "match with singlelevel and multilevel wildcard in pattern", pattern: "+/#", path: "test/test/test", expectedResult: (0, pathMatchingMethods_1.generateResult)({ pathToExtractData: "test/test/test", affectedByChild: true, containsWildcards: true, patternLengthComparedToPathLength: "<", }), }, { desc: "match with multilevel wildcard in pattern", pattern: "test/#", path: "test/test/test", expectedResult: (0, pathMatchingMethods_1.generateResult)({ pathToExtractData: "test/test/test", affectedByChild: true, containsWildcards: true, patternLengthComparedToPathLength: "<", }), }, { desc: "pattern is longer than path", pattern: "test/test/test/#", path: "test", expectedResult: (0, pathMatchingMethods_1.generateResult)({ patternToExtractData: "test/test/test/#", affectedByParent: true, containsWildcards: true, patternLengthComparedToPathLength: ">", }), }, ]; for (const test of functionTests) { (0, mocha_1.it)(test.desc, function () { let result = null; try { result = (0, pathMatchingMethods_1.comparePatternAndPath)(test.pattern, test.path); (0, chai_1.expect)(result).to.deep.equal(test.expectedResult); } catch (e) { const delta = []; for (const [key, value] of Object.entries(test.expectedResult)) { if (result[key] !== value) { delta.push(`- "${key}": expected: ${value}; got: ${result[key]}"`); } } throw Error(`Failed with Test "${test.desc}".\nexpected=\t${JSON.stringify(test.expectedResult)}\nresult= \t${JSON.stringify(result)}\n${delta.join("\n")}`); } }); } const errorTests = [ { desc: "invalid pattern", pattern: "test//", path: "test", }, { desc: "invalid pattern", pattern: "test/#/a", path: "test", }, { desc: "invalid path", pattern: "test/a", path: "test//a", }, { desc: "invalid path", pattern: "test/a", path: "test/+", }, { desc: "invalid path", pattern: "test/a", path: "test/#", }, { desc: "invalid path", pattern: "test/a", path: "test/+/#", }, ]; for (const test of errorTests) { (0, mocha_1.it)(test.desc, function () { const error = new Error("A Error should be thrown"); try { const result = (0, pathMatchingMethods_1.comparePatternAndPath)(test.pattern, test.path); throw error; } catch (e) { if (e == error) { throw e; } } }); } }); (0, mocha_1.describe)("pattern without wildcard symbols", function () { const functionTests = [ { desc: "simple matching topics", pattern: "test", path: "test", expectedResult: (0, pathMatchingMethods_1.generateResult)({ pathToExtractData: "test", affectedOnSameLevel: true, patternLengthComparedToPathLength: "=", }), }, { desc: "topics should match", pattern: "test1", path: "test2", expectedResult: (0, pathMatchingMethods_1.generateResult)({ patternLengthComparedToPathLength: "=", }), }, { desc: "simple root topic compare topics", pattern: "test", path: "", expectedResult: (0, pathMatchingMethods_1.generateResult)({ pathToExtractData: "test", affectedByParent: true, patternLengthComparedToPathLength: ">", }), }, { desc: "match with multilevel wildcard", pattern: "test/#", path: "test/test/test", expectedResult: (0, pathMatchingMethods_1.generateResult)({ pathToExtractData: "test/test/test", affectedByChild: true, containsWildcards: true, patternLengthComparedToPathLength: "<", }), }, { desc: "match with multilevel wildcard and same length", pattern: "test/test/#", path: "test/test/test", expectedResult: (0, pathMatchingMethods_1.generateResult)({ pathToExtractData: "test/test/test", affectedOnSameLevel: true, containsWildcards: true, patternLengthComparedToPathLength: "=", }), }, { desc: "match with singlelevel wildcard", pattern: "test/+/test", path: "test/test/test", expectedResult: (0, pathMatchingMethods_1.generateResult)({ pathToExtractData: "test/test/test", affectedOnSameLevel: true, containsWildcards: true, patternLengthComparedToPathLength: "=", }), }, { desc: "match with singlelevel wildcard as first element in pattern", pattern: "+/test/test", path: "test/test/test", expectedResult: (0, pathMatchingMethods_1.generateResult)({ pathToExtractData: "test/test/test", affectedOnSameLevel: true, containsWildcards: true, patternLengthComparedToPathLength: "=", }), }, { desc: "match with singlelevel wildcard as last element in pattern", pattern: "test/test/+", path: "test/test/test", expectedResult: (0, pathMatchingMethods_1.generateResult)({ pathToExtractData: "test/test/test", affectedOnSameLevel: true, containsWildcards: true, patternLengthComparedToPathLength: "=", }), }, { desc: "match with multiple singlelevel wildcards in pattern", pattern: "test/+/+", path: "test/test/test", expectedResult: (0, pathMatchingMethods_1.generateResult)({ pathToExtractData: "test/test/test", affectedOnSameLevel: true, containsWildcards: true, patternLengthComparedToPathLength: "=", }), }, { desc: "match with singlelevel and multilevel wildcard in pattern", pattern: "+/#", path: "test/test/test", expectedResult: (0, pathMatchingMethods_1.generateResult)({ pathToExtractData: "test/test/test", affectedByChild: true, containsWildcards: true, patternLengthComparedToPathLength: "<", }), }, { desc: "match with multilevel wildcard in pattern", pattern: "test/#", path: "test/test/test", expectedResult: (0, pathMatchingMethods_1.generateResult)({ pathToExtractData: "test/test/test", affectedByChild: true, containsWildcards: true, patternLengthComparedToPathLength: "<", }), }, { desc: "pattern is longer than path", pattern: "test/test/test/#", path: "test", expectedResult: (0, pathMatchingMethods_1.generateResult)({ patternToExtractData: "test/test/test/#", affectedByParent: true, containsWildcards: true, patternLengthComparedToPathLength: ">", }), }, // Now the specific Tests start: { desc: "pattern is longer than path", pattern: "a/b", path: "a", expectedResult: (0, pathMatchingMethods_1.generateResult)({ pathToExtractData: "a/b", affectedByParent: true, containsWildcards: false, patternLengthComparedToPathLength: ">", }), }, { desc: "path is longer than pattern", pattern: "a/b", path: "a/b/c", expectedResult: (0, pathMatchingMethods_1.generateResult)({ pathToExtractData: "a/b", affectedByChild: true, patternLengthComparedToPathLength: "<", }), }, ]; for (const test of functionTests) { (0, mocha_1.it)(test.desc, function () { let result = null; try { result = (0, pathMatchingMethods_1.comparePatternAndPath)(test.pattern, test.path, { matchTopicsWithoutWildcards: true, }); (0, chai_1.expect)(result).to.deep.equal(test.expectedResult); } catch (e) { throw Error(`Failed with Test "${test.desc}".\nexpected=\t${JSON.stringify(test.expectedResult)}\nresult= \t${JSON.stringify(result)}`); } }); } }); }); (0, mocha_1.describe)("containsWildcards", function () { (0, mocha_1.it)("test wildcard detection", function () { (0, chai_1.expect)((0, pathMatchingMethods_1.containsWildcards)("test")).to.be.false; (0, chai_1.expect)((0, pathMatchingMethods_1.containsWildcards)("test/#")).to.be.true; (0, chai_1.expect)((0, pathMatchingMethods_1.containsWildcards)("test/+")).to.be.true; }); }); (0, mocha_1.describe)("patternIsValid", function () { (0, mocha_1.it)("should be invalid", function () { (0, chai_1.expect)((0, pathMatchingMethods_1.patternIsValid)("test//#")).to.be.false; (0, chai_1.expect)((0, pathMatchingMethods_1.patternIsValid)("test/a/#/b")).to.be.false; // Leading Splitchar (0, chai_1.expect)((0, pathMatchingMethods_1.patternIsValid)("test/a/")).to.be.false; }); (0, mocha_1.it)("should be valid", function () { chai_1.assert.isTrue((0, pathMatchingMethods_1.patternIsValid)("test/#"), "multi-level wildcard at the end should be fine"); chai_1.assert.isTrue((0, pathMatchingMethods_1.patternIsValid)("#"), "multi-level wildcard only should be fine"); chai_1.assert.isTrue((0, pathMatchingMethods_1.patternIsValid)("+"), "single-level only should be fine"); chai_1.assert.isTrue((0, pathMatchingMethods_1.patternIsValid)("+/#"), "combined should be fine"); chai_1.assert.isTrue((0, pathMatchingMethods_1.patternIsValid)("a/+/a/#"), "combined with char"); chai_1.assert.isTrue((0, pathMatchingMethods_1.patternIsValid)("+/+"), "multi single-level should be fine"); chai_1.assert.isTrue((0, pathMatchingMethods_1.patternIsValid)("a/b/c"), "chars only should be fine"); }); }); });