167 lines
4.6 KiB
TypeScript
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);
|
|
}
|
|
|
|
|
|
}
|
|
} |