From 76bd8b2ea4f8a5fae43b90322d39092149ef2391 Mon Sep 17 00:00:00 2001 From: Rick Waldron Date: Mon, 23 Mar 2020 13:14:53 -0400 Subject: [PATCH] Fix: when converting to patterns to directories, append path.sep to prevent overlapping dirs from being omitted. Fixes gh-135 --- lib/test-stream.js | 4 +- .../collateral-nested-similar-names/README.md | 0 .../harness/.gitkeep | 0 .../package.json | 1 + .../test/get/index.js | 6 +++ .../test/getOwnPropertyDescriptor/index.js | 6 +++ .../test/getPrototypeOf/index.js | 6 +++ test/file-matching.js | 38 +++++++++++++++++-- 8 files changed, 55 insertions(+), 6 deletions(-) create mode 100644 test/collateral-nested-similar-names/README.md create mode 100644 test/collateral-nested-similar-names/harness/.gitkeep create mode 100644 test/collateral-nested-similar-names/package.json create mode 100644 test/collateral-nested-similar-names/test/get/index.js create mode 100644 test/collateral-nested-similar-names/test/getOwnPropertyDescriptor/index.js create mode 100644 test/collateral-nested-similar-names/test/getPrototypeOf/index.js diff --git a/lib/test-stream.js b/lib/test-stream.js index 7e3b314..abad44c 100644 --- a/lib/test-stream.js +++ b/lib/test-stream.js @@ -25,7 +25,7 @@ function patternsToDirectories(patterns) { return true; }); - return parts.join(path.sep) + return `${parts.join(path.sep)}${path.sep}`; }) .filter((name) => name !== '') // Remove elements that would cause the same files to be visited more than @@ -50,7 +50,7 @@ function patternsToDirectories(patterns) { // All other values are unique and should be allowed return true; }); - }); + }).map(dir => dir.slice(0, -1)); } class TestStream extends Subject { diff --git a/test/collateral-nested-similar-names/README.md b/test/collateral-nested-similar-names/README.md new file mode 100644 index 0000000..e69de29 diff --git a/test/collateral-nested-similar-names/harness/.gitkeep b/test/collateral-nested-similar-names/harness/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/test/collateral-nested-similar-names/package.json b/test/collateral-nested-similar-names/package.json new file mode 100644 index 0000000..0b3f337 --- /dev/null +++ b/test/collateral-nested-similar-names/package.json @@ -0,0 +1 @@ +{"version": "3.0.0"} diff --git a/test/collateral-nested-similar-names/test/get/index.js b/test/collateral-nested-similar-names/test/get/index.js new file mode 100644 index 0000000..a39e1f4 --- /dev/null +++ b/test/collateral-nested-similar-names/test/get/index.js @@ -0,0 +1,6 @@ +/*--- +description: Should not test in sloppy mode +flags: [onlyStrict] +expected: + pass: true +---*/ diff --git a/test/collateral-nested-similar-names/test/getOwnPropertyDescriptor/index.js b/test/collateral-nested-similar-names/test/getOwnPropertyDescriptor/index.js new file mode 100644 index 0000000..a39e1f4 --- /dev/null +++ b/test/collateral-nested-similar-names/test/getOwnPropertyDescriptor/index.js @@ -0,0 +1,6 @@ +/*--- +description: Should not test in sloppy mode +flags: [onlyStrict] +expected: + pass: true +---*/ diff --git a/test/collateral-nested-similar-names/test/getPrototypeOf/index.js b/test/collateral-nested-similar-names/test/getPrototypeOf/index.js new file mode 100644 index 0000000..a39e1f4 --- /dev/null +++ b/test/collateral-nested-similar-names/test/getPrototypeOf/index.js @@ -0,0 +1,6 @@ +/*--- +description: Should not test in sloppy mode +flags: [onlyStrict] +expected: + pass: true +---*/ diff --git a/test/file-matching.js b/test/file-matching.js index b1c1827..5b07262 100644 --- a/test/file-matching.js +++ b/test/file-matching.js @@ -5,10 +5,16 @@ const path = require('path'); const tap = require('tap'); const sameMembers = (assert, actual, expected) => { - const expectedSet = expected.map((expectedMember) => { - return expectedMember.split('/').join(path.sep); - }); - assert.equal(actual.length, expected.length); + const expectedSet = expected.map((expectedMember) => path.normalize(expectedMember)); + assert.equal(actual.length, expected.length, ` + Expected: + + ${actual} + + to have the same length as: + + ${expected} + `); for (let actualMember of actual) { assert.assert(expectedSet.includes(actualMember), actualMember); @@ -102,6 +108,30 @@ tap.test('file matching: file names (siblings)', assert => { }).then(assert.done, assert.fail); }); +tap.test('file matching: directories with name overlap', assert => { + run([ + 'test/collateral-nested-similar-names/test/get/index.js', + 'test/collateral-nested-similar-names/test/getOwnPropertyDescriptor/index.js', + 'test/collateral-nested-similar-names/test/getPrototypeOf/index.js', + ]) + .then((results) => { + const files = results.map((result) => result.file); + const relativePaths = results.map((result) => result.relative); + const expectedFiles = [ + 'test/collateral-nested-similar-names/test/get/index.js', + 'test/collateral-nested-similar-names/test/getOwnPropertyDescriptor/index.js', + 'test/collateral-nested-similar-names/test/getPrototypeOf/index.js', + ]; + sameMembers(assert, files, expectedFiles); + const expectedRelPaths = [ + 'get/index.js', + 'getOwnPropertyDescriptor/index.js', + 'getPrototypeOf/index.js', + ]; + sameMembers(assert, relativePaths, expectedRelPaths); + }).then(assert.done, assert.fail); +}); + tap.test('file matching: file names (subdirectory first)', assert => { run([ 'test/collateral-nested/test/evens/deep/26.js',