Add fs.rename, add some FileConnection natives, add fs.rename tests

This commit is contained in:
Marco Castelluccio 2014-08-14 17:41:38 -07:00
Родитель b6bffdff5d
Коммит 3f65ff0957
4 изменённых файлов: 123 добавлений и 3 удалений

Просмотреть файл

@ -312,6 +312,40 @@ var fs = (function() {
});
}
// Callers of this function should make sure
// newPath doesn't exist.
function rename(oldPath, newPath, cb) {
oldPath = normalizePath(oldPath);
newPath = normalizePath(newPath);
list(oldPath, function(files) {
if (files != null && files.length > 0) {
cb(false);
return;
}
asyncStorage.getItem(oldPath, function(data) {
if (data == null) {
cb(false);
return;
}
remove(oldPath, function(removed) {
if (!removed) {
cb(false);
return;
}
if (data instanceof Blob) {
create(newPath, data, cb);
} else {
mkdir(newPath, cb);
}
});
});
});
}
return {
dirname: dirname,
init: init,
@ -331,5 +365,6 @@ var fs = (function() {
mkdir: mkdir,
mkdirp: mkdirp,
size: size,
rename: rename,
};
})();

Просмотреть файл

@ -1374,11 +1374,34 @@ Native["com/ibm/oti/connection/file/Connection.newFileImpl.([B)I"] = function(ct
throw VM.Pause;
}
Native["com/ibm/oti/connection/file/Connection.deleteFileImpl.([B)Z"] =
Native["com/ibm/oti/connection/file/Connection.deleteDirImpl.([B)Z"] = function(ctx, stack) {
var path = util.decodeUtf8(stack.pop());
fs.remove(path, function(removed) {
stack.push(removed ? 1 : 0);
ctx.resume();
});
throw VM.Pause;
}
Native["com/ibm/oti/connection/file/Connection.isReadOnlyImpl.([B)Z"] = function(ctx, stack) {
var path = util.decodeUtf8(stack.pop()), _this = stack.pop();
stack.push(0);
}
Native["com/ibm/oti/connection/file/Connection.isWriteOnlyImpl.([B)Z"] = function(ctx, stack) {
var path = util.decodeUtf8(stack.pop()), _this = stack.pop();
stack.push(0);
}
Native["com/ibm/oti/connection/file/Connection.renameImpl.([B[B)V"] = function(ctx, stack) {
var newPath = util.decodeUtf8(stack.pop()), oldPath = util.decodeUtf8(stack.pop()), _this = stack.pop();
fs.rename(oldPath, newPath, function() {
ctx.resume();
});
throw VM.Pause;
}
Native["com/ibm/oti/connection/file/Connection.truncateImpl.([BJ)V"] = function(ctx, stack) {
var newLength = stack.pop2().toNumber(), byteArray = stack.pop(), _this = stack.pop();

Просмотреть файл

@ -35,7 +35,7 @@ casper.test.begin("unit tests", 6, function(test) {
casper
.thenOpen("http://localhost:8000/tests/fstests.html")
.waitForText("DONE", function then() {
test.assertTextExists("DONE: 82 pass, 0 FAIL", "run fs.js unit tests");
test.assertTextExists("DONE: 95 PASS, 0 FAIL", "run fs.js unit tests");
});
casper

Просмотреть файл

@ -26,10 +26,9 @@ function ok(a, msg) {
var tests = [];
function next() {
dump("next: " + tests.length);
if (tests.length == 0) {
ok(true, "TESTS COMPLETED");
console.log("DONE: " + passed + " pass, " + failed + " FAIL");
console.log("DONE: " + passed + " PASS, " + failed + " FAIL");
} else {
var test = tests.shift();
test();
@ -480,6 +479,69 @@ tests.push(function() {
});
});
tests.push(function() {
fs.rename("/tmp/tmp.txt", "/tmp/tmp2.txt", function(renamed) {
ok(renamed, "File renamed");
next();
});
});
tests.push(function() {
fs.create("/file", new Blob([1,2,3,4]), function(created) {
ok(created, "File created");
fs.rename("/file", "/file2", function(renamed) {
ok(renamed, "File renamed");
fs.size("/file2", function(size) {
is(size, 4, "Renamed file size is correct");
fs.exists("/file", function(exists) {
ok(!exists, "file doesn't exist anymore");
next();
});
});
});
});
});
tests.push(function() {
fs.mkdir("/newdir", function(created) {
ok(created, "Directory created");
fs.rename("/newdir", "/newdir2", function(renamed) {
ok(renamed, "Directory renamed");
fs.exists("/newdir", function(exists) {
ok(!exists, "newdir doesn't exist anymore");
next();
});
});
});
});
tests.push(function() {
fs.rename("/tmp", "/tmp3", function(renamed) {
ok(!renamed, "Can't rename a non-empty directory");
fs.exists("/tmp", function(exists) {
ok(exists, "Directory still exists after an error while renaming");
next();
});
});
});
tests.push(function() {
fs.rename("/tmp", "/newdir2", function(renamed) {
ok(!renamed, "Can't rename a directory with a path to a directory that already exists");
fs.exists("/tmp", function(exists) {
ok(exists, "Directory still exists after an error while renaming");
next();
});
});
});
tests.push(function() {
fs.rename("/nonexisting", "/nonexising2", function(renamed) {
ok(!renamed, "Can't rename a non-existing file");
next();
});
})
asyncStorage.clear(function() {
fs.init(function() {
next();