| Index: chrome/test/data/extensions/api_test/filebrowser_component/restricted.js
|
| diff --git a/chrome/test/data/extensions/api_test/filebrowser_component/restricted.js b/chrome/test/data/extensions/api_test/filebrowser_component/restricted.js
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..fb57a99e58b5deb7855867c1fba291e0b0c9b915
|
| --- /dev/null
|
| +++ b/chrome/test/data/extensions/api_test/filebrowser_component/restricted.js
|
| @@ -0,0 +1,260 @@
|
| +// Copyright (c) 2012 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.
|
| +
|
| +// Directory that contains all the files used in tests. All files are created
|
| +// and cleaned up on C++ side of the test. Initially, all files will have
|
| +// content kTestFileContent.
|
| +var kTestDirPath = 'mount/test_dir/';
|
| +// Test file that will remain unchanged during tests. Used to test read-only
|
| +// functionality.
|
| +var kTestFilePath = 'mount/test_dir/test_file.foo';
|
| +// File that will be used to test delete operation.
|
| +var kTestFileToDelete = 'mount/test_dir/test_file_to_delete.foo';
|
| +// File that will be used to test write operations.
|
| +var kMutableTestFile = 'mount/test_dir/mutable_test_file.foo';
|
| +// File that should be created while testing create operation.
|
| +// Initialy does not exist.
|
| +var kTestFileToCreate = 'mount/test_dir/new_test_file.foo';
|
| +// File that will be moved when testing move operation.
|
| +var kTestFileToMove = 'mount/test_dir/test_file_to_move.foo';
|
| +// Data that will be written when testing write operation.
|
| +var kWriteData = '!!!';
|
| +// Name of target file in copy operation test.
|
| +// The file will be located in the test dir.
|
| +var kCopiedFileName = 'copied_file.foo';
|
| +// Name of target file in move operation test.
|
| +// The file will be located in the test dir.
|
| +var kMovedFileName = 'moved_file.foo';
|
| +// Initial content of the test files.
|
| +var kTestFileContent = "hello, world!";
|
| +
|
| +function TestRunner() {
|
| + this.fileSystem_ = undefined;
|
| +
|
| + // The entry set in |runGetDirTest|.
|
| + this.testDirEntry = undefined;
|
| + // Read only file under |kTestFilePath|.
|
| + this.testFileEntry = undefined;
|
| + // Last entry set in |runGetFileTest|.
|
| + this.lastFileEntry = undefined;
|
| +}
|
| +
|
| +// Sets |testFileEntry| to |lastFileEntry|.
|
| +TestRunner.prototype.rememberLastFileEntry = function() {
|
| + chrome.test.assertTrue(!!this.lastFileEntry, 'Cannot set null entry.');
|
| + this.testFileEntry = this.lastFileEntry;
|
| +};
|
| +
|
| +// Gets local filesystem used in tests.
|
| +TestRunner.prototype.init = function() {
|
| + // Get local FS.
|
| + console.log('Requesting local file system...');
|
| + chrome.fileBrowserPrivate.requestLocalFileSystem(
|
| + this.onFileSystemFetched_.bind(this));
|
| +};
|
| +
|
| +TestRunner.prototype.onFileSystemFetched_ = function(fs) {
|
| + chrome.test.assertTrue(!!fs, 'Error getting file system.');
|
| +
|
| + this.fileSystem_ = fs;
|
| + chrome.test.succeed();
|
| +};
|
| +
|
| +TestRunner.prototype.runGetFileTest = function(filePath, create, callback) {
|
| + self = this;
|
| + this.fileSystem_.root.getFile(filePath, {create: create},
|
| + function(entry) {
|
| + self.lastFileEntry = entry;
|
| + callback('getting file', null);
|
| + },
|
| + callback.bind(null, 'getting file'));
|
| +};
|
| +
|
| +TestRunner.prototype.runGetDirTest = function(filePath, create, callback) {
|
| + self = this;
|
| + this.fileSystem_.root.getDirectory(filePath, {create: create},
|
| + function(entry) {
|
| + self.testDirEntry = entry;
|
| + callback('getting directory', null);
|
| + },
|
| + callback.bind(null, 'getting directory'));
|
| +};
|
| +
|
| +TestRunner.prototype.runReadFileTest = function(entry, expectedText, callback) {
|
| + readFile(entry,
|
| + function(text) {
|
| + chrome.test.assertEq(expectedText, text, 'Unexpected file content');
|
| + callback('reading file', null);
|
| + },
|
| + callback.bind(null, 'reading file'));
|
| +};
|
| +
|
| +TestRunner.prototype.runWriteFileTest = function(entry, callback) {
|
| + var self = this;
|
| + entry.createWriter(
|
| + function(writer) {
|
| + writer.onerror = function () {
|
| + callback('writing to file', writer.error);
|
| + };
|
| + writer.onwrite = function(e) {
|
| + callback('writing to file', null);
|
| + };
|
| +
|
| + writer.write(new Blob([kWriteData], {'type': 'text/plain'}));
|
| + },
|
| + callback.bind(null, 'creating writer'));
|
| +};
|
| +
|
| +TestRunner.prototype.runDeleteFileTest = function(entry, callback) {
|
| + entry.remove(
|
| + function() {
|
| + callback('removing file', null);
|
| + },
|
| + callback.bind(null, 'removing file'));
|
| +};
|
| +
|
| +TestRunner.prototype.runCopyFileTest = function(sourceEntry,
|
| + targetDir,
|
| + targetName,
|
| + callback) {
|
| + var self = this;
|
| + sourceEntry.copyTo(targetDir, targetName,
|
| + function (entry) {
|
| + callback('copying file', null);
|
| + },
|
| + callback.bind(null, 'copying file'));
|
| +};
|
| +
|
| +TestRunner.prototype.runMoveFileTest = function(sourceEntry,
|
| + targetDir,
|
| + targetName,
|
| + callback) {
|
| + var self = this;
|
| + sourceEntry.moveTo(targetDir, targetName,
|
| + function (entry) {
|
| + callback('moving file', null);
|
| + },
|
| + callback.bind(null, 'moving file'));
|
| +};
|
| +
|
| +function errorCodeToString(errorCode) {
|
| + switch (errorCode) {
|
| + case FileError.QUOTA_EXCEEDED_ERR:
|
| + return 'QUOTA_EXCEEDED_ERR';
|
| + case FileError.NOT_FOUND_ERR:
|
| + return 'NOT_FOUND_ERR';
|
| + case FileError.SECURITY_ERR:
|
| + return 'SECURITY_ERR';
|
| + case FileError.INVALID_MODIFICATION_ERR:
|
| + return 'INVALID_MODIFICATION_ERR';
|
| + case FileError.INVALID_STATE_ERR:
|
| + return 'INVALID_STATE_ERR';
|
| + default:
|
| + return 'Unknown Error';
|
| + }
|
| +}
|
| +
|
| +// Checks operation results and ends the test.
|
| +// If the oiperation is supposed to fail, |expectedErrorCode| should be null.
|
| +// |error| is error returned by the operation. It is null if the operation
|
| +// succeeded.
|
| +// |testName| and |operation| parameters are used to make debugging strings
|
| +// displayed on test failure clearer and more helpful.
|
| +function verifyTestResult(testName, expectedErrorCode, operation, error) {
|
| + if (!error && !expectedErrorCode) {
|
| + chrome.test.succeed();
|
| + return;
|
| + }
|
| +
|
| + if (expectedErrorCode) {
|
| + chrome.test.assertTrue(!!error,
|
| + testName + ' unexpectedly succeeded. ' +
|
| + 'Expected error: ' + errorCodeToString(expectedErrorCode));
|
| + }
|
| +
|
| + chrome.test.assertEq(expectedErrorCode, error.code,
|
| + testName + ' got unexpected error.'+
|
| + 'Expected error: ' + errorCodeToString(expectedErrorCode) + '. ' +
|
| + 'Got error' + errorCodeToString(error.code) + ' while ' + operation);
|
| +
|
| + chrome.test.succeed();
|
| +}
|
| +
|
| +chrome.test.runTests([
|
| + function initTests() {
|
| + testRunner = new TestRunner();
|
| + testRunner.init();
|
| + },
|
| + function getFile() {
|
| + testRunner.runGetFileTest(kTestFilePath, false,
|
| + verifyTestResult.bind(null, 'Get Test File', null));
|
| + },
|
| + function saveFile() {
|
| + testRunner.rememberLastFileEntry();
|
| + chrome.test.succeed();
|
| + },
|
| + function getDirectory() {
|
| + testRunner.runGetDirTest(kTestDirPath, false,
|
| + verifyTestResult.bind(null, 'Get Directory', null));
|
| + },
|
| + function readFile() {
|
| + chrome.test.assertTrue(!!testRunner.testFileEntry,
|
| + 'Test file entry should have been created by previousd tests.');
|
| + testRunner.runReadFileTest(testRunner.testFileEntry, kTestFileContent,
|
| + verifyTestResult.bind(null, 'Read File', null));
|
| + },
|
| + function copyFile() {
|
| + chrome.test.assertTrue(!!testRunner.testFileEntry,
|
| + 'Test file entry should have been created by previousd tests.');
|
| + chrome.test.assertTrue(!!testRunner.testDirEntry,
|
| + 'Test dir entry should have been created by previousd tests.');
|
| + testRunner.runCopyFileTest(
|
| + testRunner.testFileEntry,
|
| + testRunner.testDirEntry,
|
| + kCopiedFileName,
|
| + verifyTestResult.bind(null, 'Copy File', FileError.SECURITY_ERR));
|
| + },
|
| + function getFileToMove() {
|
| + testRunner.lastFileEntry = undefined;
|
| + testRunner.runGetFileTest(kTestFileToMove, false,
|
| + verifyTestResult.bind(null, 'Get File To Move', null));
|
| + },
|
| + function moveFile() {
|
| + chrome.test.assertTrue(!!testRunner.lastFileEntry,
|
| + 'File entry to move should have been created by previousd tests.');
|
| + chrome.test.assertTrue(!!testRunner.testDirEntry,
|
| + 'Test dir entry should have been created by previousd tests.');
|
| + testRunner.runMoveFileTest(
|
| + testRunner.lastFileEntry,
|
| + testRunner.testDirEntry,
|
| + kCopiedFileName,
|
| + verifyTestResult.bind(null, 'Move File', FileError.SECURITY_ERR));
|
| + },
|
| + function getFileToWrite() {
|
| + testRunner.lastFileEntry = undefined;
|
| + testRunner.runGetFileTest(kMutableTestFile, false,
|
| + verifyTestResult.bind(null, 'Get File To Write', null));
|
| + },
|
| + function writeFile() {
|
| + chrome.test.assertTrue(!!testRunner.lastFileEntry,
|
| + 'File entry to write should have been created by previousd tests.');
|
| + testRunner.runWriteFileTest(testRunner.lastFileEntry,
|
| + verifyTestResult.bind(null, 'Write File', FileError.SECURITY_ERR));
|
| + },
|
| + function createFile() {
|
| + testRunner.runGetFileTest(kTestFileToCreate, true,
|
| + verifyTestResult.bind(null, 'Create File', FileError.SECURITY_ERR));
|
| + },
|
| + function getFileToDelete() {
|
| + testRunner.lastFileEntry = undefined;
|
| + testRunner.runGetFileTest(kTestFileToDelete, false,
|
| + verifyTestResult.bind(null, 'Get File To Delete', null));
|
| + },
|
| + function deleteFile() {
|
| + chrome.test.assertTrue(!!testRunner.lastFileEntry,
|
| + 'File entry to delete should have been created by previousd tests.');
|
| + testRunner.runDeleteFileTest(testRunner.lastFileEntry,
|
| + verifyTestResult.bind(null, 'Delete File', FileError.SECURITY_ERR));
|
| + }
|
| +]);
|
|
|