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.");