blob: 67bc5c6438e3bb9ce5fdbe63190e02e899fa462b [file] [log] [blame]
commit-queue@webkit.orgb7ac53f2010-11-26 11:52:32 +00001<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN">
2<html>
3<head>
mark.lam@apple.com104d9932013-09-07 22:20:15 +00004<script src="../../resources/js-test-pre.js"></script>
commit-queue@webkit.orgb7ac53f2010-11-26 11:52:32 +00005</head>
6<body>
ap@apple.com92352d02017-05-24 22:53:00 +00007<script>
8description("Ensure correct behavior of canvas with fillRect shadow");
9
10function print(message, color)
11{
12 var paragraph = document.createElement("div");
13 paragraph.appendChild(document.createTextNode(message));
14 paragraph.style.fontFamily = "monospace";
15 if (color)
16 paragraph.style.color = color;
17 document.getElementById("console").appendChild(paragraph);
18}
19
20function shouldBeAround(a, b)
21{
22 var evalA;
23 try {
24 evalA = eval(a);
25 } catch(e) {
26 evalA = e;
27 }
28
29 if (Math.abs(evalA - b) < 5)
30 print("PASS " + a + " is around " + b , "green")
31 else
32 print("FAIL " + a + " is not around " + b + " (actual: " + evalA + ")", "red");
33}
34
35function shouldBeSmaller(a, b)
36{
37 var evalA;
38 try {
39 evalA = eval(a);
40 } catch(e) {
41 evalA = e;
42 }
43
44 if (evalA < b)
45 print("PASS " + a + " is smaller than " + b , "green")
46 else
47 print("FAIL " + a + " is not smaller than " + b + " (actual: " + evalA + ")", "red");
48}
49
50var canvas = document.createElement('canvas');
51document.body.appendChild(canvas);
52canvas.setAttribute('width', '400');
53canvas.setAttribute('height', '650');
54var ctx = canvas.getContext('2d');
55
56ctx.shadowOffsetX = 200;
57ctx.fillStyle = 'rgba(0, 0, 255, 1)';
58
59ctx.shadowColor = 'rgba(255, 0, 0, 1.0)';
60ctx.fillRect(50, 50, 100, 100);
61
62ctx.shadowColor = 'rgba(255, 0, 0, 0.3)';
63ctx.fillRect(50, 200, 100, 100);
64
65ctx.shadowColor = 'rgba(255, 0, 0, 1.0)';
66ctx.shadowBlur = 5;
67ctx.fillRect(50, 350, 100, 100);
68
69ctx.shadowColor = 'rgba(255, 0, 0, 0.3)';
70ctx.fillRect(50, 500, 100, 100);
71
72var d; // imageData.data
73
74// Verify solid shadow.
75d = ctx.getImageData(250, 50, 1, 1).data;
76shouldBe('d[0]', '255');
77shouldBe('d[1]', '0');
78shouldBe('d[2]', '0');
79shouldBe('d[3]', '255');
80
81d = ctx.getImageData(250, 149, 1, 1).data;
82shouldBe('d[0]', '255');
83shouldBe('d[1]', '0');
84shouldBe('d[2]', '0');
85shouldBe('d[3]', '255');
86
87d = ctx.getImageData(349, 50, 1, 1).data;
88shouldBe('d[0]', '255');
89shouldBe('d[1]', '0');
90shouldBe('d[2]', '0');
91shouldBe('d[3]', '255');
92
93d = ctx.getImageData(349, 149, 1, 1).data;
94shouldBe('d[0]', '255');
95shouldBe('d[1]', '0');
96shouldBe('d[2]', '0');
97shouldBe('d[3]', '255');
98
99// Verify solid alpha shadow.
100d = ctx.getImageData(250, 200, 1, 1).data;
101shouldBe('d[0]', '255');
102shouldBe('d[1]', '0');
103shouldBe('d[2]', '0');
104shouldBeAround('d[3]', '76');
105
106d = ctx.getImageData(250, 299, 1, 1).data;
107shouldBe('d[0]', '255');
108shouldBe('d[1]', '0');
109shouldBe('d[2]', '0');
110shouldBeAround('d[3]', '76');
111
112d = ctx.getImageData(349, 200, 1, 1).data;
113shouldBe('d[0]', '255');
114shouldBe('d[1]', '0');
115shouldBe('d[2]', '0');
116shouldBeAround('d[3]', '76');
117
118d = ctx.getImageData(349, 299, 1, 1).data;
119shouldBe('d[0]', '255');
120shouldBe('d[1]', '0');
121shouldBe('d[2]', '0');
122shouldBeAround('d[3]', '76');
123
124// Verify blurry shadow.
125d = ctx.getImageData(248, 348, 1, 1).data;
126shouldBe('d[0]', '255');
127shouldBe('d[1]', '0');
128shouldBe('d[2]', '0');
129shouldBeSmaller('d[3]', '25');
130
131d = ctx.getImageData(248, 451, 1, 1).data;
132shouldBe('d[0]', '255');
133shouldBe('d[1]', '0');
134shouldBe('d[2]', '0');
135shouldBeSmaller('d[3]', '25');
136
137d = ctx.getImageData(351, 348, 1, 1).data;
138shouldBe('d[0]', '255');
139shouldBe('d[1]', '0');
140shouldBe('d[2]', '0');
141shouldBeSmaller('d[3]', '25');
142
143d = ctx.getImageData(351, 451, 1, 1).data;
144shouldBe('d[0]', '255');
145shouldBe('d[1]', '0');
146shouldBe('d[2]', '0');
147shouldBeSmaller('d[3]', '25');
148
149// Verify blurry alpha shadow.
150d = ctx.getImageData(248, 498, 1, 1).data;
151shouldBe('d[0]', '255');
152shouldBe('d[1]', '0');
153shouldBe('d[2]', '0');
154shouldBeSmaller('d[3]', '10');
155
156d = ctx.getImageData(248, 601, 1, 1).data;
157shouldBe('d[0]', '255');
158shouldBe('d[1]', '0');
159shouldBe('d[2]', '0');
160shouldBeSmaller('d[3]', '10');
161
162d = ctx.getImageData(351, 498, 1, 1).data;
163shouldBe('d[0]', '255');
164shouldBe('d[1]', '0');
165shouldBe('d[2]', '0');
166shouldBeSmaller('d[3]', '10');
167
168d = ctx.getImageData(351, 601, 1, 1).data;
169shouldBe('d[0]', '255');
170shouldBe('d[1]', '0');
171shouldBe('d[2]', '0');
172shouldBeSmaller('d[3]', '10');
173</script>
mark.lam@apple.com104d9932013-09-07 22:20:15 +0000174<script src="../../resources/js-test-post.js"></script>
commit-queue@webkit.orgb7ac53f2010-11-26 11:52:32 +0000175</body>
176</html>