payos
Version:
325 lines (296 loc) • 10.2 kB
JavaScript
var async = require("../lib/async")
var assert = require("assert")
var Path = require("path")
var fs = require("fs")
var testDir = "assets_TEST"
var Test = {
setUp: function(next) {
this.$dir = process.cwd()
process.chdir(__dirname)
async.rmtree(__dirname + "/assets_TEST", function() {
async.copytree(__dirname + "/assets", testDir, next)
})
},
tearDown: function(next) {
process.chdir(this.$dir)
async.rmtree(__dirname + "/assets_TEST", next)
},
"test stat": function(next) {
async.files([testDir + "/1.txt"])
.stat()
.end(function(err, file) {
assert.ok(!err)
assert.ok(file.stat.isFile())
next()
})
},
"test unlink existing file should remove the file": function(next) {
async.files([testDir + "/3.txt"])
.unlink()
.end(function(err, file) {
Path.exists(file.path, function(exists) {
assert.ok(!exists)
next()
})
})
},
"test rmdir empty dir should remove it": function(next) {
async.files([testDir + "/emptydir"])
.rmdir()
.end(function(err, file) {
Path.exists(file.path, function(exists) {
assert.ok(!exists)
next()
})
})
},
"test rmdir non empty dir should fail": function(next) {
async.files([testDir + "/nonemptydir"])
.rmdir()
.end(function(err, file) {
assert.ok(err)
Path.exists(file.path, function(exists) {
assert.ok(exists)
next()
})
})
},
"test rmdir non existing dir should fail": function(next) {
async.files([testDir + "/foobar"])
.rmdir()
.end(function(err, file) {
assert.ok(err)
next()
})
},
"test read file": function(next) {
async.files([testDir + "/1.txt"])
.readFile()
.end(function(err, file) {
assert.ok(!err)
assert.equal(file.data, "1")
next()
})
},
"test open/close file": function(next) {
async.files([testDir + "/1.txt"])
.open()
.each(function(file, next) {
assert.ok(file.fd)
next()
})
.close()
.each(function(file, next) {
assert.ok(!file.fd)
next()
})
.end(function(err) {
assert.ok(!err)
next()
})
},
"test chmod": function(next) {
async.files([testDir + "/1.txt"])
.chmod(0600)
.each(function(file, next) {
fs.stat(file.path, function(err, stat) {
// TODO node.js error?
//assert.equal(stat.mode, 0600)
next()
})
})
.stat()
.chmod(0644)
.each(function(file, next) {
fs.stat(file.path, function(err, stat) {
// TODO node.js error?
//assert.equal(stat.mode, file.stat.mode)
next()
})
})
.end(function(err) {
assert.ok(!err)
next()
})
},
"test mkdir/rmdir": function(next) {
async.files([testDir + "/newdir"])
.mkdir(0755)
.each(function(file, next) {
Path.exists(file.path, function(exists) {
assert.ok(exists)
next()
})
})
.rmdir()
.each(function(file, next) {
Path.exists(file.path, function(exists) {
assert.ok(!exists)
next()
})
})
.end(function(err) {
assert.ok(!err)
next()
})
},
"test write file with data from argument": function(next) {
async.files([testDir + "/4.txt"])
.writeFile("4")
.readFile()
.end(function(err, file) {
assert.ok(!err)
assert.equal(file.data, "4")
next()
})
},
"test write file with data from stream": function(next) {
async.files([testDir + "/5.txt"])
.each(function(file) {
file.data = "5"
})
.writeFile()
.readFile()
.end(function(err, file) {
assert.ok(!err)
assert.equal(file.data, "5")
next()
})
},
"test walk files pre order": function(next) {
async.walkfiles(testDir + "/walk", null, async.PREORDER)
.get("path")
.toArray(function(err, values) {
var expected = [
"",
"/dir1",
"/dir1/1.txt",
"/dir2",
"/dir2/dir22",
"/dir2/dir22/22.txt",
"/dir2/2.txt",
"/1.txt"
].map(function(dir) {
return testDir + "/walk" + dir
})
assert.equal(JSON.stringify(values), JSON.stringify(expected))
next()
})
},
"test walk files post order": function(next) {
async.walkfiles(testDir + "/walk", null, async.POSTORDER)
.get("path")
.toArray(function(err, values) {
var expected = [
"/dir1/1.txt",
"/dir1",
"/dir2/dir22/22.txt",
"/dir2/dir22",
"/dir2/2.txt",
"/dir2",
"/1.txt",
""
].map(function(dir) {
return testDir + "/walk" + dir
})
assert.equal(JSON.stringify(values), JSON.stringify(expected))
next()
})
},
"test glob without magic": function(next) {
async.glob(testDir + "/1.txt")
.get("path")
.toArray(function(err, values) {
assert.equal(JSON.stringify(values), JSON.stringify([testDir + "/1.txt"]))
next()
})
},
"test glob with * in file name": function(next) {
async.glob(testDir + "/*.txt")
.get("path")
.toArray(function(err, values) {
var expected = ["1" , "2", "3", "11"].map(function(val) {
return testDir + "/" + val + ".txt"
})
assert.equal(JSON.stringify(values.sort()), JSON.stringify(expected.sort()))
next()
})
},
"test glob with ? in file name": function(next) {
async.glob(testDir + "/?.txt")
.get("path")
.toArray(function(err, values) {
var expected = ["1" , "2", "3"].map(function(val) {
return testDir + "/" + val + ".txt"
})
assert.equal(JSON.stringify(values.sort()), JSON.stringify(expected.sort()))
next()
})
},
"test glob with only file magic": function(next) {
process.chdir(testDir)
async.glob("*.txt")
.get("path")
.toArray(function(err, values) {
var expected = ["1" , "2", "3", "11"].map(function(val) {
return val + ".txt"
})
assert.equal(JSON.stringify(values.sort()), JSON.stringify(expected.sort()))
next()
})
},
"test glob without magic for not existing file should return empty list": function(next) {
async.glob(testDir + "/notexisting/juhu.txt")
.toArray(function(err, values) {
assert.equal(values.length, 0)
next()
})
},
"test glob with non existing file name should return empty list" : function(next) {
async.glob(testDir + "/notexisting/*.txt")
.toArray(function(err, values) {
assert.equal(values.length, 0)
next()
})
},
"test glob with * in path": function(next) {
async.glob(testDir + "/dir*/*.txt")
.get("path")
.toArray(function(err, values) {
var expected = [
testDir + "/dir1/1.txt",
testDir + "/dir2/2.txt",
testDir + "/dir11/11.txt"
]
assert.equal(JSON.stringify(values.sort()), JSON.stringify(expected.sort()))
next()
})
},
"test glob with ? in path": function(next) {
async.glob(testDir + "/dir?/*.txt")
.get("path")
.toArray(function(err, values) {
var expected = [
testDir + "/dir1/1.txt",
testDir + "/dir2/2.txt"
]
assert.equal(JSON.stringify(values.sort()), JSON.stringify(expected.sort()))
next()
})
},
"test glob with * in path and ? name": function(next) {
async.glob(testDir + "/dir*/?.txt")
.get("path")
.toArray(function(err, values) {
var expected = [
testDir + "/dir1/1.txt",
testDir + "/dir2/2.txt"
]
assert.equal(JSON.stringify(values.sort()), JSON.stringify(expected.sort()))
next()
})
},
}
module.exports = require("../lib/async/test").testcase(Test, "fs")
if (module === require.main)
module.exports.exec()