| // basic test |
| // show that it does the same thing by default as the shell. |
| var tap = require("tap") |
| , child_process = require("child_process") |
| , bashResults = require("./bash-results.json") |
| , globs = Object.keys(bashResults) |
| , glob = require("../") |
| , path = require("path") |
| |
| // run from the root of the project |
| // this is usually where you're at anyway, but be sure. |
| process.chdir(path.resolve(__dirname, "..")) |
| |
| function alphasort (a, b) { |
| a = a.toLowerCase() |
| b = b.toLowerCase() |
| return a > b ? 1 : a < b ? -1 : 0 |
| } |
| |
| globs.forEach(function (pattern) { |
| var expect = bashResults[pattern] |
| // anything regarding the symlink thing will fail on windows, so just skip it |
| if (process.platform === "win32" && |
| expect.some(function (m) { |
| return /\/symlink\//.test(m) |
| })) |
| return |
| |
| tap.test(pattern, function (t) { |
| glob(pattern, function (er, matches) { |
| if (er) |
| throw er |
| |
| // sort and unmark, just to match the shell results |
| matches = cleanResults(matches) |
| |
| t.deepEqual(matches, expect, pattern) |
| t.end() |
| }) |
| }) |
| |
| tap.test(pattern + " sync", function (t) { |
| var matches = cleanResults(glob.sync(pattern)) |
| |
| t.deepEqual(matches, expect, "should match shell") |
| t.end() |
| }) |
| }) |
| |
| function cleanResults (m) { |
| // normalize discrepancies in ordering, duplication, |
| // and ending slashes. |
| return m.map(function (m) { |
| return m.replace(/\/+/g, "/").replace(/\/$/, "") |
| }).sort(alphasort).reduce(function (set, f) { |
| if (f !== set[set.length - 1]) set.push(f) |
| return set |
| }, []).sort(alphasort).map(function (f) { |
| // de-windows |
| return (process.platform !== 'win32') ? f |
| : f.replace(/^[a-zA-Z]:[\/\\]+/, '/').replace(/[\\\/]+/g, '/') |
| }) |
| } |