| OLD | NEW |
| (Empty) |
| 1 description("Basic test for setLineDash, getLineDash and lineDashOffset"); | |
| 2 | |
| 3 var canvas = document.createElement('canvas'); | |
| 4 document.body.appendChild(canvas); | |
| 5 canvas.setAttribute('width', '700'); | |
| 6 canvas.setAttribute('height', '700'); | |
| 7 var ctx = canvas.getContext('2d'); | |
| 8 | |
| 9 function dataToArray(data) { | |
| 10 var result = new Array(data.length) | |
| 11 for (var i = 0; i < data.length; i++) | |
| 12 result[i] = data[i]; | |
| 13 return result; | |
| 14 } | |
| 15 | |
| 16 function getPixel(x, y) { | |
| 17 var data = ctx.getImageData(x,y,1,1); | |
| 18 if (!data) // getImageData failed, which should never happen | |
| 19 return [-1,-1,-1,-1]; | |
| 20 return dataToArray(data.data); | |
| 21 } | |
| 22 | |
| 23 function pixelShouldBe(x, y, colour) { | |
| 24 shouldBe("getPixel(" + [x, y] +")", "["+colour+"]"); | |
| 25 } | |
| 26 | |
| 27 // Verify default values. | |
| 28 shouldBe('ctx.lineDashOffset', '0'); | |
| 29 | |
| 30 // Set dash-style. | |
| 31 ctx.setLineDash([15, 10]); | |
| 32 ctx.lineDashOffset = 5; | |
| 33 ctx.strokeRect (10,10,100,100); | |
| 34 | |
| 35 // Verify dash and offset. | |
| 36 var lineDash; | |
| 37 lineDash = ctx.getLineDash(); | |
| 38 shouldBe('lineDash[0]', '15'); | |
| 39 shouldBe('lineDash[1]', '10'); | |
| 40 shouldBe('ctx.lineDashOffset', '5'); | |
| 41 | |
| 42 // Verify setting line dash to sequence of nulls is interpreted as zeros | |
| 43 ctx.setLineDash([null, null]); | |
| 44 lineDash = ctx.getLineDash(); | |
| 45 shouldBe('lineDash[0]', '0'); | |
| 46 shouldBe('lineDash[1]', '0'); | |
| 47 | |
| 48 // Set dash style to even number | |
| 49 ctx.setLineDash([5, 10, 15]); | |
| 50 ctx.strokeRect(20, 20, 120, 120); | |
| 51 | |
| 52 // Verify dash pattern is normalized | |
| 53 lineDash = ctx.getLineDash(); | |
| 54 shouldBe('lineDash[0]', '5'); | |
| 55 shouldBe('lineDash[1]', '10'); | |
| 56 shouldBe('lineDash[2]', '15'); | |
| 57 shouldBe('lineDash[3]', '5'); | |
| 58 shouldBe('lineDash[4]', '10'); | |
| 59 shouldBe('lineDash[5]', '15'); | |
| 60 | |
| 61 // Verify that conversion from string works | |
| 62 ctx.setLineDash(["1", 2]); | |
| 63 lineDash = ctx.getLineDash(); | |
| 64 shouldBe('lineDash[0]', '1'); | |
| 65 shouldBe('lineDash[1]', '2'); | |
| 66 | |
| 67 // Verify that line dash offset persists after | |
| 68 // clearRect (which causes a save/restore of the context | |
| 69 // state to the stack). | |
| 70 ctx.clearRect(0, 0, 700, 700); | |
| 71 shouldBe('ctx.lineDashOffset', '5'); | |
| 72 | |
| 73 // Verify dash rendering | |
| 74 ctx.setLineDash([20, 10]); | |
| 75 ctx.lineDashOffset = 0; | |
| 76 ctx.lineWidth = 4; // To make the test immune to plaform anti-aliasing discrepan
cies | |
| 77 ctx.strokeStyle = '#00FF00'; | |
| 78 ctx.strokeRect(10.5, 10.5, 30, 30); | |
| 79 | |
| 80 pixelShouldBe(25, 10, [0, 255, 0, 255]); | |
| 81 pixelShouldBe(35, 10, [0, 0, 0, 0]); | |
| 82 pixelShouldBe(40, 25, [0, 255, 0, 255]); | |
| 83 pixelShouldBe(40, 35, [0, 0, 0, 0]); | |
| 84 pixelShouldBe(25, 40, [0, 255, 0, 255]); | |
| 85 pixelShouldBe(15, 40, [0, 0, 0, 0]); | |
| 86 pixelShouldBe(10, 25, [0, 255, 0, 255]); | |
| 87 pixelShouldBe(10, 15, [0, 0, 0, 0]); | |
| 88 | |
| 89 // Verify that lineDashOffset works as expected | |
| 90 ctx.lineDashOffset = 20; | |
| 91 ctx.strokeRect(50.5, 10.5, 30, 30); | |
| 92 pixelShouldBe(55, 10, [0, 0, 0, 0]); | |
| 93 pixelShouldBe(65, 10, [0, 255, 0, 255]); | |
| 94 pixelShouldBe(80, 15, [0, 0, 0, 0]); | |
| 95 pixelShouldBe(80, 25, [0, 255, 0, 255]); | |
| 96 pixelShouldBe(75, 40, [0, 0, 0, 0]); | |
| 97 pixelShouldBe(65, 40, [0, 255, 0, 255]); | |
| 98 pixelShouldBe(50, 35, [0, 0, 0, 0]); | |
| 99 pixelShouldBe(50, 25, [0, 255, 0, 255]); | |
| 100 | |
| 101 // Verify negative lineDashOffset | |
| 102 ctx.lineDashOffset = -10; | |
| 103 ctx.strokeRect(90.5, 10.5, 30, 30); | |
| 104 pixelShouldBe(95, 10, [0, 0, 0, 0]); | |
| 105 pixelShouldBe(105, 10, [0, 255, 0, 255]); | |
| 106 pixelShouldBe(120, 15, [0, 0, 0, 0]); | |
| 107 pixelShouldBe(120, 25, [0, 255, 0, 255]); | |
| 108 pixelShouldBe(115, 40, [0, 0, 0, 0]); | |
| 109 pixelShouldBe(105, 40, [0, 255, 0, 255]); | |
| 110 pixelShouldBe(90, 35, [0, 0, 0, 0]); | |
| 111 pixelShouldBe(90, 25, [0, 255, 0, 255]); | |
| 112 | |
| 113 // Verify that all zero dash sequence results in no dashing | |
| 114 ctx.setLineDash([0, 0]); | |
| 115 ctx.lineDashOffset = 0; | |
| 116 ctx.strokeRect(130.5, 10.5, 30, 30); | |
| 117 pixelShouldBe(130, 10, [0, 255, 0, 255]); | |
| 118 pixelShouldBe(130, 15, [0, 255, 0, 255]); | |
| 119 pixelShouldBe(130, 25, [0, 255, 0, 255]); | |
| 120 pixelShouldBe(130, 35, [0, 255, 0, 255]); | |
| OLD | NEW |