64 lines
1.7 KiB
JavaScript
64 lines
1.7 KiB
JavaScript
|
// 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, '/')
|
||
|
})
|
||
|
}
|