gecko-dev/dom/indexedDB/test/test_filehandle_write_read_data.html
Boris Zbarsky 1395be1f23 Bug 1613013 part 3. Annotate TypeErrors and RangeErrors from WebIDL implementations with the method they come from. r=peterv
Please review the changes to Errors.msg very carefully.  I caught a number of
mistakes there in self-review (e.g. not renumbering replacement markers
correctly when I added {0} to the beginnings of strings), and my confidence
that I caught them all is only middling.

A few lines (MSG_USELESS_SETTIMEOUT, MSG_TYPEDARRAY_IS_DETACHED,
MSG_NOT_SUBMIT_BUTTON) were removed from Errors.msg either because they were
already unused or because they either were single-user constant strings or
became such in the new setup and we could just use the string version of
ThrowTypeError.

Differential Revision: https://phabricator.services.mozilla.com/D61523

--HG--
extra : moz-landing-system : lando
2020-02-06 21:22:32 +00:00

133 lines
4.6 KiB
HTML

<!--
Any copyright is dedicated to the Public Domain.
http://creativecommons.org/publicdomain/zero/1.0/
-->
<html>
<head>
<title>File Handle Test</title>
<script src="/tests/SimpleTest/SimpleTest.js"></script>
<link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css"/>
<script type="text/javascript">
function* testSteps()
{
const name = window.location.pathname;
var testString = "Lorem ipsum his ponderum delicatissimi ne, at noster dolores urbanitas pro, cibo elaboraret no his. Ea dicunt maiorum usu. Ad appareat facilisis mediocritatem eos. Tale graeci mentitum in eos, hinc insolens at nam. Graecis nominavi aliquyam eu vix. Id solet assentior sadipscing pro. Et per atqui graecis, usu quot viris repudiandae ei, mollis evertitur an nam. At nam dolor ignota, liber labore omnesque ea mei, has movet voluptaria in. Vel an impetus omittantur. Vim movet option salutandi ex, ne mei ignota corrumpit. Mucius comprehensam id per. Est ea putant maiestatis.";
var typeErrMessage = "Data size for read is too large.";
var uint32Max = 0xFFFFFFFF;
for (let i = 0; i < 5; i++) {
testString += testString;
}
var testBuffer = getRandomBuffer(100000);
var testBlob = new Blob([testBuffer], {type: "binary/random"});
let request = indexedDB.open(name, 1);
request.onerror = errorHandler;
request.onsuccess = grabEventAndContinueHandler;
let event = yield undefined;
let db = event.target.result;
db.onerror = errorHandler;
request = db.createMutableFile("test.txt");
request.onerror = errorHandler;
request.onsuccess = grabEventAndContinueHandler;
event = yield undefined;
let mutableFile = event.target.result;
mutableFile.onerror = errorHandler;
let location = 0;
let fileHandle = mutableFile.open("readwrite");
is(fileHandle.location, location, "Correct location");
request = fileHandle.write(testString);
location += testString.length;
is(fileHandle.location, location, "Correct location");
request.onsuccess = grabEventAndContinueHandler;
event = yield undefined;
fileHandle.location = 0;
request = fileHandle.readAsText(testString.length);
is(fileHandle.location, location, "Correct location");
request.onsuccess = grabEventAndContinueHandler;
event = yield undefined;
try {
request = fileHandle.readAsText(uint32Max + 0x1);
ok(false, "Should have thrown!");
} catch (e) {
ok(e instanceof TypeError, "Got TypeError");
is(e.name, "TypeError", "Correct error name");
is(e.message, "IDBFileHandle.readAsText: " + typeErrMessage,
"Correct error mesage");
}
let resultString = event.target.result;
ok(resultString == testString, "Correct string data");
request = fileHandle.write(testBuffer);
location += testBuffer.byteLength;
is(fileHandle.location, location, "Correct location");
request.onsuccess = grabEventAndContinueHandler;
event = yield undefined;
fileHandle.location -= testBuffer.byteLength;
request = fileHandle.readAsArrayBuffer(testBuffer.byteLength);
is(fileHandle.location, location, "Correct location");
request.onsuccess = grabEventAndContinueHandler;
event = yield undefined;
try {
request = fileHandle.readAsArrayBuffer(uint32Max + 0x1);
ok(false, "Should have thrown!");
} catch (e) {
ok(e instanceof TypeError, "Got TypeError");
is(e.name, "TypeError", "Correct error name");
is(e.message, "IDBFileHandle.readAsArrayBuffer: " + typeErrMessage,
"Correct error message");
}
let resultBuffer = event.target.result;
ok(compareBuffers(resultBuffer, testBuffer), "Correct array buffer data");
request = fileHandle.write(testBlob);
location += testBlob.size;
is(fileHandle.location, location, "Correct location");
request.onsuccess = grabEventAndContinueHandler;
event = yield undefined;
fileHandle.location -= testBlob.size;
request = fileHandle.readAsArrayBuffer(testBlob.size);
is(fileHandle.location, location, "Correct location");
request.onsuccess = grabEventAndContinueHandler;
event = yield undefined;
resultBuffer = event.target.result;
ok(compareBuffers(resultBuffer, testBuffer), "Correct blob data");
request = fileHandle.getMetadata({ size: true });
request.onsuccess = grabEventAndContinueHandler;
event = yield undefined;
let result = event.target.result;
is(result.size, location, "Correct size");
finishTest();
}
</script>
<script type="text/javascript" src="file.js"></script>
<script type="text/javascript" src="helpers.js"></script>
</head>
<body onload="runTest();"></body>
</html>