description("Passing Flags parameter tests. This test checks if passing Flags parameters to DirectoryEntry.getFile does not crash and works as expected."); var testFileName = '/non_existent_file'; var fileSystem = null; var expectedCallbacksCount = 0; var unexpectedCallbacksCount = 0; var expected = function(e) { expectedCallbacksCount++; }; var unexpected = function(e) { unexpectedCallbacksCount++; }; var testsList = [ runObjectTest, cleanupAndRunNext, runJSONTest, runJSONTestWithExclusive, runNullTest, runNonObjectTest ]; var testCounter = 0; function runNextTest(v) { if (testCounter == testsList.length) { debug("Finished running tests."); shouldBe('expectedCallbacksCount', '1'); shouldBe('unexpectedCallbacksCount', '0'); finishJSTest(); } else (testsList[testCounter++])(); } function errorCallback(error) { debug("Error occured during requesting Temporary FileSystem:" + error.name); finishJSTest(); } // Test body functions ---------------------------------------------------- function runNullTest(v) { debug("* Passing null as a flags parameter."); // This should be ok and we treat it as {false, false} Flags. fileSystem.root.getFile(testFileName, null, runNextTest, errorCallback); } function runNonObjectTest(v) { debug("* Passing a number as a flags parameter."); try { // This should be not be ok because 7 is not an object. fileSystem.root.getFile(testFileName, 7, errorCallback, errorCallback); } catch (ex) { debug("Caught exception: " + ex); runNextTest(); } } function runObjectTest(v) { // WebKitFlags no longer has a visible constructor. if (window.WebKitFlags) throw "There should be no constructor for WebKitFlags!"; runNextTest(); } function runJSONTest(v) { debug("* Passing JSON Flags object."); fileSystem.root.getFile(testFileName, {create:false}, unexpected, expected); fileSystem.root.getFile(testFileName, {create:true}, runNextTest, errorCallback); } function runJSONTestWithExclusive(v) { debug("* Passing JSON Flags object (with exclusive=true)."); // This should fail. fileSystem.root.getFile(testFileName, {create:true, exclusive:true}, errorCallback, runNextTest); } // End of test body functions --------------------------------------------- function cleanupAndRunNext(v) { fileSystem.root.getFile(testFileName, {create:false}, function(entry) { // Remove the entry before start testing. entry.remove(runNextTest, errorCallback); }, runNextTest); } function fileSystemCallback(fs) { fileSystem = fs; cleanupAndRunNext(); } if (window.webkitRequestFileSystem) { window.jsTestIsAsync = true; webkitRequestFileSystem(window.TEMPORARY, 100, fileSystemCallback, errorCallback); } else debug("This test requires FileSystem API support.");