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 '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 * @type {string} | |
14 * @const | |
15 */ | |
16 var FILE_SYSTEM_ID = 'vanilla'; | |
17 | |
18 /** | |
19 * @type {Object} | 13 * @type {Object} |
20 * @const | 14 * @const |
21 */ | 15 */ |
22 var TESTING_ROOT = Object.freeze({ | 16 var TESTING_ROOT = Object.freeze({ |
23 isDirectory: true, | 17 isDirectory: true, |
24 name: '', | 18 name: '', |
25 size: 0, | 19 size: 0, |
26 modificationTime: new Date(2014, 4, 28, 10, 39, 15) | 20 modificationTime: new Date(2014, 4, 28, 10, 39, 15) |
27 }); | 21 }); |
28 | 22 |
(...skipping 24 matching lines...) Expand all Loading... |
53 * @const | 47 * @const |
54 */ | 48 */ |
55 var TESTING_TIRAMISU_FILE = Object.freeze({ | 49 var TESTING_TIRAMISU_FILE = Object.freeze({ |
56 isDirectory: false, | 50 isDirectory: false, |
57 name: 'tiramisu.txt', | 51 name: 'tiramisu.txt', |
58 size: 1986, | 52 size: 1986, |
59 modificationTime: new Date(2014, 1, 25, 7, 36, 12) | 53 modificationTime: new Date(2014, 1, 25, 7, 36, 12) |
60 }); | 54 }); |
61 | 55 |
62 /** | 56 /** |
63 * Gets volume information for the provided file system. | |
64 * | |
65 * @param {string} fileSystemId Id of the provided file system. | |
66 * @param {function(Object)} callback Callback to be called on result, with the | |
67 * volume information object in case of success, or null if not found. | |
68 */ | |
69 function getVolumeInfo(fileSystemId, callback) { | |
70 chrome.fileBrowserPrivate.getVolumeMetadataList(function(volumeList) { | |
71 for (var i = 0; i < volumeList.length; i++) { | |
72 if (volumeList[i].extensionId == chrome.runtime.id && | |
73 volumeList[i].fileSystemId == fileSystemId) { | |
74 callback(volumeList[i]); | |
75 return; | |
76 } | |
77 } | |
78 callback(null); | |
79 }); | |
80 } | |
81 | |
82 /** | |
83 * Returns entries in the requested directory. | 57 * Returns entries in the requested directory. |
84 * | 58 * |
85 * @param {ReadDirectoryRequestedOptions} options Options. | 59 * @param {ReadDirectoryRequestedOptions} options Options. |
86 * @param {function(Array.<Object>, boolean)} onSuccess Success callback with | 60 * @param {function(Array.<Object>, boolean)} onSuccess Success callback with |
87 * a list of entries. May be called multiple times. | 61 * a list of entries. May be called multiple times. |
88 * @param {function(string)} onError Error callback with an error code. | 62 * @param {function(string)} onError Error callback with an error code. |
89 */ | 63 */ |
90 function onReadDirectoryRequested(options, onSuccess, onError) { | 64 function onReadDirectoryRequested(options, onSuccess, onError) { |
91 if (options.fileSystemId != FILE_SYSTEM_ID) { | 65 if (options.fileSystemId != test_util.FILE_SYSTEM_ID) { |
92 onError('SECURITY'); // enum ProviderError. | 66 onError('SECURITY'); // enum ProviderError. |
93 return; | 67 return; |
94 } | 68 } |
95 | 69 |
96 if (options.directoryPath != '/' + TESTING_HELLO_DIR.name) { | 70 if (options.directoryPath != '/' + TESTING_HELLO_DIR.name) { |
97 onError('NOT_FOUND'); // enum ProviderError. | 71 onError('NOT_FOUND'); // enum ProviderError. |
98 return; | 72 return; |
99 } | 73 } |
100 | 74 |
101 onSuccess([TESTING_TIRAMISU_FILE], true /* hasMore */); | 75 onSuccess([TESTING_TIRAMISU_FILE], true /* hasMore */); |
102 onSuccess([TESTING_CANDIES_DIR], false /* hasMore */); | 76 onSuccess([TESTING_CANDIES_DIR], false /* hasMore */); |
103 } | 77 } |
104 | 78 |
105 /** | 79 /** |
106 * Returns metadata for the requested entry. | 80 * Returns metadata for the requested entry. |
107 * | 81 * |
108 * To successfully acquire a DirectoryEntry, or even a DOMFileSystem, this event | 82 * To successfully acquire a DirectoryEntry, or even a DOMFileSystem, this event |
109 * must be implemented and return correct values. | 83 * must be implemented and return correct values. |
110 * | 84 * |
111 * @param {GetMetadataRequestedOptions} options Options. | 85 * @param {GetMetadataRequestedOptions} options Options. |
112 * @param {function(Object)} onSuccess Success callback with metadata passed | 86 * @param {function(Object)} onSuccess Success callback with metadata passed |
113 * an argument. | 87 * an argument. |
114 * @param {function(string)} onError Error callback with an error code. | 88 * @param {function(string)} onError Error callback with an error code. |
115 */ | 89 */ |
116 function onGetMetadataRequested(options, onSuccess, onError) { | 90 function onGetMetadataRequested(options, onSuccess, onError) { |
117 if (options.fileSystemId != FILE_SYSTEM_ID) { | 91 if (options.fileSystemId != test_util.FILE_SYSTEM_ID) { |
118 onError('SECURITY'); // enum ProviderError. | 92 onError('SECURITY'); // enum ProviderError. |
119 return; | 93 return; |
120 } | 94 } |
121 | 95 |
122 if (options.entryPath == '/') { | 96 if (options.entryPath == '/') { |
123 onSuccess(TESTING_ROOT); | 97 onSuccess(TESTING_ROOT); |
124 return; | 98 return; |
125 } | 99 } |
126 | 100 |
127 if (options.entryPath == '/' + TESTING_HELLO_DIR.name) { | 101 if (options.entryPath == '/' + TESTING_HELLO_DIR.name) { |
128 onSuccess(TESTING_HELLO_DIR); | 102 onSuccess(TESTING_HELLO_DIR); |
129 return; | 103 return; |
130 } | 104 } |
131 | 105 |
132 onError('NOT_FOUND'); // enum ProviderError. | 106 onError('NOT_FOUND'); // enum ProviderError. |
133 } | 107 } |
134 | 108 |
135 /** | 109 /** |
136 * Sets up the tests. Called once per all test cases. In case of a failure, | 110 * Sets up the tests. Called once per all test cases. In case of a failure, |
137 * the callback is not called. | 111 * the callback is not called. |
138 * | 112 * |
139 * @param {function()} callback Success callback. | 113 * @param {function()} callback Success callback. |
140 */ | 114 */ |
141 function setUp(callback) { | 115 function setUp(callback) { |
142 chrome.fileSystemProvider.mount( | 116 chrome.fileSystemProvider.onGetMetadataRequested.addListener( |
143 { | 117 onGetMetadataRequested); |
144 fileSystemId: FILE_SYSTEM_ID, | 118 chrome.fileSystemProvider.onReadDirectoryRequested.addListener( |
145 displayName: 'chocolate.zip' | 119 onReadDirectoryRequested); |
146 }, | 120 test_util.mountFileSystem(callback); |
147 function() { | |
148 chrome.fileSystemProvider.onReadDirectoryRequested.addListener( | |
149 onReadDirectoryRequested); | |
150 chrome.fileSystemProvider.onGetMetadataRequested.addListener( | |
151 onGetMetadataRequested); | |
152 getVolumeInfo(FILE_SYSTEM_ID, function(volumeInfo) { | |
153 chrome.test.assertTrue(!!volumeInfo); | |
154 chrome.fileBrowserPrivate.requestFileSystem( | |
155 volumeInfo.volumeId, | |
156 function(inFileSystem) { | |
157 chrome.test.assertTrue(!!inFileSystem); | |
158 | |
159 fileSystem = inFileSystem; | |
160 callback(); | |
161 }); | |
162 }); | |
163 }, | |
164 function() { | |
165 chrome.test.fail(); | |
166 }); | |
167 } | 121 } |
168 | 122 |
169 /** | 123 /** |
170 * Runs all of the test cases, one by one. | 124 * Runs all of the test cases, one by one. |
171 */ | 125 */ |
172 function runTests() { | 126 function runTests() { |
173 chrome.test.runTests([ | 127 chrome.test.runTests([ |
174 // Read contents of the /hello directory. This directory exists, so it | 128 // Read contents of the /hello directory. This directory exists, so it |
175 // should succeed. | 129 // should succeed. |
176 function readEntriesSuccess() { | 130 function readEntriesSuccess() { |
177 var onTestSuccess = chrome.test.callbackPass(); | 131 var onTestSuccess = chrome.test.callbackPass(); |
178 fileSystem.root.getDirectory( | 132 test_util.fileSystem.root.getDirectory( |
179 'hello', | 133 'hello', |
180 {create: false}, | 134 {create: false}, |
181 function(dirEntry) { | 135 function(dirEntry) { |
182 var dirReader = dirEntry.createReader(); | 136 var dirReader = dirEntry.createReader(); |
183 var entries = []; | 137 var entries = []; |
184 var readEntriesNext = function() { | 138 var readEntriesNext = function() { |
185 dirReader.readEntries(function(inEntries) { | 139 dirReader.readEntries(function(inEntries) { |
186 Array.prototype.push.apply(entries, inEntries); | 140 Array.prototype.push.apply(entries, inEntries); |
187 if (!inEntries.length) { | 141 if (!inEntries.length) { |
188 // No more entries, so verify. | 142 // No more entries, so verify. |
(...skipping 16 matching lines...) Expand all Loading... |
205 readEntriesNext(); | 159 readEntriesNext(); |
206 }, | 160 }, |
207 function(error) { | 161 function(error) { |
208 chrome.test.fail(); | 162 chrome.test.fail(); |
209 }); | 163 }); |
210 }, | 164 }, |
211 // Read contents of a directory which does not exist, what should return an | 165 // Read contents of a directory which does not exist, what should return an |
212 // error. | 166 // error. |
213 function readEntriesError() { | 167 function readEntriesError() { |
214 var onTestSuccess = chrome.test.callbackPass(); | 168 var onTestSuccess = chrome.test.callbackPass(); |
215 fileSystem.root.getDirectory( | 169 test_util.fileSystem.root.getDirectory( |
216 'cranberries', | 170 'cranberries', |
217 {create: false}, | 171 {create: false}, |
218 function(dirEntry) { | 172 function(dirEntry) { |
219 chrome.test.fail(); | 173 chrome.test.fail(); |
220 }, | 174 }, |
221 function(error) { | 175 function(error) { |
222 chrome.test.assertEq('NotFoundError', error.name); | 176 chrome.test.assertEq('NotFoundError', error.name); |
223 onTestSuccess(); | 177 onTestSuccess(); |
224 }); | 178 }); |
225 } | 179 } |
226 ]); | 180 ]); |
227 } | 181 } |
228 | 182 |
229 // Setup and run all of the test cases. | 183 // Setup and run all of the test cases. |
230 setUp(runTests); | 184 setUp(runTests); |
OLD | NEW |