| description("This tests if Entries returned by callbacks keep functioning even after we lose a reference to the filesystem in the script."); |
| |
| var testDirectory = null; |
| var testEntries = null; |
| |
| function errorCallback(error) |
| { |
| testFailed("Error occurred: " + error.name); |
| finishJSTest(); |
| } |
| |
| function runTest1(root) |
| { |
| debug("Running runTest1()..."); |
| var helper = new JoinHelper(); |
| var done = function() { helper.done(); }; |
| |
| helper.run(function() { root.getFile('a', {create:true}, done, errorCallback); }); |
| helper.run(function() { root.getDirectory('b', {create:true}, done, errorCallback); }); |
| helper.run(function() { root.getDirectory('c', {create:true}, done, errorCallback); }); |
| |
| gc(); |
| helper.join(function() { runTest2(root); }); |
| } |
| |
| function runTest2(root) |
| { |
| debug("Running runTest2()..."); |
| var helper = new JoinHelper(); |
| var done = function() { helper.done(); }; |
| |
| helper.run(function() { root.getFile('/b/1', {create:true}, done, errorCallback); }); |
| helper.run(function() { root.getFile('/b/2', {create:true}, done, errorCallback); }); |
| helper.run(function() { root.getFile('/b/3', {create:true}, done, errorCallback); }); |
| helper.run(function() { root.getFile('/b/4', {create:true}, done, errorCallback); }); |
| helper.run(function() { root.getDirectory('b', {create:false}, function(entry) { testDirectory = entry; helper.done(); }, errorCallback); }); |
| |
| gc(); |
| helper.join(function() { runTest3(); }); |
| } |
| |
| function runTest3() |
| { |
| debug("Running runTest3()..."); |
| testDirectory.createReader().readEntries(entriesCallback, errorCallback); |
| testDirectory = null; |
| gc(); |
| } |
| |
| function entriesCallback(entries) |
| { |
| debug("Running runTest4()..."); |
| testEntries = entries; |
| shouldBe("testEntries.length", "4"); |
| finishJSTest(); |
| } |
| |
| function fileSystemCallback(fs) |
| { |
| var root = fs.root; |
| removeAllInDirectory(fs.root, function() { runTest1(root); }, errorCallback); |
| fs = null; |
| gc(); |
| } |
| |
| if (window.webkitRequestFileSystem) { |
| window.jsTestIsAsync = true; |
| webkitRequestFileSystem(window.TEMPORARY, 100, fileSystemCallback, errorCallback); |
| } else |
| debug("This test requires FileSystem API support."); |