Chromium Code Reviews| Index: chrome/test/data/extensions/api_test/file_system_provider/truncate/test.js |
| diff --git a/chrome/test/data/extensions/api_test/file_system_provider/truncate/test.js b/chrome/test/data/extensions/api_test/file_system_provider/truncate/test.js |
| new file mode 100644 |
| index 0000000000000000000000000000000000000000..0a8eb3d31f0c7113c0f2a0120dfc737de2d07b4e |
| --- /dev/null |
| +++ b/chrome/test/data/extensions/api_test/file_system_provider/truncate/test.js |
| @@ -0,0 +1,144 @@ |
| +// Copyright 2014 The Chromium Authors. All rights reserved. |
| +// Use of this source code is governed by a BSD-style license that can be |
| +// found in the LICENSE file. |
| + |
| +'use strict'; |
| + |
| +/** |
| + * @type {string} |
| + * @const |
| + */ |
| +var TESTING_TIRAMISU_FILE_NAME = 'tiramisu.txt'; |
| + |
| +/** |
| + * Requests truncating a file to the specified length. |
| + * |
| + * @param {TruncateRequestedOptions} options Options. |
| + * @param {function(} onSuccess Success callback. |
|
hirono
2014/07/24 10:16:48
nit: function(
mtomasz
2014/07/25 04:24:26
Nice catch. Done.
|
| + * @param {function(string)} onError Error callback. |
| + */ |
| +function onTruncateRequested(options, onSuccess, onError) { |
| + if (options.fileSystemId != test_util.FILE_SYSTEM_ID) { |
| + onError('SECURITY'); // enum ProviderError. |
| + return; |
| + } |
| + |
| + if (!(options.filePath in test_util.defaultMetadata)) { |
| + onError('INVALID_OPERATION'); // enum ProviderError. |
| + return; |
| + } |
| + |
| + var metadata = test_util.defaultMetadata[options.filePath]; |
| + |
| + // Truncating beyond the end of the file. |
| + if (options.length > metadata.size) { |
| + onError('INVALID_OPERATION'); |
| + return; |
| + } |
| + |
| + metadata.size = options.length; |
| + onSuccess(); |
| +} |
| + |
| +/** |
| + * Sets up the tests. Called once per all test cases. In case of a failure, |
| + * the callback is not called. |
| + * |
| + * @param {function()} callback Success callback. |
| + */ |
| +function setUp(callback) { |
| + chrome.fileSystemProvider.onGetMetadataRequested.addListener( |
| + test_util.onGetMetadataRequestedDefault); |
| + chrome.fileSystemProvider.onOpenFileRequested.addListener( |
| + test_util.onOpenFileRequested); |
| + chrome.fileSystemProvider.onCloseFileRequested.addListener( |
| + test_util.onCloseFileRequested); |
| + chrome.fileSystemProvider.onCreateFileRequested.addListener( |
| + test_util.onCreateFileRequested); |
| + |
| + test_util.defaultMetadata['/' + TESTING_TIRAMISU_FILE_NAME] = { |
| + isDirectory: false, |
| + name: TESTING_TIRAMISU_FILE_NAME, |
| + size: 128, |
| + modificationTime: new Date(2014, 1, 24, 6, 35, 11) |
| + }; |
| + |
| + chrome.fileSystemProvider.onTruncateRequested.addListener( |
| + onTruncateRequested); |
| + |
| + test_util.mountFileSystem(callback); |
| +} |
| + |
| +/** |
| + * Runs all of the test cases, one by one. |
| + */ |
| +function runTests() { |
| + chrome.test.runTests([ |
| + // Truncate a file. It should succeed. |
| + function truncateFileSuccess() { |
| + var onTestSuccess = chrome.test.callbackPass(); |
| + test_util.fileSystem.root.getFile( |
| + TESTING_TIRAMISU_FILE_NAME, |
| + {create: false, exclusive: true}, |
| + function(fileEntry) { |
| + fileEntry.createWriter(function(fileWriter) { |
| + fileWriter.onwriteend = function(e) { |
| + // Note that onwriteend() is called even if an error happened. |
| + if (fileWriter.error) |
| + return; |
| + chrome.test.assertEq( |
| + 64, |
| + test_util.defaultMetadata[ |
| + '/' + TESTING_TIRAMISU_FILE_NAME].size); |
| + onTestSuccess(); |
| + }; |
| + fileWriter.onerror = function(e) { |
| + chrome.test.fail(fileWriter.error.name); |
| + }; |
| + fileWriter.truncate(64); |
| + }, |
| + function(error) { |
| + chrome.test.fail(error.name); |
| + }); |
| + }, |
| + function(error) { |
| + chrome.test.fail(error.name); |
| + }); |
| + }, |
| + |
| + // Truncate a file to a length larger than size. This should result in an |
| + // error. |
| + function truncateBeyondFileError() { |
| + var onTestSuccess = chrome.test.callbackPass(); |
| + test_util.fileSystem.root.getFile( |
| + TESTING_TIRAMISU_FILE_NAME, |
| + {create: false, exclusive: false}, |
| + function(fileEntry) { |
| + fileEntry.createWriter(function(fileWriter) { |
| + fileWriter.onwriteend = function(e) { |
| + if (fileWriter.error) |
| + return; |
| + chrome.test.fail( |
| + 'Unexpectedly succeeded to truncate beyond a fiile.'); |
| + }; |
| + fileWriter.onerror = function(e) { |
| + chrome.test.assertEq( |
| + 'InvalidModificationError', fileWriter.error.name); |
| + onTestSuccess(); |
| + }; |
| + fileWriter.truncate(test_util.defaultMetadata[ |
| + '/' + TESTING_TIRAMISU_FILE_NAME].size * 2); |
| + }, |
| + function(error) { |
| + chrome.test.fail(); |
| + }); |
| + }, |
| + function(error) { |
| + chrome.test.fail(error.name); |
| + }); |
| + } |
| + ]); |
| +} |
| + |
| +// Setup and run all of the test cases. |
| +setUp(runTests); |