blob: f2af44af2f5f3b6d3733b5aa6d1224c93f7b2d1f [file] [log] [blame]
if (this.importScripts) {
importScripts('../resources/fs-worker-common.js');
importScripts('../resources/fs-test-util.js');
}
description("Tests using webkitResolveLocalFileSystemURL to obtain an Entry from a URL");
var testFileName = '/testFile';
var fileSystem = null;
var expectedPath = null;
var actualPath = null;
var errorName = null;
function errorCallback(error) {
if (error && error.name)
debug("Error occurred: " + error.name);
testFailed("Bailing out early");
finishJSTest();
}
function expectSecurityErrAndRunNext(error) {
errorName = error.name;
shouldBe('"SecurityError"', "errorName");
cleanupAndRunNext();
}
function expectEncodingErrAndRunNext(error) {
errorName = error.name;
shouldBe('"EncodingError"', "errorName");
cleanupAndRunNext();
}
function createTestFile(callback) {
fileSystem.root.getFile(testFileName, {create:true}, callback, errorCallback);
}
function assertPathsMatch(expected, actual) {
expectedPath = expected;
actualPath = actual;
shouldBe("expectedPath", "actualPath");
}
var isDirectory = false;
function assertIsDirectory(entry) {
isDirectory = entry.isDirectory;
shouldBeTrue("isDirectory");
}
var isFile = false;
function assertIsFile(entry) {
isFile = entry.isFile;
shouldBeTrue("isFile");
}
// Test body functions ----------------------------------------------------
function runBasicTest() {
debug("* Resolving a generated URL.");
createTestFile(function(entry) {
webkitResolveLocalFileSystemURL(entry.toURL(), function(e) {
assertPathsMatch(entry.fullPath, e.fullPath);
assertIsFile(e);
cleanupAndRunNext();
}, errorCallback);
});
}
function runHandmadeURL() {
debug("* Resolving test file by hand");
createTestFile(function(entry) {
webkitResolveLocalFileSystemURL("filesystem:http://127.0.0.1:8000/temporary/testFile", function(e) {
assertPathsMatch(testFileName, e.fullPath);
assertIsFile(e);
cleanupAndRunNext();
}, errorCallback);
});
}
function runWrongDomain() {
debug("* Resolving a URL with the wrong security origin (domain)");
webkitResolveLocalFileSystemURL("filesystem:http://localhost:8000/temporary/foo", errorCallback, expectSecurityErrAndRunNext);
}
function runWrongPort() {
debug("* Resolving a URL with the wrong security origin (port)");
webkitResolveLocalFileSystemURL("filesystem:http://127.0.0.1:8080/temporary/foo", errorCallback, expectSecurityErrAndRunNext);
}
function runWrongScheme() {
debug("* Resolving a URL with the wrong security origin (scheme)");
webkitResolveLocalFileSystemURL("filesystem:https://127.0.0.1:8000/temporary/foo", errorCallback, expectSecurityErrAndRunNext);
}
function runBogusURL() {
debug("* Resolving a completely bogus URL.");
webkitResolveLocalFileSystemURL("foo", errorCallback, expectEncodingErrAndRunNext);
}
function runWrongProtocol() {
debug("* Resolving a URL with the wrong protocol");
webkitResolveLocalFileSystemURL("http://127.0.0.1:8000/foo/bar/baz", errorCallback, expectEncodingErrAndRunNext);
}
function runNotEnoughSlashes() {
debug("* Resolving a URL with no slash between type and file");
createTestFile(function(entry) {
webkitResolveLocalFileSystemURL("filesystem:http://127.0.0.1:8000/temporarytestFile", errorCallback, expectEncodingErrAndRunNext);
});
}
function runNotEnoughSlashes2() {
debug("* Resolving a URL with no slash between protocol and type (bogus port)");
createTestFile(function(entry) {
webkitResolveLocalFileSystemURL("filesystem:http://127.0.0.1:8000temporary/testFile", errorCallback, expectSecurityErrAndRunNext);
});
}
function runUseBackSlashes() {
debug("* Resolve a path using backslashes");
fileSystem.root.getDirectory("foo", {create:true}, function(entry) {
entry.getFile("testFile", {create:true}, function(f) {
webkitResolveLocalFileSystemURL("filesystem:http://127.0.0.1:8000/temporary/foo\\testFile", function(e) {
assertPathsMatch("/foo/testFile", e.fullPath);
assertIsFile(e);
cleanupAndRunNext();
}, errorCallback);
}, errorCallback);
}, errorCallback);
}
function runDirectory() {
debug("* Resolve a directory");
fileSystem.root.getDirectory("foo", {create:true}, function(entry) {
webkitResolveLocalFileSystemURL("filesystem:http://127.0.0.1:8000/temporary/foo", function(e) {
assertPathsMatch("/foo", e.fullPath);
assertIsDirectory(e);
cleanupAndRunNext();
}, errorCallback);
}, errorCallback);
}
function runWithTrailingSlash() {
debug("* Resolve a path using a trailing slash");
fileSystem.root.getDirectory("foo", {create:true}, function(entry) {
webkitResolveLocalFileSystemURL("filesystem:http://127.0.0.1:8000/temporary/foo/", function(e) {
assertPathsMatch("/foo", e.fullPath);
assertIsDirectory(e);
cleanupAndRunNext();
}, errorCallback);
}, errorCallback);
}
function runPersistentTest() {
debug("* Resolving a persistent URL.");
webkitRequestFileSystem(PERSISTENT, 100, function(fs) {
webkitResolveLocalFileSystemURL(fs.root.toURL(), function(entry) {
assertPathsMatch("/", entry.fullPath);
assertIsDirectory(entry);
cleanupAndRunNext();
}, errorCallback);
});
}
// End of test body functions ---------------------------------------------
var testsList = [
runBasicTest,
runHandmadeURL,
runWrongDomain,
runWrongPort,
runWrongScheme,
runBogusURL,
runWrongProtocol,
runNotEnoughSlashes,
runNotEnoughSlashes2,
runUseBackSlashes,
runDirectory,
runWithTrailingSlash,
runPersistentTest,
];
var testCounter = 0;
function runNextTest() {
if (testCounter == testsList.length) {
debug("Finished running tests.");
finishJSTest();
} else
testsList[testCounter++]();
}
function cleanupAndRunNext() {
removeAllInDirectory(fileSystem.root, runNextTest, runNextTest);
}
function fileSystemCallback(fs) {
fileSystem = fs;
cleanupAndRunNext();
}
if (this.webkitRequestFileSystem) {
jsTestIsAsync = true;
webkitRequestFileSystem(this.TEMPORARY, 100, fileSystemCallback, errorCallback);
} else
debug("This test requires FileSystem API support.");
var successfullyParsed = true;