OLD | NEW |
---|---|
1 // Copyright 2014 The Chromium Authors. All rights reserved. | 1 // Copyright 2014 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 | 5 |
6 var TestConstants = { | 6 var TestConstants = { |
7 wallpaperURL: 'https://test.com/test.jpg', | 7 wallpaperURL: 'https://test.com/test.jpg', |
8 // A dummy string which is used to mock an image. | 8 // A dummy string which is used to mock an image. |
9 image: '*#*@#&' | 9 image: '*#*@#&', |
10 // A dummy array which is used to mock the file content. | |
11 fileString: [1,2,3,4,5,6,7,8,9,10,11,12,13,14,15] | |
12 }; | |
13 | |
14 function FileReader() { | |
15 this.result = ''; | |
16 this.onloadend = function() { | |
17 }; | |
18 this.readAsArrayBuffer = function(mockFile) { | |
19 this.result = mockFile; | |
20 this.onloadend(); | |
21 } | |
22 } | |
23 | |
24 // Mock localFS handler | |
25 var mockLocalFS = { | |
26 root: { | |
27 dirList: [], | |
28 rootFileList: [], | |
29 getDirectory: function(dir, isCreate, success, failure) { | |
30 for(var i = 0; i < this.dirList.length; i++) { | |
31 if (this.dirList[i].name == dir) { | |
32 success(this.dirList[i]); | |
33 return; | |
34 } | |
35 } | |
36 if (isCreate.create == false) { | |
bshe
2014/10/27 20:14:51
nit: it is probably more robust to use:
if (!isCre
Ran
2014/10/27 22:22:01
Done.
| |
37 if (failure) { | |
38 failure('DIR_NOT_FOUND'); | |
39 } | |
40 } | |
41 else { | |
bshe
2014/10/27 20:14:51
nit: move 'else' to previous line. The same for al
Ran
2014/10/27 22:22:01
Done.
| |
42 this.dirList.push(new DirEntry(dir)); | |
43 success(this.dirList[this.dirList.length - 1]); | |
44 } | |
45 }, | |
46 getFile: function(fileName, isCreate, success, failure) { | |
47 if (fileName[0] == '/') | |
48 fileName = fileName.substr(1); | |
49 if (fileName.split('/').length == 1) { | |
50 for(var i = 0; i < this.rootFileList.length; i++) { | |
51 if (fileName == this.rootFileList[i].name) { | |
52 success(this.rootFileList[i]); | |
53 return; | |
54 } | |
55 } | |
56 if (isCreate.create == false) { | |
bshe
2014/10/27 20:14:51
nit: if (!isCreate.create)
Ran
2014/10/27 22:22:01
Done.
| |
57 if (failure) | |
58 failure('FILE_NOT_FOUND'); | |
59 } | |
60 else { | |
61 this.rootFileList.push(new FileEntry(fileName)); | |
62 success(this.rootFileList[this.rootFileList.length - 1]); | |
63 } | |
64 } | |
65 else if (fileName.split('/').length == 2) { | |
bshe
2014/10/27 20:14:51
nit: move else if to previous line
Ran
2014/10/27 22:22:01
Done.
| |
66 var realDirName = fileName.split('/')[0]; | |
67 var realFileName = fileName.split('/')[1]; | |
68 var getDirSuccess = function(dirEntry) { | |
69 dirEntry.getFile(realFileName, isCreate, success, failure); | |
70 }; | |
71 this.getDirectory(realDirName, {create: false}, | |
72 getDirSuccess, failure); | |
73 } | |
74 else { | |
75 console.error('Only support one-level fileSystem mock') | |
76 } | |
77 } | |
78 }, | |
79 addFile: function(fileName) { | |
bshe
2014/10/27 20:14:51
nit: perhaps rename it to mockTestFile to be more
Ran
2014/10/27 22:22:01
Done.
| |
80 if (fileName[0] == '/') | |
81 fileName = fileName.substr(1); | |
82 if (fileName.split('/').length == 1) | |
83 this.root.rootFileList.push(new FileEntry(fileName)); | |
84 else if (fileName.split('/').length == 2) { | |
85 var realDirName = fileName.split('/')[0]; | |
86 var realFileName = fileName.split('/')[1]; | |
87 var getDirSuccess = function(dirEntry) { | |
88 dirEntry.getFile(realFileName, {create: true}, function(){} ); | |
89 }; | |
90 this.root.getDirectory(realDirName, {create: true}, getDirSuccess); | |
91 } | |
92 else { | |
93 console.error('Only support one-level fileSystem mock') | |
94 } | |
95 }, | |
96 reset: function() { | |
97 this.root.dirList = []; | |
98 this.root.rootFileList = []; | |
99 } | |
100 }; | |
101 | |
102 function DirEntry(dirname) { | |
103 this.name = dirname; | |
104 this.fileList = []; | |
105 this.getFile = function(fileName, isCreate, success, failure) { | |
106 for(var i = 0; i < this.fileList.length; i++) { | |
107 if (fileName == this.fileList[i].name) { | |
108 success(this.fileList[i]); | |
109 return; | |
110 } | |
111 } | |
112 if (isCreate.create == false) { | |
113 if (failure) { | |
114 failure('FILE_NOT_FOUND'); | |
115 } | |
116 } | |
117 else { | |
118 this.fileList.push( new FileEntry(fileName) ); | |
119 success(this.fileList[this.fileList.length - 1]); | |
120 } | |
121 } | |
122 } | |
123 | |
124 window.webkitRequestFileSystem = function(type, size, callback) { | |
125 callback(mockLocalFS); | |
126 } | |
127 | |
128 var mockWriter = { | |
129 write: function(blobData) { | |
130 } | |
131 }; | |
132 | |
133 function FileEntry(filename) { | |
134 this.name = filename; | |
135 this.file = function(callback) { | |
136 callback(TestConstants.fileString); | |
137 }; | |
138 this.createWriter = function(callback) { | |
139 callback(mockWriter); | |
140 }; | |
141 this.remove = function(success, failure) { | |
142 }; | |
143 } | |
144 | |
145 // Mock chrome syncFS handler | |
146 var mockSyncFS = { | |
147 root: { | |
148 fileList: [], | |
149 getFile: function(fileName, isCreate, success, failure) { | |
150 for(var i = 0; i < this.fileList.length; i++) { | |
151 if (fileName == this.fileList[i].name) { | |
152 success(this.fileList[i]); | |
153 return; | |
154 } | |
155 } | |
156 if (isCreate.create == false) { | |
157 if (failure) | |
158 failure('FILE_NOT_FOUND'); | |
159 } | |
160 else { | |
161 this.fileList.push(new FileEntry(fileName)); | |
162 success(this.fileList[this.fileList.length - 1]); | |
163 } | |
164 }, | |
165 }, | |
166 addFile: function(fileName) { | |
167 this.root.fileList.push(new FileEntry(fileName)); | |
168 }, | |
169 reset: function() { | |
170 this.root.fileList = []; | |
171 } | |
10 }; | 172 }; |
11 | 173 |
12 // Mock a few chrome apis. | 174 // Mock a few chrome apis. |
13 var chrome = { | 175 var chrome = { |
14 storage: { | 176 storage: { |
15 local: { | 177 local: { |
16 get: function(key, callback) { | 178 get: function(key, callback) { |
17 var items = {}; | 179 var items = {}; |
18 switch (key) { | 180 switch (key) { |
19 case Constants.AccessLocalWallpaperInfoKey: | 181 case Constants.AccessLocalWallpaperInfoKey: |
20 items[Constants.AccessLocalWallpaperInfoKey] = { | 182 items[Constants.AccessLocalWallpaperInfoKey] = { |
21 'url': 'dummy', | 183 'url': 'dummy', |
22 'layout': 'dummy', | 184 'layout': 'dummy', |
23 'source': 'dummy' | 185 'source': Constants.WallpaperSourceEnum.Custom |
24 }; | 186 }; |
25 } | 187 } |
26 callback(items); | 188 callback(items); |
27 }, | 189 }, |
28 set: function(items, callback) { | 190 set: function(items, callback) { |
29 } | 191 } |
30 }, | 192 }, |
31 sync: { | 193 sync: { |
32 get: function(key, callback) { | 194 get: function(key, callback) { |
33 }, | 195 }, |
34 set: function(items, callback) { | 196 set: function(items, callback) { |
35 } | 197 } |
36 }, | 198 }, |
37 onChanged: { | 199 onChanged: { |
38 addListener: function(listener) { | 200 addListener: function(listener) { |
39 this.dispatch = listener; | 201 this.dispatch = listener; |
40 } | 202 } |
41 } | 203 } |
42 }, | 204 }, |
43 syncFileSystem: { | 205 syncFileSystem: { |
44 requestFileSystem: function(fs) { | 206 requestFileSystem: function(callback) { |
207 callback(mockSyncFS); | |
45 }, | 208 }, |
46 onFileStatusChanged: { | 209 onFileStatusChanged: { |
47 addListener: function(listener) { | 210 addListener: function(listener) { |
48 this.dispatch = listener; | 211 this.dispatch = listener; |
49 } | 212 } |
50 } | 213 } |
51 }, | 214 }, |
52 app: { | 215 app: { |
53 runtime: { | 216 runtime: { |
54 onLaunched: { | 217 onLaunched: { |
55 addListener: function(listener) { | 218 addListener: function(listener) { |
56 } | 219 } |
57 } | 220 } |
58 } | 221 } |
59 }, | 222 }, |
60 alarms: { | 223 alarms: { |
61 onAlarm: { | 224 onAlarm: { |
62 addListener: function(listener) { | 225 addListener: function(listener) { |
63 } | 226 } |
64 } | 227 } |
65 }, | 228 }, |
66 wallpaperPrivate: { | 229 wallpaperPrivate: { |
67 getStrings: function(callback) { | 230 getStrings: function(callback) { |
68 callback({isExperimental: false}); | 231 callback({isExperimental: false}); |
232 }, | |
233 setCustomWallpaper: function(data, layout, isGenerateThumbnail, fileName, | |
234 callback) { | |
69 } | 235 } |
236 }, | |
237 runtime: { | |
238 lastError: null | |
70 } | 239 } |
71 }; | 240 }; |
72 | 241 |
73 (function (exports) { | 242 (function (exports) { |
74 var originalXMLHttpRequest = window.XMLHttpRequest; | 243 var originalXMLHttpRequest = window.XMLHttpRequest; |
75 | 244 |
76 // Mock XMLHttpRequest. It dispatches a 'load' event immediately with status | 245 // Mock XMLHttpRequest. It dispatches a 'load' event immediately with status |
77 // equals to 200 in function |send|. | 246 // equals to 200 in function |send|. |
78 function MockXMLHttpRequest() { | 247 function MockXMLHttpRequest() { |
79 } | 248 } |
(...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
126 }; | 295 }; |
127 | 296 |
128 function uninstallMockXMLHttpRequest() { | 297 function uninstallMockXMLHttpRequest() { |
129 window['XMLHttpRequest'] = originalXMLHttpRequest; | 298 window['XMLHttpRequest'] = originalXMLHttpRequest; |
130 }; | 299 }; |
131 | 300 |
132 exports.installMockXMLHttpRequest = installMockXMLHttpRequest; | 301 exports.installMockXMLHttpRequest = installMockXMLHttpRequest; |
133 exports.uninstallMockXMLHttpRequest = uninstallMockXMLHttpRequest; | 302 exports.uninstallMockXMLHttpRequest = uninstallMockXMLHttpRequest; |
134 | 303 |
135 })(window); | 304 })(window); |
OLD | NEW |