| // Copyright 2015 The Chromium Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| import 'dart:ui'; |
| |
| import 'package:test/test.dart'; |
| |
| class FakeEverything implements Canvas, PictureRecorder, Color { |
| dynamic noSuchMethod(Invocation invocation) { |
| return new FakeEverything(); |
| } |
| } |
| |
| class NegativeSpace implements Canvas, PictureRecorder, Color { |
| dynamic noSuchMethod(Invocation invocation) { |
| return false; |
| } |
| } |
| |
| void testCanvas(callback(Canvas canvas)) { |
| try { |
| callback(new Canvas(new PictureRecorder(), new Rect.fromLTRB(0.0, 0.0, 0.0, 0.0))); |
| } catch (error) { } |
| } |
| |
| void main() { |
| test("canvas APIs should not crash", () { |
| dynamic fake = new FakeEverything(); |
| dynamic no = new NegativeSpace(); |
| Paint paint = new Paint(); |
| Rect rect = new Rect.fromLTRB(double.NAN, double.NAN, double.NAN, double.NAN); |
| List<dynamic> list = <dynamic>[fake, fake]; |
| Offset offset = new Offset(double.NAN, double.NAN); |
| Path path = new Path(); |
| |
| try { new Canvas(null, null); } catch (error) { } |
| try { new Canvas(null, rect); } catch (error) { } |
| try { new Canvas(null, fake); } catch (error) { } |
| try { new Canvas(fake, rect); } catch (error) { } |
| try { new Canvas(no, rect); } catch (error) { } |
| |
| try { |
| new PictureRecorder() |
| ..endRecording() |
| ..endRecording() |
| ..endRecording(); |
| } catch (error) { } |
| |
| testCanvas((Canvas canvas) => canvas.clipPath(fake)); |
| testCanvas((Canvas canvas) => canvas.clipRect(fake)); |
| testCanvas((Canvas canvas) => canvas.clipRRect(fake)); |
| testCanvas((Canvas canvas) => canvas.drawArc(fake, 0.0, 0.0, false, paint)); |
| testCanvas((Canvas canvas) => canvas.drawArc(rect, 0.0, 0.0, false, fake)); |
| testCanvas((Canvas canvas) => canvas.drawAtlas(fake, list, list, list, fake, rect, paint)); |
| testCanvas((Canvas canvas) => canvas.drawCircle(offset, double.NAN, paint)); |
| testCanvas((Canvas canvas) => canvas.drawColor(fake, fake)); |
| testCanvas((Canvas canvas) => canvas.drawDRRect(fake, fake, fake)); |
| testCanvas((Canvas canvas) => canvas.drawImage(fake, offset, paint)); |
| testCanvas((Canvas canvas) => canvas.drawImageNine(fake, rect, rect, paint)); |
| testCanvas((Canvas canvas) => canvas.drawImageRect(fake, rect, rect, paint)); |
| testCanvas((Canvas canvas) => canvas.drawLine(offset, offset, paint)); |
| testCanvas((Canvas canvas) => canvas.drawOval(rect, paint)); |
| testCanvas((Canvas canvas) => canvas.drawPaint(paint)); |
| testCanvas((Canvas canvas) => canvas.drawPaint(fake)); |
| testCanvas((Canvas canvas) => canvas.drawPaint(no)); |
| testCanvas((Canvas canvas) => canvas.drawParagraph(fake, offset)); |
| testCanvas((Canvas canvas) => canvas.drawPath(fake, paint)); |
| testCanvas((Canvas canvas) => canvas.drawPicture(fake)); |
| testCanvas((Canvas canvas) => canvas.drawPoints(fake, list, fake)); |
| testCanvas((Canvas canvas) => canvas.drawRawAtlas(fake, fake, fake, fake, fake, fake, fake)); |
| testCanvas((Canvas canvas) => canvas.drawRawPoints(fake, list, paint)); |
| testCanvas((Canvas canvas) => canvas.drawRect(rect, paint)); |
| testCanvas((Canvas canvas) => canvas.drawRRect(fake, paint)); |
| testCanvas((Canvas canvas) => canvas.drawShadow(path, color, double.NAN, null)); |
| testCanvas((Canvas canvas) => canvas.drawShadow(path, color, double.NAN, false)); |
| testCanvas((Canvas canvas) => canvas.drawShadow(path, color, double.NAN, true)); |
| testCanvas((Canvas canvas) => canvas.drawShadow(path, color, double.NAN, no)); |
| testCanvas((Canvas canvas) => canvas.drawShadow(path, color, double.NAN, fake)); |
| testCanvas((Canvas canvas) => canvas.drawVertices(fake, null, paint)); |
| testCanvas((Canvas canvas) => canvas.getSaveCount()); |
| testCanvas((Canvas canvas) => canvas.restore()); |
| testCanvas((Canvas canvas) => canvas.rotate(double.NAN)); |
| testCanvas((Canvas canvas) => canvas.save()); |
| testCanvas((Canvas canvas) => canvas.saveLayer(rect, paint)); |
| testCanvas((Canvas canvas) => canvas.saveLayer(fake, fake)); |
| testCanvas((Canvas canvas) => canvas.saveLayer(null, null)); |
| testCanvas((Canvas canvas) => canvas.scale(double.NAN, double.NAN)); |
| testCanvas((Canvas canvas) => canvas.skew(double.NAN, double.NAN)); |
| testCanvas((Canvas canvas) => canvas.transform(fake)); |
| testCanvas((Canvas canvas) => canvas.transform(no)); |
| testCanvas((Canvas canvas) => canvas.transform(null)); |
| testCanvas((Canvas canvas) => canvas.translate(double.NAN, double.NAN)); |
| }); |
| } |