Commit 9be0fc74 authored by Ian Hickson's avatar Ian Hickson Committed by GitHub

Fill in the test for rounded rectangle splash and highlights (#9092)

Fixes https://github.com/flutter/flutter/issues/9031

Also some updates to mock_canvas that were needed to do this.
parent 57b34227
// Copyright 2017 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 'package:flutter/material.dart';
import 'package:flutter/rendering.dart';
import 'package:flutter_test/flutter_test.dart';
import 'package:flutter_test/src/widget_tester.dart';
import '../rendering/mock_canvas.dart';
void main() {
testWidgets('Does the ink widget render a border radius', (WidgetTester tester) async {
final Color highlightColor = new Color(0xAAFF0000);
final Color splashColor = new Color(0xAA0000FF);
final Key materialKey = new UniqueKey();
final Key inkKey = new UniqueKey();
final BorderRadius borderRadius = new BorderRadius.circular(6.0);
await tester.pumpWidget(
new Material(
key: materialKey,
child: new Center(
child: new Container(
width: 200.0,
height: 60.0,
child: new InkWell(
key: inkKey,
borderRadius: borderRadius,
highlightColor: highlightColor,
splashColor: splashColor,
onTap: () {},
onTap: () { },
),
),
),
),
);
final Point center = tester.getCenter(find.byKey(materialKey));
final Point center = tester.getCenter(find.byType(InkWell));
final TestGesture gesture = await tester.startGesture(center);
await tester.pump(new Duration(milliseconds: 200));
await tester.pump(); // start gesture
await tester.pump(new Duration(milliseconds: 200)); // wait for splash to be well under way
// TODO(ianh) - stub. needs to be completed.
final RenderBox box = tester.renderObject<RenderPhysicalModel>(find.byType(PhysicalModel)).child;
expect(
box,
paints
..clipRRect(rrect: new RRect.fromLTRBR(300.0, 270.0, 500.0, 330.0, new Radius.circular(6.0)))
..circle(x: 400.0, y: 300.0, radius: 21.0, color: splashColor)
..rrect(
rrect: new RRect.fromLTRBR(300.0, 270.0, 500.0, 330.0, new Radius.circular(6.0)),
color: highlightColor,
)
);
await gesture.up();
});
}
\ No newline at end of file
}
......@@ -111,7 +111,7 @@ abstract class PaintPattern {
/// See also: [save], [restore].
void saveRestore();
/// Indicates that a rectangular clip.
/// Indicates that a rectangular clip is expected next.
///
/// The next rectangular clip is examined. Any arguments that are passed to
/// this method are compared to the actual [Canvas.clipRect] call's argument
......@@ -135,6 +135,18 @@ abstract class PaintPattern {
/// [Canvas.drawRect] call are ignored.
void rect({ Rect rect, Color color });
/// Indicates that a rounded rectangle clip is expected next.
///
/// The next rounded rectangle clip is examined. Any arguments that are passed
/// to this method are compared to the actual [Canvas.clipRRect] call's
/// argument and any mismatches result in failure.
///
/// If no call to [Canvas.clipRRect] was made, then this results in failure.
///
/// Any calls made between the last matched call (if any) and the
/// [Canvas.clipRRect] call are ignored.
void clipRRect({ RRect rrect });
/// Indicates that a rounded rectangle is expected next.
///
/// The next rounded rectangle is examined. Any arguments that are passed to
......@@ -262,6 +274,11 @@ class _TestRecordingCanvasPatternMatcher extends Matcher implements PaintPattern
_predicates.add(new _RectPaintPredicate(rect: rect, color: color, hasMaskFilter: hasMaskFilter, style: style));
}
@override
void clipRRect({ RRect rrect }) {
_predicates.add(new _FunctionPaintPredicate(#clipRRect, <dynamic>[rrect]));
}
@override
void rrect({ RRect rrect, Color color, bool hasMaskFilter, PaintingStyle style }) {
_predicates.add(new _RRectPaintPredicate(rrect: rrect, color: color, hasMaskFilter: hasMaskFilter, style: style));
......@@ -331,6 +348,8 @@ class _TestRecordingCanvasPatternMatcher extends Matcher implements PaintPattern
@override
Description describe(Description description) {
if (_predicates.isEmpty)
return description.add('An object or closure and a paint pattern.');
description.add('Object or closure painting: ');
return description.addAll(
'', ', ', '',
......@@ -351,8 +370,13 @@ class _TestRecordingCanvasPatternMatcher extends Matcher implements PaintPattern
bool _evaluatePredicates(Iterable<Invocation> calls, StringBuffer description) {
// If we ever want to have a matcher for painting nothing, create a separate
// paintsNothing matcher.
if (_predicates.isEmpty)
throw new Exception('You must add a pattern to the paints matcher.');
if (_predicates.isEmpty) {
description.write(
'painted something, but you must now add a pattern to the paints matcher '
'in the test to verify that it matches the important parts of the following.'
);
return false;
}
if (calls.isEmpty) {
description.write('painted nothing.');
return false;
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment