Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(40)

Side by Side Diff: tests/html/canvasrenderingcontext2d_test.dart

Issue 12941008: Unrevert https://codereview.chromium.org/12722009/ (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Fixed the status with individual config. Created 7 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « sdk/lib/html/dartium/html_dartium.dart ('k') | tests/html/html.status » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file 1 // Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file
2 // for details. All rights reserved. Use of this source code is governed by a 2 // for details. All rights reserved. Use of this source code is governed by a
3 // BSD-style license that can be found in the LICENSE file. 3 // BSD-style license that can be found in the LICENSE file.
4 4
5 library canvas_rendering_context_2d_test; 5 library canvas_rendering_context_2d_test; import '../../pkg/unittest/lib/unittes t.dart';
6 import '../../pkg/unittest/lib/unittest.dart'; 6 import '../../pkg/unittest/lib/html_individual_config.dart';
7 import '../../pkg/unittest/lib/html_config.dart';
8 import 'dart:html'; 7 import 'dart:html';
9 import 'dart:math'; 8 import 'dart:math';
10 9
11 // Some rounding errors in the browsers. 10 // Some rounding errors in the browsers.
12 checkPixel(List<int> pixel, List<int> expected) { 11 checkPixel(List<int> pixel, List<int> expected) {
13 expect(pixel[0], closeTo(expected[0], 2)); 12 expect(pixel[0], closeTo(expected[0], 2));
14 expect(pixel[1], closeTo(expected[1], 2)); 13 expect(pixel[1], closeTo(expected[1], 2));
15 expect(pixel[2], closeTo(expected[2], 2)); 14 expect(pixel[2], closeTo(expected[2], 2));
16 expect(pixel[3], closeTo(expected[3], 2)); 15 expect(pixel[3], closeTo(expected[3], 2));
17 } 16 }
18 17
18 var canvas;
19 var context;
20 var otherCanvas;
21 var otherContext;
22 var video;
23
24 void createCanvas() {
25 canvas = new CanvasElement();
26 canvas.width = 100;
27 canvas.height = 100;
28
29 context = canvas.context2d;
30 }
31
32 void createOtherCanvas() {
33 otherCanvas = new CanvasElement();
34 otherCanvas.width = 10;
35 otherCanvas.height = 10;
36 otherContext = otherCanvas.context2d;
37 otherContext.fillStyle = "red";
38 otherContext.fillRect(0, 0, otherCanvas.width, otherCanvas.height);
39 }
40
41 void setupFunc() {
42 createCanvas();
43 createOtherCanvas();
44 video = new VideoElement();
45 }
46
47 void tearDownFunc() {
48 canvas = null;
49 context = null;
50 otherCanvas = null;
51 otherContext = null;
52 video = null;
53 }
54
55 List<int> readPixel(int x, int y) {
56 var imageData = context.getImageData(x, y, 1, 1);
57 return imageData.data;
58 }
59
60 /// Returns true if the pixel has some data in it, false otherwise.
61 bool isPixelFilled(int x, int y) => readPixel(x,y).any((p) => p != 0);
62
63 String pixelDataToString(List<int> data, int x, int y) {
64 return '[${data.join(", ")}]';
65 }
66
67 String _filled(bool v) => v ? "filled" : "unfilled";
68
69 void expectPixelFilled(int x, int y, [bool filled = true]) {
70 expect(isPixelFilled(x, y), filled, reason:
71 'Pixel at ($x, $y) was expected to'
72 ' be: <${_filled(filled)}> but was: <${_filled(!filled)}> with data: '
73 '${pixelDataToString(readPixel(x, y), x, y)}');
74 }
75
76 void expectPixelUnfilled(int x, int y) {
77 expectPixelFilled(x, y, false);
78 }
79
19 main() { 80 main() {
20 useHtmlConfiguration(); 81 useHtmlIndividualConfiguration();
21 82
22 group('canvasRenderingContext2d', () { 83 group('pixel_manipulation', () {
23 var canvas; 84 setUp(setupFunc);
24 var context; 85 tearDown(tearDownFunc);
25 var otherCanvas;
26 var otherContext;
27
28 void createOtherCanvas() {
29 otherCanvas = new CanvasElement();
30 otherCanvas.width = 10;
31 otherCanvas.height = 10;
32 otherContext = otherCanvas.context2d;
33 otherContext.fillStyle = "red";
34 otherContext.fillRect(0, 0, otherCanvas.width, otherCanvas.height);
35 }
36
37 setUp(() {
38 canvas = new CanvasElement();
39 canvas.width = 100;
40 canvas.height = 100;
41
42 context = canvas.context2d;
43
44 createOtherCanvas();
45 });
46
47 tearDown(() {
48 canvas = null;
49 context = null;
50 otherCanvas = null;
51 otherContext = null;
52 });
53
54 List<int> readPixel(int x, int y) {
55 var imageData = context.getImageData(x, y, 1, 1);
56 return imageData.data;
57 }
58
59 /// Returns true if the pixel has some data in it, false otherwise.
60 bool isPixelFilled(int x, int y) => readPixel(x,y).any((p) => p != 0);
61
62 String pixelDataToString(int x, int y) {
63 var data = readPixel(x, y);
64
65 return '[${data.join(", ")}]';
66 }
67
68 String _filled(bool v) => v ? "filled" : "unfilled";
69
70 void expectPixelFilled(int x, int y, [bool filled = true]) {
71 expect(isPixelFilled(x, y), filled, reason:
72 'Pixel at ($x, $y) was expected to'
73 ' be: <${_filled(filled)}> but was: <${_filled(!filled)}> with data: '
74 '${pixelDataToString(x,y)}');
75 }
76
77 void expectPixelUnfilled(int x, int y) {
78 expectPixelFilled(x, y, false);
79 }
80
81 86
82 test('setFillColorRgb', () { 87 test('setFillColorRgb', () {
83 context.setFillColorRgb(255, 0, 255, 1); 88 context.setFillColorRgb(255, 0, 255, 1);
84 context.fillRect(0, 0, canvas.width, canvas.height); 89 context.fillRect(0, 0, canvas.width, canvas.height);
85 expect(readPixel(2, 2), [255, 0, 255, 255]); 90 expect(readPixel(2, 2), [255, 0, 255, 255]);
86 }); 91 });
87 92
88 test('setFillColorHsl hue', () { 93 test('setFillColorHsl hue', () {
89 context.setFillColorHsl(0, 100, 50); 94 context.setFillColorHsl(0, 100, 50);
90 context.fillRect(0, 0, canvas.width, canvas.height); 95 context.fillRect(0, 0, canvas.width, canvas.height);
(...skipping 71 matching lines...) Expand 10 before | Expand all | Expand 10 after
162 expectedData.data[3] = 255; 167 expectedData.data[3] = 255;
163 context.fillStyle = 'green'; 168 context.fillStyle = 'green';
164 context.fillRect(0, 0, canvas.width, canvas.height); 169 context.fillRect(0, 0, canvas.width, canvas.height);
165 170
166 context.putImageData(expectedData, 0, 0); 171 context.putImageData(expectedData, 0, 0);
167 172
168 var resultingData = context.getImageData(0, 0, 10, 10); 173 var resultingData = context.getImageData(0, 0, 10, 10);
169 // Make sure that we read back what we wrote. 174 // Make sure that we read back what we wrote.
170 expect(resultingData.data, expectedData.data); 175 expect(resultingData.data, expectedData.data);
171 }); 176 });
177 });
178
179 group('arc', () {
180 setUp(setupFunc);
181 tearDown(tearDownFunc);
172 182
173 test('default arc should be clockwise', () { 183 test('default arc should be clockwise', () {
174 context.beginPath(); 184 context.beginPath();
175 final r = 10; 185 final r = 10;
176 186
177 // Center of arc. 187 // Center of arc.
178 final cx = 20; 188 final cx = 20;
179 final cy = 20; 189 final cy = 20;
180 // Arc centered at (20, 20) with radius 10 will go clockwise 190 // Arc centered at (20, 20) with radius 10 will go clockwise
181 // from (20 + r, 20) to (20, 20 + r), which is 1/4 of a circle. 191 // from (20 + r, 20) to (20, 20 + r), which is 1/4 of a circle.
(...skipping 63 matching lines...) Expand 10 before | Expand all | Expand 10 after
245 255
246 // (cx - r/SQRT2, cy - r/SQRT2) should be filled. 256 // (cx - r/SQRT2, cy - r/SQRT2) should be filled.
247 expectPixelFilled((cx - r/SQRT2).toInt(), (cy + r/SQRT2).toInt(), true); 257 expectPixelFilled((cx - r/SQRT2).toInt(), (cy + r/SQRT2).toInt(), true);
248 258
249 // (cx + r/SQRT2, cy + r/SQRT2) should be filled. 259 // (cx + r/SQRT2, cy + r/SQRT2) should be filled.
250 expectPixelFilled((cx - r/SQRT2).toInt(), (cy - r/SQRT2).toInt(), true); 260 expectPixelFilled((cx - r/SQRT2).toInt(), (cy - r/SQRT2).toInt(), true);
251 261
252 // (cx - r/SQRT2, cy - r/SQRT2) should be filled. 262 // (cx - r/SQRT2, cy - r/SQRT2) should be filled.
253 expectPixelFilled((cx + r/SQRT2).toInt(), (cy - r/SQRT2).toInt(), true); 263 expectPixelFilled((cx + r/SQRT2).toInt(), (cy - r/SQRT2).toInt(), true);
254 }); 264 });
265 });
255 266
267 group('drawImage_image_element', () {
268 setUp(setupFunc);
269 tearDown(tearDownFunc);
256 // Draw an image to the canvas from an image element. 270 // Draw an image to the canvas from an image element.
257 test('drawImage from img element with 3 params', () { 271 test('with 3 params', () {
258 var dataUrl = otherCanvas.toDataUrl('image/gif'); 272 var dataUrl = otherCanvas.toDataUrl('image/gif');
259 var img = new ImageElement(); 273 var img = new ImageElement();
260 274
261 img.onLoad.listen(expectAsync1((_) { 275 img.onLoad.listen(expectAsync1((_) {
262 context.drawImage(img, 50, 50); 276 context.drawImage(img, 50, 50);
263 277
264 expectPixelFilled(50, 50); 278 expectPixelFilled(50, 50);
265 expectPixelFilled(55, 55); 279 expectPixelFilled(55, 55);
266 expectPixelFilled(59, 59); 280 expectPixelFilled(59, 59);
267 expectPixelUnfilled(60, 60); 281 expectPixelUnfilled(60, 60);
268 expectPixelUnfilled(0, 0); 282 expectPixelUnfilled(0, 0);
269 expectPixelUnfilled(70, 70); 283 expectPixelUnfilled(70, 70);
270 })); 284 }));
271 img.onError.listen((_) { 285 img.onError.listen((_) {
272 guardAsync(() { 286 guardAsync(() {
273 fail('URL failed to load.'); 287 fail('URL failed to load.');
274 }); 288 });
275 }); 289 });
276 img.src = dataUrl; 290 img.src = dataUrl;
277 }); 291 });
278 292
279 // Draw an image to the canvas from an image element and scale it. 293 // Draw an image to the canvas from an image element and scale it.
280 test('drawImage from img element with 5 params', () { 294 test('with 5 params', () {
281 var dataUrl = otherCanvas.toDataUrl('image/gif'); 295 var dataUrl = otherCanvas.toDataUrl('image/gif');
282 var img = new ImageElement(); 296 var img = new ImageElement();
283 297
284 img.onLoad.listen(expectAsync1((_) { 298 img.onLoad.listen(expectAsync1((_) {
285 context.drawImageToRect(img, new Rect(50, 50, 20, 20)); 299 context.drawImageToRect(img, new Rect(50, 50, 20, 20));
286 300
287 expectPixelFilled(50, 50); 301 expectPixelFilled(50, 50);
288 expectPixelFilled(55, 55); 302 expectPixelFilled(55, 55);
289 expectPixelFilled(59, 59); 303 expectPixelFilled(59, 59);
290 expectPixelFilled(60, 60); 304 expectPixelFilled(60, 60);
291 expectPixelFilled(69, 69); 305 expectPixelFilled(69, 69);
292 expectPixelUnfilled(70, 70); 306 expectPixelUnfilled(70, 70);
293 expectPixelUnfilled(0, 0); 307 expectPixelUnfilled(0, 0);
294 expectPixelUnfilled(80, 80); 308 expectPixelUnfilled(80, 80);
295 })); 309 }));
296 img.onError.listen((_) { 310 img.onError.listen((_) {
297 guardAsync(() { 311 guardAsync(() {
298 fail('URL failed to load.'); 312 fail('URL failed to load.');
299 }); 313 });
300 }); 314 });
301 img.src = dataUrl; 315 img.src = dataUrl;
302 }); 316 });
303 317
304 // Draw an image to the canvas from an image element and scale it. 318 // Draw an image to the canvas from an image element and scale it.
305 test('drawImage from img element with 9 params', () { 319 test('with 9 params', () {
306 otherContext.fillStyle = "blue"; 320 otherContext.fillStyle = "blue";
307 otherContext.fillRect(5, 5, 5, 5); 321 otherContext.fillRect(5, 5, 5, 5);
308 var dataUrl = otherCanvas.toDataUrl('image/gif'); 322 var dataUrl = otherCanvas.toDataUrl('image/gif');
309 var img = new ImageElement(); 323 var img = new ImageElement();
310 324
311 img.onLoad.listen(expectAsync1((_) { 325 img.onLoad.listen(expectAsync1((_) {
312 // This will take a 6x6 square from the first canvas from position 2,2 326 // This will take a 6x6 square from the first canvas from position 2,2
313 // and then scale it to a 20x20 square and place it to the second canvas 327 // and then scale it to a 20x20 square and place it to the second
314 // at 50,50. 328 // canvas at 50,50.
315 context.drawImageToRect(img, new Rect(50, 50, 20, 20), 329 context.drawImageToRect(img, new Rect(50, 50, 20, 20),
316 sourceRect: new Rect(2, 2, 6, 6)); 330 sourceRect: new Rect(2, 2, 6, 6));
317 331
318 checkPixel(readPixel(50, 50), [255, 0, 0, 255]); 332 checkPixel(readPixel(50, 50), [255, 0, 0, 255]);
319 checkPixel(readPixel(55, 55), [255, 0, 0, 255]); 333 checkPixel(readPixel(55, 55), [255, 0, 0, 255]);
320 checkPixel(readPixel(60, 50), [255, 0, 0, 255]); 334 checkPixel(readPixel(60, 50), [255, 0, 0, 255]);
321 checkPixel(readPixel(65, 65), [0, 0, 255, 255]); 335 checkPixel(readPixel(65, 65), [0, 0, 255, 255]);
322 checkPixel(readPixel(69, 69), [0, 0, 255, 255]); 336 checkPixel(readPixel(69, 69), [0, 0, 255, 255]);
323 337
324 expectPixelFilled(50, 50); 338 expectPixelFilled(50, 50);
325 expectPixelFilled(55, 55); 339 expectPixelFilled(55, 55);
326 expectPixelFilled(59, 59); 340 expectPixelFilled(59, 59);
327 expectPixelFilled(60, 60); 341 expectPixelFilled(60, 60);
328 expectPixelFilled(69, 69); 342 expectPixelFilled(69, 69);
329 expectPixelUnfilled(70, 70); 343 expectPixelUnfilled(70, 70);
330 expectPixelUnfilled(0, 0); 344 expectPixelUnfilled(0, 0);
331 expectPixelUnfilled(80, 80); 345 expectPixelUnfilled(80, 80);
332 })); 346 }));
333 img.onError.listen((_) { 347 img.onError.listen((_) {
334 guardAsync(() { 348 guardAsync(() {
335 fail('URL failed to load.'); 349 fail('URL failed to load.');
336 }); 350 });
337 }); 351 });
338 img.src = dataUrl; 352 img.src = dataUrl;
339 }); 353 });
340 354 });
341 // These base64 strings are the same video, representing 2 frames of 8x8 red 355
342 // pixels. 356 // These videos and base64 strings are the same video, representing 2
343 // The videos were created with: 357 // frames of 8x8 red pixels.
344 // convert -size 8x8 xc:red blank1.jpg 358 // The videos were created with:
345 // convert -size 8x8 xc:red blank2.jpg 359 // convert -size 8x8 xc:red blank1.jpg
346 // avconv -f image2 -i "blank%d.jpg" -c:v libx264 small.mp4 360 // convert -size 8x8 xc:red blank2.jpg
347 // python -m base64 -e small.mp4 361 // avconv -f image2 -i "blank%d.jpg" -c:v libx264 small.mp4
348 // avconv -i small.mp4 small.webm 362 // avconv -i small.mp4 small.webm
349 // python -m base64 -e small.webm 363 // python -m base64 -e small.mp4
350 var mp4VideoUrl = 364 // python -m base64 -e small.webm
351 'data:video/mp4;base64,AAAAIGZ0eXBpc29tAAACAGlzb21pc28yYXZjMW1wNDEAAAAIZn' 365 var mp4VideoUrl = '/root_dart/tests/html/small.mp4';
352 'JlZQAAAsdtZGF0AAACmwYF//+X3EXpvebZSLeWLNgg2SPu73gyNjQgLSBjb3JlIDEyMCByMj' 366 var webmVideoUrl = '/root_dart/tests/html/small.webm';
353 'E1MSBhM2Y0NDA3IC0gSC4yNjQvTVBFRy00IEFWQyBjb2RlYyAtIENvcHlsZWZ0IDIwMDMtMj' 367 var mp4VideoDataUrl =
354 'AxMSAtIGh0dHA6Ly93d3cudmlkZW9sYW4ub3JnL3gyNjQuaHRtbCAtIG9wdGlvbnM6IGNhYm' 368 'data:video/mp4;base64,AAAAIGZ0eXBpc29tAAACAGlzb21pc28yYXZjMW1wNDEAAA'
355 'FjPTEgcmVmPTMgZGVibG9jaz0xOjA6MCBhbmFseXNlPTB4MToweDExMSBtZT1oZXggc3VibW' 369 'AIZnJlZQAAAsdtZGF0AAACmwYF//+X3EXpvebZSLeWLNgg2SPu73gyNjQgLSBjb3JlID'
356 'U9NyBwc3k9MSBwc3lfcmQ9MS4wMDowLjAwIG1peGVkX3JlZj0wIG1lX3JhbmdlPTE2IGNocm' 370 'EyMCByMjE1MSBhM2Y0NDA3IC0gSC4yNjQvTVBFRy00IEFWQyBjb2RlYyAtIENvcHlsZW'
357 '9tYV9tZT0xIHRyZWxsaXM9MSA4eDhkY3Q9MCBjcW09MCBkZWFkem9uZT0yMSwxMSBmYXN0X3' 371 'Z0IDIwMDMtMjAxMSAtIGh0dHA6Ly93d3cudmlkZW9sYW4ub3JnL3gyNjQuaHRtbCAtIG'
358 'Bza2lwPTEgY2hyb21hX3FwX29mZnNldD0tMiB0aHJlYWRzPTE4IHNsaWNlZF90aHJlYWRzPT' 372 '9wdGlvbnM6IGNhYmFjPTEgcmVmPTMgZGVibG9jaz0xOjA6MCBhbmFseXNlPTB4MToweD'
359 'AgbnI9MCBkZWNpbWF0ZT0xIGludGVybGFjZWQ9MCBibHVyYXlfY29tcGF0PTAgY29uc3RyYW' 373 'ExMSBtZT1oZXggc3VibWU9NyBwc3k9MSBwc3lfcmQ9MS4wMDowLjAwIG1peGVkX3JlZj'
360 'luZWRfaW50cmE9MCBiZnJhbWVzPTMgYl9weXJhbWlkPTAgYl9hZGFwdD0xIGJfYmlhcz0wIG' 374 '0wIG1lX3JhbmdlPTE2IGNocm9tYV9tZT0xIHRyZWxsaXM9MSA4eDhkY3Q9MCBjcW09MC'
361 'RpcmVjdD0xIHdlaWdodGI9MCBvcGVuX2dvcD0xIHdlaWdodHA9MiBrZXlpbnQ9MjUwIGtleW' 375 'BkZWFkem9uZT0yMSwxMSBmYXN0X3Bza2lwPTEgY2hyb21hX3FwX29mZnNldD0tMiB0aH'
362 'ludF9taW49MjUgc2NlbmVjdXQ9NDAgaW50cmFfcmVmcmVzaD0wIHJjX2xvb2thaGVhZD00MC' 376 'JlYWRzPTE4IHNsaWNlZF90aHJlYWRzPTAgbnI9MCBkZWNpbWF0ZT0xIGludGVybGFjZW'
363 'ByYz1jcmYgbWJ0cmVlPTEgY3JmPTUxLjAgcWNvbXA9MC42MCBxcG1pbj0wIHFwbWF4PTY5IH' 377 'Q9MCBibHVyYXlfY29tcGF0PTAgY29uc3RyYWluZWRfaW50cmE9MCBiZnJhbWVzPTMgYl'
364 'Fwc3RlcD00IGlwX3JhdGlvPTEuMjUgYXE9MToxLjAwAIAAAAARZYiEB//3aoK5/tP9+8yeuI' 378 '9weXJhbWlkPTAgYl9hZGFwdD0xIGJfYmlhcz0wIGRpcmVjdD0xIHdlaWdodGI9MCBvcG'
365 'EAAAAHQZoi2P/wgAAAAzxtb292AAAAbG12aGQAAAAAAAAAAAAAAAAAAAPoAAAAUAABAAABAA' 379 'VuX2dvcD0xIHdlaWdodHA9MiBrZXlpbnQ9MjUwIGtleWludF9taW49MjUgc2NlbmVjdX'
366 'AAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAA' 380 'Q9NDAgaW50cmFfcmVmcmVzaD0wIHJjX2xvb2thaGVhZD00MCByYz1jcmYgbWJ0cmVlPT'
367 'AAAAAAAAAAAAAAAAAAAAAAAAACAAAAGGlvZHMAAAAAEICAgAcAT/////7/AAACUHRyYWsAAA' 381 'EgY3JmPTUxLjAgcWNvbXA9MC42MCBxcG1pbj0wIHFwbWF4PTY5IHFwc3RlcD00IGlwX3'
368 'BcdGtoZAAAAA8AAAAAAAAAAAAAAAEAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAA' 382 'JhdGlvPTEuMjUgYXE9MToxLjAwAIAAAAARZYiEB//3aoK5/tP9+8yeuIEAAAAHQZoi2P'
369 'AAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAEAAAAAACAAAAAgAAAAAACRlZHRzAAAAHGVsc3QAAA' 383 '/wgAAAAzxtb292AAAAbG12aGQAAAAAAAAAAAAAAAAAAAPoAAAAUAABAAABAAAAAAAAAA'
370 'AAAAAAAQAAAFAAAAABAAEAAAAAAchtZGlhAAAAIG1kaGQAAAAAAAAAAAAAAAAAAAAZAAAAAl' 384 'AAAAAAAQAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAA'
371 'XEAAAAAAAtaGRscgAAAAAAAAAAdmlkZQAAAAAAAAAAAAAAAFZpZGVvSGFuZGxlcgAAAAFzbW' 385 'AAAAAAAAAAAAAAAAAAAAACAAAAGGlvZHMAAAAAEICAgAcAT/////7/AAACUHRyYWsAAA'
372 'luZgAAABR2bWhkAAAAAQAAAAAAAAAAAAAAJGRpbmYAAAAcZHJlZgAAAAAAAAABAAAADHVybC' 386 'BcdGtoZAAAAA8AAAAAAAAAAAAAAAEAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAQAAAA'
373 'AAAAABAAABM3N0YmwAAACXc3RzZAAAAAAAAAABAAAAh2F2YzEAAAAAAAAAAQAAAAAAAAAAAA' 387 'AAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAEAAAAAACAAAAAgAAAAAACRlZHRzAAAAHG'
374 'AAAAAAAAAACAAIAEgAAABIAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA' 388 'Vsc3QAAAAAAAAAAQAAAFAAAAABAAEAAAAAAchtZGlhAAAAIG1kaGQAAAAAAAAAAAAAAA'
375 'AAAAAY//8AAAAxYXZjQwFNQAr/4QAYZ01ACuiPyy4C2QAAAwABAAADADIPEiUSAQAGaOvAZS' 389 'AAAAAZAAAAAlXEAAAAAAAtaGRscgAAAAAAAAAAdmlkZQAAAAAAAAAAAAAAAFZpZGVvSG'
376 'yAAAAAGHN0dHMAAAAAAAAAAQAAAAIAAAABAAAAFHN0c3MAAAAAAAAAAQAAAAEAAAAYY3R0cw' 390 'FuZGxlcgAAAAFzbWluZgAAABR2bWhkAAAAAQAAAAAAAAAAAAAAJGRpbmYAAAAcZHJlZg'
377 'AAAAAAAAABAAAAAgAAAAEAAAAcc3RzYwAAAAAAAAABAAAAAQAAAAEAAAABAAAAHHN0c3oAAA' 391 'AAAAAAAAABAAAADHVybCAAAAABAAABM3N0YmwAAACXc3RzZAAAAAAAAAABAAAAh2F2Yz'
378 'AAAAAAAAAAAAIAAAK0AAAACwAAABhzdGNvAAAAAAAAAAIAAAAwAAAC5AAAAGB1ZHRhAAAAWG' 392 'EAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAACAAIAEgAAABIAAAAAAAAAAEAAAAAAAAAAA'
379 '1ldGEAAAAAAAAAIWhkbHIAAAAAAAAAAG1kaXJhcHBsAAAAAAAAAAAAAAAAK2lsc3QAAAAjqX' 393 'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAY//8AAAAxYXZjQwFNQAr/4QAYZ01ACuiPyy'
380 'RvbwAAABtkYXRhAAAAAQAAAABMYXZmNTMuMjEuMQ=='; 394 '4C2QAAAwABAAADADIPEiUSAQAGaOvAZSyAAAAAGHN0dHMAAAAAAAAAAQAAAAIAAAABAA'
381 var webmVideoUrl = 395 'AAFHN0c3MAAAAAAAAAAQAAAAEAAAAYY3R0cwAAAAAAAAABAAAAAgAAAAEAAAAcc3RzYw'
382 'data:video/webm;base64,GkXfowEAAAAAAAAfQoaBAUL3gQFC8oEEQvOBCEKChHdlYm1Ch' 396 'AAAAAAAAABAAAAAQAAAAEAAAABAAAAHHN0c3oAAAAAAAAAAAAAAAIAAAK0AAAACwAAAB'
383 '4ECQoWBAhhTgGcBAAAAAAAB/hFNm3RALE27i1OrhBVJqWZTrIHfTbuMU6uEFlSua1OsggEsT' 397 'hzdGNvAAAAAAAAAAIAAAAwAAAC5AAAAGB1ZHRhAAAAWG1ldGEAAAAAAAAAIWhkbHIAAA'
384 'buMU6uEHFO7a1OsggHk7AEAAAAAAACkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA' 398 'AAAAAAAG1kaXJhcHBsAAAAAAAAAAAAAAAAK2lsc3QAAAAjqXRvbwAAABtkYXRhAAAAAQ'
385 'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA' 399 'AAAABMYXZmNTMuMjEuMQ==';
386 'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA' 400 var webmVideoDataUrl =
387 'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVSalmAQAAAAAAAEEq17GDD0JATYCLTGF2ZjUzL' 401 'data:video/webm;base64,GkXfowEAAAAAAAAfQoaBAUL3gQFC8oEEQvOBCEKChHdlY'
388 'jIxLjFXQYtMYXZmNTMuMjEuMXOkkJatuHwTJ7cvFLSzBSmxbp5EiYhAVAAAAAAAABZUrmsBA' 402 'm1Ch4ECQoWBAhhTgGcBAAAAAAAB/hFNm3RALE27i1OrhBVJqWZTrIHfTbuMU6uEFlSua'
389 'AAAAAAAR64BAAAAAAAAPteBAXPFgQGcgQAitZyDdW5khoVWX1ZQOIOBASPjg4QCYloA4AEAA' 403 '1OsggEsTbuMU6uEHFO7a1OsggHk7AEAAAAAAACkAAAAAAAAAAAAAAAAAAAAAAAAAAAAA'
390 'AAAAAASsIEIuoEIVLCBCFS6gQhUsoEDH0O2dQEAAAAAAABZ54EAo72BAACA8AIAnQEqCAAIA' 404 'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA'
391 'ABHCIWFiIWEiAICAnWqA/gD+gINTRgA/v0hRf/kb+PnRv/I4//8WE8DijI//FRAo5WBACgAs' 405 'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA'
392 'QEAARAQABgAGFgv9AAIAAAcU7trAQAAAAAAAA67jLOBALeH94EB8YIBfw=='; 406 'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVSalmAQAAAAAAA'
393 407 'EEq17GDD0JATYCLTGF2ZjUzLjIxLjFXQYtMYXZmNTMuMjEuMXOkkJatuHwTJ7cvFLSzB'
394 // test('drawImage from video element with 3 params', () { 408 'Smxbp5EiYhAVAAAAAAAABZUrmsBAAAAAAAAR64BAAAAAAAAPteBAXPFgQGcgQAitZyDd'
395 // var video = new VideoElement(); 409 'W5khoVWX1ZQOIOBASPjg4QCYloA4AEAAAAAAAASsIEIuoEIVLCBCFS6gQhUsoEDH0O2d'
396 // 410 'QEAAAAAAABZ54EAo72BAACA8AIAnQEqCAAIAABHCIWFiIWEiAICAnWqA/gD+gINTRgA/'
397 // video.onLoadedData.listen(expectAsync1((_) { 411 'v0hRf/kb+PnRv/I4//8WE8DijI//FRAo5WBACgAsQEAARAQABgAGFgv9AAIAAAcU7trA'
398 // context.drawImage(video, 50, 50); 412 'QAAAAAAAA67jLOBALeH94EB8YIBfw==';
399 // 413 group('drawImage_video_element', () {
400 // expectPixelFilled(50, 50); 414 setUp(setupFunc);
401 // expectPixelFilled(54, 54); 415 tearDown(tearDownFunc);
402 // expectPixelFilled(57, 57); 416
403 // expectPixelUnfilled(58, 58); 417 test('with 3 params', () {
404 // expectPixelUnfilled(0, 0); 418 video.onCanPlay.listen(expectAsync1((_) {
405 // expectPixelUnfilled(70, 70); 419 context.drawImage(video, 50, 50);
406 // })); 420
407 // video.onError.listen((_) { 421 expectPixelFilled(50, 50);
408 // guardAsync(() { 422 expectPixelFilled(54, 54);
409 // fail('URL failed to load.'); 423 expectPixelFilled(57, 57);
410 // }); 424 expectPixelUnfilled(58, 58);
411 // }); 425 expectPixelUnfilled(0, 0);
412 // 426 expectPixelUnfilled(70, 70);
413 // if(video.canPlayType('video/webm; codecs="vp8.0, vorbis"', '') != '') { 427 }));
414 // video.src = webmVideoUrl; 428
415 // } else if(video.canPlayType('video/mp4; codecs="avc1.4D401E, mp4a.40.2"' , 429 video.onError.listen((_) {
416 // null) != '') { 430 guardAsync(() {
417 // video.src = mp4VideoUrl; 431 fail('URL failed to load.');
418 // } else { 432 });
419 // logMessage('Video is not supported on this system.'); 433 });
420 // } 434
421 // }); 435 if(video.canPlayType('video/webm; codecs="vp8.0, vorbis"', '') != '') {
422 // 436 video.src = webmVideoUrl;
423 // test('drawImage from video element with 5 params', () { 437 } else if(video.canPlayType('video/mp4; codecs="avc1.4D401E, mp4a.40.2"',
424 // var video = new VideoElement(); 438 null) != '') {
425 // 439 video.src = mp4VideoUrl;
426 // video.onLoadedData.listen(expectAsync1((_) { 440 } else {
427 // context.drawImageToRect(video, new Rect(50, 50, 20, 20)); 441 window.console.log('Video is not supported on this system.');
428 // 442 }
429 // expectPixelFilled(50, 50); 443 });
430 // expectPixelFilled(55, 55); 444
431 // expectPixelFilled(59, 59); 445 test('with 5 params', () {
432 // expectPixelFilled(60, 60); 446 video.onCanPlay.listen(expectAsync1((_) {
433 // expectPixelFilled(69, 69); 447 context.drawImageToRect(video, new Rect(50, 50, 20, 20));
434 // expectPixelUnfilled(70, 70); 448
435 // expectPixelUnfilled(0, 0); 449 expectPixelFilled(50, 50);
436 // expectPixelUnfilled(80, 80); 450 expectPixelFilled(55, 55);
437 // })); 451 expectPixelFilled(59, 59);
438 // video.onError.listen((_) { 452 expectPixelFilled(60, 60);
439 // guardAsync(() { 453 expectPixelFilled(69, 69);
440 // fail('URL failed to load.'); 454 expectPixelUnfilled(70, 70);
441 // }); 455 expectPixelUnfilled(0, 0);
442 // }); 456 expectPixelUnfilled(80, 80);
443 // 457 }));
444 // if(video.canPlayType('video/webm; codecs="vp8.0, vorbis"', '') != '') { 458 video.onError.listen((_) {
445 // video.src = webmVideoUrl; 459 guardAsync(() {
446 // } else if(video.canPlayType('video/mp4; codecs="avc1.4D401E, mp4a.40.2"' , 460 fail('URL failed to load.');
447 // null) != '') { 461 });
448 // video.src = mp4VideoUrl; 462 });
449 // } else { 463
450 // // TODO(amouravski): Better fallback? 464 if(video.canPlayType('video/webm; codecs="vp8.0, vorbis"', '') != '') {
451 // logMessage('Video is not supported on this system.'); 465 video.src = webmVideoUrl;
452 // } 466 } else if(video.canPlayType('video/mp4; codecs="avc1.4D401E, mp4a.40.2"',
453 // }); 467 null) != '') {
454 // 468 video.src = mp4VideoUrl;
455 // test('drawImage from video element with 9 params', () { 469 } else {
456 // var video = new VideoElement(); 470 // TODO(amouravski): Better fallback?
457 // 471 window.console.log('Video is not supported on this system.');
458 // video.onLoadedData.listen(expectAsync1((_) { 472 }
459 // context.drawImageToRect(video, new Rect(50, 50, 20, 20), 473 });
460 // sourceRect: new Rect(2, 2, 6, 6)); 474
461 // 475 test('with 9 params', () {
462 // expectPixelFilled(50, 50); 476 video.onCanPlay.listen(expectAsync1((_) {
463 // expectPixelFilled(55, 55); 477 context.drawImageToRect(video, new Rect(50, 50, 20, 20),
464 // expectPixelFilled(59, 59); 478 sourceRect: new Rect(2, 2, 6, 6));
465 // expectPixelFilled(60, 60); 479
466 // expectPixelFilled(69, 69); 480 expectPixelFilled(50, 50);
467 // expectPixelUnfilled(70, 70); 481 expectPixelFilled(55, 55);
468 // expectPixelUnfilled(0, 0); 482 expectPixelFilled(59, 59);
469 // expectPixelUnfilled(80, 80); 483 expectPixelFilled(60, 60);
470 // })); 484 expectPixelFilled(69, 69);
471 // video.onError.listen((_) { 485 expectPixelUnfilled(70, 70);
472 // guardAsync(() { 486 expectPixelUnfilled(0, 0);
473 // fail('URL failed to load.'); 487 expectPixelUnfilled(80, 80);
474 // }); 488 }));
475 // }); 489 video.onError.listen((_) {
476 // 490 guardAsync(() {
477 // if(video.canPlayType('video/webm; codecs="vp8.0, vorbis"', '') != '') { 491 fail('URL failed to load.');
478 // video.src = webmVideoUrl; 492 });
479 // } else if(video.canPlayType('video/mp4; codecs="avc1.4D401E, mp4a.40.2"' , 493 });
480 // null) != '') { 494
481 // video.src = mp4VideoUrl; 495 if(video.canPlayType('video/webm; codecs="vp8.0, vorbis"', '') != '') {
482 // } else { 496 video.src = webmVideoUrl;
483 // // TODO(amouravski): Better fallback? 497 } else if(video.canPlayType('video/mp4; codecs="avc1.4D401E, mp4a.40.2"',
484 // logMessage('Video is not supported on this system.'); 498 null) != '') {
485 // } 499 video.src = mp4VideoUrl;
486 // }); 500 } else {
487 501 // TODO(amouravski): Better fallback?
488 test('drawImage from canvas element with 3 params', () { 502 window.console.log('Video is not supported on this system.');
503 }
504 });
505 });
506
507 group('drawImage_video_element_dataUrl', () {
508 setUp(setupFunc);
509 tearDown(tearDownFunc);
510
511 test('with 9 params', () {
512 video = new VideoElement();
513 canvas = new CanvasElement();
514 video.onCanPlay.listen(expectAsync1((_) {
515 context.drawImageToRect(video, new Rect(50, 50, 20, 20),
516 sourceRect: new Rect(2, 2, 6, 6));
517
518 expectPixelFilled(50, 50);
519 expectPixelFilled(55, 55);
520 expectPixelFilled(59, 59);
521 expectPixelFilled(60, 60);
522 expectPixelFilled(69, 69);
523 expectPixelUnfilled(70, 70);
524 expectPixelUnfilled(0, 0);
525 expectPixelUnfilled(80, 80);
526 }));
527 video.onError.listen((_) {
528 guardAsync(() {
529 fail('URL failed to load.');
530 });
531 });
532
533 if(video.canPlayType('video/webm; codecs="vp8.0, vorbis"', '') != '') {
534 video.src = webmVideoDataUrl;
535 } else if(video.canPlayType('video/mp4; codecs="avc1.4D401E, mp4a.40.2"',
536 null) != '') {
537 video.src = mp4VideoDataUrl;
538 } else {
539 // TODO(amouravski): Better fallback?
540 window.console.log('Video is not supported on this system.');
541 }
542 });
543 });
544
545 group('drawImage_canvas_element', () {
546 setUp(setupFunc);
547 tearDown(tearDownFunc);
548
549 test('with 3 params', () {
489 // Draw an image to the canvas from a canvas element. 550 // Draw an image to the canvas from a canvas element.
490 context.drawImage(otherCanvas, 50, 50); 551 context.drawImage(otherCanvas, 50, 50);
491 552
492 expectPixelFilled(50, 50); 553 expectPixelFilled(50, 50);
493 expectPixelFilled(55, 55); 554 expectPixelFilled(55, 55);
494 expectPixelFilled(59, 59); 555 expectPixelFilled(59, 59);
495 expectPixelUnfilled(60, 60); 556 expectPixelUnfilled(60, 60);
496 expectPixelUnfilled(0, 0); 557 expectPixelUnfilled(0, 0);
497 expectPixelUnfilled(70, 70); 558 expectPixelUnfilled(70, 70);
498 }); 559 });
499 test('drawImage from canvas element with 5 params', () { 560 test('with 5 params', () {
500 // Draw an image to the canvas from a canvas element. 561 // Draw an image to the canvas from a canvas element.
501 context.drawImageToRect(otherCanvas, new Rect(50, 50, 20, 20)); 562 context.drawImageToRect(otherCanvas, new Rect(50, 50, 20, 20));
502 563
503 expectPixelFilled(50, 50); 564 expectPixelFilled(50, 50);
504 expectPixelFilled(55, 55); 565 expectPixelFilled(55, 55);
505 expectPixelFilled(59, 59); 566 expectPixelFilled(59, 59);
506 expectPixelFilled(60, 60); 567 expectPixelFilled(60, 60);
507 expectPixelFilled(69, 69); 568 expectPixelFilled(69, 69);
508 expectPixelUnfilled(70, 70); 569 expectPixelUnfilled(70, 70);
509 expectPixelUnfilled(0, 0); 570 expectPixelUnfilled(0, 0);
510 expectPixelUnfilled(80, 80); 571 expectPixelUnfilled(80, 80);
511 }); 572 });
512 test('drawImage from canvas element with 9 params', () { 573 test('with 9 params', () {
513 // Draw an image to the canvas from a canvas element. 574 // Draw an image to the canvas from a canvas element.
514 otherContext.fillStyle = "blue"; 575 otherContext.fillStyle = "blue";
515 otherContext.fillRect(5, 5, 5, 5); 576 otherContext.fillRect(5, 5, 5, 5);
516 context.drawImageToRect(otherCanvas, new Rect(50, 50, 20, 20), 577 context.drawImageToRect(otherCanvas, new Rect(50, 50, 20, 20),
517 sourceRect: new Rect(2, 2, 6, 6)); 578 sourceRect: new Rect(2, 2, 6, 6));
518 579
519 checkPixel(readPixel(50, 50), [255, 0, 0, 255]); 580 checkPixel(readPixel(50, 50), [255, 0, 0, 255]);
520 checkPixel(readPixel(55, 55), [255, 0, 0, 255]); 581 checkPixel(readPixel(55, 55), [255, 0, 0, 255]);
521 checkPixel(readPixel(60, 50), [255, 0, 0, 255]); 582 checkPixel(readPixel(60, 50), [255, 0, 0, 255]);
522 checkPixel(readPixel(65, 65), [0, 0, 255, 255]); 583 checkPixel(readPixel(65, 65), [0, 0, 255, 255]);
523 checkPixel(readPixel(69, 69), [0, 0, 255, 255]); 584 checkPixel(readPixel(69, 69), [0, 0, 255, 255]);
524 expectPixelFilled(50, 50); 585 expectPixelFilled(50, 50);
525 expectPixelFilled(55, 55); 586 expectPixelFilled(55, 55);
526 expectPixelFilled(59, 59); 587 expectPixelFilled(59, 59);
527 expectPixelFilled(60, 60); 588 expectPixelFilled(60, 60);
528 expectPixelFilled(69, 69); 589 expectPixelFilled(69, 69);
529 expectPixelUnfilled(70, 70); 590 expectPixelUnfilled(70, 70);
530 expectPixelUnfilled(0, 0); 591 expectPixelUnfilled(0, 0);
531 expectPixelUnfilled(80, 80); 592 expectPixelUnfilled(80, 80);
532 }); 593 });
533 }); 594 });
534 } 595 }
OLDNEW
« no previous file with comments | « sdk/lib/html/dartium/html_dartium.dart ('k') | tests/html/html.status » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698