import QtQuick 2.0

CanvasTestCase {
   id:testCase
   name: "gradient"
   function init_data() { return testData("2d"); }
   function test_basic(row) {
       var canvas = createCanvasObject(row);
       var ctx = canvas.getContext('2d');
       ctx.reset();
       ctx.fillStyle = '#0f0';
       ctx.fillRect(0, 0, 100, 50);
       var g = ctx.createLinearGradient(0, 0, 0, 50);
       ctx.fillStyle = g;
       ctx.fillRect(0, 0, 100, 50);
       //comparePixel(ctx, 50,25, 0,255,0,255,2);
   }

   function test_interpolate(row) {
       var canvas = createCanvasObject(row);
       var ctx = canvas.getContext('2d');
       ctx.reset();

       ctx.fillStyle = '#ff0';
       ctx.fillRect(0, 0, 100, 50);
       var g = ctx.createLinearGradient(0, 0, 100, 0);
       g.addColorStop(0, 'rgba(0,0,255, 0)');
       g.addColorStop(1, 'rgba(0,0,255, 1)');
       ctx.fillStyle = g;
       ctx.fillRect(0, 0, 100, 50);
       //comparePixel(ctx, 25,25, 191,191,63,255,3);
       //comparePixel(ctx, 50,25, 127,127,127,255,3);
       //comparePixel(ctx, 75,25, 63,63,191,255,3);

       ctx.reset();
       g = ctx.createLinearGradient(0, 0, 100, 0);
       g.addColorStop(0, '#ff0');
       g.addColorStop(1, '#00f');
       ctx.fillStyle = g;
       ctx.fillRect(0, 0, 100, 50);
       //comparePixel(ctx, 25,25, 191,191,63,255,3);
       //comparePixel(ctx, 50,25, 127,127,127,255,3);
       //comparePixel(ctx, 75,25, 63,63,191,255,3);


       ctx.reset();
       g = ctx.createLinearGradient(0, 0, 100, 0);
       g.addColorStop(0, 'rgba(255,255,0, 0)');
       g.addColorStop(1, 'rgba(0,0,255, 1)');
       ctx.fillStyle = g;
       ctx.fillRect(0, 0, 100, 50);
       //comparePixel(ctx, 25,25, 191,191,63,63,3);
       //comparePixel(ctx, 50,25, 127,127,127,127,3);
       //comparePixel(ctx, 75,25, 63,63,191,191,3);

       ctx.reset();
       canvas.width = 200;
       g = ctx.createLinearGradient(0, 0, 200, 0);
       g.addColorStop(0, '#ff0');
       g.addColorStop(0.5, '#0ff');
       g.addColorStop(1, '#f0f');
       ctx.fillStyle = g;
       ctx.fillRect(0, 0, 200, 50);
       //comparePixel(ctx, 50,25, 127,255,127,255,3);
       //comparePixel(ctx, 100,25, 0,255,255,255,3);
       //comparePixel(ctx, 150,25, 127,127,255,255,3);

       ctx.reset();
       ctx.fillStyle = '#f00';
       ctx.fillRect(0, 0, 100, 50);

       g = ctx.createLinearGradient(25, 0, 75, 0);
       g.addColorStop(0.4, '#0f0');
       g.addColorStop(0.6, '#0f0');

       ctx.fillStyle = g;
       ctx.fillRect(0, 0, 100, 50);
       //comparePixel(ctx, 20,25, 0,255,0,255,2);
       //comparePixel(ctx, 50,25, 0,255,0,255,2);
       //comparePixel(ctx, 80,25, 0,255,0,255,2);


       ctx.reset();
       ctx.canvas.width = 200;
       g = ctx.createLinearGradient(0, 0, 200, 0);
       g.addColorStop(0, '#f00');
       g.addColorStop(0, '#ff0');
       g.addColorStop(0.25, '#00f');
       g.addColorStop(0.25, '#0f0');
       g.addColorStop(0.25, '#0f0');
       g.addColorStop(0.25, '#0f0');
       g.addColorStop(0.25, '#ff0');
       g.addColorStop(0.5, '#00f');
       g.addColorStop(0.5, '#0f0');
       g.addColorStop(0.75, '#00f');
       g.addColorStop(0.75, '#f00');
       g.addColorStop(0.75, '#ff0');
       g.addColorStop(0.5, '#0f0');
       g.addColorStop(0.5, '#0f0');
       g.addColorStop(0.5, '#ff0');
       g.addColorStop(1, '#00f');
       ctx.fillStyle = g;
       ctx.fillRect(0, 0, 200, 50);
       //comparePixel(ctx, 49,25, 0,0,255,255,16);
       //comparePixel(ctx, 51,25, 255,255,0,255,16);
       //comparePixel(ctx, 99,25, 0,0,255,255,16);
       //comparePixel(ctx, 101,25, 255,255,0,255,16);
       //comparePixel(ctx, 149,25, 0,0,255,255,16);
       //comparePixel(ctx, 151,25, 255,255,0,255,16);
       ctx.canvas.width = 100;

       ctx.reset();
       g = ctx.createLinearGradient(0, 0, 100, 0);
       var ps = [ 0, 1/10, 1/4, 1/3, 1/2, 3/4, 1 ];
       for (var p = 0; p < ps.length; ++p)
       {
               g.addColorStop(ps[p], '#0f0');
               for (var i = 0; i < 15; ++i)
                       g.addColorStop(ps[p], '#f00');
               g.addColorStop(ps[p], '#0f0');
       }
       ctx.fillStyle = g;
       ctx.fillRect(0, 0, 100, 50);
       //comparePixel(ctx, 1,25, 0,255,0,255);
       //comparePixel(ctx, 30,25, 0,255,0,255);
       //comparePixel(ctx, 40,25, 0,255,0,255);
       //comparePixel(ctx, 60,25, 0,255,0,255);
       //comparePixel(ctx, 80,25, 0,255,0,255);


       ctx.reset();
       g = ctx.createLinearGradient(0, 0, 100, 0);
       g.addColorStop(0, '#0f0');
       g.addColorStop(1, '#0f0');
       ctx.fillStyle = g;
       ctx.fillRect(0, 0, 100, 50);
       //comparePixel(ctx, 50,25, 0,255,0,255);



       ctx.reset();
       g = ctx.createLinearGradient(0, 0, 0, 50);
       g.addColorStop(0, '#ff0');
       g.addColorStop(1, '#00f');
       ctx.fillStyle = g;
       ctx.fillRect(0, 0, 100, 50);
       //comparePixel(ctx, 50,12, 191,191,63,255,10);
       //comparePixel(ctx, 50,25, 127,127,127,255,5);
       //comparePixel(ctx, 50,37, 63,63,191,255,10);


       ctx.reset();

       ctx.fillStyle = '#0f0';
       ctx.fillRect(0, 0, 100, 50);

       g = ctx.createLinearGradient(50, 25, 50, 25); // zero-length line (undefined direction)
       g.addColorStop(0, '#f00');
       g.addColorStop(1, '#f00');
       ctx.fillStyle = g;
       ctx.fillRect(0, 0, 100, 50);
       //comparePixel(ctx, 40,20, 0,255,0,255,2);



   }
   function test_radial(row) {
       var canvas = createCanvasObject(row);
       var ctx = canvas.getContext('2d');
       ctx.reset();
       ctx.fillStyle = '#0f0';
       ctx.fillRect(0, 0, 100, 50);

       var g = ctx.createRadialGradient(0, 100, 40, 100, 100, 50);
       g.addColorStop(0, '#f00');
       g.addColorStop(1, '#f00');
       ctx.fillStyle = g;
       ctx.fillRect(0, 0, 100, 50);

       //comparePixel(ctx, 1,1, 0,255,0,255);
       //comparePixel(ctx, 50,1, 0,255,0,255);
       //comparePixel(ctx, 98,1, 0,255,0,255);
       //comparePixel(ctx, 1,25, 0,255,0,255,16);
       //comparePixel(ctx, 50,25, 0,255,0,255);
       //comparePixel(ctx, 98,25, 0,255,0,255);
       //comparePixel(ctx, 1,48, 0,255,0,255);
       //comparePixel(ctx, 50,48, 0,255,0,255);
       //comparePixel(ctx, 98,48, 0,255,0,255);

       ctx.reset();
       ctx.fillStyle = '#f00';
       ctx.fillRect(0, 0, 100, 50);

       g = ctx.createRadialGradient(210, 25, 100, 230, 25, 101);
       g.addColorStop(0, '#0f0');
       g.addColorStop(1, '#f00');
       ctx.fillStyle = g;
       ctx.fillRect(0, 0, 100, 50);

       //comparePixel(ctx, 1,1, 0,255,0,255);
       //comparePixel(ctx, 50,1, 0,255,0,255);
       //comparePixel(ctx, 98,1, 0,255,0,255);
       //comparePixel(ctx, 1,25, 0,255,0,255,16);
       //comparePixel(ctx, 50,25, 0,255,0,255);
       //comparePixel(ctx, 98,25, 0,255,0,255);
       //comparePixel(ctx, 1,48, 0,255,0,255);
       //comparePixel(ctx, 50,48, 0,255,0,255);
       //comparePixel(ctx, 98,48, 0,255,0,255);


       ctx.reset();
       ctx.fillStyle = '#f00';
       ctx.fillRect(0, 0, 100, 50);

       g = ctx.createRadialGradient(210, 25, 100, 230, 25, 100);
       g.addColorStop(0, '#0f0');
       g.addColorStop(1, '#f00');
       ctx.fillStyle = g;
       ctx.fillRect(0, 0, 100, 50);

       //comparePixel(ctx, 1,1, 0,255,0,255);
       //comparePixel(ctx, 50,1, 0,255,0,255);
       //comparePixel(ctx, 98,1, 0,255,0,255);
       //comparePixel(ctx, 1,25, 0,255,0,255,16);
       //comparePixel(ctx, 50,25, 0,255,0,255);
       //comparePixel(ctx, 98,25, 0,255,0,255);
       //comparePixel(ctx, 1,48, 0,255,0,255);
       //comparePixel(ctx, 50,48, 0,255,0,255);
       //comparePixel(ctx, 98,48, 0,255,0,255);

       ctx.reset();
       ctx.fillStyle = '#f00';
       ctx.fillRect(0, 0, 100, 50);

       g = ctx.createRadialGradient(311, 25, 10, 210, 25, 100);
       g.addColorStop(0, '#f00');
       g.addColorStop(1, '#0f0');
       ctx.fillStyle = g;
       ctx.fillRect(0, 0, 100, 50);

       //comparePixel(ctx, 1,1, 0,255,0,255);
       //comparePixel(ctx, 50,1, 0,255,0,255);
       //comparePixel(ctx, 98,1, 0,255,0,255);
       //comparePixel(ctx, 1,25, 0,255,0,255,16);
       //comparePixel(ctx, 50,25, 0,255,0,255);
       //comparePixel(ctx, 98,25, 0,255,0,255);
       //comparePixel(ctx, 1,48, 0,255,0,255);
       //comparePixel(ctx, 50,48, 0,255,0,255);
       //comparePixel(ctx, 98,48, 0,255,0,255);

       ctx.reset();
       var tol = 1; // tolerance to avoid antialiasing artifacts

       ctx.fillStyle = '#0f0';
       ctx.fillRect(0, 0, 100, 50);

       ctx.fillStyle = '#f00';
       ctx.beginPath();
       ctx.moveTo(30+tol, 40);
       ctx.lineTo(110, -20+tol);
       ctx.lineTo(110, 100-tol);
       ctx.fill();

       g = ctx.createRadialGradient(30+10*5/2, 40, 10*3/2, 30+10*15/4, 40, 10*9/4);
       g.addColorStop(0, '#0f0');
       g.addColorStop(1, '#0f0');
       ctx.fillStyle = g;
       ctx.fillRect(0, 0, 100, 50);

       //comparePixel(ctx, 1,1, 0,255,0,255);
       //comparePixel(ctx, 50,1, 0,255,0,255);
       //comparePixel(ctx, 98,1, 0,255,0,255);
       //comparePixel(ctx, 1,25, 0,255,0,255,16);
       //comparePixel(ctx, 50,25, 0,255,0,255);
       //comparePixel(ctx, 98,25, 0,255,0,255);
       //comparePixel(ctx, 1,48, 0,255,0,255);
       //comparePixel(ctx, 50,48, 0,255,0,255);
       //comparePixel(ctx, 98,48, 0,255,0,255);

       ctx.reset();
       tol = 1; // tolerance to avoid antialiasing artifacts

       ctx.fillStyle = '#0f0';
       ctx.fillRect(0, 0, 100, 50);

       g = ctx.createRadialGradient(30+10*5/2, 40, 10*3/2, 30+10*15/4, 40, 10*9/4);
       g.addColorStop(0, '#f00');
       g.addColorStop(1, '#f00');
       ctx.fillStyle = g;
       ctx.fillRect(0, 0, 100, 50);

       ctx.fillStyle = '#0f0';
       ctx.beginPath();
       ctx.moveTo(30-tol, 40);
       ctx.lineTo(110, -20-tol);
       ctx.lineTo(110, 100+tol);
       ctx.fill();

       //comparePixel(ctx, 1,1, 0,255,0,255);
       //comparePixel(ctx, 50,1, 0,255,0,255);
       //comparePixel(ctx, 98,1, 0,255,0,255);
       //comparePixel(ctx, 1,25, 0,255,0,255,16);
       //comparePixel(ctx, 50,25, 0,255,0,255);
       //comparePixel(ctx, 98,25, 0,255,0,255);
       //comparePixel(ctx, 1,48, 0,255,0,255);
       //comparePixel(ctx, 50,48, 0,255,0,255);
       //comparePixel(ctx, 98,48, 0,255,0,255);

       ctx.reset();
       ctx.fillStyle = '#f00';
       ctx.fillRect(0, 0, 100, 50);

       g = ctx.createRadialGradient(230, 25, 100, 100, 25, 101);
       g.addColorStop(0, '#f00');
       g.addColorStop(1, '#0f0');
       ctx.fillStyle = g;
       ctx.fillRect(0, 0, 100, 50);

       //comparePixel(ctx, 1,1, 0,255,0,255);
       //comparePixel(ctx, 50,1, 0,255,0,255);
       //comparePixel(ctx, 98,1, 0,255,0,255);
       //comparePixel(ctx, 1,25, 0,255,0,255,16);
       //comparePixel(ctx, 50,25, 0,255,0,255);
       //comparePixel(ctx, 98,25, 0,255,0,255);
       //comparePixel(ctx, 1,48, 0,255,0,255);
       //comparePixel(ctx, 50,48, 0,255,0,255);
       //comparePixel(ctx, 98,48, 0,255,0,255);

       ctx.reset();
       ctx.fillStyle = '#0f0';
       ctx.fillRect(0, 0, 100, 50);

       g = ctx.createRadialGradient(50, 25, 20, 50, 25, 20);
       g.addColorStop(0, '#f00');
       g.addColorStop(1, '#f00');
       ctx.fillStyle = g;
       ctx.fillRect(0, 0, 100, 50);

       //comparePixel(ctx, 1,1, 0,255,0,255);
       //comparePixel(ctx, 50,1, 0,255,0,255);
       //comparePixel(ctx, 98,1, 0,255,0,255);
       //comparePixel(ctx, 1,25, 0,255,0,255,16);
       //comparePixel(ctx, 50,25, 0,255,0,255);
       //comparePixel(ctx, 98,25, 0,255,0,255);
       //comparePixel(ctx, 1,48, 0,255,0,255);
       //comparePixel(ctx, 50,48, 0,255,0,255);
       //comparePixel(ctx, 98,48, 0,255,0,255);

       ctx.reset();
       ctx.fillStyle = '#f00';
       ctx.fillRect(0, 0, 100, 50);

       g = ctx.createRadialGradient(50, 25, 100, 50, 25, 200);
       g.addColorStop(0, '#0f0');
       g.addColorStop(1, '#f00');
       ctx.fillStyle = g;
       ctx.fillRect(0, 0, 100, 50);

       //comparePixel(ctx, 1,1, 0,255,0,255);
       //comparePixel(ctx, 50,1, 0,255,0,255);
       //comparePixel(ctx, 98,1, 0,255,0,255);
       //comparePixel(ctx, 1,25, 0,255,0,255,16);
       //comparePixel(ctx, 50,25, 0,255,0,255);
       //comparePixel(ctx, 98,25, 0,255,0,255);
       //comparePixel(ctx, 1,48, 0,255,0,255);
       //comparePixel(ctx, 50,48, 0,255,0,255);
       //comparePixel(ctx, 98,48, 0,255,0,255);

       ctx.reset();
       ctx.fillStyle = '#f00';
       ctx.fillRect(0, 0, 100, 50);

       g = ctx.createRadialGradient(50, 25, 200, 50, 25, 100);
       g.addColorStop(0, '#f00');
       g.addColorStop(1, '#0f0');
       ctx.fillStyle = g;
       ctx.fillRect(0, 0, 100, 50);

       //comparePixel(ctx, 1,1, 0,255,0,255);
       //comparePixel(ctx, 50,1, 0,255,0,255);
       //comparePixel(ctx, 98,1, 0,255,0,255);
       //comparePixel(ctx, 1,25, 0,255,0,255,16);
       //comparePixel(ctx, 50,25, 0,255,0,255);
       //comparePixel(ctx, 98,25, 0,255,0,255);
       //comparePixel(ctx, 1,48, 0,255,0,255);
       //comparePixel(ctx, 50,48, 0,255,0,255);
       //comparePixel(ctx, 98,48, 0,255,0,255);

       ctx.reset();
       ctx.fillStyle = '#f00';
       ctx.fillRect(0, 0, 100, 50);

       g = ctx.createRadialGradient(50, 25, 200, 50, 25, 100);
       g.addColorStop(0, '#f00');
       g.addColorStop(0.993, '#f00');
       g.addColorStop(1, '#0f0');
       ctx.fillStyle = g;
       ctx.fillRect(0, 0, 100, 50);

       //comparePixel(ctx, 1,1, 0,255,0,255);
       //comparePixel(ctx, 50,1, 0,255,0,255);
       //comparePixel(ctx, 98,1, 0,255,0,255);
       //comparePixel(ctx, 1,25, 0,255,0,255,16);
       //comparePixel(ctx, 50,25, 0,255,0,255);
       //comparePixel(ctx, 98,25, 0,255,0,255);
       //comparePixel(ctx, 1,48, 0,255,0,255);
       //comparePixel(ctx, 50,48, 0,255,0,255);
       //comparePixel(ctx, 98,48, 0,255,0,255);

       ctx.reset();
       try { var err = false;
         ctx.createRadialGradient(0, 0, -0.1, 0, 0, 1);
       } catch (e) { if (e.code !== DOMException.INDEX_SIZE_ERR) fail("Failed assertion: expected exception of type INDEX_SIZE_ERR, got: "+e.message); err = true; } finally { verify(err, "should throw exception of type INDEX_SIZE_ERR: ctx.createRadialGradient(0, 0, -0.1, 0, 0, 1)"); }
       try { err = false;
         ctx.createRadialGradient(0, 0, 1, 0, 0, -0.1);
       } catch (e) { if (e.code !== DOMException.INDEX_SIZE_ERR) fail("Failed assertion: expected exception of type INDEX_SIZE_ERR, got: "+e.message); err = true; } finally { verify(err, "should throw exception of type INDEX_SIZE_ERR: ctx.createRadialGradient(0, 0, 1, 0, 0, -0.1)"); }
       try { err = false;
         ctx.createRadialGradient(0, 0, -0.1, 0, 0, -0.1);
       } catch (e) { if (e.code !== DOMException.INDEX_SIZE_ERR) fail("Failed assertion: expected exception of type INDEX_SIZE_ERR, got: "+e.message); err = true; } finally { verify(err, "should throw exception of type INDEX_SIZE_ERR: ctx.createRadialGradient(0, 0, -0.1, 0, 0, -0.1)"); }


       ctx.reset();


       try { err = false;
         ctx.createRadialGradient(Infinity, 0, 1, 0, 0, 1);
       } catch (e) { if (e.code !== DOMException.NOT_SUPPORTED_ERR) fail("Failed assertion: expected exception of type NOT_SUPPORTED_ERR, got: "+e.message); err = true; } finally { verify(err, "should throw exception of type NOT_SUPPORTED_ERR: ctx.createRadialGradient(Infinity, 0, 1, 0, 0, 1)"); }
       try { err = false;
         ctx.createRadialGradient(-Infinity, 0, 1, 0, 0, 1);
       } catch (e) { if (e.code !== DOMException.NOT_SUPPORTED_ERR) fail("Failed assertion: expected exception of type NOT_SUPPORTED_ERR, got: "+e.message); err = true; } finally { verify(err, "should throw exception of type NOT_SUPPORTED_ERR: ctx.createRadialGradient(-Infinity, 0, 1, 0, 0, 1)"); }
       try { err = false;
         ctx.createRadialGradient(NaN, 0, 1, 0, 0, 1);
       } catch (e) { if (e.code !== DOMException.NOT_SUPPORTED_ERR) fail("Failed assertion: expected exception of type NOT_SUPPORTED_ERR, got: "+e.message); err = true; } finally { verify(err, "should throw exception of type NOT_SUPPORTED_ERR: ctx.createRadialGradient(NaN, 0, 1, 0, 0, 1)"); }
       try { err = false;
         ctx.createRadialGradient(0, Infinity, 1, 0, 0, 1);
       } catch (e) { if (e.code !== DOMException.NOT_SUPPORTED_ERR) fail("Failed assertion: expected exception of type NOT_SUPPORTED_ERR, got: "+e.message); err = true; } finally { verify(err, "should throw exception of type NOT_SUPPORTED_ERR: ctx.createRadialGradient(0, Infinity, 1, 0, 0, 1)"); }
       try { err = false;
         ctx.createRadialGradient(0, -Infinity, 1, 0, 0, 1);
       } catch (e) { if (e.code !== DOMException.NOT_SUPPORTED_ERR) fail("Failed assertion: expected exception of type NOT_SUPPORTED_ERR, got: "+e.message); err = true; } finally { verify(err, "should throw exception of type NOT_SUPPORTED_ERR: ctx.createRadialGradient(0, -Infinity, 1, 0, 0, 1)"); }
       try { err = false;
         ctx.createRadialGradient(0, NaN, 1, 0, 0, 1);
       } catch (e) { if (e.code !== DOMException.NOT_SUPPORTED_ERR) fail("Failed assertion: expected exception of type NOT_SUPPORTED_ERR, got: "+e.message); err = true; } finally { verify(err, "should throw exception of type NOT_SUPPORTED_ERR: ctx.createRadialGradient(0, NaN, 1, 0, 0, 1)"); }
       try { err = false;
         ctx.createRadialGradient(0, 0, Infinity, 0, 0, 1);
       } catch (e) { if (e.code !== DOMException.NOT_SUPPORTED_ERR) fail("Failed assertion: expected exception of type NOT_SUPPORTED_ERR, got: "+e.message); err = true; } finally { verify(err, "should throw exception of type NOT_SUPPORTED_ERR: ctx.createRadialGradient(0, 0, Infinity, 0, 0, 1)"); }
       try { err = false;
         ctx.createRadialGradient(0, 0, -Infinity, 0, 0, 1);
       } catch (e) { if (e.code !== DOMException.NOT_SUPPORTED_ERR) fail("Failed assertion: expected exception of type NOT_SUPPORTED_ERR, got: "+e.message); err = true; } finally { verify(err, "should throw exception of type NOT_SUPPORTED_ERR: ctx.createRadialGradient(0, 0, -Infinity, 0, 0, 1)"); }
       try { err = false;
         ctx.createRadialGradient(0, 0, NaN, 0, 0, 1);
       } catch (e) { if (e.code !== DOMException.NOT_SUPPORTED_ERR) fail("Failed assertion: expected exception of type NOT_SUPPORTED_ERR, got: "+e.message); err = true; } finally { verify(err, "should throw exception of type NOT_SUPPORTED_ERR: ctx.createRadialGradient(0, 0, NaN, 0, 0, 1)"); }
       try { err = false;
         ctx.createRadialGradient(0, 0, 1, Infinity, 0, 1);
       } catch (e) { if (e.code !== DOMException.NOT_SUPPORTED_ERR) fail("Failed assertion: expected exception of type NOT_SUPPORTED_ERR, got: "+e.message); err = true; } finally { verify(err, "should throw exception of type NOT_SUPPORTED_ERR: ctx.createRadialGradient(0, 0, 1, Infinity, 0, 1)"); }
       try { err = false;
         ctx.createRadialGradient(0, 0, 1, -Infinity, 0, 1);
       } catch (e) { if (e.code !== DOMException.NOT_SUPPORTED_ERR) fail("Failed assertion: expected exception of type NOT_SUPPORTED_ERR, got: "+e.message); err = true; } finally { verify(err, "should throw exception of type NOT_SUPPORTED_ERR: ctx.createRadialGradient(0, 0, 1, -Infinity, 0, 1)"); }
       try { err = false;
         ctx.createRadialGradient(0, 0, 1, NaN, 0, 1);
       } catch (e) { if (e.code !== DOMException.NOT_SUPPORTED_ERR) fail("Failed assertion: expected exception of type NOT_SUPPORTED_ERR, got: "+e.message); err = true; } finally { verify(err, "should throw exception of type NOT_SUPPORTED_ERR: ctx.createRadialGradient(0, 0, 1, NaN, 0, 1)"); }
       try { err = false;
         ctx.createRadialGradient(0, 0, 1, 0, Infinity, 1);
       } catch (e) { if (e.code !== DOMException.NOT_SUPPORTED_ERR) fail("Failed assertion: expected exception of type NOT_SUPPORTED_ERR, got: "+e.message); err = true; } finally { verify(err, "should throw exception of type NOT_SUPPORTED_ERR: ctx.createRadialGradient(0, 0, 1, 0, Infinity, 1)"); }
       try { err = false;
         ctx.createRadialGradient(0, 0, 1, 0, -Infinity, 1);
       } catch (e) { if (e.code !== DOMException.NOT_SUPPORTED_ERR) fail("Failed assertion: expected exception of type NOT_SUPPORTED_ERR, got: "+e.message); err = true; } finally { verify(err, "should throw exception of type NOT_SUPPORTED_ERR: ctx.createRadialGradient(0, 0, 1, 0, -Infinity, 1)"); }
       try { err = false;
         ctx.createRadialGradient(0, 0, 1, 0, NaN, 1);
       } catch (e) { if (e.code !== DOMException.NOT_SUPPORTED_ERR) fail("Failed assertion: expected exception of type NOT_SUPPORTED_ERR, got: "+e.message); err = true; } finally { verify(err, "should throw exception of type NOT_SUPPORTED_ERR: ctx.createRadialGradient(0, 0, 1, 0, NaN, 1)"); }
       try { err = false;
         ctx.createRadialGradient(0, 0, 1, 0, 0, Infinity);
       } catch (e) { if (e.code !== DOMException.NOT_SUPPORTED_ERR) fail("Failed assertion: expected exception of type NOT_SUPPORTED_ERR, got: "+e.message); err = true; } finally { verify(err, "should throw exception of type NOT_SUPPORTED_ERR: ctx.createRadialGradient(0, 0, 1, 0, 0, Infinity)"); }
       try { err = false;
         ctx.createRadialGradient(0, 0, 1, 0, 0, -Infinity);
       } catch (e) { if (e.code !== DOMException.NOT_SUPPORTED_ERR) fail("Failed assertion: expected exception of type NOT_SUPPORTED_ERR, got: "+e.message); err = true; } finally { verify(err, "should throw exception of type NOT_SUPPORTED_ERR: ctx.createRadialGradient(0, 0, 1, 0, 0, -Infinity)"); }
       try { err = false;
         ctx.createRadialGradient(0, 0, 1, 0, 0, NaN);
       } catch (e) { if (e.code !== DOMException.NOT_SUPPORTED_ERR) fail("Failed assertion: expected exception of type NOT_SUPPORTED_ERR, got: "+e.message); err = true; } finally { verify(err, "should throw exception of type NOT_SUPPORTED_ERR: ctx.createRadialGradient(0, 0, 1, 0, 0, NaN)"); }
       try { err = false;
         ctx.createRadialGradient(Infinity, Infinity, 1, 0, 0, 1);
       } catch (e) { if (e.code !== DOMException.NOT_SUPPORTED_ERR) fail("Failed assertion: expected exception of type NOT_SUPPORTED_ERR, got: "+e.message); err = true; } finally { verify(err, "should throw exception of type NOT_SUPPORTED_ERR: ctx.createRadialGradient(Infinity, Infinity, 1, 0, 0, 1)"); }
       try { err = false;
         ctx.createRadialGradient(Infinity, Infinity, Infinity, 0, 0, 1);
       } catch (e) { if (e.code !== DOMException.NOT_SUPPORTED_ERR) fail("Failed assertion: expected exception of type NOT_SUPPORTED_ERR, got: "+e.message); err = true; } finally { verify(err, "should throw exception of type NOT_SUPPORTED_ERR: ctx.createRadialGradient(Infinity, Infinity, Infinity, 0, 0, 1)"); }
       try { err = false;
         ctx.createRadialGradient(Infinity, Infinity, Infinity, Infinity, 0, 1);
       } catch (e) { if (e.code !== DOMException.NOT_SUPPORTED_ERR) fail("Failed assertion: expected exception of type NOT_SUPPORTED_ERR, got: "+e.message); err = true; } finally { verify(err, "should throw exception of type NOT_SUPPORTED_ERR: ctx.createRadialGradient(Infinity, Infinity, Infinity, Infinity, 0, 1)"); }
       try { err = false;
         ctx.createRadialGradient(Infinity, Infinity, Infinity, Infinity, Infinity, 1);
       } catch (e) { if (e.code !== DOMException.NOT_SUPPORTED_ERR) fail("Failed assertion: expected exception of type NOT_SUPPORTED_ERR, got: "+e.message); err = true; } finally { verify(err, "should throw exception of type NOT_SUPPORTED_ERR: ctx.createRadialGradient(Infinity, Infinity, Infinity, Infinity, Infinity, 1)"); }
       try { err = false;
         ctx.createRadialGradient(Infinity, Infinity, Infinity, Infinity, Infinity, Infinity);
       } catch (e) { if (e.code !== DOMException.NOT_SUPPORTED_ERR) fail("Failed assertion: expected exception of type NOT_SUPPORTED_ERR, got: "+e.message); err = true; } finally { verify(err, "should throw exception of type NOT_SUPPORTED_ERR: ctx.createRadialGradient(Infinity, Infinity, Infinity, Infinity, Infinity, Infinity)"); }
       try { err = false;
         ctx.createRadialGradient(Infinity, Infinity, Infinity, Infinity, 0, Infinity);
       } catch (e) { if (e.code !== DOMException.NOT_SUPPORTED_ERR) fail("Failed assertion: expected exception of type NOT_SUPPORTED_ERR, got: "+e.message); err = true; } finally { verify(err, "should throw exception of type NOT_SUPPORTED_ERR: ctx.createRadialGradient(Infinity, Infinity, Infinity, Infinity, 0, Infinity)"); }
       try { err = false;
         ctx.createRadialGradient(Infinity, Infinity, Infinity, 0, Infinity, 1);
       } catch (e) { if (e.code !== DOMException.NOT_SUPPORTED_ERR) fail("Failed assertion: expected exception of type NOT_SUPPORTED_ERR, got: "+e.message); err = true; } finally { verify(err, "should throw exception of type NOT_SUPPORTED_ERR: ctx.createRadialGradient(Infinity, Infinity, Infinity, 0, Infinity, 1)"); }
       try { err = false;
         ctx.createRadialGradient(Infinity, Infinity, Infinity, 0, Infinity, Infinity);
       } catch (e) { if (e.code !== DOMException.NOT_SUPPORTED_ERR) fail("Failed assertion: expected exception of type NOT_SUPPORTED_ERR, got: "+e.message); err = true; } finally { verify(err, "should throw exception of type NOT_SUPPORTED_ERR: ctx.createRadialGradient(Infinity, Infinity, Infinity, 0, Infinity, Infinity)"); }
       try { err = false;
         ctx.createRadialGradient(Infinity, Infinity, Infinity, 0, 0, Infinity);
       } catch (e) { if (e.code !== DOMException.NOT_SUPPORTED_ERR) fail("Failed assertion: expected exception of type NOT_SUPPORTED_ERR, got: "+e.message); err = true; } finally { verify(err, "should throw exception of type NOT_SUPPORTED_ERR: ctx.createRadialGradient(Infinity, Infinity, Infinity, 0, 0, Infinity)"); }
       try { err = false;
         ctx.createRadialGradient(Infinity, Infinity, 1, Infinity, 0, 1);
       } catch (e) { if (e.code !== DOMException.NOT_SUPPORTED_ERR) fail("Failed assertion: expected exception of type NOT_SUPPORTED_ERR, got: "+e.message); err = true; } finally { verify(err, "should throw exception of type NOT_SUPPORTED_ERR: ctx.createRadialGradient(Infinity, Infinity, 1, Infinity, 0, 1)"); }
       try { err = false;
         ctx.createRadialGradient(Infinity, Infinity, 1, Infinity, Infinity, 1);
       } catch (e) { if (e.code !== DOMException.NOT_SUPPORTED_ERR) fail("Failed assertion: expected exception of type NOT_SUPPORTED_ERR, got: "+e.message); err = true; } finally { verify(err, "should throw exception of type NOT_SUPPORTED_ERR: ctx.createRadialGradient(Infinity, Infinity, 1, Infinity, Infinity, 1)"); }
       try { err = false;
         ctx.createRadialGradient(Infinity, Infinity, 1, Infinity, Infinity, Infinity);
       } catch (e) { if (e.code !== DOMException.NOT_SUPPORTED_ERR) fail("Failed assertion: expected exception of type NOT_SUPPORTED_ERR, got: "+e.message); err = true; } finally { verify(err, "should throw exception of type NOT_SUPPORTED_ERR: ctx.createRadialGradient(Infinity, Infinity, 1, Infinity, Infinity, Infinity)"); }
       try { err = false;
         ctx.createRadialGradient(Infinity, Infinity, 1, Infinity, 0, Infinity);
       } catch (e) { if (e.code !== DOMException.NOT_SUPPORTED_ERR) fail("Failed assertion: expected exception of type NOT_SUPPORTED_ERR, got: "+e.message); err = true; } finally { verify(err, "should throw exception of type NOT_SUPPORTED_ERR: ctx.createRadialGradient(Infinity, Infinity, 1, Infinity, 0, Infinity)"); }
       try { err = false;
         ctx.createRadialGradient(Infinity, Infinity, 1, 0, Infinity, 1);
       } catch (e) { if (e.code !== DOMException.NOT_SUPPORTED_ERR) fail("Failed assertion: expected exception of type NOT_SUPPORTED_ERR, got: "+e.message); err = true; } finally { verify(err, "should throw exception of type NOT_SUPPORTED_ERR: ctx.createRadialGradient(Infinity, Infinity, 1, 0, Infinity, 1)"); }
       try { err = false;
         ctx.createRadialGradient(Infinity, Infinity, 1, 0, Infinity, Infinity);
       } catch (e) { if (e.code !== DOMException.NOT_SUPPORTED_ERR) fail("Failed assertion: expected exception of type NOT_SUPPORTED_ERR, got: "+e.message); err = true; } finally { verify(err, "should throw exception of type NOT_SUPPORTED_ERR: ctx.createRadialGradient(Infinity, Infinity, 1, 0, Infinity, Infinity)"); }
       try { err = false;
         ctx.createRadialGradient(Infinity, Infinity, 1, 0, 0, Infinity);
       } catch (e) { if (e.code !== DOMException.NOT_SUPPORTED_ERR) fail("Failed assertion: expected exception of type NOT_SUPPORTED_ERR, got: "+e.message); err = true; } finally { verify(err, "should throw exception of type NOT_SUPPORTED_ERR: ctx.createRadialGradient(Infinity, Infinity, 1, 0, 0, Infinity)"); }
       try { err = false;
         ctx.createRadialGradient(Infinity, 0, Infinity, 0, 0, 1);
       } catch (e) { if (e.code !== DOMException.NOT_SUPPORTED_ERR) fail("Failed assertion: expected exception of type NOT_SUPPORTED_ERR, got: "+e.message); err = true; } finally { verify(err, "should throw exception of type NOT_SUPPORTED_ERR: ctx.createRadialGradient(Infinity, 0, Infinity, 0, 0, 1)"); }
       try { err = false;
         ctx.createRadialGradient(Infinity, 0, Infinity, Infinity, 0, 1);
       } catch (e) { if (e.code !== DOMException.NOT_SUPPORTED_ERR) fail("Failed assertion: expected exception of type NOT_SUPPORTED_ERR, got: "+e.message); err = true; } finally { verify(err, "should throw exception of type NOT_SUPPORTED_ERR: ctx.createRadialGradient(Infinity, 0, Infinity, Infinity, 0, 1)"); }
       try { err = false;
         ctx.createRadialGradient(Infinity, 0, Infinity, Infinity, Infinity, 1);
       } catch (e) { if (e.code !== DOMException.NOT_SUPPORTED_ERR) fail("Failed assertion: expected exception of type NOT_SUPPORTED_ERR, got: "+e.message); err = true; } finally { verify(err, "should throw exception of type NOT_SUPPORTED_ERR: ctx.createRadialGradient(Infinity, 0, Infinity, Infinity, Infinity, 1)"); }
       try { err = false;
         ctx.createRadialGradient(Infinity, 0, Infinity, Infinity, Infinity, Infinity);
       } catch (e) { if (e.code !== DOMException.NOT_SUPPORTED_ERR) fail("Failed assertion: expected exception of type NOT_SUPPORTED_ERR, got: "+e.message); err = true; } finally { verify(err, "should throw exception of type NOT_SUPPORTED_ERR: ctx.createRadialGradient(Infinity, 0, Infinity, Infinity, Infinity, Infinity)"); }
       try { err = false;
         ctx.createRadialGradient(Infinity, 0, Infinity, Infinity, 0, Infinity);
       } catch (e) { if (e.code !== DOMException.NOT_SUPPORTED_ERR) fail("Failed assertion: expected exception of type NOT_SUPPORTED_ERR, got: "+e.message); err = true; } finally { verify(err, "should throw exception of type NOT_SUPPORTED_ERR: ctx.createRadialGradient(Infinity, 0, Infinity, Infinity, 0, Infinity)"); }
       try { err = false;
         ctx.createRadialGradient(Infinity, 0, Infinity, 0, Infinity, 1);
       } catch (e) { if (e.code !== DOMException.NOT_SUPPORTED_ERR) fail("Failed assertion: expected exception of type NOT_SUPPORTED_ERR, got: "+e.message); err = true; } finally { verify(err, "should throw exception of type NOT_SUPPORTED_ERR: ctx.createRadialGradient(Infinity, 0, Infinity, 0, Infinity, 1)"); }
       try { err = false;
         ctx.createRadialGradient(Infinity, 0, Infinity, 0, Infinity, Infinity);
       } catch (e) { if (e.code !== DOMException.NOT_SUPPORTED_ERR) fail("Failed assertion: expected exception of type NOT_SUPPORTED_ERR, got: "+e.message); err = true; } finally { verify(err, "should throw exception of type NOT_SUPPORTED_ERR: ctx.createRadialGradient(Infinity, 0, Infinity, 0, Infinity, Infinity)"); }
       try { err = false;
         ctx.createRadialGradient(Infinity, 0, Infinity, 0, 0, Infinity);
       } catch (e) { if (e.code !== DOMException.NOT_SUPPORTED_ERR) fail("Failed assertion: expected exception of type NOT_SUPPORTED_ERR, got: "+e.message); err = true; } finally { verify(err, "should throw exception of type NOT_SUPPORTED_ERR: ctx.createRadialGradient(Infinity, 0, Infinity, 0, 0, Infinity)"); }
       try { err = false;
         ctx.createRadialGradient(Infinity, 0, 1, Infinity, 0, 1);
       } catch (e) { if (e.code !== DOMException.NOT_SUPPORTED_ERR) fail("Failed assertion: expected exception of type NOT_SUPPORTED_ERR, got: "+e.message); err = true; } finally { verify(err, "should throw exception of type NOT_SUPPORTED_ERR: ctx.createRadialGradient(Infinity, 0, 1, Infinity, 0, 1)"); }
       try { err = false;
         ctx.createRadialGradient(Infinity, 0, 1, Infinity, Infinity, 1);
       } catch (e) { if (e.code !== DOMException.NOT_SUPPORTED_ERR) fail("Failed assertion: expected exception of type NOT_SUPPORTED_ERR, got: "+e.message); err = true; } finally { verify(err, "should throw exception of type NOT_SUPPORTED_ERR: ctx.createRadialGradient(Infinity, 0, 1, Infinity, Infinity, 1)"); }
       try { err = false;
         ctx.createRadialGradient(Infinity, 0, 1, Infinity, Infinity, Infinity);
       } catch (e) { if (e.code !== DOMException.NOT_SUPPORTED_ERR) fail("Failed assertion: expected exception of type NOT_SUPPORTED_ERR, got: "+e.message); err = true; } finally { verify(err, "should throw exception of type NOT_SUPPORTED_ERR: ctx.createRadialGradient(Infinity, 0, 1, Infinity, Infinity, Infinity)"); }
       try { err = false;
         ctx.createRadialGradient(Infinity, 0, 1, Infinity, 0, Infinity);
       } catch (e) { if (e.code !== DOMException.NOT_SUPPORTED_ERR) fail("Failed assertion: expected exception of type NOT_SUPPORTED_ERR, got: "+e.message); err = true; } finally { verify(err, "should throw exception of type NOT_SUPPORTED_ERR: ctx.createRadialGradient(Infinity, 0, 1, Infinity, 0, Infinity)"); }
       try { err = false;
         ctx.createRadialGradient(Infinity, 0, 1, 0, Infinity, 1);
       } catch (e) { if (e.code !== DOMException.NOT_SUPPORTED_ERR) fail("Failed assertion: expected exception of type NOT_SUPPORTED_ERR, got: "+e.message); err = true; } finally { verify(err, "should throw exception of type NOT_SUPPORTED_ERR: ctx.createRadialGradient(Infinity, 0, 1, 0, Infinity, 1)"); }
       try { err = false;
         ctx.createRadialGradient(Infinity, 0, 1, 0, Infinity, Infinity);
       } catch (e) { if (e.code !== DOMException.NOT_SUPPORTED_ERR) fail("Failed assertion: expected exception of type NOT_SUPPORTED_ERR, got: "+e.message); err = true; } finally { verify(err, "should throw exception of type NOT_SUPPORTED_ERR: ctx.createRadialGradient(Infinity, 0, 1, 0, Infinity, Infinity)"); }
       try { err = false;
         ctx.createRadialGradient(Infinity, 0, 1, 0, 0, Infinity);
       } catch (e) { if (e.code !== DOMException.NOT_SUPPORTED_ERR) fail("Failed assertion: expected exception of type NOT_SUPPORTED_ERR, got: "+e.message); err = true; } finally { verify(err, "should throw exception of type NOT_SUPPORTED_ERR: ctx.createRadialGradient(Infinity, 0, 1, 0, 0, Infinity)"); }
       try { err = false;
         ctx.createRadialGradient(0, Infinity, Infinity, 0, 0, 1);
       } catch (e) { if (e.code !== DOMException.NOT_SUPPORTED_ERR) fail("Failed assertion: expected exception of type NOT_SUPPORTED_ERR, got: "+e.message); err = true; } finally { verify(err, "should throw exception of type NOT_SUPPORTED_ERR: ctx.createRadialGradient(0, Infinity, Infinity, 0, 0, 1)"); }
       try { err = false;
         ctx.createRadialGradient(0, Infinity, Infinity, Infinity, 0, 1);
       } catch (e) { if (e.code !== DOMException.NOT_SUPPORTED_ERR) fail("Failed assertion: expected exception of type NOT_SUPPORTED_ERR, got: "+e.message); err = true; } finally { verify(err, "should throw exception of type NOT_SUPPORTED_ERR: ctx.createRadialGradient(0, Infinity, Infinity, Infinity, 0, 1)"); }
       try { err = false;
         ctx.createRadialGradient(0, Infinity, Infinity, Infinity, Infinity, 1);
       } catch (e) { if (e.code !== DOMException.NOT_SUPPORTED_ERR) fail("Failed assertion: expected exception of type NOT_SUPPORTED_ERR, got: "+e.message); err = true; } finally { verify(err, "should throw exception of type NOT_SUPPORTED_ERR: ctx.createRadialGradient(0, Infinity, Infinity, Infinity, Infinity, 1)"); }
       try { err = false;
         ctx.createRadialGradient(0, Infinity, Infinity, Infinity, Infinity, Infinity);
       } catch (e) { if (e.code !== DOMException.NOT_SUPPORTED_ERR) fail("Failed assertion: expected exception of type NOT_SUPPORTED_ERR, got: "+e.message); err = true; } finally { verify(err, "should throw exception of type NOT_SUPPORTED_ERR: ctx.createRadialGradient(0, Infinity, Infinity, Infinity, Infinity, Infinity)"); }
       try { err = false;
         ctx.createRadialGradient(0, Infinity, Infinity, Infinity, 0, Infinity);
       } catch (e) { if (e.code !== DOMException.NOT_SUPPORTED_ERR) fail("Failed assertion: expected exception of type NOT_SUPPORTED_ERR, got: "+e.message); err = true; } finally { verify(err, "should throw exception of type NOT_SUPPORTED_ERR: ctx.createRadialGradient(0, Infinity, Infinity, Infinity, 0, Infinity)"); }
       try { err = false;
         ctx.createRadialGradient(0, Infinity, Infinity, 0, Infinity, 1);
       } catch (e) { if (e.code !== DOMException.NOT_SUPPORTED_ERR) fail("Failed assertion: expected exception of type NOT_SUPPORTED_ERR, got: "+e.message); err = true; } finally { verify(err, "should throw exception of type NOT_SUPPORTED_ERR: ctx.createRadialGradient(0, Infinity, Infinity, 0, Infinity, 1)"); }
       try { err = false;
         ctx.createRadialGradient(0, Infinity, Infinity, 0, Infinity, Infinity);
       } catch (e) { if (e.code !== DOMException.NOT_SUPPORTED_ERR) fail("Failed assertion: expected exception of type NOT_SUPPORTED_ERR, got: "+e.message); err = true; } finally { verify(err, "should throw exception of type NOT_SUPPORTED_ERR: ctx.createRadialGradient(0, Infinity, Infinity, 0, Infinity, Infinity)"); }
       try { err = false;
         ctx.createRadialGradient(0, Infinity, Infinity, 0, 0, Infinity);
       } catch (e) { if (e.code !== DOMException.NOT_SUPPORTED_ERR) fail("Failed assertion: expected exception of type NOT_SUPPORTED_ERR, got: "+e.message); err = true; } finally { verify(err, "should throw exception of type NOT_SUPPORTED_ERR: ctx.createRadialGradient(0, Infinity, Infinity, 0, 0, Infinity)"); }
       try { err = false;
         ctx.createRadialGradient(0, Infinity, 1, Infinity, 0, 1);
       } catch (e) { if (e.code !== DOMException.NOT_SUPPORTED_ERR) fail("Failed assertion: expected exception of type NOT_SUPPORTED_ERR, got: "+e.message); err = true; } finally { verify(err, "should throw exception of type NOT_SUPPORTED_ERR: ctx.createRadialGradient(0, Infinity, 1, Infinity, 0, 1)"); }
       try { err = false;
         ctx.createRadialGradient(0, Infinity, 1, Infinity, Infinity, 1);
       } catch (e) { if (e.code !== DOMException.NOT_SUPPORTED_ERR) fail("Failed assertion: expected exception of type NOT_SUPPORTED_ERR, got: "+e.message); err = true; } finally { verify(err, "should throw exception of type NOT_SUPPORTED_ERR: ctx.createRadialGradient(0, Infinity, 1, Infinity, Infinity, 1)"); }
       try { err = false;
         ctx.createRadialGradient(0, Infinity, 1, Infinity, Infinity, Infinity);
       } catch (e) { if (e.code !== DOMException.NOT_SUPPORTED_ERR) fail("Failed assertion: expected exception of type NOT_SUPPORTED_ERR, got: "+e.message); err = true; } finally { verify(err, "should throw exception of type NOT_SUPPORTED_ERR: ctx.createRadialGradient(0, Infinity, 1, Infinity, Infinity, Infinity)"); }
       try { err = false;
         ctx.createRadialGradient(0, Infinity, 1, Infinity, 0, Infinity);
       } catch (e) { if (e.code !== DOMException.NOT_SUPPORTED_ERR) fail("Failed assertion: expected exception of type NOT_SUPPORTED_ERR, got: "+e.message); err = true; } finally { verify(err, "should throw exception of type NOT_SUPPORTED_ERR: ctx.createRadialGradient(0, Infinity, 1, Infinity, 0, Infinity)"); }
       try { err = false;
         ctx.createRadialGradient(0, Infinity, 1, 0, Infinity, 1);
       } catch (e) { if (e.code !== DOMException.NOT_SUPPORTED_ERR) fail("Failed assertion: expected exception of type NOT_SUPPORTED_ERR, got: "+e.message); err = true; } finally { verify(err, "should throw exception of type NOT_SUPPORTED_ERR: ctx.createRadialGradient(0, Infinity, 1, 0, Infinity, 1)"); }
       try { err = false;
         ctx.createRadialGradient(0, Infinity, 1, 0, Infinity, Infinity);
       } catch (e) { if (e.code !== DOMException.NOT_SUPPORTED_ERR) fail("Failed assertion: expected exception of type NOT_SUPPORTED_ERR, got: "+e.message); err = true; } finally { verify(err, "should throw exception of type NOT_SUPPORTED_ERR: ctx.createRadialGradient(0, Infinity, 1, 0, Infinity, Infinity)"); }
       try { err = false;
         ctx.createRadialGradient(0, Infinity, 1, 0, 0, Infinity);
       } catch (e) { if (e.code !== DOMException.NOT_SUPPORTED_ERR) fail("Failed assertion: expected exception of type NOT_SUPPORTED_ERR, got: "+e.message); err = true; } finally { verify(err, "should throw exception of type NOT_SUPPORTED_ERR: ctx.createRadialGradient(0, Infinity, 1, 0, 0, Infinity)"); }
       try { err = false;
         ctx.createRadialGradient(0, 0, Infinity, Infinity, 0, 1);
       } catch (e) { if (e.code !== DOMException.NOT_SUPPORTED_ERR) fail("Failed assertion: expected exception of type NOT_SUPPORTED_ERR, got: "+e.message); err = true; } finally { verify(err, "should throw exception of type NOT_SUPPORTED_ERR: ctx.createRadialGradient(0, 0, Infinity, Infinity, 0, 1)"); }
       try { err = false;
         ctx.createRadialGradient(0, 0, Infinity, Infinity, Infinity, 1);
       } catch (e) { if (e.code !== DOMException.NOT_SUPPORTED_ERR) fail("Failed assertion: expected exception of type NOT_SUPPORTED_ERR, got: "+e.message); err = true; } finally { verify(err, "should throw exception of type NOT_SUPPORTED_ERR: ctx.createRadialGradient(0, 0, Infinity, Infinity, Infinity, 1)"); }
       try { err = false;
         ctx.createRadialGradient(0, 0, Infinity, Infinity, Infinity, Infinity);
       } catch (e) { if (e.code !== DOMException.NOT_SUPPORTED_ERR) fail("Failed assertion: expected exception of type NOT_SUPPORTED_ERR, got: "+e.message); err = true; } finally { verify(err, "should throw exception of type NOT_SUPPORTED_ERR: ctx.createRadialGradient(0, 0, Infinity, Infinity, Infinity, Infinity)"); }
       try { err = false;
         ctx.createRadialGradient(0, 0, Infinity, Infinity, 0, Infinity);
       } catch (e) { if (e.code !== DOMException.NOT_SUPPORTED_ERR) fail("Failed assertion: expected exception of type NOT_SUPPORTED_ERR, got: "+e.message); err = true; } finally { verify(err, "should throw exception of type NOT_SUPPORTED_ERR: ctx.createRadialGradient(0, 0, Infinity, Infinity, 0, Infinity)"); }
       try { err = false;
         ctx.createRadialGradient(0, 0, Infinity, 0, Infinity, 1);
       } catch (e) { if (e.code !== DOMException.NOT_SUPPORTED_ERR) fail("Failed assertion: expected exception of type NOT_SUPPORTED_ERR, got: "+e.message); err = true; } finally { verify(err, "should throw exception of type NOT_SUPPORTED_ERR: ctx.createRadialGradient(0, 0, Infinity, 0, Infinity, 1)"); }
       try { err = false;
         ctx.createRadialGradient(0, 0, Infinity, 0, Infinity, Infinity);
       } catch (e) { if (e.code !== DOMException.NOT_SUPPORTED_ERR) fail("Failed assertion: expected exception of type NOT_SUPPORTED_ERR, got: "+e.message); err = true; } finally { verify(err, "should throw exception of type NOT_SUPPORTED_ERR: ctx.createRadialGradient(0, 0, Infinity, 0, Infinity, Infinity)"); }
       try { err = false;
         ctx.createRadialGradient(0, 0, Infinity, 0, 0, Infinity);
       } catch (e) { if (e.code !== DOMException.NOT_SUPPORTED_ERR) fail("Failed assertion: expected exception of type NOT_SUPPORTED_ERR, got: "+e.message); err = true; } finally { verify(err, "should throw exception of type NOT_SUPPORTED_ERR: ctx.createRadialGradient(0, 0, Infinity, 0, 0, Infinity)"); }
       try { err = false;
         ctx.createRadialGradient(0, 0, 1, Infinity, Infinity, 1);
       } catch (e) { if (e.code !== DOMException.NOT_SUPPORTED_ERR) fail("Failed assertion: expected exception of type NOT_SUPPORTED_ERR, got: "+e.message); err = true; } finally { verify(err, "should throw exception of type NOT_SUPPORTED_ERR: ctx.createRadialGradient(0, 0, 1, Infinity, Infinity, 1)"); }
       try { err = false;
         ctx.createRadialGradient(0, 0, 1, Infinity, Infinity, Infinity);
       } catch (e) { if (e.code !== DOMException.NOT_SUPPORTED_ERR) fail("Failed assertion: expected exception of type NOT_SUPPORTED_ERR, got: "+e.message); err = true; } finally { verify(err, "should throw exception of type NOT_SUPPORTED_ERR: ctx.createRadialGradient(0, 0, 1, Infinity, Infinity, Infinity)"); }
       try { err = false;
         ctx.createRadialGradient(0, 0, 1, Infinity, 0, Infinity);
       } catch (e) { if (e.code !== DOMException.NOT_SUPPORTED_ERR) fail("Failed assertion: expected exception of type NOT_SUPPORTED_ERR, got: "+e.message); err = true; } finally { verify(err, "should throw exception of type NOT_SUPPORTED_ERR: ctx.createRadialGradient(0, 0, 1, Infinity, 0, Infinity)"); }
       try { err = false;
         ctx.createRadialGradient(0, 0, 1, 0, Infinity, Infinity);
       } catch (e) { if (e.code !== DOMException.NOT_SUPPORTED_ERR) fail("Failed assertion: expected exception of type NOT_SUPPORTED_ERR, got: "+e.message); err = true; } finally { verify(err, "should throw exception of type NOT_SUPPORTED_ERR: ctx.createRadialGradient(0, 0, 1, 0, Infinity, Infinity)"); }


       ctx.reset();
       ctx.fillStyle = '#f00';
       ctx.fillRect(0, 0, 100, 50);
       g = ctx.createRadialGradient(200, 25, 10, 200, 25, 20);
       g.addColorStop(0, '#f00');
       g.addColorStop(1, '#0f0');
       ctx.fillStyle = g;ctx.fillRect(0, 0, 100, 50);

       //comparePixel(ctx, 1,1, 0,255,0,255);
       //comparePixel(ctx, 50,1, 0,255,0,255);//comparePixel(ctx, 98,1, 0,255,0,255);
       //comparePixel(ctx, 1,25, 0,255,0,255,16);
       //comparePixel(ctx, 50,25, 0,255,0,255);
       //comparePixel(ctx, 98,25, 0,255,0,255);//comparePixel(ctx, 1,48, 0,255,0,255);
       //comparePixel(ctx, 50,48, 0,255,0,255);
       //comparePixel(ctx, 98,48, 0,255,0,255);

       ctx.reset();
       ctx.fillStyle = '#f00';
       ctx.fillRect(0, 0, 100, 50);
       g = ctx.createRadialGradient(200, 25, 20, 200, 25, 10);
       g.addColorStop(0, '#0f0');
       g.addColorStop(1, '#f00');
       ctx.fillStyle = g;ctx.fillRect(0, 0, 100, 50);

       //comparePixel(ctx, 1,1, 0,255,0,255);
       //comparePixel(ctx, 50,1, 0,255,0,255);//comparePixel(ctx, 98,1, 0,255,0,255);
       //comparePixel(ctx, 1,25, 0,255,0,255,16);
       //comparePixel(ctx, 50,25, 0,255,0,255);
       //comparePixel(ctx, 98,25, 0,255,0,255);//comparePixel(ctx, 1,48, 0,255,0,255);
       //comparePixel(ctx, 50,48, 0,255,0,255);
       //comparePixel(ctx, 98,48, 0,255,0,255);

       ctx.reset();
       ctx.fillStyle = '#f00';
       ctx.fillRect(0, 0, 100, 50);
       g = ctx.createRadialGradient(200, 25, 20, 200, 25, 10);
       g.addColorStop(0, '#0f0');
       g.addColorStop(0.001, '#f00');
       g.addColorStop(1, '#f00');ctx.fillStyle = g;
       ctx.fillRect(0, 0, 100, 50);

       //comparePixel(ctx, 1,1, 0,255,0,255);//comparePixel(ctx, 50,1, 0,255,0,255);
       //comparePixel(ctx, 98,1, 0,255,0,255);
       //comparePixel(ctx, 1,25, 0,255,0,255,16);
       //comparePixel(ctx, 50,25, 0,255,0,255);//comparePixel(ctx, 98,25, 0,255,0,255);
       //comparePixel(ctx, 1,48, 0,255,0,255);
       //comparePixel(ctx, 50,48, 0,255,0,255);
       //comparePixel(ctx, 98,48, 0,255,0,255);

       ctx.reset();
       ctx.fillStyle = '#0f0';
       ctx.fillRect(0, 0, 100, 50);
       g = ctx.createRadialGradient(150, 25, 50, 200, 25, 100);
       g.addColorStop(0, '#f00');
       g.addColorStop(1, '#f00');
       ctx.fillStyle = g;ctx.fillRect(0, 0, 100, 50);

       //comparePixel(ctx, 1,1, 0,255,0,255);
       //comparePixel(ctx, 50,1, 0,255,0,255);//comparePixel(ctx, 98,1, 0,255,0,255);
       //comparePixel(ctx, 1,25, 0,255,0,255,16);
       //comparePixel(ctx, 50,25, 0,255,0,255);
       //comparePixel(ctx, 98,25, 0,255,0,255);//comparePixel(ctx, 1,48, 0,255,0,255);
       //comparePixel(ctx, 50,48, 0,255,0,255);
       //comparePixel(ctx, 98,48, 0,255,0,255);

       ctx.reset();

       ctx.fillStyle = '#f00';
       ctx.fillRect(0, 0, 100, 50);
       g = ctx.createRadialGradient(-80, 25, 70, 0, 25, 150);
       g.addColorStop(0, '#f00');
       g.addColorStop(0.01, '#0f0');
       g.addColorStop(0.99, '#0f0');g.addColorStop(1, '#f00');
       ctx.fillStyle = g;
       ctx.fillRect(0, 0, 100, 50);
       //comparePixel(ctx, 1,1, 0,255,0,255);
       //comparePixel(ctx, 50,1, 0,255,0,255);
       //comparePixel(ctx, 98,1, 0,255,0,255);
       //comparePixel(ctx, 1,25, 0,255,0,255,16);//comparePixel(ctx, 50,25, 0,255,0,255);
       //comparePixel(ctx, 98,25, 0,255,0,255);
       //comparePixel(ctx, 1,48, 0,255,0,255);
       //comparePixel(ctx, 50,48, 0,255,0,255);//comparePixel(ctx, 98,48, 0,255,0,255);

       ctx.reset();
       ctx.fillStyle = '#0f0';
       ctx.fillRect(0, 0, 100, 50);
       g = ctx.createRadialGradient(120, -15, 25, 140, -30, 50);
       g.addColorStop(0, '#f00');
       g.addColorStop(1, '#f00');
       ctx.fillStyle = g;ctx.fillRect(0, 0, 100, 50);

       //comparePixel(ctx, 1,1, 0,255,0,255);
       //comparePixel(ctx, 50,1, 0,255,0,255);//comparePixel(ctx, 98,1, 0,255,0,255);
       //comparePixel(ctx, 1,25, 0,255,0,255,16);
       //comparePixel(ctx, 50,25, 0,255,0,255);
       //comparePixel(ctx, 98,25, 0,255,0,255);//comparePixel(ctx, 1,48, 0,255,0,255);
       //comparePixel(ctx, 50,48, 0,255,0,255);
       //comparePixel(ctx, 98,48, 0,255,0,255);

       ctx.reset();
       g = ctx.createRadialGradient(0, 0, 0, 0, 0, 11.2);
       g.addColorStop(0, '#0f0');
       g.addColorStop(0.5, '#0f0');g.addColorStop(0.51, '#f00');
       g.addColorStop(1, '#f00');
       ctx.fillStyle = g;
       ctx.translate(50, 25);ctx.scale(10, 10);
       ctx.fillRect(-5, -2.5, 10, 5);
       //comparePixel(ctx, 25,25, 0,255,0,255);
       //comparePixel(ctx, 50,25, 0,255,0,255);//comparePixel(ctx, 75,25, 0,255,0,255);

       ctx.reset();
       ctx.translate(100, 0);
       g = ctx.createRadialGradient(0, 0, 0, 0, 0, 11.2);
       g.addColorStop(0, '#0f0');g.addColorStop(0.5, '#0f0');
       g.addColorStop(0.51, '#f00');
       g.addColorStop(1, '#f00');
       ctx.fillStyle = g;ctx.translate(-50, 25);
       ctx.scale(10, 10);
       ctx.fillRect(-5, -2.5, 10, 5);
       //comparePixel(ctx, 25,25, 0,255,0,255);//comparePixel(ctx, 50,25, 0,255,0,255);
       //comparePixel(ctx, 75,25, 0,255,0,255);


       ctx.reset();
       g = ctx.createRadialGradient(0, 0, 0, 0, 0, 11.2);
       g.addColorStop(0, '#0f0');
       g.addColorStop(0.5, '#0f0');g.addColorStop(0.51, '#f00');
       g.addColorStop(1, '#f00');
       ctx.fillStyle = g;
       ctx.fillRect(0, 0, 100, 50);ctx.translate(50, 25);
       ctx.scale(10, 10);
       ctx.fillRect(-5, -2.5, 10, 5);
       //comparePixel(ctx, 25,25, 0,255,0,255);//comparePixel(ctx, 50,25, 0,255,0,255);
       //comparePixel(ctx, 75,25, 0,255,0,255);


  }
   function test_linear(row) {
       var canvas = createCanvasObject(row);
       var ctx = canvas.getContext('2d');
       ctx.reset();
       try { var err = false;
         ctx.createLinearGradient(Infinity, 0, 1, 0);
       } catch (e) { if (e.code !== DOMException.NOT_SUPPORTED_ERR) fail("Failed assertion: expected exception of type NOT_SUPPORTED_ERR, got: "+e.message); err = true; } finally { verify(err, "should throw exception of type NOT_SUPPORTED_ERR: ctx.createLinearGradient(Infinity, 0, 1, 0)"); }
       try { err = false;
         ctx.createLinearGradient(-Infinity, 0, 1, 0);
       } catch (e) { if (e.code !== DOMException.NOT_SUPPORTED_ERR) fail("Failed assertion: expected exception of type NOT_SUPPORTED_ERR, got: "+e.message); err = true; } finally { verify(err, "should throw exception of type NOT_SUPPORTED_ERR: ctx.createLinearGradient(-Infinity, 0, 1, 0)"); }
       try { err = false;
         ctx.createLinearGradient(NaN, 0, 1, 0);
       } catch (e) { if (e.code !== DOMException.NOT_SUPPORTED_ERR) fail("Failed assertion: expected exception of type NOT_SUPPORTED_ERR, got: "+e.message); err = true; } finally { verify(err, "should throw exception of type NOT_SUPPORTED_ERR: ctx.createLinearGradient(NaN, 0, 1, 0)"); }
       try { err = false;
         ctx.createLinearGradient(0, Infinity, 1, 0);
       } catch (e) { if (e.code !== DOMException.NOT_SUPPORTED_ERR) fail("Failed assertion: expected exception of type NOT_SUPPORTED_ERR, got: "+e.message); err = true; } finally { verify(err, "should throw exception of type NOT_SUPPORTED_ERR: ctx.createLinearGradient(0, Infinity, 1, 0)"); }
       try { err = false;
         ctx.createLinearGradient(0, -Infinity, 1, 0);
       } catch (e) { if (e.code !== DOMException.NOT_SUPPORTED_ERR) fail("Failed assertion: expected exception of type NOT_SUPPORTED_ERR, got: "+e.message); err = true; } finally { verify(err, "should throw exception of type NOT_SUPPORTED_ERR: ctx.createLinearGradient(0, -Infinity, 1, 0)"); }
       try { err = false;
         ctx.createLinearGradient(0, NaN, 1, 0);
       } catch (e) { if (e.code !== DOMException.NOT_SUPPORTED_ERR) fail("Failed assertion: expected exception of type NOT_SUPPORTED_ERR, got: "+e.message); err = true; } finally { verify(err, "should throw exception of type NOT_SUPPORTED_ERR: ctx.createLinearGradient(0, NaN, 1, 0)"); }
       try { err = false;
         ctx.createLinearGradient(0, 0, Infinity, 0);
       } catch (e) { if (e.code !== DOMException.NOT_SUPPORTED_ERR) fail("Failed assertion: expected exception of type NOT_SUPPORTED_ERR, got: "+e.message); err = true; } finally { verify(err, "should throw exception of type NOT_SUPPORTED_ERR: ctx.createLinearGradient(0, 0, Infinity, 0)"); }
       try { err = false;
         ctx.createLinearGradient(0, 0, -Infinity, 0);
       } catch (e) { if (e.code !== DOMException.NOT_SUPPORTED_ERR) fail("Failed assertion: expected exception of type NOT_SUPPORTED_ERR, got: "+e.message); err = true; } finally { verify(err, "should throw exception of type NOT_SUPPORTED_ERR: ctx.createLinearGradient(0, 0, -Infinity, 0)"); }
       try { err = false;
         ctx.createLinearGradient(0, 0, NaN, 0);
       } catch (e) { if (e.code !== DOMException.NOT_SUPPORTED_ERR) fail("Failed assertion: expected exception of type NOT_SUPPORTED_ERR, got: "+e.message); err = true; } finally { verify(err, "should throw exception of type NOT_SUPPORTED_ERR: ctx.createLinearGradient(0, 0, NaN, 0)"); }
       try { err = false;
         ctx.createLinearGradient(0, 0, 1, Infinity);
       } catch (e) { if (e.code !== DOMException.NOT_SUPPORTED_ERR) fail("Failed assertion: expected exception of type NOT_SUPPORTED_ERR, got: "+e.message); err = true; } finally { verify(err, "should throw exception of type NOT_SUPPORTED_ERR: ctx.createLinearGradient(0, 0, 1, Infinity)"); }
       try { err = false;
         ctx.createLinearGradient(0, 0, 1, -Infinity);
       } catch (e) { if (e.code !== DOMException.NOT_SUPPORTED_ERR) fail("Failed assertion: expected exception of type NOT_SUPPORTED_ERR, got: "+e.message); err = true; } finally { verify(err, "should throw exception of type NOT_SUPPORTED_ERR: ctx.createLinearGradient(0, 0, 1, -Infinity)"); }
       try { err = false;
         ctx.createLinearGradient(0, 0, 1, NaN);
       } catch (e) { if (e.code !== DOMException.NOT_SUPPORTED_ERR) fail("Failed assertion: expected exception of type NOT_SUPPORTED_ERR, got: "+e.message); err = true; } finally { verify(err, "should throw exception of type NOT_SUPPORTED_ERR: ctx.createLinearGradient(0, 0, 1, NaN)"); }
       try { err = false;
         ctx.createLinearGradient(Infinity, Infinity, 1, 0);
       } catch (e) { if (e.code !== DOMException.NOT_SUPPORTED_ERR) fail("Failed assertion: expected exception of type NOT_SUPPORTED_ERR, got: "+e.message); err = true; } finally { verify(err, "should throw exception of type NOT_SUPPORTED_ERR: ctx.createLinearGradient(Infinity, Infinity, 1, 0)"); }
       try { err = false;
         ctx.createLinearGradient(Infinity, Infinity, Infinity, 0);
       } catch (e) { if (e.code !== DOMException.NOT_SUPPORTED_ERR) fail("Failed assertion: expected exception of type NOT_SUPPORTED_ERR, got: "+e.message); err = true; } finally { verify(err, "should throw exception of type NOT_SUPPORTED_ERR: ctx.createLinearGradient(Infinity, Infinity, Infinity, 0)"); }
       try { err = false;
         ctx.createLinearGradient(Infinity, Infinity, Infinity, Infinity);
       } catch (e) { if (e.code !== DOMException.NOT_SUPPORTED_ERR) fail("Failed assertion: expected exception of type NOT_SUPPORTED_ERR, got: "+e.message); err = true; } finally { verify(err, "should throw exception of type NOT_SUPPORTED_ERR: ctx.createLinearGradient(Infinity, Infinity, Infinity, Infinity)"); }
       try { err = false;
         ctx.createLinearGradient(Infinity, Infinity, 1, Infinity);
       } catch (e) { if (e.code !== DOMException.NOT_SUPPORTED_ERR) fail("Failed assertion: expected exception of type NOT_SUPPORTED_ERR, got: "+e.message); err = true; } finally { verify(err, "should throw exception of type NOT_SUPPORTED_ERR: ctx.createLinearGradient(Infinity, Infinity, 1, Infinity)"); }
       try { err = false;
         ctx.createLinearGradient(Infinity, 0, Infinity, 0);
       } catch (e) { if (e.code !== DOMException.NOT_SUPPORTED_ERR) fail("Failed assertion: expected exception of type NOT_SUPPORTED_ERR, got: "+e.message); err = true; } finally { verify(err, "should throw exception of type NOT_SUPPORTED_ERR: ctx.createLinearGradient(Infinity, 0, Infinity, 0)"); }
       try { err = false;
         ctx.createLinearGradient(Infinity, 0, Infinity, Infinity);
       } catch (e) { if (e.code !== DOMException.NOT_SUPPORTED_ERR) fail("Failed assertion: expected exception of type NOT_SUPPORTED_ERR, got: "+e.message); err = true; } finally { verify(err, "should throw exception of type NOT_SUPPORTED_ERR: ctx.createLinearGradient(Infinity, 0, Infinity, Infinity)"); }
       try { err = false;
         ctx.createLinearGradient(Infinity, 0, 1, Infinity);
       } catch (e) { if (e.code !== DOMException.NOT_SUPPORTED_ERR) fail("Failed assertion: expected exception of type NOT_SUPPORTED_ERR, got: "+e.message); err = true; } finally { verify(err, "should throw exception of type NOT_SUPPORTED_ERR: ctx.createLinearGradient(Infinity, 0, 1, Infinity)"); }
       try { err = false;
         ctx.createLinearGradient(0, Infinity, Infinity, 0);
       } catch (e) { if (e.code !== DOMException.NOT_SUPPORTED_ERR) fail("Failed assertion: expected exception of type NOT_SUPPORTED_ERR, got: "+e.message); err = true; } finally { verify(err, "should throw exception of type NOT_SUPPORTED_ERR: ctx.createLinearGradient(0, Infinity, Infinity, 0)"); }
       try { err = false;
         ctx.createLinearGradient(0, Infinity, Infinity, Infinity);
       } catch (e) { if (e.code !== DOMException.NOT_SUPPORTED_ERR) fail("Failed assertion: expected exception of type NOT_SUPPORTED_ERR, got: "+e.message); err = true; } finally { verify(err, "should throw exception of type NOT_SUPPORTED_ERR: ctx.createLinearGradient(0, Infinity, Infinity, Infinity)"); }
       try { err = false;
         ctx.createLinearGradient(0, Infinity, 1, Infinity);
       } catch (e) { if (e.code !== DOMException.NOT_SUPPORTED_ERR) fail("Failed assertion: expected exception of type NOT_SUPPORTED_ERR, got: "+e.message); err = true; } finally { verify(err, "should throw exception of type NOT_SUPPORTED_ERR: ctx.createLinearGradient(0, Infinity, 1, Infinity)"); }
       try { err = false;
         ctx.createLinearGradient(0, 0, Infinity, Infinity);
       } catch (e) { if (e.code !== DOMException.NOT_SUPPORTED_ERR) fail("Failed assertion: expected exception of type NOT_SUPPORTED_ERR, got: "+e.message); err = true; } finally { verify(err, "should throw exception of type NOT_SUPPORTED_ERR: ctx.createLinearGradient(0, 0, Infinity, Infinity)"); }

       ctx.reset();
       var g = ctx.createLinearGradient(0, 0, 200, 0);
       g.addColorStop(0, '#f00');
       g.addColorStop(0.25, '#0f0');
       g.addColorStop(0.75, '#0f0');
       g.addColorStop(1, '#f00');
       ctx.fillStyle = g;
       ctx.translate(-50, 0);
       ctx.fillRect(50, 0, 100, 50);
       comparePixel(ctx, 25,25, 0,255,0,255);
       comparePixel(ctx, 50,25, 0,255,0,255);
       comparePixel(ctx, 75,25, 0,255,0,255);

       ctx.reset();
       ctx.translate(100, 0);
       g = ctx.createLinearGradient(0, 0, 200, 0);
       g.addColorStop(0, '#f00');
       g.addColorStop(0.25, '#0f0');
       g.addColorStop(0.75, '#0f0');
       g.addColorStop(1, '#f00');
       ctx.fillStyle = g;
       ctx.translate(-150, 0);
       ctx.fillRect(50, 0, 100, 50);
       comparePixel(ctx, 25,25, 0,255,0,255);
       comparePixel(ctx, 50,25, 0,255,0,255);
       comparePixel(ctx, 75,25, 0,255,0,255);


       ctx.reset();
       g = ctx.createLinearGradient(0, 0, 200, 0);
       g.addColorStop(0, '#f00');
       g.addColorStop(0.25, '#0f0');
       g.addColorStop(0.75, '#0f0');
       g.addColorStop(1, '#f00');
       ctx.fillStyle = g;
       ctx.fillRect(0, 0, 100, 50);
       ctx.translate(-50, 0);
       ctx.fillRect(50, 0, 100, 50);

       if (canvas.renderTarget === Canvas.Image) //FIXME:broken on FramebufferObject
           comparePixel(ctx, 25,25, 0,255,0,255);
       comparePixel(ctx, 50,25, 0,255,0,255);
       comparePixel(ctx, 75,25, 0,255,0,255);

  }
   function test_object(row) {
       var canvas = createCanvasObject(row);
       var ctx = canvas.getContext('2d');
       ctx.reset();
       var g1 = ctx.createLinearGradient(0, 0, 100, 0);
       var g2 = ctx.createLinearGradient(0, 0, 100, 0);
       ctx.fillStyle = g1;


       ctx.reset();
       var g = ctx.createLinearGradient(0, 0, 100, 0);
       try { var err = false;
         g.addColorStop(0, "");
       } catch (e) { if (e.code !== DOMException.SYNTAX_ERR) fail("Failed assertion: expected exception of type SYNTAX_ERR, got: "+e.message); err = true; } finally { verify(err, "should throw exception of type SYNTAX_ERR: g.addColorStop(0, \"\")"); }
       try { err = false;
         g.addColorStop(0, 'undefined');
       } catch (e) { if (e.code !== DOMException.SYNTAX_ERR) fail("Failed assertion: expected exception of type SYNTAX_ERR, got: "+e.message); err = true; } finally { verify(err, "should throw exception of type SYNTAX_ERR: g.addColorStop(0, 'undefined')"); }


       ctx.reset();
       g = ctx.createLinearGradient(0, 0, 100, 0);
       try { err = false;
         g.addColorStop(-1, '#000');
       } catch (e) { if (e.code !== DOMException.INDEX_SIZE_ERR) fail("Failed assertion: expected exception of type INDEX_SIZE_ERR, got: "+e.message); err = true; } finally { verify(err, "should throw exception of type INDEX_SIZE_ERR: g.addColorStop(-1, '#000')"); }
       try { err = false;
         g.addColorStop(2, '#000');
       } catch (e) { if (e.code !== DOMException.INDEX_SIZE_ERR) fail("Failed assertion: expected exception of type INDEX_SIZE_ERR, got: "+e.message); err = true; } finally { verify(err, "should throw exception of type INDEX_SIZE_ERR: g.addColorStop(2, '#000')"); }
       try { err = false;
         g.addColorStop(Infinity, '#000');
       } catch (e) { if (e.code !== DOMException.INDEX_SIZE_ERR) fail("Failed assertion: expected exception of type INDEX_SIZE_ERR, got: "+e.message); err = true; } finally { verify(err, "should throw exception of type INDEX_SIZE_ERR: g.addColorStop(Infinity, '#000')"); }
       try { err = false;
         g.addColorStop(-Infinity, '#000');
       } catch (e) { if (e.code !== DOMException.INDEX_SIZE_ERR) fail("Failed assertion: expected exception of type INDEX_SIZE_ERR, got: "+e.message); err = true; } finally { verify(err, "should throw exception of type INDEX_SIZE_ERR: g.addColorStop(-Infinity, '#000')"); }
       try { err = false;
         g.addColorStop(NaN, '#000');
       } catch (e) { if (e.code !== DOMException.INDEX_SIZE_ERR) fail("Failed assertion: expected exception of type INDEX_SIZE_ERR, got: "+e.message); err = true; } finally { verify(err, "should throw exception of type INDEX_SIZE_ERR: g.addColorStop(NaN, '#000')"); }


       ctx.reset();
       g = ctx.createLinearGradient(-100, 0, 200, 0);
       g.addColorStop(0, '#f00');
       g.addColorStop(1, '#f00');
       ctx.fillStyle = g;
       g.addColorStop(0.1, '#0f0');
       g.addColorStop(0.9, '#0f0');
       ctx.fillRect(0, 0, 100, 50);
       //comparePixel(ctx, 50,25, 0,255,0,255,2);

       ctx.reset();
       ctx.fillStyle = '#0f0';
       ctx.fillRect(0, 0, 100, 50);

       g = ctx.createRadialGradient(120, 25, 10, 211, 25, 100);
       g.addColorStop(0, '#f00');
       g.addColorStop(1, '#f00');
       ctx.fillStyle = g;
       ctx.fillRect(0, 0, 100, 50);

       //comparePixel(ctx, 1,1, 0,255,0,255);
       //comparePixel(ctx, 50,1, 0,255,0,255);
       //comparePixel(ctx, 98,1, 0,255,0,255);
       //comparePixel(ctx, 1,25, 0,255,0,255,16);
       //comparePixel(ctx, 50,25, 0,255,0,255);
       //comparePixel(ctx, 98,25, 0,255,0,255);
       //comparePixel(ctx, 1,48, 0,255,0,255);
       //comparePixel(ctx, 50,48, 0,255,0,255);
       //comparePixel(ctx, 98,48, 0,255,0,255);


  }

   function test_conical(row) {
       var canvas = createCanvasObject(row);
       var ctx = canvas.getContext('2d');
       ctx.reset();
       var g = ctx.createConicalGradient(10, 10, 50);
       //TODO
   }
}
