nope/test/lib/helpers/pathMatchingMethods.test.ts
2021-12-04 08:25:26 +01:00

167 lines
4.6 KiB
TypeScript

import "chai/register-should";
import { comparePatternAndPath, generateResult, TPathCompareResult } from "../../../lib/helpers/pathMatchingMethods";
const functionTests: {
// Name of the Test
desc: string,
args?: [],
path: string,
pattern: string,
expectedResult: TPathCompareResult
}[] = [
{
desc: "simple matching topics",
pattern: "test",
path: "test",
expectedResult: generateResult({
pathToExtractData: "test",
diffPath: "",
affectedOnSameLevel: true,
patternLengthComparedToPathLength: "="
})
},
{
desc: "topics should match",
pattern: "test1",
path: "test2",
expectedResult: generateResult({
patternLengthComparedToPathLength: "="
})
},
{
desc: "simple root topic compare topics",
pattern: "test",
path: "",
expectedResult: generateResult({
pathToExtractData: "test",
affectedByParent: true,
patternLengthComparedToPathLength: ">"
})
},
{
desc: "match with multilevel wildcard",
pattern: "test/#",
path: "test/test/test",
expectedResult: generateResult({
pathToExtractData: "test/test/test",
affectedByChild: true,
containsPattern: true,
patternLengthComparedToPathLength: "<"
})
},
{
desc: "match with multilevel wildcard and same length",
pattern: "test/test/#",
path: "test/test/test",
expectedResult: generateResult({
pathToExtractData: "test/test/test",
affectedOnSameLevel: true,
containsPattern: true,
patternLengthComparedToPathLength: "="
})
},
{
desc: "match with singlelevel wildcard",
pattern: "test/+/test",
path: "test/test/test",
expectedResult: generateResult({
pathToExtractData: "test/test/test",
affectedOnSameLevel: true,
containsPattern: true,
patternLengthComparedToPathLength: "="
})
},
{
desc: "match with singlelevel wildcard as first element in pattern",
pattern: "+/test/test",
path: "test/test/test",
expectedResult: generateResult({
pathToExtractData: "test/test/test",
affectedOnSameLevel: true,
containsPattern: true,
patternLengthComparedToPathLength: "="
})
},
{
desc: "match with singlelevel wildcard as last element in pattern",
pattern: "test/test/+",
path: "test/test/test",
expectedResult: generateResult({
pathToExtractData: "test/test/test",
affectedOnSameLevel: true,
containsPattern: true,
patternLengthComparedToPathLength: "="
})
},
{
desc: "match with multiple singlelevel wildcards in pattern",
pattern: "test/+/+",
path: "test/test/test",
expectedResult: generateResult({
pathToExtractData: "test/test/test",
affectedOnSameLevel: true,
containsPattern: true,
patternLengthComparedToPathLength: "="
})
},
{
desc: "match with singlelevel and multilevel wildcard in pattern",
pattern: "+/#",
path: "test/test/test",
expectedResult: generateResult({
pathToExtractData: "test/test/test",
affectedByChild: true,
containsPattern: true,
patternLengthComparedToPathLength: "<"
})
},
{
desc: "match with multilevel wildcard in pattern",
pattern: "test/#",
path: "test/test/test",
expectedResult: generateResult({
pathToExtractData: "test/test/test",
affectedByChild: true,
containsPattern: true,
patternLengthComparedToPathLength: "<"
})
},
{
desc: "pattern is longer than path",
pattern: "test/test/test/#",
path: "test",
expectedResult: generateResult({
patternToExtractData: "test/test/test/#",
affectedByParent: true,
containsPattern: true,
patternLengthComparedToPathLength: ">"
})
}
];
for (const test of functionTests) {
let result: any = null;
try {
result = comparePatternAndPath(test.pattern, test.path);
result.should.deep.equal(test.expectedResult);
} catch (e) {
try {
const delta: string[] = [];
for (const [key, value] of Object.entries(test.expectedResult)) {
if (result[key] !== value) {
delta.push(`- "${key}": expected: ${value}; got: ${result[key]}"`);
}
}
console.log(`Failed with Test "${test.desc}".\nexpected=\t${JSON.stringify(test.expectedResult)}\nresult= \t${JSON.stringify(result)}\n${delta.join("\n")}`);
console.log("\n\n");
} catch (err) {
console.error(e);
}
}
}