blob: a60d796a970fd4fe61a5388828c19fc199717a6c [file] [log] [blame]
<script src="../../resources/testharness.js"></script>
<script src="../../resources/testharnessreport.js"></script>
<body>
<script>
function setRGBA(imageData, i, rgba) {
var s = i * 4;
imageData[s] = rgba[0];
imageData[s + 1] = rgba[1];
imageData[s + 2] = rgba[2];
imageData[s + 3] = rgba[3];
}
function getRGBA(imageData, i) {
var result = [];
var s = i * 4;
for (var j = 0; j < 4; j++) {
result[j] = imageData[s + j];
}
return result;
}
test(function(t) {
assert_not_equals(ImageData, undefined);
imageData = new ImageData(100, 50);
assert_not_equals(imageData, null);
assert_not_equals(imageData.data, null);
assert_equals(imageData.width, 100);
assert_equals(imageData.height, 50);
assert_array_equals(getRGBA(imageData.data, 4), [0, 0, 0, 0]);
var testColor = [0, 255, 255, 128];
setRGBA(imageData.data, 4, testColor);
assert_array_equals(getRGBA(imageData.data, 4), testColor);
assert_throws(new TypeError(), function() {
new ImageData(10);
});
assert_throws("INDEX_SIZE_ERR", function() {
new ImageData(0, 10);
});
assert_throws("INDEX_SIZE_ERR", function() {
new ImageData(10, 0);
});
assert_throws("INDEX_SIZE_ERR", function() {
new ImageData('width', 'height');
});
assert_throws("INDEX_SIZE_ERR", function() {
new ImageData(1 << 31, 1 << 31);
});
assert_throws(new TypeError(), function() {
new ImageData(new Uint8ClampedArray(0));
});
assert_throws("INDEX_SIZE_ERR", function() {
new ImageData(new Uint8Array(100), 25);
});
assert_throws("INDEX_SIZE_ERR", function() {
new ImageData(new Uint8ClampedArray(27), 2);
});
assert_throws("INDEX_SIZE_ERR", function() {
new ImageData(new Uint8ClampedArray(28), 7, 0);
});
assert_throws("INDEX_SIZE_ERR", function() {
new ImageData(new Uint8ClampedArray(104), 14);
});
assert_throws("INDEX_SIZE_ERR", function() {
new ImageData(new Uint8ClampedArray([12, 34, 168, 65328]), 1, 151);
});
assert_throws(new TypeError(), function() {
new ImageData(self, 4, 4);
});
assert_throws(new TypeError(), function() {
new ImageData(null, 4, 4);
});
assert_throws("INDEX_SIZE_ERR", function() {
new ImageData(imageData.data, 0);
});
assert_throws("INDEX_SIZE_ERR", function() {
new ImageData(imageData.data, 13);
});
assert_throws("INDEX_SIZE_ERR", function() {
new ImageData(imageData.data, 1 << 31);
});
assert_throws("INDEX_SIZE_ERR", function() {
new ImageData(imageData.data, 'biggish');
});
assert_throws("INDEX_SIZE_ERR", function() {
new ImageData(imageData.data, 1 << 24, 1 << 31);
});
assert_equals((new ImageData(new Uint8ClampedArray(28), 7)).height, 1);
imageDataFromData = new ImageData(imageData.data, 100);
assert_equals(imageDataFromData.width, 100);
assert_equals(imageDataFromData.height, 50);
assert_equals(imageDataFromData.data, imageData.data);
assert_array_equals(getRGBA(imageDataFromData.data, 10), getRGBA(imageData.data, 10));
setRGBA(imageData.data, 10, testColor);
assert_array_equals(getRGBA(imageDataFromData.data, 10), getRGBA(imageData.data, 10));
var data = new Uint8ClampedArray(400);
data[22] = 129;
imageDataFromData = new ImageData(data, 20, 5);
assert_equals(imageDataFromData.width, 20);
assert_equals(imageDataFromData.height, 5);
assert_equals(imageDataFromData.data, data);
assert_array_equals(getRGBA(imageDataFromData.data, 2), getRGBA(data, 2));
setRGBA(imageDataFromData.data, 2, testColor);
assert_array_equals(getRGBA(imageDataFromData.data, 2), getRGBA(data, 2));
if (window.SharedArrayBuffer) {
try {
new ImageData(new Uint16Array(new SharedArrayBuffer(32)), 4, 2);
} catch (ex) {
assert_equals(ex.name, "TypeError");
}
}
}, 'Test ImageData constructor');
</script>
</body>