Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(59)

Side by Side Diff: chrome/test/data/extensions/api_test/file_system_provider/read_file/test.js

Issue 374543002: [fsp] Simplify browser tests by extracting the common code. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Fixed. Created 6 years, 5 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
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 'use strict'; 5 'use strict';
6 6
7 /** 7 /**
8 * @type {DOMFileSystem} 8 * @type {DOMFileSystem}
9 */ 9 */
10 var fileSystem = null; 10 var fileSystem = null;
11 11
12 /** 12 /**
13 * Map of opened files, from a <code>openRequestId</code> to <code>filePath 13 * Map of opened files, from a <code>openRequestId</code> to <code>filePath
14 * </code>. 14 * </code>.
15 * @type {Object.<number, string>} 15 * @type {Object.<number, string>}
16 */ 16 */
17 var openedFiles = {}; 17 var openedFiles = {};
18 18
19 /** 19 /**
20 * @type {string}
21 * @const
22 */
23 var FILE_SYSTEM_ID = 'chocolate-id';
24
25 /**
26 * @type {Object} 20 * @type {Object}
27 * @const 21 * @const
28 */ 22 */
29 var TESTING_ROOT = Object.freeze({ 23 var TESTING_ROOT = Object.freeze({
30 isDirectory: true, 24 isDirectory: true,
31 name: '', 25 name: '',
32 size: 0, 26 size: 0,
33 modificationTime: new Date(2014, 4, 28, 10, 39, 15) 27 modificationTime: new Date(2014, 4, 28, 10, 39, 15)
34 }); 28 });
35 29
(...skipping 22 matching lines...) Expand all
58 * @const 52 * @const
59 */ 53 */
60 var TESTING_BROKEN_TIRAMISU_FILE = Object.freeze({ 54 var TESTING_BROKEN_TIRAMISU_FILE = Object.freeze({
61 isDirectory: false, 55 isDirectory: false,
62 name: 'broken-tiramisu.txt', 56 name: 'broken-tiramisu.txt',
63 size: TESTING_TEXT.length, 57 size: TESTING_TEXT.length,
64 modificationTime: new Date(2014, 1, 25, 7, 36, 12) 58 modificationTime: new Date(2014, 1, 25, 7, 36, 12)
65 }); 59 });
66 60
67 /** 61 /**
68 * Gets volume information for the provided file system.
69 *
70 * @param {string} fileSystemId Id of the provided file system.
71 * @param {function(Object)} callback Callback to be called on result, with the
72 * volume information object in case of success, or null if not found.
73 */
74 function getVolumeInfo(fileSystemId, callback) {
75 chrome.fileBrowserPrivate.getVolumeMetadataList(function(volumeList) {
76 for (var i = 0; i < volumeList.length; i++) {
77 if (volumeList[i].extensionId == chrome.runtime.id &&
78 volumeList[i].fileSystemId == fileSystemId) {
79 callback(volumeList[i]);
80 return;
81 }
82 }
83 callback(null);
84 });
85 }
86
87 /**
88 * Returns metadata for the requested entry. 62 * Returns metadata for the requested entry.
89 * 63 *
90 * To successfully acquire a DirectoryEntry, or even a DOMFileSystem, this event 64 * To successfully acquire a DirectoryEntry, or even a DOMFileSystem, this event
91 * must be implemented and return correct values. 65 * must be implemented and return correct values.
92 * 66 *
93 * @param {GetMetadataRequestedOptions} options Options. 67 * @param {GetMetadataRequestedOptions} options Options.
94 * @param {function(Object)} onSuccess Success callback with metadata passed 68 * @param {function(Object)} onSuccess Success callback with metadata passed
95 * an argument. 69 * an argument.
96 * @param {function(string)} onError Error callback with an error code. 70 * @param {function(string)} onError Error callback with an error code.
97 */ 71 */
98 function onGetMetadataRequested(options, onSuccess, onError) { 72 function onGetMetadataRequested(options, onSuccess, onError) {
99 if (options.fileSystemId != FILE_SYSTEM_ID) { 73 if (options.fileSystemId != test_util.FILE_SYSTEM_ID) {
100 onError('SECURITY'); // enum ProviderError. 74 onError('SECURITY'); // enum ProviderError.
101 return; 75 return;
102 } 76 }
103 77
104 if (options.entryPath == '/') { 78 if (options.entryPath == '/') {
105 onSuccess(TESTING_ROOT); 79 onSuccess(TESTING_ROOT);
106 return; 80 return;
107 } 81 }
108 82
109 if (options.entryPath == '/' + TESTING_TIRAMISU_FILE.name) { 83 if (options.entryPath == '/' + TESTING_TIRAMISU_FILE.name) {
(...skipping 11 matching lines...) Expand all
121 95
122 /** 96 /**
123 * Requests opening a file at <code>filePath</code>. Further file operations 97 * Requests opening a file at <code>filePath</code>. Further file operations
124 * will be associated with the <code>requestId</code> 98 * will be associated with the <code>requestId</code>
125 * 99 *
126 * @param {OpenFileRequestedOptions} options Options. 100 * @param {OpenFileRequestedOptions} options Options.
127 * @param {function()} onSuccess Success callback. 101 * @param {function()} onSuccess Success callback.
128 * @param {function(string)} onError Error callback. 102 * @param {function(string)} onError Error callback.
129 */ 103 */
130 function onOpenFileRequested(options, onSuccess, onError) { 104 function onOpenFileRequested(options, onSuccess, onError) {
131 if (options.fileSystemId != FILE_SYSTEM_ID || options.mode != 'READ' || 105 if (options.fileSystemId != test_util.FILE_SYSTEM_ID ||
132 options.create) { 106 options.mode != 'READ' || options.create) {
133 onError('SECURITY'); // enum ProviderError. 107 onError('SECURITY'); // enum ProviderError.
134 return; 108 return;
135 } 109 }
136 110
137 if (options.filePath == '/' + TESTING_TIRAMISU_FILE.name || 111 if (options.filePath == '/' + TESTING_TIRAMISU_FILE.name ||
138 options.filePath == '/' + TESTING_BROKEN_TIRAMISU_FILE.name) { 112 options.filePath == '/' + TESTING_BROKEN_TIRAMISU_FILE.name) {
139 openedFiles[options.requestId] = options.filePath; 113 openedFiles[options.requestId] = options.filePath;
140 onSuccess(); 114 onSuccess();
141 } else { 115 } else {
142 onError('NOT_FOUND'); // enum ProviderError. 116 onError('NOT_FOUND'); // enum ProviderError.
143 } 117 }
144 } 118 }
145 119
146 /** 120 /**
147 * Requests closing a file previously opened with <code>openRequestId</code>. 121 * Requests closing a file previously opened with <code>openRequestId</code>.
148 * 122 *
149 * @param {CloseFileRequestedOptions} options Options. 123 * @param {CloseFileRequestedOptions} options Options.
150 * @param {function()} onSuccess Success callback. 124 * @param {function()} onSuccess Success callback.
151 * @param {function(string)} onError Error callback. 125 * @param {function(string)} onError Error callback.
152 */ 126 */
153 function onCloseFileRequested(options, onSuccess, onError) { 127 function onCloseFileRequested(options, onSuccess, onError) {
154 if (options.fileSystemId != FILE_SYSTEM_ID || 128 if (options.fileSystemId != test_util.FILE_SYSTEM_ID ||
155 !openedFiles[options.openRequestId]) { 129 !openedFiles[options.openRequestId]) {
156 onError('SECURITY'); // enum ProviderError. 130 onError('SECURITY'); // enum ProviderError.
157 return; 131 return;
158 } 132 }
159 133
160 delete openedFiles[options.openRequestId]; 134 delete openedFiles[options.openRequestId];
161 onSuccess(); 135 onSuccess();
162 } 136 }
163 137
164 /** 138 /**
165 * Requests reading contents of a file, previously opened with <code> 139 * Requests reading contents of a file, previously opened with <code>
166 * openRequestId</code>. 140 * openRequestId</code>.
167 * 141 *
168 * @param {ReadFileRequestedOptions} options Options. 142 * @param {ReadFileRequestedOptions} options Options.
169 * @param {function(ArrayBuffer, boolean)} onSuccess Success callback with a 143 * @param {function(ArrayBuffer, boolean)} onSuccess Success callback with a
170 * chunk of data, and information if more data will be provided later. 144 * chunk of data, and information if more data will be provided later.
171 * @param {function(string)} onError Error callback. 145 * @param {function(string)} onError Error callback.
172 */ 146 */
173 function onReadFileRequested(options, onSuccess, onError) { 147 function onReadFileRequested(options, onSuccess, onError) {
174 var filePath = openedFiles[options.openRequestId]; 148 var filePath = openedFiles[options.openRequestId];
175 if (options.fileSystemId != FILE_SYSTEM_ID || !filePath) { 149 if (options.fileSystemId != test_util.FILE_SYSTEM_ID || !filePath) {
176 onError('SECURITY'); // enum ProviderError. 150 onError('SECURITY'); // enum ProviderError.
177 return; 151 return;
178 } 152 }
179 153
180 if (filePath == '/' + TESTING_TIRAMISU_FILE.name) { 154 if (filePath == '/' + TESTING_TIRAMISU_FILE.name) {
181 var textToSend = TESTING_TEXT.substr(options.offset, options.length); 155 var textToSend = TESTING_TEXT.substr(options.offset, options.length);
182 var textToSendInChunks = textToSend.split(/(?= )/); 156 var textToSendInChunks = textToSend.split(/(?= )/);
183 157
184 textToSendInChunks.forEach(function(item, index) { 158 textToSendInChunks.forEach(function(item, index) {
185 // Convert item (string) to an ArrayBuffer. 159 // Convert item (string) to an ArrayBuffer.
(...skipping 18 matching lines...) Expand all
204 onError('INVALID_OPERATION'); // enum ProviderError. 178 onError('INVALID_OPERATION'); // enum ProviderError.
205 } 179 }
206 180
207 /** 181 /**
208 * Sets up the tests. Called once per all test cases. In case of a failure, 182 * Sets up the tests. Called once per all test cases. In case of a failure,
209 * the callback is not called. 183 * the callback is not called.
210 * 184 *
211 * @param {function()} callback Success callback. 185 * @param {function()} callback Success callback.
212 */ 186 */
213 function setUp(callback) { 187 function setUp(callback) {
214 chrome.fileSystemProvider.mount( 188 chrome.fileSystemProvider.onGetMetadataRequested.addListener(
215 {fileSystemId: FILE_SYSTEM_ID, displayName: 'chocolate.zip'}, 189 onGetMetadataRequested);
216 function() { 190 chrome.fileSystemProvider.onOpenFileRequested.addListener(
217 chrome.fileSystemProvider.onGetMetadataRequested.addListener( 191 onOpenFileRequested);
218 onGetMetadataRequested); 192 chrome.fileSystemProvider.onReadFileRequested.addListener(
219 chrome.fileSystemProvider.onOpenFileRequested.addListener( 193 onReadFileRequested);
220 onOpenFileRequested); 194 chrome.fileSystemProvider.onCloseFileRequested.addListener(
221 chrome.fileSystemProvider.onReadFileRequested.addListener( 195 onCloseFileRequested); test_util.mountFileSystem(callback);
222 onReadFileRequested);
223 var volumeId =
224 'provided:' + chrome.runtime.id + '-' + FILE_SYSTEM_ID + '-user';
225
226 getVolumeInfo(FILE_SYSTEM_ID, function(volumeInfo) {
227 chrome.test.assertTrue(!!volumeInfo);
228 chrome.fileBrowserPrivate.requestFileSystem(
229 volumeInfo.volumeId,
230 function(inFileSystem) {
231 chrome.test.assertTrue(!!inFileSystem);
232
233 fileSystem = inFileSystem;
234 callback();
235 });
236 });
237 },
238 function() {
239 chrome.test.fail();
240 });
241 } 196 }
242 197
243 /** 198 /**
244 * Runs all of the test cases, one by one. 199 * Runs all of the test cases, one by one.
245 */ 200 */
246 function runTests() { 201 function runTests() {
247 chrome.test.runTests([ 202 chrome.test.runTests([
248 // Read contents of the /tiramisu.txt file. This file exists, so it should 203 // Read contents of the /tiramisu.txt file. This file exists, so it should
249 // succeed. 204 // succeed.
250 function readFileSuccess() { 205 function readFileSuccess() {
251 var onTestSuccess = chrome.test.callbackPass(); 206 var onTestSuccess = chrome.test.callbackPass();
252 fileSystem.root.getFile( 207 test_util.fileSystem.root.getFile(
253 TESTING_TIRAMISU_FILE.name, 208 TESTING_TIRAMISU_FILE.name,
254 {create: false}, 209 {create: false},
255 function(fileEntry) { 210 function(fileEntry) {
256 fileEntry.file(function(file) { 211 fileEntry.file(function(file) {
257 var fileReader = new FileReader(); 212 var fileReader = new FileReader();
258 fileReader.onload = function(e) { 213 fileReader.onload = function(e) {
259 var text = fileReader.result; 214 var text = fileReader.result;
260 chrome.test.assertEq(TESTING_TEXT, text); 215 chrome.test.assertEq(TESTING_TEXT, text);
261 onTestSuccess(); 216 onTestSuccess();
262 }; 217 };
263 fileReader.onerror = function(e) { 218 fileReader.onerror = function(e) {
264 chrome.test.fail(fileReader.error.name); 219 chrome.test.fail(fileReader.error.name);
265 }; 220 };
266 fileReader.readAsText(file); 221 fileReader.readAsText(file);
267 }, 222 },
268 function(error) { 223 function(error) {
269 chrome.test.fail(error.name); 224 chrome.test.fail(error.name);
270 }); 225 });
271 }, 226 },
272 function(error) { 227 function(error) {
273 chrome.test.fail(error.name); 228 chrome.test.fail(error.name);
274 }); 229 });
275 }, 230 },
276 // Read contents of a file file, but with an error on the way. This should 231 // Read contents of a file file, but with an error on the way. This should
277 // result in an error. 232 // result in an error.
278 function readEntriesError() { 233 function readEntriesError() {
279 var onTestSuccess = chrome.test.callbackPass(); 234 var onTestSuccess = chrome.test.callbackPass();
280 fileSystem.root.getFile( 235 test_util.fileSystem.root.getFile(
281 TESTING_BROKEN_TIRAMISU_FILE.name, 236 TESTING_BROKEN_TIRAMISU_FILE.name,
282 {create: false}, 237 {create: false},
283 function(fileEntry) { 238 function(fileEntry) {
284 fileEntry.file(function(file) { 239 fileEntry.file(function(file) {
285 var fileReader = new FileReader(); 240 var fileReader = new FileReader();
286 fileReader.onload = function(e) { 241 fileReader.onload = function(e) {
287 chrome.test.fail(); 242 chrome.test.fail();
288 }; 243 };
289 fileReader.onerror = function(e) { 244 fileReader.onerror = function(e) {
290 chrome.test.assertEq('NotReadableError', fileReader.error.name); 245 chrome.test.assertEq('NotReadableError', fileReader.error.name);
291 onTestSuccess(); 246 onTestSuccess();
292 }; 247 };
293 fileReader.readAsText(file); 248 fileReader.readAsText(file);
294 }, 249 },
295 function(error) { 250 function(error) {
296 chrome.test.fail(); 251 chrome.test.fail();
297 }); 252 });
298 }, 253 },
299 function(error) { 254 function(error) {
300 chrome.test.fail(error.name); 255 chrome.test.fail(error.name);
301 }); 256 });
302 } 257 }
303 ]); 258 ]);
304 } 259 }
305 260
306 // Setup and run all of the test cases. 261 // Setup and run all of the test cases.
307 setUp(runTests); 262 setUp(runTests);
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698