blob: a496effd490d4cb45dd4ad4491e7ed39c30eb52e [file]
if (this.importScripts) {
importScripts('../../../resources/js-test.js');
importScripts('shared.js');
}
description("This test checks write command of FileSystemWritableFileStream");
const array = new Uint8Array([1,2,3,4]);
// Detach the ArrayBuffer by transferring it to a worker.
const worker = new Worker(URL.createObjectURL(new Blob([])));
worker.postMessage('', [array.buffer]);
var fileContent, undefinedObject;
var testCases = [
{ type:"String", input:"Test case one", expected:"Test case one" },
{ type:"ArrayBuffer", input:new TextEncoder().encode("Test case two"), expected:"Test case two" },
{ type:"Blob", input:new Blob(["Test case three"]), expected:"Test case three" },
{ type:"Undefined", input: undefinedObject },
{ type:"Number", input: new Number(1) },
{ type:"Detached ArrayBuffer", input: array },
{ type:"WriteParams with String", input:{ type:"write", data:"Test case four" }, expected:"Test case four" },
{ type:"WriteParams with ArrayBuffer", input:{ type:"write", data:new TextEncoder().encode("Test case five") }, expected:"Test case five" },
{ type:"WriteParams with Blob", input:{ type:"write", data:new Blob(["Test case six"]) }, expected:"Test case six" },
{ type:"WriteParams with position", input:{ type:"write", data:"Test case seven", position:4 }, expected:"\0\0\0\0Test case seven" },
{ type:"WriteParams with position (overwrite)", input:{ type:"write", data:"Test case seven" }, secondInput:{ type:"write", data:" CASE EIGHT", position:4 }, expected:"Test CASE EIGHT" }
];
async function runTest(testCase, fileHandle, writer)
{
debug("Testing input data type: " + testCase.type);
// Input that is expected to fail.
if (!testCase.expected) {
try {
await writer.write(testCase.input);
testFailed("write() should fail, but succeeded");
await writer.close();
} catch(error) {
testPassed("write() failed with error: " + error.name);
// Wait until stream is closed before creating new stream and writer.
closedPromise = writer.closed;
if (closedPromise)
await closedPromise.then(() => { }, () => { });
else
await writer.close().then(() => { }, () => { });
}
return;
}
await writer.write(testCase.input);
if (testCase.secondInput)
await writer.write(testCase.secondInput);
await writer.close();
fileObject = await fileHandle.getFile();
fileContent = await asyncReadFileAsText(fileObject);
shouldBeEqualToString("fileContent", testCase.expected);
}
async function test()
{
try {
var rootHandle = await navigator.storage.getDirectory();
await rootHandle.removeEntry("file-handle-writable-stream.txt").then(() => { }, () => { });
var fileHandle = await rootHandle.getFileHandle("file-handle-writable-stream.txt", { "create" : true });
debug("Run stream tests:")
for (let i = 0; i < testCases.length; ++i) {
stream = await fileHandle.createWritable();
await runTest(testCases[i], fileHandle, stream);
}
debug("Run writer tests:")
for (let i = 0; i < testCases.length; ++i) {
stream = await fileHandle.createWritable();
writer = stream.getWriter();
await runTest(testCases[i], fileHandle, writer);
}
finishTest();
} catch (error) {
finishTest(error);
}
}
test();