зеркало из https://github.com/mozilla/pluotsorbet.git
Add fs.rename, add some FileConnection natives, add fs.rename tests
This commit is contained in:
Родитель
b6bffdff5d
Коммит
3f65ff0957
35
libs/fs.js
35
libs/fs.js
|
@ -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 {
|
return {
|
||||||
dirname: dirname,
|
dirname: dirname,
|
||||||
init: init,
|
init: init,
|
||||||
|
@ -331,5 +365,6 @@ var fs = (function() {
|
||||||
mkdir: mkdir,
|
mkdir: mkdir,
|
||||||
mkdirp: mkdirp,
|
mkdirp: mkdirp,
|
||||||
size: size,
|
size: size,
|
||||||
|
rename: rename,
|
||||||
};
|
};
|
||||||
})();
|
})();
|
||||||
|
|
23
midp/midp.js
23
midp/midp.js
|
@ -1374,11 +1374,34 @@ Native["com/ibm/oti/connection/file/Connection.newFileImpl.([B)I"] = function(ct
|
||||||
throw VM.Pause;
|
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) {
|
Native["com/ibm/oti/connection/file/Connection.isWriteOnlyImpl.([B)Z"] = function(ctx, stack) {
|
||||||
var path = util.decodeUtf8(stack.pop()), _this = stack.pop();
|
var path = util.decodeUtf8(stack.pop()), _this = stack.pop();
|
||||||
stack.push(0);
|
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) {
|
Native["com/ibm/oti/connection/file/Connection.truncateImpl.([BJ)V"] = function(ctx, stack) {
|
||||||
var newLength = stack.pop2().toNumber(), byteArray = stack.pop(), _this = stack.pop();
|
var newLength = stack.pop2().toNumber(), byteArray = stack.pop(), _this = stack.pop();
|
||||||
|
|
||||||
|
|
|
@ -35,7 +35,7 @@ casper.test.begin("unit tests", 6, function(test) {
|
||||||
casper
|
casper
|
||||||
.thenOpen("http://localhost:8000/tests/fstests.html")
|
.thenOpen("http://localhost:8000/tests/fstests.html")
|
||||||
.waitForText("DONE", function then() {
|
.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
|
casper
|
||||||
|
|
|
@ -26,10 +26,9 @@ function ok(a, msg) {
|
||||||
var tests = [];
|
var tests = [];
|
||||||
|
|
||||||
function next() {
|
function next() {
|
||||||
dump("next: " + tests.length);
|
|
||||||
if (tests.length == 0) {
|
if (tests.length == 0) {
|
||||||
ok(true, "TESTS COMPLETED");
|
ok(true, "TESTS COMPLETED");
|
||||||
console.log("DONE: " + passed + " pass, " + failed + " FAIL");
|
console.log("DONE: " + passed + " PASS, " + failed + " FAIL");
|
||||||
} else {
|
} else {
|
||||||
var test = tests.shift();
|
var test = tests.shift();
|
||||||
test();
|
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() {
|
asyncStorage.clear(function() {
|
||||||
fs.init(function() {
|
fs.init(function() {
|
||||||
next();
|
next();
|
||||||
|
|
Загрузка…
Ссылка в новой задаче