mirror of
https://gitlab.winehq.org/wine/wine-gecko.git
synced 2024-09-13 09:24:08 -07:00
Bug 743615 - Tests. r=bent, a=blassey
This commit is contained in:
parent
6dad3c142d
commit
a78bcec20c
@ -157,6 +157,9 @@ _TEST_FILES = \
|
||||
test_bug735237.html \
|
||||
test_bug739038.html \
|
||||
test_bug740811.html \
|
||||
test_bug743615.html \
|
||||
utils_bug743615.js \
|
||||
worker_bug743615.js \
|
||||
$(NULL)
|
||||
|
||||
libs:: $(_TEST_FILES)
|
||||
|
84
dom/tests/mochitest/bugs/test_bug743615.html
Normal file
84
dom/tests/mochitest/bugs/test_bug743615.html
Normal file
@ -0,0 +1,84 @@
|
||||
<!DOCTYPE HTML>
|
||||
<html>
|
||||
<!--
|
||||
https://bugzilla.mozilla.org/show_bug.cgi?id=743615
|
||||
-->
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<title>Test for Bug 743615</title>
|
||||
<script type="application/javascript" src="/tests/SimpleTest/SimpleTest.js"></script>
|
||||
<script type="application/javascript" src="utils_bug743615.js"></script>
|
||||
<link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css"/>
|
||||
</head>
|
||||
<body>
|
||||
<a target="_blank" href="https://bugzilla.mozilla.org/show_bug.cgi?id=743615">Mozilla Bug 743615</a>
|
||||
<p id="display"></p>
|
||||
<div id="content" style="display: none">
|
||||
<canvas id="c" width="200" height="200"><canvas>
|
||||
</div>
|
||||
<pre id="test">
|
||||
<script type="application/javascript">
|
||||
|
||||
/** Test for structured cloning ImageData. **/
|
||||
|
||||
SimpleTest.waitForExplicitFinish();
|
||||
window.addEventListener('message', windowMessage);
|
||||
startTest();
|
||||
|
||||
function startTest() {
|
||||
// Make an ImageData.
|
||||
var ctx = document.getElementById('c').getContext('2d');
|
||||
ctx.fillStyle = 'rgb(';
|
||||
ctx.fillRect(30, 30, 50, 50);
|
||||
|
||||
// Make a blank ImageData.
|
||||
var imageData = ctx.createImageData(200, 200);
|
||||
is(imageData.data.length, imageData.width * imageData.height * 4,
|
||||
'right size for data');
|
||||
|
||||
// Write some things into it.
|
||||
var pattern = makePattern(imageData.data.length, 42, 7);
|
||||
setPattern(imageData, pattern);
|
||||
ok(checkPattern(imageData, pattern), 'Can read it back before sending');
|
||||
|
||||
// PostMessage it to ourselves.
|
||||
window.postMessage({ imageData: imageData,
|
||||
pattern: pattern,
|
||||
dataRef: imageData.data }, '*');
|
||||
}
|
||||
|
||||
function windowMessage(evt) {
|
||||
// Check the pattern we received.
|
||||
var imageData = evt.data.imageData;
|
||||
var pattern = evt.data.pattern;
|
||||
ok(checkPattern(imageData, pattern),
|
||||
'postMessage from self worked correctly');
|
||||
|
||||
// We're not spec compliant on this yet.
|
||||
todo_is(imageData.data, evt.data.dataRef,
|
||||
'Should have backrefs for imagedata buffer');
|
||||
|
||||
// Make a new pattern, and send it to a worker.
|
||||
pattern = makePattern(imageData.data.length, 4, 3);
|
||||
setPattern(imageData, pattern);
|
||||
var worker = new Worker('worker_bug743615.js');
|
||||
worker.onmessage = workerMessage;
|
||||
worker.postMessage( {imageData: imageData, pattern: pattern });
|
||||
}
|
||||
|
||||
function workerMessage(evt) {
|
||||
// Relay the results of the worker-side tests.
|
||||
is(evt.data.statusMessage, 'PASS', evt.data.statusMessage);
|
||||
|
||||
// Test what the worker sent us.
|
||||
ok(checkPattern(evt.data.imageData, evt.data.pattern),
|
||||
'postMessage from worker worked correctly');
|
||||
|
||||
// All done.
|
||||
SimpleTest.finish();
|
||||
}
|
||||
|
||||
</script>
|
||||
</pre>
|
||||
</body>
|
||||
</html>
|
25
dom/tests/mochitest/bugs/utils_bug743615.js
Normal file
25
dom/tests/mochitest/bugs/utils_bug743615.js
Normal file
@ -0,0 +1,25 @@
|
||||
function makePattern(len, start, inc) {
|
||||
var pattern = [];
|
||||
while(len) {
|
||||
pattern.push(start);
|
||||
start = (start + inc) % 256;
|
||||
--len;
|
||||
}
|
||||
return pattern;
|
||||
}
|
||||
|
||||
function setPattern(imageData, pattern) {
|
||||
if (pattern.length != imageData.data.length)
|
||||
throw Error('Invalid pattern');
|
||||
for (var i = 0; i < pattern.length; ++i)
|
||||
imageData.data[i] = pattern[i];
|
||||
}
|
||||
|
||||
function checkPattern(imageData, pattern) {
|
||||
if (pattern.length != imageData.data.length)
|
||||
throw Error('Invalid pattern');
|
||||
for (var i = 0; i < pattern.length; ++i)
|
||||
if (imageData.data[i] != pattern[i])
|
||||
return false;
|
||||
return true;
|
||||
}
|
38
dom/tests/mochitest/bugs/worker_bug743615.js
Normal file
38
dom/tests/mochitest/bugs/worker_bug743615.js
Normal file
@ -0,0 +1,38 @@
|
||||
importScripts('utils_bug743615.js');
|
||||
|
||||
self.onmessage = function onMessage(evt) {
|
||||
// Check the pattern that was sent.
|
||||
var imageData = evt.data.imageData;
|
||||
var pattern = evt.data.pattern;
|
||||
var statusMessage = checkPattern(imageData, pattern)
|
||||
? 'PASS' : 'Got corrupt typed array in worker';
|
||||
|
||||
// Check against the interface object.
|
||||
if (!(imageData instanceof ImageData))
|
||||
statusMessage += ", Bad interface object in worker";
|
||||
|
||||
// Check the getters.
|
||||
if (imageData.width * imageData.height != imageData.data.length / 4) {
|
||||
statusMessage += ", Bad ImageData getters in worker: "
|
||||
statusMessage += [imageData.width, imageData.height].join(', ');
|
||||
}
|
||||
|
||||
// Make sure that writing to .data is a no-op when not in strict mode.
|
||||
var origData = imageData.data;
|
||||
var threw = false;
|
||||
try {
|
||||
imageData.data = [];
|
||||
imageData.width = 2;
|
||||
imageData.height = 2;
|
||||
} catch(e) { threw = true; }
|
||||
if (threw || imageData.data !== origData)
|
||||
statusMessage = statusMessage + ", Should silently ignore sets";
|
||||
|
||||
|
||||
|
||||
// Send back a new pattern.
|
||||
pattern = makePattern(imageData.data.length, 99, 2);
|
||||
setPattern(imageData, pattern);
|
||||
self.postMessage({ statusMessage: statusMessage, imageData: imageData,
|
||||
pattern: pattern });
|
||||
}
|
Loading…
Reference in New Issue
Block a user