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); } } }