| <body> |
| <style type="text/css"> |
| canvas { border: 1px solid black; } |
| </style> |
| |
| Each square canvas should contain a colored gradient bordered by a narrow white margin and a black line. |
| The column on the left contains linear gradients, the column on the right radial gradients.<br> |
| |
| <script> |
| if (window.testRunner) |
| testRunner.dumpAsText(true); |
| |
| var counter = 1; |
| function Test(description, gradient) { |
| // Create canvas elements |
| var lin = document.createElement('canvas'); |
| lin.setAttribute('id', 'canvas' + counter + 'lin'); |
| lin.setAttribute('height', 50); |
| lin.setAttribute('width', 50); |
| var rad = document.createElement('canvas'); |
| rad.setAttribute('id', 'canvas' + counter + 'rad'); |
| rad.setAttribute('height', 50); |
| rad.setAttribute('width', 50); |
| |
| document.body.appendChild(lin); |
| document.body.appendChild(rad); |
| document.body.appendChild(document.createTextNode(' ' + description)); |
| document.body.appendChild(document.createElement('br')); |
| |
| // Find canvas contexts |
| var linctx = lin.getContext('2d') |
| var radctx = rad.getContext('2d') |
| |
| // Create linear and radial gradients from array |
| var lingrad = linctx.createLinearGradient(0, 0, 0, 50); |
| var radgrad = linctx.createRadialGradient(25, 25, 0, 25, 25, 25); |
| for (var i = 0; i < gradient.length - 1; i+=2) { |
| lingrad.addColorStop(gradient[i], gradient[i + 1]); |
| radgrad.addColorStop(gradient[i], gradient[i + 1]); |
| } |
| |
| // Apply them |
| linctx.fillStyle = lingrad; |
| linctx.fillRect(2, 2, 46, 46); |
| radctx.fillStyle = radgrad; |
| radctx.fillRect(2, 2, 46, 46); |
| |
| counter++; |
| } |
| |
| // Note: This test won't be as useful with many more cases added, since |
| // they'll scroll below the pixel-test boundary. |
| |
| // Simple gradient |
| Test('Green to white', |
| new Array(0, '#0f0', |
| 1, '#fff')); |
| |
| // Multiple sections |
| Test('Green to white to red', |
| new Array( 0, '#0f0', |
| 0.5, '#fff', |
| 1, '#f00')); |
| |
| // No stops at 0.0 or 1.0 |
| Test('Larger green to white to larger red', |
| new Array(0.4, '#0f0', |
| 0.5, '#fff', |
| 0.6, '#f00')); |
| |
| // Only one stop, at zero |
| Test('Solid red', |
| new Array(0.0, '#f00')); |
| |
| // Only one stop, at 1.0 |
| Test('Solid red', |
| new Array(1.0, '#f00')); |
| |
| // Only one stop, in the middle |
| Test('Solid red', |
| new Array(0.5, '#f00')); |
| |
| // Disjoint gradients (multiple stops at the same offset) |
| Test('Blue to white in the top (inner) half, red to yellow in the bottom (outer) half', |
| new Array( 0, '#00f', |
| 0.5, '#fff', |
| 0.5, '#f00', |
| 1, '#ff0')); |
| |
| // Ignored stops |
| Test('Blue to white, red to yellow (same as previous)', |
| new Array(0, '#00f', |
| 0.5, '#fff', |
| 0.5, '#aaa', |
| 0.5, '#abc', |
| 0.5, '#f00', |
| 1, '#ff0')); |
| |
| // Unsorted stops |
| Test('Blue to white, red to yellow (same as previous)', |
| new Array(0.5, '#fff', |
| 0.5, '#aaa', |
| 1, '#ff0', |
| 0.5, '#abc', |
| 0.5, '#f00', |
| 0, '#00f')); |
| </script> |
| </body> |