зеркало из https://github.com/mozilla/gecko-dev.git
99 строки
2.8 KiB
JavaScript
99 строки
2.8 KiB
JavaScript
/**
|
|
* Any copyright is dedicated to the Public Domain.
|
|
* http://creativecommons.org/publicdomain/zero/1.0/
|
|
*/
|
|
|
|
let disableWorkerTest = "This test uses SpecialPowers";
|
|
|
|
let testGenerator = testSteps();
|
|
|
|
function createFileReader() {
|
|
return SpecialPowers.Cc["@mozilla.org/files/filereader;1"]
|
|
.createInstance(SpecialPowers.Ci.nsIDOMFileReader);
|
|
}
|
|
|
|
function testSteps()
|
|
{
|
|
const fileIOFlags = 0x02 | // PR_WRONLY
|
|
0x08 | // PR_CREATEFILE
|
|
0x20; // PR_TRUNCATE
|
|
const filePerms = 0664;
|
|
const fileData = "abcdefghijklmnopqrstuvwxyz";
|
|
const fileType = "text/plain";
|
|
|
|
const databaseName =
|
|
("window" in this) ? window.location.pathname : "Test";
|
|
const objectStoreName = "foo";
|
|
const objectStoreKey = "10";
|
|
|
|
info("Creating temp file");
|
|
|
|
let dirSvc =
|
|
SpecialPowers.Cc["@mozilla.org/file/directory_service;1"]
|
|
.getService(SpecialPowers.Ci.nsIProperties);
|
|
let testFile = dirSvc.get("ProfD", SpecialPowers.Ci.nsIFile);
|
|
testFile.createUnique(SpecialPowers.Ci.nsIFile.NORMAL_FILE_TYPE, filePerms);
|
|
|
|
info("Writing temp file");
|
|
|
|
let outStream =
|
|
SpecialPowers.Cc["@mozilla.org/network/file-output-stream;1"]
|
|
.createInstance(SpecialPowers.Ci.nsIFileOutputStream);
|
|
outStream.init(testFile, fileIOFlags, filePerms, 0);
|
|
outStream.write(fileData, fileData.length);
|
|
outStream.close();
|
|
|
|
let file = SpecialPowers.createDOMFile(testFile.path, { type: fileType });
|
|
ok(file instanceof File, "Got a File object");
|
|
is(file.size, fileData.length, "Correct size");
|
|
is(file.type, fileType, "Correct type");
|
|
|
|
let fileReader = createFileReader();
|
|
fileReader.onload = grabEventAndContinueHandler;
|
|
fileReader.readAsText(file);
|
|
|
|
let event = yield undefined;
|
|
|
|
is(fileReader.result, fileData, "Correct data");
|
|
|
|
let request = indexedDB.open(databaseName, 1);
|
|
request.onerror = errorHandler;
|
|
request.onupgradeneeded = grabEventAndContinueHandler;
|
|
request.onsuccess = grabEventAndContinueHandler;
|
|
|
|
event = yield undefined;
|
|
|
|
let db = event.target.result;
|
|
let objectStore = db.createObjectStore(objectStoreName);
|
|
objectStore.put(file, objectStoreKey);
|
|
|
|
event = yield undefined;
|
|
|
|
db = event.target.result;
|
|
|
|
file = null;
|
|
testFile.remove(false);
|
|
|
|
objectStore = db.transaction(objectStoreName).objectStore(objectStoreName);
|
|
objectStore.get(objectStoreKey).onsuccess = grabEventAndContinueHandler;
|
|
|
|
event = yield undefined;
|
|
|
|
file = event.target.result;
|
|
|
|
ok(file instanceof File, "Got a File object");
|
|
is(file.size, fileData.length, "Correct size");
|
|
is(file.type, fileType, "Correct type");
|
|
|
|
fileReader = createFileReader();
|
|
fileReader.onload = grabEventAndContinueHandler;
|
|
fileReader.readAsText(file);
|
|
|
|
event = yield undefined;
|
|
|
|
is(fileReader.result, fileData, "Correct data");
|
|
|
|
finishTest();
|
|
yield undefined;
|
|
}
|