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

Unified Diff: chrome/test/data/extensions/api_test/file_system_provider/truncate/test.js

Issue 417983002: [fsp] Add support for truncating files. (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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « chrome/test/data/extensions/api_test/file_system_provider/truncate/manifest.json ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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..1f0ffd0bd87e514e0dce51e0cb7be1f04f8d0389
--- /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.
+ * @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);
« no previous file with comments | « chrome/test/data/extensions/api_test/file_system_provider/truncate/manifest.json ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698