94 lines
3.1 KiB
HTML
94 lines
3.1 KiB
HTML
<html>
|
|
<head>
|
|
<script src="../../resources/js-test.js"></script>
|
|
<script src="resources/shared.js"></script>
|
|
</head>
|
|
<body>
|
|
<script>
|
|
description("Test structured clone of ImageData with a display-p3 colorSpace.");
|
|
|
|
indexedDBTest(prepareDatabase, startTests);
|
|
|
|
function prepareDatabase()
|
|
{
|
|
db = event.target.result;
|
|
evalAndLog("store = db.createObjectStore('storeName')");
|
|
debug("This index is not used, but evaluating key path on each put() call will exercise (de)serialization:");
|
|
evalAndLog("store.createIndex('indexName', 'dummyKeyPath')");
|
|
}
|
|
|
|
function testValue(value, callback)
|
|
{
|
|
// One transaction per test, since some tests require asynchronous
|
|
// operations to verify the result (e.g. via FileReader)
|
|
evalAndLog("transaction = db.transaction('storeName', 'readwrite')");
|
|
transaction.onerror = unexpectedErrorCallback;
|
|
transaction.onabort = unexpectedAbortCallback;
|
|
evalAndLog("store = transaction.objectStore('storeName')");
|
|
|
|
self.value = value;
|
|
request = evalAndLog("store.put(value, 'key')");
|
|
request.onerror = unexpectedErrorCallback;
|
|
request.onsuccess = function(e) {
|
|
request = evalAndLog("store.get('key')");
|
|
request.onerror = unexpectedErrorCallback;
|
|
request.onsuccess = function(e) {
|
|
callback(request.result);
|
|
};
|
|
};
|
|
}
|
|
|
|
// Identity testing, sensitive to NaN and -0
|
|
function is(x, y) {
|
|
if (x === y) {
|
|
return x !== 0 || 1 / x === 1 / y;
|
|
}
|
|
return x !== x && y !== y;
|
|
}
|
|
|
|
function arrayCompare(a, b) {
|
|
if (a.length !== b.length) {
|
|
return false;
|
|
}
|
|
for (var i = 0; i < a.length; ++i) {
|
|
if (!is(a[i], b[i])) {
|
|
return false;
|
|
}
|
|
}
|
|
return true;
|
|
}
|
|
|
|
function startTests()
|
|
{
|
|
debug("");
|
|
debug(`Testing ImageData: { colorSpace: "display-p3" }`);
|
|
evalAndLog("canvas = document.createElement('canvas')");
|
|
evalAndLog("canvas.width = 8");
|
|
evalAndLog("canvas.height = 8");
|
|
evalAndLog(`test_data = canvas.getContext('2d').getImageData(0, 0, 8, 8, { colorSpace: "display-p3" })`);
|
|
|
|
for (var i = 0; i < 256; ++i) {
|
|
test_data.data[i] = i;
|
|
}
|
|
|
|
testValue(test_data, function(result) {
|
|
self.result = result;
|
|
shouldBeTrue("test_data !== result");
|
|
shouldBeEqualToString("Object.prototype.toString.call(result)", "[object ImageData]");
|
|
shouldBe("result.width", "test_data.width");
|
|
shouldBe("result.height", "test_data.height");
|
|
shouldBe("result.data.length", "test_data.data.length");
|
|
shouldBe("result.colorSpace", "test_data.colorSpace");
|
|
if (arrayCompare(test_data.data, result.data)) {
|
|
testPassed("result data matches");
|
|
} else {
|
|
testFailed("result data doesn't match");
|
|
}
|
|
|
|
finishJSTest();
|
|
});
|
|
}
|
|
</script>
|
|
</body>
|
|
</html>
|