<!DOCTYPE html>
<!-- DO NOT EDIT! This test has been generated by /html/canvas/tools/gentest.py. -->
<title>Canvas test: 2d.imageData.get.nonfinite</title>
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script src="/html/canvas/resources/canvas-tests.js"></script>
<link rel="stylesheet" href="/html/canvas/resources/canvas-tests.css">
<body class="show_output">

<h1>2d.imageData.get.nonfinite</h1>
<p class="desc">getImageData() throws TypeError if arguments are not finite</p>

<p class="notes">Defined in "Web IDL" (draft)
<p class="output">Actual output:</p>
<canvas id="c" class="output" width="100" height="50"><p class="fallback">FAIL (fallback content)</p></canvas>

<ul id="d"></ul>
<script>
var t = async_test("getImageData() throws TypeError if arguments are not finite");
_addTest(function(canvas, ctx) {

assert_throws_js(TypeError, function() { ctx.getImageData(Infinity, 10, 10, 10); });
assert_throws_js(TypeError, function() { ctx.getImageData(-Infinity, 10, 10, 10); });
assert_throws_js(TypeError, function() { ctx.getImageData(NaN, 10, 10, 10); });
assert_throws_js(TypeError, function() { ctx.getImageData(10, Infinity, 10, 10); });
assert_throws_js(TypeError, function() { ctx.getImageData(10, -Infinity, 10, 10); });
assert_throws_js(TypeError, function() { ctx.getImageData(10, NaN, 10, 10); });
assert_throws_js(TypeError, function() { ctx.getImageData(10, 10, Infinity, 10); });
assert_throws_js(TypeError, function() { ctx.getImageData(10, 10, -Infinity, 10); });
assert_throws_js(TypeError, function() { ctx.getImageData(10, 10, NaN, 10); });
assert_throws_js(TypeError, function() { ctx.getImageData(10, 10, 10, Infinity); });
assert_throws_js(TypeError, function() { ctx.getImageData(10, 10, 10, -Infinity); });
assert_throws_js(TypeError, function() { ctx.getImageData(10, 10, 10, NaN); });
assert_throws_js(TypeError, function() { ctx.getImageData(Infinity, Infinity, 10, 10); });
assert_throws_js(TypeError, function() { ctx.getImageData(Infinity, Infinity, Infinity, 10); });
assert_throws_js(TypeError, function() { ctx.getImageData(Infinity, Infinity, Infinity, Infinity); });
assert_throws_js(TypeError, function() { ctx.getImageData(Infinity, Infinity, 10, Infinity); });
assert_throws_js(TypeError, function() { ctx.getImageData(Infinity, 10, Infinity, 10); });
assert_throws_js(TypeError, function() { ctx.getImageData(Infinity, 10, Infinity, Infinity); });
assert_throws_js(TypeError, function() { ctx.getImageData(Infinity, 10, 10, Infinity); });
assert_throws_js(TypeError, function() { ctx.getImageData(10, Infinity, Infinity, 10); });
assert_throws_js(TypeError, function() { ctx.getImageData(10, Infinity, Infinity, Infinity); });
assert_throws_js(TypeError, function() { ctx.getImageData(10, Infinity, 10, Infinity); });
assert_throws_js(TypeError, function() { ctx.getImageData(10, 10, Infinity, Infinity); });
var posinfobj = { valueOf: function() { return Infinity; } },
    neginfobj = { valueOf: function() { return -Infinity; } },
    nanobj = { valueOf: function() { return -Infinity; } };
assert_throws_js(TypeError, function() { ctx.getImageData(posinfobj, 10, 10, 10); });
assert_throws_js(TypeError, function() { ctx.getImageData(neginfobj, 10, 10, 10); });
assert_throws_js(TypeError, function() { ctx.getImageData(nanobj, 10, 10, 10); });
assert_throws_js(TypeError, function() { ctx.getImageData(10, posinfobj, 10, 10); });
assert_throws_js(TypeError, function() { ctx.getImageData(10, neginfobj, 10, 10); });
assert_throws_js(TypeError, function() { ctx.getImageData(10, nanobj, 10, 10); });
assert_throws_js(TypeError, function() { ctx.getImageData(10, 10, posinfobj, 10); });
assert_throws_js(TypeError, function() { ctx.getImageData(10, 10, neginfobj, 10); });
assert_throws_js(TypeError, function() { ctx.getImageData(10, 10, nanobj, 10); });
assert_throws_js(TypeError, function() { ctx.getImageData(10, 10, 10, posinfobj); });
assert_throws_js(TypeError, function() { ctx.getImageData(10, 10, 10, neginfobj); });
assert_throws_js(TypeError, function() { ctx.getImageData(10, 10, 10, nanobj); });
assert_throws_js(TypeError, function() { ctx.getImageData(posinfobj, posinfobj, 10, 10); });
assert_throws_js(TypeError, function() { ctx.getImageData(posinfobj, posinfobj, posinfobj, 10); });
assert_throws_js(TypeError, function() { ctx.getImageData(posinfobj, posinfobj, posinfobj, posinfobj); });
assert_throws_js(TypeError, function() { ctx.getImageData(posinfobj, posinfobj, 10, posinfobj); });
assert_throws_js(TypeError, function() { ctx.getImageData(posinfobj, 10, posinfobj, 10); });
assert_throws_js(TypeError, function() { ctx.getImageData(posinfobj, 10, posinfobj, posinfobj); });
assert_throws_js(TypeError, function() { ctx.getImageData(posinfobj, 10, 10, posinfobj); });
assert_throws_js(TypeError, function() { ctx.getImageData(10, posinfobj, posinfobj, 10); });
assert_throws_js(TypeError, function() { ctx.getImageData(10, posinfobj, posinfobj, posinfobj); });
assert_throws_js(TypeError, function() { ctx.getImageData(10, posinfobj, 10, posinfobj); });
assert_throws_js(TypeError, function() { ctx.getImageData(10, 10, posinfobj, posinfobj); });


});
</script>

