Index: test/stub-modules/io.js |
=================================================================== |
--- a/test/stub-modules/io.js |
+++ b/test/stub-modules/io.js |
@@ -1,8 +1,10 @@ |
+let data = {}; |
+ |
// |
// Fake nsIFile implementation for our I/O |
// |
function FakeFile(path) |
{ |
this.path = path; |
} |
FakeFile.prototype = |
@@ -14,30 +16,131 @@ FakeFile.prototype = |
set leafName(value) |
{ |
this.path = value; |
}, |
append: function(path) |
{ |
this.path += path; |
}, |
+ exists: function() |
+ { |
+ return this.path in data; |
+ }, |
+ get contents() |
+ { |
+ return (data[this.path] || {}).contents; |
+ }, |
+ set contents(value) |
+ { |
+ data[this.path] = {lastModified: Date.now()}; |
+ return data[this.path].contents = value; |
+ }, |
+ get lastModifiedTime() |
+ { |
+ return (data[this.path] || {}).lastModified; |
+ }, |
+ set lastModifiedTime(value) |
+ { |
+ return (data[this.path] || {}).lastModified = value; |
+ }, |
clone: function() |
{ |
return new FakeFile(this.path); |
}, |
get parent() |
{ |
return {create: function() {}}; |
}, |
normalize: function() {} |
}; |
- |
exports.IO = { |
+ lineBreak: "\n", |
resolveFilePath: function(path) |
{ |
return new FakeFile(path); |
}, |
- statFile: function(path) |
+ writeToFile: function(file, generator, callback) |
{ |
- return true; |
- } |
+ Promise.resolve().then(() => |
+ { |
+ let data = []; |
+ for (let line of generator) |
+ data.push(line); |
+ file.contents = data.join("\n") + "\n"; |
+ }).then(() => callback(null)).catch(e => callback(e)); |
+ }, |
+ readFromFile: function(file, listener, callback) |
+ { |
+ Promise.resolve().then(() => |
+ { |
+ if (!data.hasOwnProperty(file.path)) |
+ throw new Error("File doesn't exist"); |
+ |
+ let lines = file.contents.split("\n"); |
+ if (lines.length && lines[lines.length - 1] == "") |
+ lines.pop(); |
+ for (let line of lines) |
+ listener.process(line); |
+ listener.process(null); |
+ }).then(() => callback(null)).catch(e => callback(e)); |
+ }, |
+ copyFile: function(from, to, callback) |
+ { |
+ Promise.resolve().then(() => |
+ { |
+ if (!data.hasOwnProperty(from.path)) |
+ throw new Error("File doesn't exist"); |
+ if (from.path == to.path) |
+ throw new Error("Cannot copy file to itself"); |
+ |
+ to.contents = from.contents; |
+ }).then(() => callback(null)).catch(e => callback(e)); |
+ }, |
+ renameFile: function(from, newName, callback) |
+ { |
+ Promise.resolve().then(() => |
+ { |
+ if (!data.hasOwnProperty(from.path)) |
+ throw new Error("File doesn't exist"); |
+ if (from.path == newName) |
+ throw new Error("Cannot move file to itself"); |
+ |
+ data[newName] = data[from.path]; |
+ delete data[from.path]; |
+ }).then(() => callback(null)).catch(e => callback(e)); |
+ }, |
+ removeFile: function(file, callback) |
+ { |
+ Promise.resolve().then(() => |
+ { |
+ if (!data.hasOwnProperty(file.path)) |
+ throw new Error("File doesn't exist"); |
+ |
+ delete data[file.path]; |
+ }).then(() => callback(null)).catch(e => callback(e)); |
+ }, |
+ statFile: function(file, callback) |
+ { |
+ Promise.resolve().then(() => |
+ { |
+ if (file.exists()) |
+ { |
+ return { |
+ exists: true, |
+ isDirectory: false, |
+ isFile: true, |
+ lastModified: file.lastModifiedTime |
+ }; |
+ } |
+ else |
+ { |
+ return { |
+ exists: false, |
+ isDirectory: false, |
+ isFile: false, |
+ lastModified: 0 |
+ }; |
+ } |
+ }).then(result => callback(null, result)).catch(e => callback(e)); |
+ }, |
}; |