|
|
|
// show that no match events happen while paused.
|
|
|
|
var tap = require("tap")
|
|
|
|
, child_process = require("child_process")
|
|
|
|
// just some gnarly pattern with lots of matches
|
|
|
|
, pattern = "test/a/!(symlink)/**"
|
|
|
|
, bashResults = require("./bash-results.json")
|
|
|
|
, patterns = Object.keys(bashResults)
|
|
|
|
, glob = require("../")
|
|
|
|
, Glob = glob.Glob
|
|
|
|
, 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
|
|
|
|
}
|
|
|
|
|
|
|
|
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, '/')
|
|
|
|
})
|
|
|
|
}
|
|
|
|
|
|
|
|
var globResults = []
|
|
|
|
tap.test("use a Glob object, and pause/resume it", function (t) {
|
|
|
|
var g = new Glob(pattern)
|
|
|
|
, paused = false
|
|
|
|
, res = []
|
|
|
|
, expect = bashResults[pattern]
|
|
|
|
|
|
|
|
g.on("pause", function () {
|
|
|
|
console.error("pause")
|
|
|
|
})
|
|
|
|
|
|
|
|
g.on("resume", function () {
|
|
|
|
console.error("resume")
|
|
|
|
})
|
|
|
|
|
|
|
|
g.on("match", function (m) {
|
|
|
|
t.notOk(g.paused, "must not be paused")
|
|
|
|
globResults.push(m)
|
|
|
|
g.pause()
|
|
|
|
t.ok(g.paused, "must be paused")
|
|
|
|
setTimeout(g.resume.bind(g), 10)
|
|
|
|
})
|
|
|
|
|
|
|
|
g.on("end", function (matches) {
|
|
|
|
t.pass("reached glob end")
|
|
|
|
globResults = cleanResults(globResults)
|
|
|
|
matches = cleanResults(matches)
|
|
|
|
t.deepEqual(matches, globResults,
|
|
|
|
"end event matches should be the same as match events")
|
|
|
|
|
|
|
|
t.deepEqual(matches, expect,
|
|
|
|
"glob matches should be the same as bash results")
|
|
|
|
|
|
|
|
t.end()
|
|
|
|
})
|
|
|
|
})
|
|
|
|
|