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

<h1>2d.gradient.linear.nonfinite</h1>
<p class="desc">createLinearGradient() 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("createLinearGradient() throws TypeError if arguments are not finite");
_addTest(function(canvas, ctx) {

assert_throws(new TypeError(), function() { ctx.createLinearGradient(Infinity, 0, 1, 0); });
assert_throws(new TypeError(), function() { ctx.createLinearGradient(-Infinity, 0, 1, 0); });
assert_throws(new TypeError(), function() { ctx.createLinearGradient(NaN, 0, 1, 0); });
assert_throws(new TypeError(), function() { ctx.createLinearGradient(0, Infinity, 1, 0); });
assert_throws(new TypeError(), function() { ctx.createLinearGradient(0, -Infinity, 1, 0); });
assert_throws(new TypeError(), function() { ctx.createLinearGradient(0, NaN, 1, 0); });
assert_throws(new TypeError(), function() { ctx.createLinearGradient(0, 0, Infinity, 0); });
assert_throws(new TypeError(), function() { ctx.createLinearGradient(0, 0, -Infinity, 0); });
assert_throws(new TypeError(), function() { ctx.createLinearGradient(0, 0, NaN, 0); });
assert_throws(new TypeError(), function() { ctx.createLinearGradient(0, 0, 1, Infinity); });
assert_throws(new TypeError(), function() { ctx.createLinearGradient(0, 0, 1, -Infinity); });
assert_throws(new TypeError(), function() { ctx.createLinearGradient(0, 0, 1, NaN); });
assert_throws(new TypeError(), function() { ctx.createLinearGradient(Infinity, Infinity, 1, 0); });
assert_throws(new TypeError(), function() { ctx.createLinearGradient(Infinity, Infinity, Infinity, 0); });
assert_throws(new TypeError(), function() { ctx.createLinearGradient(Infinity, Infinity, Infinity, Infinity); });
assert_throws(new TypeError(), function() { ctx.createLinearGradient(Infinity, Infinity, 1, Infinity); });
assert_throws(new TypeError(), function() { ctx.createLinearGradient(Infinity, 0, Infinity, 0); });
assert_throws(new TypeError(), function() { ctx.createLinearGradient(Infinity, 0, Infinity, Infinity); });
assert_throws(new TypeError(), function() { ctx.createLinearGradient(Infinity, 0, 1, Infinity); });
assert_throws(new TypeError(), function() { ctx.createLinearGradient(0, Infinity, Infinity, 0); });
assert_throws(new TypeError(), function() { ctx.createLinearGradient(0, Infinity, Infinity, Infinity); });
assert_throws(new TypeError(), function() { ctx.createLinearGradient(0, Infinity, 1, Infinity); });
assert_throws(new TypeError(), function() { ctx.createLinearGradient(0, 0, Infinity, Infinity); });


});
</script>

