blob: 898a092c81bc644cb2dcbd801b99ce2dd1aee4a9 [file] [log] [blame]
<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>