OLD | NEW |
---|---|
(Empty) | |
1 // Copyright 2013 The Chromium Authors. All rights reserved. | |
2 // Use of this source code is governed by a BSD-style license that can be | |
3 // found in the LICENSE file. | |
4 | |
5 'use strict'; | |
6 | |
7 var fileSystemId; | |
8 var fileSystem; | |
9 | |
10 /** | |
11 * @type {Object} | |
12 * @const | |
13 */ | |
14 var TESTING_ROOT = Object.freeze({ | |
15 isDirectory: true, | |
16 name: '', | |
17 size: 0, | |
18 modificationTime: new Date(2014, 4, 28, 10, 39, 15) | |
19 }); | |
20 | |
21 /** | |
22 * @type {Object} | |
23 * @const | |
24 */ | |
25 var TESTING_HELLO_DIR = Object.freeze({ | |
26 isDirectory: true, | |
27 name: 'hello', | |
28 size: 0, | |
29 modificationTime: new Date(2014, 3, 27, 9, 38, 14) | |
30 }); | |
31 | |
32 /** | |
33 * @type {Object} | |
34 * @const | |
35 */ | |
36 var TESTING_CANDIES_DIR = Object.freeze({ | |
37 isDirectory: true, | |
38 name: 'candies', | |
39 size: 0, | |
40 modificationTime: new Date(2014, 2, 26, 8, 37, 13) | |
41 }); | |
42 | |
43 /** | |
44 * @type {Object} | |
45 * @const | |
46 */ | |
47 var TESTING_TIRAMISU_FILE = Object.freeze({ | |
48 isDirectory: false, | |
49 name: 'tiramisu.txt', | |
50 size: 1986, | |
51 modificationTime: new Date(2014, 1, 25, 7, 36, 12) | |
52 }); | |
53 | |
54 /** | |
55 * Returns entries in the requested directory. | |
56 * | |
57 * @param {number} inFileSystemId ID of the file system. | |
58 * @param {string} entryPath Path of the directory. | |
hirono
2014/05/07 04:12:23
directoryPath?
mtomasz
2014/05/07 04:57:30
Done.
| |
59 * @param {function(Array.<Object>, boolean)} onSuccess Success callback with | |
60 * a list of entries. May be called multiple times. | |
61 * @param {function(string}} onError Error callback with an error code. | |
hirono
2014/05/07 04:12:23
')' is missing.
mtomasz
2014/05/07 04:57:30
Done.
| |
62 */ | |
63 function onReadDirectoryRequested( | |
64 inFileSystemId, directoryPath, onSuccess, onError) { | |
65 if (inFileSystemId != fileSystemId) { | |
66 onError('SECURITY_ERROR'); // enum ProviderError. | |
67 return; | |
68 } | |
69 | |
70 if (directoryPath != '/' + TESTING_HELLO_DIR.name) { | |
71 onError('NOT_FOUND'); // enum ProviderError. | |
72 return; | |
73 } | |
74 | |
75 onSuccess([TESTING_TIRAMISU_FILE], true /* has_next */); | |
76 onSuccess([TESTING_CANDIES_DIR], false /* has_next */); | |
77 } | |
78 | |
79 /** | |
80 * Returns metadata for the requested entry. | |
81 * | |
82 * To successfully acquire a DirectoryEntry, or even a DOMFileSystem, this event | |
83 * must be implemented and return correct values. | |
84 * | |
85 * @param {number} inFileSystemId ID of the file system. | |
86 * @param {string} entryPath Path of the requested entry. | |
87 * @param {function(Object)} onSuccess Success callback with metadata passed | |
88 * an argument. | |
89 * @param {function(string}} onError Error callback with an error code. | |
90 */ | |
91 function onGetMetadataRequested( | |
92 inFileSystemId, entryPath, onSuccess, onError) { | |
93 if (inFileSystemId != fileSystemId) { | |
94 onError('SECURITY_ERROR'); // enum ProviderError. | |
95 return; | |
96 } | |
97 | |
98 if (entryPath == '/') { | |
99 onSuccess(TESTING_ROOT); | |
100 return; | |
101 } | |
102 | |
103 if (entryPath == '/' + TESTING_HELLO_DIR.name) { | |
104 onSuccess(TESTING_HELLO_DIR); | |
105 return; | |
106 } | |
107 | |
108 onError('NOT_FOUND'); // enum ProviderError. | |
109 } | |
110 | |
111 /** | |
112 * Sets up the tests. Called once per all test cases. In case of a failure, | |
113 * the callback is not called. | |
114 * | |
115 * @param {function()} callback Success callback. | |
116 */ | |
117 function setUp(callback) { | |
118 chrome.fileSystemProvider.mount('chocolate.zip', function(id) { | |
119 fileSystemId = id; | |
120 chrome.fileSystemProvider.onReadDirectoryRequested.addListener( | |
121 onReadDirectoryRequested); | |
hirono
2014/05/07 04:12:23
Indent is 4.
mtomasz
2014/05/07 04:57:30
Done.
| |
122 chrome.fileSystemProvider.onGetMetadataRequested.addListener( | |
123 onGetMetadataRequested); | |
hirono
2014/05/07 04:12:23
ditto.
mtomasz
2014/05/07 04:57:30
Done.
| |
124 var volumeId = | |
125 'provided:' + chrome.runtime.id + '-' + fileSystemId + '-user'; | |
126 | |
127 chrome.fileBrowserPrivate.requestFileSystem( | |
128 volumeId, | |
129 function(inFileSystem) { | |
130 chrome.test.assertTrue(!!inFileSystem); | |
131 | |
132 fileSystem = inFileSystem; | |
133 callback(); | |
134 }); | |
135 }, function() { | |
136 chrome.test.fail(); | |
137 }); | |
138 } | |
139 | |
140 /** | |
141 * Runs all of the test cases, one by one. | |
142 */ | |
143 function runTests() { | |
144 chrome.test.runTests([ | |
145 // Read contents of the /hello directory. This directory exists, so it | |
146 // should succeed. | |
147 function readEntriesSuccess() { | |
148 var onTestSuccess = chrome.test.callbackPass(function() {}); | |
149 fileSystem.root.getDirectory( | |
150 'hello', | |
151 {create: false}, | |
152 function(dirEntry) { | |
153 var dirReader = dirEntry.createReader(); | |
154 var entries = []; | |
155 var readEntriesNext = function() { | |
156 dirReader.readEntries(function(inEntries) { | |
157 Array.prototype.push.apply(entries, inEntries); | |
158 if (!inEntries.length) { | |
159 // No more entries, so verify. | |
160 chrome.test.assertEq(2, entries.length); | |
161 chrome.test.assertTrue(entries[0].isFile); | |
162 chrome.test.assertEq('tiramisu.txt', entries[0].name); | |
163 chrome.test.assertEq( | |
164 '/hello/tiramisu.txt', entries[0].fullPath); | |
165 chrome.test.assertTrue(entries[1].isDirectory); | |
166 chrome.test.assertEq('candies', entries[1].name); | |
167 chrome.test.assertEq('/hello/candies', entries[1].fullPath); | |
168 onTestSuccess(); | |
169 } else { | |
170 readEntriesNext(); | |
171 } | |
172 }, function(error) { | |
173 chrome.test.fail(); | |
174 }); | |
175 }; | |
176 readEntriesNext(); | |
177 }, | |
178 function(error) { | |
179 chrome.test.fail(); | |
180 }); | |
181 }, | |
182 // Read contents of a directory which does not exist, what should return an | |
183 // error. | |
184 function readEntriesError() { | |
185 var onTestSuccess = chrome.test.callbackPass(function() {}); | |
186 fileSystem.root.getDirectory( | |
187 'cranberries', | |
188 {create: false}, | |
189 function(dirEntry) { | |
190 chrome.test.fail(); | |
191 }, | |
192 function(error) { | |
193 chrome.test.assertEq('NotFoundError', error.name); | |
194 onTestSuccess(); | |
195 }); | |
196 } | |
197 ]); | |
198 } | |
199 | |
200 // Setup and run all of the test cases. | |
201 setUp(runTests); | |
OLD | NEW |