| diff --git a/packages/flutter/test/widgets/clip_test.dart b/packages/flutter/test/widgets/clip_test.dart |
| deleted file mode 100644 |
| index 006c09994..000000000 |
| --- a/packages/flutter/test/widgets/clip_test.dart |
| +++ /dev/null |
| @@ -1,747 +0,0 @@ |
| -// 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 'package:flutter_test/flutter_test.dart'; |
| -import 'package:flutter/material.dart'; |
| -import 'package:flutter/rendering.dart'; |
| - |
| -import '../rendering/mock_canvas.dart'; |
| -import 'test_border.dart' show TestBorder; |
| - |
| -final List<String> log = <String>[]; |
| - |
| -class PathClipper extends CustomClipper<Path> { |
| - @override |
| - Path getClip(Size size) { |
| - log.add('getClip'); |
| - return Path() |
| - ..addRect(Rect.fromLTWH(50.0, 50.0, 100.0, 100.0)); |
| - } |
| - @override |
| - bool shouldReclip(PathClipper oldClipper) => false; |
| -} |
| - |
| -class ValueClipper<T> extends CustomClipper<T> { |
| - ValueClipper(this.message, this.value); |
| - |
| - final String message; |
| - final T value; |
| - |
| - @override |
| - T getClip(Size size) { |
| - log.add(message); |
| - return value; |
| - } |
| - |
| - @override |
| - bool shouldReclip(ValueClipper<T> oldClipper) { |
| - return oldClipper.message != message || oldClipper.value != value; |
| - } |
| -} |
| - |
| -void main() { |
| - testWidgets('ClipPath', (WidgetTester tester) async { |
| - await tester.pumpWidget( |
| - ClipPath( |
| - clipper: PathClipper(), |
| - child: GestureDetector( |
| - behavior: HitTestBehavior.opaque, |
| - onTap: () { log.add('tap'); }, |
| - ), |
| - ) |
| - ); |
| - expect(log, equals(<String>['getClip'])); |
| - |
| - await tester.tapAt(const Offset(10.0, 10.0)); |
| - expect(log, equals(<String>['getClip'])); |
| - log.clear(); |
| - |
| - await tester.tapAt(const Offset(100.0, 100.0)); |
| - expect(log, equals(<String>['tap'])); |
| - log.clear(); |
| - }); |
| - |
| - testWidgets('ClipOval', (WidgetTester tester) async { |
| - await tester.pumpWidget( |
| - ClipOval( |
| - child: GestureDetector( |
| - behavior: HitTestBehavior.opaque, |
| - onTap: () { log.add('tap'); }, |
| - ), |
| - ) |
| - ); |
| - expect(log, equals(<String>[])); |
| - |
| - await tester.tapAt(const Offset(10.0, 10.0)); |
| - expect(log, equals(<String>[])); |
| - log.clear(); |
| - |
| - await tester.tapAt(const Offset(400.0, 300.0)); |
| - expect(log, equals(<String>['tap'])); |
| - log.clear(); |
| - }); |
| - |
| - testWidgets('Transparent ClipOval hit test', (WidgetTester tester) async { |
| - await tester.pumpWidget( |
| - Opacity( |
| - opacity: 0.0, |
| - child: ClipOval( |
| - child: GestureDetector( |
| - behavior: HitTestBehavior.opaque, |
| - onTap: () { log.add('tap'); }, |
| - ), |
| - ), |
| - ) |
| - ); |
| - expect(log, equals(<String>[])); |
| - |
| - await tester.tapAt(const Offset(10.0, 10.0)); |
| - expect(log, equals(<String>[])); |
| - log.clear(); |
| - |
| - await tester.tapAt(const Offset(400.0, 300.0)); |
| - expect(log, equals(<String>['tap'])); |
| - log.clear(); |
| - }); |
| - |
| - testWidgets('ClipRect', (WidgetTester tester) async { |
| - await tester.pumpWidget( |
| - Align( |
| - alignment: Alignment.topLeft, |
| - child: SizedBox( |
| - width: 100.0, |
| - height: 100.0, |
| - child: ClipRect( |
| - clipper: ValueClipper<Rect>('a', Rect.fromLTWH(5.0, 5.0, 10.0, 10.0)), |
| - child: GestureDetector( |
| - behavior: HitTestBehavior.opaque, |
| - onTap: () { log.add('tap'); }, |
| - ), |
| - ), |
| - ), |
| - ) |
| - ); |
| - expect(log, equals(<String>['a'])); |
| - |
| - await tester.tapAt(const Offset(10.0, 10.0)); |
| - expect(log, equals(<String>['a', 'tap'])); |
| - |
| - await tester.tapAt(const Offset(100.0, 100.0)); |
| - expect(log, equals(<String>['a', 'tap'])); |
| - |
| - await tester.pumpWidget( |
| - Align( |
| - alignment: Alignment.topLeft, |
| - child: SizedBox( |
| - width: 100.0, |
| - height: 100.0, |
| - child: ClipRect( |
| - clipper: ValueClipper<Rect>('a', Rect.fromLTWH(5.0, 5.0, 10.0, 10.0)), |
| - child: GestureDetector( |
| - behavior: HitTestBehavior.opaque, |
| - onTap: () { log.add('tap'); }, |
| - ), |
| - ), |
| - ), |
| - ) |
| - ); |
| - expect(log, equals(<String>['a', 'tap'])); |
| - |
| - await tester.pumpWidget( |
| - Align( |
| - alignment: Alignment.topLeft, |
| - child: SizedBox( |
| - width: 200.0, |
| - height: 200.0, |
| - child: ClipRect( |
| - clipper: ValueClipper<Rect>('a', Rect.fromLTWH(5.0, 5.0, 10.0, 10.0)), |
| - child: GestureDetector( |
| - behavior: HitTestBehavior.opaque, |
| - onTap: () { log.add('tap'); }, |
| - ), |
| - ), |
| - ), |
| - ) |
| - ); |
| - expect(log, equals(<String>['a', 'tap', 'a'])); |
| - |
| - await tester.pumpWidget( |
| - Align( |
| - alignment: Alignment.topLeft, |
| - child: SizedBox( |
| - width: 200.0, |
| - height: 200.0, |
| - child: ClipRect( |
| - clipper: ValueClipper<Rect>('a', Rect.fromLTWH(5.0, 5.0, 10.0, 10.0)), |
| - child: GestureDetector( |
| - behavior: HitTestBehavior.opaque, |
| - onTap: () { log.add('tap'); }, |
| - ), |
| - ), |
| - ), |
| - ) |
| - ); |
| - expect(log, equals(<String>['a', 'tap', 'a'])); |
| - |
| - await tester.pumpWidget( |
| - Align( |
| - alignment: Alignment.topLeft, |
| - child: SizedBox( |
| - width: 200.0, |
| - height: 200.0, |
| - child: ClipRect( |
| - clipper: ValueClipper<Rect>('b', Rect.fromLTWH(5.0, 5.0, 10.0, 10.0)), |
| - child: GestureDetector( |
| - behavior: HitTestBehavior.opaque, |
| - onTap: () { log.add('tap'); }, |
| - ), |
| - ), |
| - ), |
| - ) |
| - ); |
| - expect(log, equals(<String>['a', 'tap', 'a', 'b'])); |
| - |
| - await tester.pumpWidget( |
| - Align( |
| - alignment: Alignment.topLeft, |
| - child: SizedBox( |
| - width: 200.0, |
| - height: 200.0, |
| - child: ClipRect( |
| - clipper: ValueClipper<Rect>('c', Rect.fromLTWH(25.0, 25.0, 10.0, 10.0)), |
| - child: GestureDetector( |
| - behavior: HitTestBehavior.opaque, |
| - onTap: () { log.add('tap'); }, |
| - ), |
| - ), |
| - ), |
| - ) |
| - ); |
| - expect(log, equals(<String>['a', 'tap', 'a', 'b', 'c'])); |
| - |
| - await tester.tapAt(const Offset(30.0, 30.0)); |
| - expect(log, equals(<String>['a', 'tap', 'a', 'b', 'c', 'tap'])); |
| - |
| - await tester.tapAt(const Offset(100.0, 100.0)); |
| - expect(log, equals(<String>['a', 'tap', 'a', 'b', 'c', 'tap'])); |
| - }); |
| - |
| - testWidgets('debugPaintSizeEnabled', (WidgetTester tester) async { |
| - await tester.pumpWidget( |
| - const ClipRect( |
| - child: Placeholder(), |
| - ), |
| - ); |
| - expect(tester.renderObject(find.byType(ClipRect)).paint, paints |
| - ..save() |
| - ..clipRect(rect: Rect.fromLTRB(0.0, 0.0, 800.0, 600.0)) |
| - ..save() |
| - ..path() // Placeholder |
| - ..restore() |
| - ..restore(), |
| - ); |
| - debugPaintSizeEnabled = true; |
| - expect(tester.renderObject(find.byType(ClipRect)).debugPaint, paints |
| - ..rect(rect: Rect.fromLTRB(0.0, 0.0, 800.0, 600.0)) |
| - ..paragraph(), |
| - ); |
| - debugPaintSizeEnabled = false; |
| - }); |
| - |
| - testWidgets('ClipRect painting', (WidgetTester tester) async { |
| - await tester.pumpWidget( |
| - Center( |
| - child: RepaintBoundary( |
| - child: Container( |
| - color: Colors.white, |
| - child: Padding( |
| - padding: const EdgeInsets.all(100.0), |
| - child: SizedBox( |
| - height: 100.0, |
| - width: 100.0, |
| - child: Transform.rotate( |
| - angle: 1.0, // radians |
| - child: ClipRect( |
| - child: Container( |
| - color: Colors.red, |
| - child: Container( |
| - color: Colors.white, |
| - child: RepaintBoundary( |
| - child: Center( |
| - child: Container( |
| - color: Colors.black, |
| - height: 10.0, |
| - width: 10.0, |
| - ), |
| - ), |
| - ), |
| - ), |
| - ), |
| - ), |
| - ), |
| - ), |
| - ), |
| - ), |
| - ), |
| - ), |
| - ); |
| - await expectLater( |
| - find.byType(RepaintBoundary).first, |
| - matchesGoldenFile('clip.ClipRect.1.png'), |
| - ); |
| - }); |
| - |
| - testWidgets('ClipRect save, overlay, and antialiasing', (WidgetTester tester) async { |
| - await tester.pumpWidget( |
| - RepaintBoundary( |
| - child: Stack( |
| - textDirection: TextDirection.ltr, |
| - children: <Widget>[ |
| - Positioned( |
| - top: 0.0, |
| - left: 0.0, |
| - width: 100.0, |
| - height: 100.0, |
| - child: ClipRect( |
| - child: Container( |
| - color: Colors.blue, |
| - ), |
| - clipBehavior: Clip.hardEdge, |
| - ), |
| - ), |
| - Positioned( |
| - top: 50.0, |
| - left: 50.0, |
| - width: 100.0, |
| - height: 100.0, |
| - child: Transform.rotate( |
| - angle: 1.0, |
| - child: Container( |
| - color: Colors.red, |
| - ), |
| - ), |
| - ), |
| - ], |
| - ), |
| - ), |
| - ); |
| - await expectLater( |
| - find.byType(RepaintBoundary).first, |
| - matchesGoldenFile('clip.ClipRectOverlay.1.png'), |
| - ); |
| - }); |
| - |
| - testWidgets('ClipRRect painting', (WidgetTester tester) async { |
| - await tester.pumpWidget( |
| - Center( |
| - child: RepaintBoundary( |
| - child: Container( |
| - color: Colors.white, |
| - child: Padding( |
| - padding: const EdgeInsets.all(100.0), |
| - child: SizedBox( |
| - height: 100.0, |
| - width: 100.0, |
| - child: Transform.rotate( |
| - angle: 1.0, // radians |
| - child: ClipRRect( |
| - borderRadius: const BorderRadius.only( |
| - topLeft: Radius.elliptical(10.0, 20.0), |
| - topRight: Radius.elliptical(5.0, 30.0), |
| - bottomLeft: Radius.elliptical(2.5, 12.0), |
| - bottomRight: Radius.elliptical(15.0, 6.0), |
| - ), |
| - child: Container( |
| - color: Colors.red, |
| - child: Container( |
| - color: Colors.white, |
| - child: RepaintBoundary( |
| - child: Center( |
| - child: Container( |
| - color: Colors.black, |
| - height: 10.0, |
| - width: 10.0, |
| - ), |
| - ), |
| - ), |
| - ), |
| - ), |
| - ), |
| - ), |
| - ), |
| - ), |
| - ), |
| - ), |
| - ), |
| - ); |
| - await expectLater( |
| - find.byType(RepaintBoundary).first, |
| - matchesGoldenFile('clip.ClipRRect.1.png'), |
| - ); |
| - }); |
| - |
| - testWidgets('ClipOval painting', (WidgetTester tester) async { |
| - await tester.pumpWidget( |
| - Center( |
| - child: RepaintBoundary( |
| - child: Container( |
| - color: Colors.white, |
| - child: Padding( |
| - padding: const EdgeInsets.all(100.0), |
| - child: SizedBox( |
| - height: 100.0, |
| - width: 100.0, |
| - child: Transform.rotate( |
| - angle: 1.0, // radians |
| - child: ClipOval( |
| - child: Container( |
| - color: Colors.red, |
| - child: Container( |
| - color: Colors.white, |
| - child: RepaintBoundary( |
| - child: Center( |
| - child: Container( |
| - color: Colors.black, |
| - height: 10.0, |
| - width: 10.0, |
| - ), |
| - ), |
| - ), |
| - ), |
| - ), |
| - ), |
| - ), |
| - ), |
| - ), |
| - ), |
| - ), |
| - ), |
| - ); |
| - await expectLater( |
| - find.byType(RepaintBoundary).first, |
| - matchesGoldenFile('clip.ClipOval.1.png'), |
| - ); |
| - }); |
| - |
| - testWidgets('ClipPath painting', (WidgetTester tester) async { |
| - await tester.pumpWidget( |
| - Center( |
| - child: RepaintBoundary( |
| - child: Container( |
| - color: Colors.white, |
| - child: Padding( |
| - padding: const EdgeInsets.all(100.0), |
| - child: SizedBox( |
| - height: 100.0, |
| - width: 100.0, |
| - child: Transform.rotate( |
| - angle: 1.0, // radians |
| - child: ClipPath( |
| - clipper: ShapeBorderClipper( |
| - shape: BeveledRectangleBorder( |
| - borderRadius: BorderRadius.circular(20.0), |
| - ), |
| - ), |
| - child: Container( |
| - color: Colors.red, |
| - child: Container( |
| - color: Colors.white, |
| - child: RepaintBoundary( |
| - child: Center( |
| - child: Container( |
| - color: Colors.black, |
| - height: 10.0, |
| - width: 10.0, |
| - ), |
| - ), |
| - ), |
| - ), |
| - ), |
| - ), |
| - ), |
| - ), |
| - ), |
| - ), |
| - ), |
| - ), |
| - ); |
| - await expectLater( |
| - find.byType(RepaintBoundary).first, |
| - matchesGoldenFile('clip.ClipPath.1.png'), |
| - ); |
| - }); |
| - |
| - Center genPhysicalModel(Clip clipBehavior) { |
| - return Center( |
| - child: RepaintBoundary( |
| - child: Container( |
| - color: Colors.white, |
| - child: Padding( |
| - padding: const EdgeInsets.all(100.0), |
| - child: SizedBox( |
| - height: 100.0, |
| - width: 100.0, |
| - child: Transform.rotate( |
| - angle: 1.0, // radians |
| - child: PhysicalModel( |
| - borderRadius: BorderRadius.circular(20.0), |
| - color: Colors.red, |
| - clipBehavior: clipBehavior, |
| - child: Container( |
| - color: Colors.white, |
| - child: RepaintBoundary( |
| - child: Center( |
| - child: Container( |
| - color: Colors.black, |
| - height: 10.0, |
| - width: 10.0, |
| - ), |
| - ), |
| - ), |
| - ), |
| - ), |
| - ), |
| - ), |
| - ), |
| - ), |
| - ), |
| - ); |
| - } |
| - |
| - testWidgets('PhysicalModel painting with Clip.antiAlias', (WidgetTester tester) async { |
| - await tester.pumpWidget(genPhysicalModel(Clip.antiAlias)); |
| - await expectLater( |
| - find.byType(RepaintBoundary).first, |
| - matchesGoldenFile('clip.PhysicalModel.antiAlias.png'), |
| - ); |
| - }); |
| - |
| - testWidgets('PhysicalModel painting with Clip.hardEdge', (WidgetTester tester) async { |
| - await tester.pumpWidget(genPhysicalModel(Clip.hardEdge)); |
| - await expectLater( |
| - find.byType(RepaintBoundary).first, |
| - matchesGoldenFile('clip.PhysicalModel.hardEdge.png'), |
| - ); |
| - }); |
| - |
| - // There will be bleeding edges on the rect edges, but there shouldn't be any bleeding edges on the |
| - // round corners. |
| - testWidgets('PhysicalModel painting with Clip.antiAliasWithSaveLayer', (WidgetTester tester) async { |
| - await tester.pumpWidget(genPhysicalModel(Clip.antiAliasWithSaveLayer)); |
| - await expectLater( |
| - find.byType(RepaintBoundary).first, |
| - matchesGoldenFile('clip.PhysicalModel.antiAliasWithSaveLayer.png'), |
| - ); |
| - }); |
| - |
| - testWidgets('Default PhysicalModel painting', (WidgetTester tester) async { |
| - await tester.pumpWidget( |
| - Center( |
| - child: RepaintBoundary( |
| - child: Container( |
| - color: Colors.white, |
| - child: Padding( |
| - padding: const EdgeInsets.all(100.0), |
| - child: SizedBox( |
| - height: 100.0, |
| - width: 100.0, |
| - child: Transform.rotate( |
| - angle: 1.0, // radians |
| - child: PhysicalModel( |
| - borderRadius: BorderRadius.circular(20.0), |
| - color: Colors.red, |
| - child: Container( |
| - color: Colors.white, |
| - child: RepaintBoundary( |
| - child: Center( |
| - child: Container( |
| - color: Colors.black, |
| - height: 10.0, |
| - width: 10.0, |
| - ), |
| - ), |
| - ), |
| - ), |
| - ), |
| - ), |
| - ), |
| - ), |
| - ), |
| - ), |
| - ), |
| - ); |
| - await expectLater( |
| - find.byType(RepaintBoundary).first, |
| - matchesGoldenFile('clip.PhysicalModel.default.png'), |
| - ); |
| - }); |
| - |
| - Center genPhysicalShape(Clip clipBehavior) { |
| - return Center( |
| - child: RepaintBoundary( |
| - child: Container( |
| - color: Colors.white, |
| - child: Padding( |
| - padding: const EdgeInsets.all(100.0), |
| - child: SizedBox( |
| - height: 100.0, |
| - width: 100.0, |
| - child: Transform.rotate( |
| - angle: 1.0, // radians |
| - child: PhysicalShape( |
| - clipper: ShapeBorderClipper( |
| - shape: BeveledRectangleBorder( |
| - borderRadius: BorderRadius.circular(20.0), |
| - ), |
| - ), |
| - clipBehavior: clipBehavior, |
| - color: Colors.red, |
| - child: Container( |
| - color: Colors.white, |
| - child: RepaintBoundary( |
| - child: Center( |
| - child: Container( |
| - color: Colors.black, |
| - height: 10.0, |
| - width: 10.0, |
| - ), |
| - ), |
| - ), |
| - ), |
| - ), |
| - ), |
| - ), |
| - ), |
| - ), |
| - ), |
| - ); |
| - } |
| - |
| - testWidgets('PhysicalShape painting with Clip.antiAlias', (WidgetTester tester) async { |
| - await tester.pumpWidget(genPhysicalShape(Clip.antiAlias)); |
| - await expectLater( |
| - find.byType(RepaintBoundary).first, |
| - matchesGoldenFile('clip.PhysicalShape.antiAlias.png'), |
| - ); |
| - }); |
| - |
| - testWidgets('PhysicalShape painting with Clip.hardEdge', (WidgetTester tester) async { |
| - await tester.pumpWidget(genPhysicalShape(Clip.hardEdge)); |
| - await expectLater( |
| - find.byType(RepaintBoundary).first, |
| - matchesGoldenFile('clip.PhysicalShape.hardEdge.png'), |
| - ); |
| - }); |
| - |
| - testWidgets('PhysicalShape painting with Clip.antiAliasWithSaveLayer', (WidgetTester tester) async { |
| - await tester.pumpWidget(genPhysicalShape(Clip.antiAliasWithSaveLayer)); |
| - await expectLater( |
| - find.byType(RepaintBoundary).first, |
| - matchesGoldenFile('clip.PhysicalShape.antiAliasWithSaveLayer.png'), |
| - ); |
| - }); |
| - |
| - testWidgets('PhysicalShape painting', (WidgetTester tester) async { |
| - await tester.pumpWidget( |
| - Center( |
| - child: RepaintBoundary( |
| - child: Container( |
| - color: Colors.white, |
| - child: Padding( |
| - padding: const EdgeInsets.all(100.0), |
| - child: SizedBox( |
| - height: 100.0, |
| - width: 100.0, |
| - child: Transform.rotate( |
| - angle: 1.0, // radians |
| - child: PhysicalShape( |
| - clipper: ShapeBorderClipper( |
| - shape: BeveledRectangleBorder( |
| - borderRadius: BorderRadius.circular(20.0), |
| - ), |
| - ), |
| - color: Colors.red, |
| - child: Container( |
| - color: Colors.white, |
| - child: RepaintBoundary( |
| - child: Center( |
| - child: Container( |
| - color: Colors.black, |
| - height: 10.0, |
| - width: 10.0, |
| - ), |
| - ), |
| - ), |
| - ), |
| - ), |
| - ), |
| - ), |
| - ), |
| - ), |
| - ), |
| - ), |
| - ); |
| - await expectLater( |
| - find.byType(RepaintBoundary).first, |
| - matchesGoldenFile('clip.PhysicalShape.default.png'), |
| - ); |
| - }); |
| - |
| - testWidgets('ClipPath.shape', (WidgetTester tester) async { |
| - final List<String> logs = <String>[]; |
| - final ShapeBorder shape = TestBorder((String message) { logs.add(message); }); |
| - Widget buildClipPath() { |
| - return ClipPath.shape( |
| - shape: shape, |
| - child: const SizedBox(width: 100.0, height: 100.0), |
| - ); |
| - } |
| - final Widget clipPath = buildClipPath(); |
| - // verify that a regular clip works as one would expect |
| - logs.add('--0'); |
| - await tester.pumpWidget(clipPath); |
| - // verify that pumping again doesn't recompute the clip |
| - // even though the widget itself is new (the shape doesn't change identity) |
| - logs.add('--1'); |
| - await tester.pumpWidget(buildClipPath()); |
| - // verify that ClipPath passes the TextDirection on to its shape |
| - logs.add('--2'); |
| - await tester.pumpWidget(Directionality( |
| - textDirection: TextDirection.ltr, |
| - child: clipPath, |
| - )); |
| - // verify that changing the text direction from LTR to RTL has an effect |
| - // even though the widget itself is identical |
| - logs.add('--3'); |
| - await tester.pumpWidget(Directionality( |
| - textDirection: TextDirection.rtl, |
| - child: clipPath, |
| - )); |
| - // verify that pumping again with a text direction has no effect |
| - logs.add('--4'); |
| - await tester.pumpWidget(Directionality( |
| - textDirection: TextDirection.rtl, |
| - child: buildClipPath(), |
| - )); |
| - logs.add('--5'); |
| - // verify that changing the text direction and the widget at the same time |
| - // works as expected |
| - await tester.pumpWidget(Directionality( |
| - textDirection: TextDirection.ltr, |
| - child: clipPath, |
| - )); |
| - expect(logs, <String>[ |
| - '--0', |
| - 'getOuterPath Rect.fromLTRB(0.0, 0.0, 800.0, 600.0) null', |
| - '--1', |
| - '--2', |
| - 'getOuterPath Rect.fromLTRB(0.0, 0.0, 800.0, 600.0) TextDirection.ltr', |
| - '--3', |
| - 'getOuterPath Rect.fromLTRB(0.0, 0.0, 800.0, 600.0) TextDirection.rtl', |
| - '--4', |
| - '--5', |
| - 'getOuterPath Rect.fromLTRB(0.0, 0.0, 800.0, 600.0) TextDirection.ltr', |
| - ]); |
| - }); |
| -} |
| diff --git a/packages/flutter/test/widgets/text_golden_test.dart b/packages/flutter/test/widgets/text_golden_test.dart |
| deleted file mode 100644 |
| index 5781c65aa..000000000 |
| --- a/packages/flutter/test/widgets/text_golden_test.dart |
| +++ /dev/null |
| @@ -1,523 +0,0 @@ |
| -// Copyright 2018 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:io' show Platform; |
| - |
| -import 'package:flutter_test/flutter_test.dart'; |
| -import 'package:flutter/material.dart'; |
| -import 'package:flutter/widgets.dart'; |
| - |
| -void main() { |
| - testWidgets('Centered text', (WidgetTester tester) async { |
| - await tester.pumpWidget( |
| - Center( |
| - child: RepaintBoundary( |
| - child: Container( |
| - width: 200.0, |
| - height: 100.0, |
| - decoration: const BoxDecoration( |
| - color: Color(0xff00ff00), |
| - ), |
| - child: const Text('Hello', |
| - textDirection: TextDirection.ltr, |
| - textAlign: TextAlign.center, |
| - style: TextStyle(color: Color(0xffff0000)), |
| - ), |
| - ), |
| - ), |
| - ), |
| - ); |
| - |
| - await expectLater( |
| - find.byType(Container), |
| - matchesGoldenFile('text_golden.Centered.png'), |
| - ); |
| - |
| - await tester.pumpWidget( |
| - Center( |
| - child: RepaintBoundary( |
| - child: Container( |
| - width: 200.0, |
| - height: 100.0, |
| - decoration: const BoxDecoration( |
| - color: Color(0xff00ff00), |
| - ), |
| - child: const Text('Hello world how are you today', |
| - textDirection: TextDirection.ltr, |
| - textAlign: TextAlign.center, |
| - style: TextStyle(color: Color(0xffff0000)), |
| - ), |
| - ), |
| - ), |
| - ), |
| - ); |
| - |
| - await expectLater( |
| - find.byType(Container), |
| - matchesGoldenFile('text_golden.Centered.wrap.png'), |
| - ); |
| - }, skip: !Platform.isLinux); |
| - |
| - |
| - testWidgets('Text Foreground', (WidgetTester tester) async { |
| - const Color black = Color(0xFF000000); |
| - const Color red = Color(0xFFFF0000); |
| - const Color blue = Color(0xFF0000FF); |
| - final Shader linearGradient = const LinearGradient( |
| - colors: <Color>[red, blue], |
| - ).createShader(Rect.fromLTWH(0.0, 0.0, 50.0, 20.0)); |
| - |
| - await tester.pumpWidget( |
| - Align( |
| - alignment: Alignment.topLeft, |
| - child: RepaintBoundary( |
| - child: Text('Hello', |
| - textDirection: TextDirection.ltr, |
| - style: TextStyle( |
| - foreground: Paint() |
| - ..color = black |
| - ..shader = linearGradient |
| - ), |
| - ), |
| - ), |
| - ), |
| - ); |
| - |
| - await expectLater( |
| - find.byType(RepaintBoundary), |
| - matchesGoldenFile('text_golden.Foreground.gradient.png'), |
| - ); |
| - |
| - await tester.pumpWidget( |
| - Align( |
| - alignment: Alignment.topLeft, |
| - child: RepaintBoundary( |
| - child: Text('Hello', |
| - textDirection: TextDirection.ltr, |
| - style: TextStyle( |
| - foreground: Paint() |
| - ..color = black |
| - ..style = PaintingStyle.stroke |
| - ..strokeWidth = 2.0 |
| - ), |
| - ), |
| - ), |
| - ), |
| - ); |
| - |
| - await expectLater( |
| - find.byType(RepaintBoundary), |
| - matchesGoldenFile('text_golden.Foreground.stroke.png'), |
| - ); |
| - |
| - await tester.pumpWidget( |
| - Align( |
| - alignment: Alignment.topLeft, |
| - child: RepaintBoundary( |
| - child: Text('Hello', |
| - textDirection: TextDirection.ltr, |
| - style: TextStyle( |
| - foreground: Paint() |
| - ..color = black |
| - ..style = PaintingStyle.stroke |
| - ..strokeWidth = 2.0 |
| - ..shader = linearGradient |
| - ), |
| - ), |
| - ), |
| - ), |
| - ); |
| - |
| - await expectLater( |
| - find.byType(RepaintBoundary), |
| - matchesGoldenFile('text_golden.Foreground.stroke_and_gradient.png'), |
| - ); |
| - }, skip: !Platform.isLinux); |
| - |
| - // TODO(garyq): This test requires an update when the background |
| - // drawing from the beginning of the line bug is fixed. The current |
| - // tested version is not completely correct. |
| - testWidgets('Text Background', (WidgetTester tester) async { |
| - const Color red = Colors.red; |
| - const Color blue = Colors.blue; |
| - const Color translucentGreen = Color(0x5000F000); |
| - const Color translucentDarkRed = Color(0x500F0000); |
| - await tester.pumpWidget( |
| - Align( |
| - alignment: Alignment.topLeft, |
| - child: RepaintBoundary( |
| - child: Container( |
| - width: 200.0, |
| - height: 100.0, |
| - decoration: const BoxDecoration( |
| - color: Colors.green, |
| - ), |
| - child: RichText( |
| - textDirection: TextDirection.ltr, |
| - text: TextSpan( |
| - text: 'text1 ', |
| - style: TextStyle( |
| - color: translucentGreen, |
| - background: Paint() |
| - ..color = red.withOpacity(0.5), |
| - ), |
| - children: <TextSpan>[ |
| - TextSpan( |
| - text: 'text2', |
| - style: TextStyle( |
| - color: translucentDarkRed, |
| - background: Paint() |
| - ..color = blue.withOpacity(0.5), |
| - ), |
| - ), |
| - ], |
| - ), |
| - ), |
| - ), |
| - ), |
| - ), |
| - ); |
| - |
| - await expectLater( |
| - find.byType(RepaintBoundary), |
| - matchesGoldenFile('text_golden.Background.png'), |
| - ); |
| - }, skip: !Platform.isLinux); |
| - |
| - testWidgets('Text Fade', (WidgetTester tester) async { |
| - await tester.pumpWidget( |
| - MaterialApp( |
| - home: Scaffold( |
| - backgroundColor: Colors.transparent, |
| - body: RepaintBoundary( |
| - child: Center( |
| - child: Container( |
| - width: 200.0, |
| - height: 200.0, |
| - color: Colors.green, |
| - child: Center( |
| - child: Container( |
| - width: 100.0, |
| - color: Colors.blue, |
| - child: const Text( |
| - 'Pp PPp PPPp PPPPp PPPPpp PPPPppp PPPPppppp ', |
| - style: TextStyle(color: Colors.black), |
| - maxLines: 3, |
| - overflow: TextOverflow.fade, |
| - ), |
| - ), |
| - ), |
| - ), |
| - ), |
| - ), |
| - ), |
| - ) |
| - ); |
| - |
| - await expectLater( |
| - find.byType(RepaintBoundary).first, |
| - matchesGoldenFile('text_golden.Fade.1.png'), |
| - ); |
| - }, skip: !Platform.isLinux); |
| - |
| - testWidgets('Default Strut text', (WidgetTester tester) async { |
| - await tester.pumpWidget( |
| - Center( |
| - child: RepaintBoundary( |
| - child: Container( |
| - width: 200.0, |
| - height: 100.0, |
| - decoration: const BoxDecoration( |
| - color: Color(0xff00ff00), |
| - ), |
| - child: const Text('Hello\nLine 2\nLine 3', |
| - textDirection: TextDirection.ltr, |
| - style: TextStyle(), |
| - strutStyle: StrutStyle(), |
| - ), |
| - ), |
| - ), |
| - ), |
| - ); |
| - await expectLater( |
| - find.byType(Container), |
| - matchesGoldenFile('text_golden.StrutDefault.png'), |
| - ); |
| - }, skip: true); // Should only be on linux (skip: !Platform.isLinux). |
| - // Disabled for now until font inconsistency is resolved. |
| - |
| - testWidgets('Strut text 1', (WidgetTester tester) async { |
| - await tester.pumpWidget( |
| - Center( |
| - child: RepaintBoundary( |
| - child: Container( |
| - width: 200.0, |
| - height: 100.0, |
| - decoration: const BoxDecoration( |
| - color: Color(0xff00ff00), |
| - ), |
| - child: const Text('Hello\nLine2\nLine3', |
| - textDirection: TextDirection.ltr, |
| - style: TextStyle(), |
| - strutStyle: StrutStyle( |
| - height: 1.5, |
| - ), |
| - ), |
| - ), |
| - ), |
| - ), |
| - ); |
| - await expectLater( |
| - find.byType(Container), |
| - matchesGoldenFile('text_golden.Strut.1.1.png'), |
| - ); |
| - }, skip: true); // Should only be on linux (skip: !Platform.isLinux). |
| - // Disabled for now until font inconsistency is resolved. |
| - |
| - testWidgets('Strut text 2', (WidgetTester tester) async { |
| - await tester.pumpWidget( |
| - Center( |
| - child: RepaintBoundary( |
| - child: Container( |
| - width: 200.0, |
| - height: 100.0, |
| - decoration: const BoxDecoration( |
| - color: Color(0xff00ff00), |
| - ), |
| - child: const Text('Hello\nLine 2\nLine 3', |
| - textDirection: TextDirection.ltr, |
| - style: TextStyle(), |
| - strutStyle: StrutStyle( |
| - height: 1.5, |
| - fontSize: 14, |
| - ), |
| - ), |
| - ), |
| - ), |
| - ), |
| - ); |
| - await expectLater( |
| - find.byType(Container), |
| - matchesGoldenFile('text_golden.Strut.2.1.png'), |
| - ); |
| - }, skip: true); // Should only be on linux (skip: !Platform.isLinux). |
| - // Disabled for now until font inconsistency is resolved. |
| - |
| - testWidgets('Strut text rich', (WidgetTester tester) async { |
| - await tester.pumpWidget( |
| - Center( |
| - child: RepaintBoundary( |
| - child: Container( |
| - width: 200.0, |
| - height: 150.0, |
| - decoration: const BoxDecoration( |
| - color: Color(0xff00ff00), |
| - ), |
| - child: const Text.rich( |
| - TextSpan( |
| - text: 'Hello\n', |
| - style: TextStyle( |
| - color: Colors.red, |
| - fontSize: 30, |
| - ), |
| - children: <TextSpan>[ |
| - TextSpan( |
| - text: 'Second line!\n', |
| - style: TextStyle( |
| - fontSize: 5, |
| - color: Colors.blue, |
| - ), |
| - ), |
| - TextSpan( |
| - text: 'Third line!\n', |
| - style: TextStyle( |
| - fontSize: 25, |
| - color: Colors.white, |
| - ), |
| - ), |
| - ], |
| - ), |
| - textDirection: TextDirection.ltr, |
| - strutStyle: StrutStyle( |
| - fontSize: 14, |
| - height: 1.1, |
| - leading: 0.1, |
| - ), |
| - ), |
| - ), |
| - ), |
| - ), |
| - ); |
| - await expectLater( |
| - find.byType(Container), |
| - matchesGoldenFile('text_golden.Strut.3.1.png'), |
| - ); |
| - }, skip: true); // Should only be on linux (skip: !Platform.isLinux). |
| - // Disabled for now until font inconsistency is resolved. |
| - |
| - testWidgets('Strut text font fallback', (WidgetTester tester) async { |
| - // Font Fallback |
| - await tester.pumpWidget( |
| - Center( |
| - child: RepaintBoundary( |
| - child: Container( |
| - width: 200.0, |
| - height: 100.0, |
| - decoration: const BoxDecoration( |
| - color: Color(0xff00ff00), |
| - ), |
| - child: const Text('Hello\nLine 2\nLine 3', |
| - textDirection: TextDirection.ltr, |
| - style: TextStyle(), |
| - strutStyle: StrutStyle( |
| - fontFamily: 'FakeFont 1', |
| - fontFamilyFallback: <String>[ |
| - 'FakeFont 2', |
| - 'EvilFont 3', |
| - 'Nice Font 4', |
| - 'ahem', |
| - ], |
| - fontSize: 14, |
| - ), |
| - ), |
| - ), |
| - ), |
| - ), |
| - ); |
| - await expectLater( |
| - find.byType(Container), |
| - matchesGoldenFile('text_golden.Strut.4.1.png'), |
| - ); |
| - }, skip: true); // Should only be on linux (skip: !Platform.isLinux). |
| - // Disabled for now until font inconsistency is resolved. |
| - |
| - testWidgets('Strut text rich forceStrutHeight', (WidgetTester tester) async { |
| - await tester.pumpWidget( |
| - Center( |
| - child: RepaintBoundary( |
| - child: Container( |
| - width: 200.0, |
| - height: 100.0, |
| - decoration: const BoxDecoration( |
| - color: Color(0xff00ff00), |
| - ), |
| - child: const Text.rich( |
| - TextSpan( |
| - text: 'Hello\n', |
| - style: TextStyle( |
| - color: Colors.red, |
| - fontSize: 30, |
| - ), |
| - children: <TextSpan>[ |
| - TextSpan( |
| - text: 'Second line!\n', |
| - style: TextStyle( |
| - fontSize: 9, |
| - color: Colors.blue, |
| - ), |
| - ), |
| - TextSpan( |
| - text: 'Third line!\n', |
| - style: TextStyle( |
| - fontSize: 27, |
| - color: Colors.white, |
| - ), |
| - ), |
| - ], |
| - ), |
| - textDirection: TextDirection.ltr, |
| - strutStyle: StrutStyle( |
| - fontSize: 14, |
| - height: 1.1, |
| - forceStrutHeight: true, |
| - ), |
| - ), |
| - ), |
| - ), |
| - ), |
| - ); |
| - await expectLater( |
| - find.byType(Container), |
| - matchesGoldenFile('text_golden.StrutForce.1.1.png'), |
| - ); |
| - }, skip: true); // Should only be on linux (skip: !Platform.isLinux). |
| - // Disabled for now until font inconsistency is resolved. |
| - |
| - testWidgets('Decoration thickness', (WidgetTester tester) async { |
| - final TextDecoration allDecorations = TextDecoration.combine( |
| - <TextDecoration>[ |
| - TextDecoration.underline, |
| - TextDecoration.overline, |
| - TextDecoration.lineThrough, |
| - ] |
| - ); |
| - |
| - await tester.pumpWidget( |
| - Center( |
| - child: RepaintBoundary( |
| - child: Container( |
| - width: 300.0, |
| - height: 100.0, |
| - decoration: const BoxDecoration( |
| - color: Color(0xff00ff00), |
| - ), |
| - child: Text( |
| - 'Hello, wor!\nabcd.', |
| - style: TextStyle( |
| - fontSize: 25, |
| - decoration: allDecorations, |
| - decorationColor: Colors.blue, |
| - decorationStyle: TextDecorationStyle.dashed, |
| - ), |
| - textDirection: TextDirection.rtl, |
| - ), |
| - ), |
| - ), |
| - ), |
| - ); |
| - await expectLater( |
| - find.byType(Container), |
| - matchesGoldenFile('text_golden.Decoration.1.0.png'), |
| - ); |
| - }, skip: !Platform.isLinux); // Coretext uses different thicknesses for decoration |
| - |
| - testWidgets('Decoration thickness', (WidgetTester tester) async { |
| - final TextDecoration allDecorations = TextDecoration.combine( |
| - <TextDecoration>[ |
| - TextDecoration.underline, |
| - TextDecoration.overline, |
| - TextDecoration.lineThrough, |
| - ] |
| - ); |
| - |
| - await tester.pumpWidget( |
| - Center( |
| - child: RepaintBoundary( |
| - child: Container( |
| - width: 300.0, |
| - height: 100.0, |
| - decoration: const BoxDecoration( |
| - color: Color(0xff00ff00), |
| - ), |
| - child: Text( |
| - 'Hello, wor!\nabcd.', |
| - style: TextStyle( |
| - fontSize: 25, |
| - decoration: allDecorations, |
| - decorationColor: Colors.blue, |
| - decorationStyle: TextDecorationStyle.wavy, |
| - decorationThickness: 4, |
| - ), |
| - textDirection: TextDirection.rtl, |
| - ), |
| - ), |
| - ), |
| - ), |
| - ); |
| - await expectLater( |
| - find.byType(Container), |
| - matchesGoldenFile('text_golden.DecorationThickness.1.0.png'), |
| - ); |
| - }, skip: !Platform.isLinux); // Coretext uses different thicknesses for decoration |
| -} |