Index: chrome/test/data/chromeos/wallpaper_manager/unit_tests/api_mock.js |
diff --git a/chrome/test/data/chromeos/wallpaper_manager/unit_tests/api_mock.js b/chrome/test/data/chromeos/wallpaper_manager/unit_tests/api_mock.js |
index f7318bcd47be23af2ca696daf8efa4623672333b..df498c7605348ca11b57aeec7bf865dbd729ffee 100644 |
--- a/chrome/test/data/chromeos/wallpaper_manager/unit_tests/api_mock.js |
+++ b/chrome/test/data/chromeos/wallpaper_manager/unit_tests/api_mock.js |
@@ -6,7 +6,178 @@ |
var TestConstants = { |
wallpaperURL: 'https://test.com/test.jpg', |
// A dummy string which is used to mock an image. |
- image: '*#*@#&' |
+ image: '*#*@#&', |
+ // A dummy array which is used to mock the file content. |
+ fileString: [1,2,3,4,5,6,7,8,9,10,11,12,13,14,15] |
+}; |
+ |
+function FileReader() { |
+ this.result = ''; |
+ this.onloadend = function() { |
+ }; |
+ this.readAsArrayBuffer = function(mockFile) { |
+ this.result = mockFile; |
+ this.onloadend(); |
+ } |
+} |
+ |
+// Mock localFS handler |
+var mockLocalFS = { |
+ root: { |
+ dirList: [], |
+ rootFileList: [], |
+ getDirectory: function(dir, isCreate, success, failure) { |
+ for(var i = 0; i < this.dirList.length; i++) { |
+ if (this.dirList[i].name == dir) { |
+ success(this.dirList[i]); |
+ return; |
+ } |
+ } |
+ if (!isCreate.create) { |
+ if (failure) { |
bshe
2014/10/28 22:34:57
nit: perhaps easier to read this way:
if (!isCreat
Ran
2014/10/29 19:13:13
I don't think they are equivalent. As if we pass i
bshe
2014/10/30 12:51:36
dooh. My mistake. you are right.
|
+ failure('DIR_NOT_FOUND'); |
+ } |
+ } else { |
+ this.dirList.push(new DirEntry(dir)); |
+ success(this.dirList[this.dirList.length - 1]); |
+ } |
+ }, |
+ getFile: function(fileName, isCreate, success, failure) { |
+ if (fileName[0] == '/') |
+ fileName = fileName.substr(1); |
+ if (fileName.split('/').length == 1) { |
+ for(var i = 0; i < this.rootFileList.length; i++) { |
+ if (fileName == this.rootFileList[i].name) { |
+ success(this.rootFileList[i]); |
+ return; |
+ } |
+ } |
+ if (!isCreate.create) { |
+ if (failure) |
+ failure('FILE_NOT_FOUND'); |
+ } else { |
+ this.rootFileList.push(new FileEntry(fileName)); |
+ success(this.rootFileList[this.rootFileList.length - 1]); |
+ } |
+ } else if (fileName.split('/').length == 2) { |
+ var realDirName = fileName.split('/')[0]; |
+ var realFileName = fileName.split('/')[1]; |
+ var getDirSuccess = function(dirEntry) { |
+ dirEntry.getFile(realFileName, isCreate, success, failure); |
+ }; |
+ this.getDirectory(realDirName, {create: false}, |
+ getDirSuccess, failure); |
+ } else { |
+ console.error('Only support one-level fileSystem mock') |
bshe
2014/10/28 22:34:57
nit: Only support one level deep subdirectory.
Ran
2014/10/29 19:13:13
Done.
|
+ } |
+ } |
+ }, |
+ mockTestFile: function(fileName) { |
+ var ret; |
bshe
2014/10/28 22:34:57
nit: ret/mockFile
Ran
2014/10/29 19:13:13
Done.
|
+ if (fileName[0] == '/') |
+ fileName = fileName.substr(1); |
+ if (fileName.split('/').length == 1) { |
+ ret = new FileEntry(fileName); |
+ this.root.rootFileList.push(ret); |
+ } else if (fileName.split('/').length == 2) { |
+ var realDirName = fileName.split('/')[0]; |
+ var realFileName = fileName.split('/')[1]; |
+ var getDirSuccess = function(dirEntry) { |
+ dirEntry.getFile(realFileName, {create: true}, |
+ function(fe) {ret = fe;} ); |
+ }; |
+ this.root.getDirectory(realDirName, {create: true}, getDirSuccess); |
+ } else { |
+ console.error('Only support one-level fileSystem mock') |
+ } |
+ return ret; |
+ }, |
+ reset: function() { |
+ this.root.dirList = []; |
+ this.root.rootFileList = []; |
+ } |
+}; |
+ |
+function DirEntry(dirname) { |
+ this.name = dirname; |
+ this.fileList = []; |
+ this.getFile = function(fileName, isCreate, success, failure) { |
+ for(var i = 0; i < this.fileList.length; i++) { |
+ if (fileName == this.fileList[i].name) { |
+ success(this.fileList[i]); |
+ return; |
+ } |
+ } |
+ if (!isCreate.create) { |
+ if (failure) { |
+ failure('FILE_NOT_FOUND'); |
+ } |
+ } else { |
+ this.fileList.push( new FileEntry(fileName) ); |
+ success(this.fileList[this.fileList.length - 1]); |
+ } |
+ } |
+} |
+ |
+window.webkitRequestFileSystem = function(type, size, callback) { |
+ callback(mockLocalFS); |
+} |
+ |
+function Blob(arg) { |
+ var data = arg[0]; |
+ this.content = ''; |
+ if (typeof data == 'string') { |
+ this.content = data; |
+ } else { |
+ this.content = Array.prototype.join.call(data); |
+ } |
+} |
+ |
+var mockWriter = { |
+ write: function(blobData) { |
+ } |
+}; |
+ |
+function FileEntry(filename) { |
+ this.name = filename; |
+ this.file = function(callback) { |
+ callback(TestConstants.fileString); |
+ }; |
+ this.createWriter = function(callback) { |
+ callback(mockWriter); |
+ }; |
+ this.remove = function(success, failure) { |
+ }; |
+} |
+ |
+// Mock chrome syncFS handler |
+var mockSyncFS = { |
+ root: { |
+ fileList: [], |
+ getFile: function(fileName, isCreate, success, failure) { |
+ for(var i = 0; i < this.fileList.length; i++) { |
+ if (fileName == this.fileList[i].name) { |
+ success(this.fileList[i]); |
+ return; |
+ } |
+ } |
+ if (!isCreate.create) { |
+ if (failure) |
+ failure('FILE_NOT_FOUND'); |
+ } else { |
+ this.fileList.push(new FileEntry(fileName)); |
+ success(this.fileList[this.fileList.length - 1]); |
+ } |
+ }, |
+ }, |
+ mockTestFile: function(fileName) { |
+ var ret = new FileEntry(fileName); |
+ this.root.fileList.push(ret); |
+ return ret; |
+ }, |
+ reset: function() { |
+ this.root.fileList = []; |
+ } |
}; |
// Mock a few chrome apis. |
@@ -20,7 +191,7 @@ var chrome = { |
items[Constants.AccessLocalWallpaperInfoKey] = { |
'url': 'dummy', |
'layout': 'dummy', |
- 'source': 'dummy' |
+ 'source': Constants.WallpaperSourceEnum.Custom |
}; |
} |
callback(items); |
@@ -41,7 +212,8 @@ var chrome = { |
} |
}, |
syncFileSystem: { |
- requestFileSystem: function(fs) { |
+ requestFileSystem: function(callback) { |
+ callback(mockSyncFS); |
}, |
onFileStatusChanged: { |
addListener: function(listener) { |
@@ -66,7 +238,13 @@ var chrome = { |
wallpaperPrivate: { |
getStrings: function(callback) { |
callback({isExperimental: false}); |
+ }, |
+ setCustomWallpaper: function(data, layout, isGenerateThumbnail, fileName, |
+ callback) { |
} |
+ }, |
+ runtime: { |
+ lastError: null |
} |
}; |