| // 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/rendering.dart'; |
| import 'package:flutter/material.dart'; |
| |
| import '../rendering/mock_canvas.dart'; |
| |
| void main() { |
| |
| // The "can be constructed" tests that follow are primarily to ensure that any |
| // animations started by the progress indicators are stopped at dispose() time. |
| |
| testWidgets('LinearProgressIndicator(value: 0.0) can be constructed', (WidgetTester tester) async { |
| await tester.pumpWidget( |
| const Directionality( |
| textDirection: TextDirection.ltr, |
| child: const Center( |
| child: const SizedBox( |
| width: 200.0, |
| child: const LinearProgressIndicator(value: 0.0), |
| ), |
| ), |
| ), |
| ); |
| }); |
| |
| testWidgets('LinearProgressIndicator(value: null) can be constructed', (WidgetTester tester) async { |
| await tester.pumpWidget( |
| const Directionality( |
| textDirection: TextDirection.rtl, |
| child: const Center( |
| child: const SizedBox( |
| width: 200.0, |
| child: const LinearProgressIndicator(value: null), |
| ), |
| ), |
| ), |
| ); |
| }); |
| |
| testWidgets('LinearProgressIndicator paint (LTR)', (WidgetTester tester) async { |
| await tester.pumpWidget( |
| const Directionality( |
| textDirection: TextDirection.ltr, |
| child: const Center( |
| child: const SizedBox( |
| width: 200.0, |
| child: const LinearProgressIndicator(value: 0.25), |
| ), |
| ), |
| ), |
| ); |
| |
| expect( |
| find.byType(LinearProgressIndicator), |
| paints |
| ..rect(rect: new Rect.fromLTRB(0.0, 0.0, 200.0, 6.0)) |
| ..rect(rect: new Rect.fromLTRB(0.0, 0.0, 50.0, 6.0)) |
| ); |
| |
| expect(tester.binding.transientCallbackCount, 0); |
| }); |
| |
| testWidgets('LinearProgressIndicator paint (RTL)', (WidgetTester tester) async { |
| await tester.pumpWidget( |
| const Directionality( |
| textDirection: TextDirection.rtl, |
| child: const Center( |
| child: const SizedBox( |
| width: 200.0, |
| child: const LinearProgressIndicator(value: 0.25), |
| ), |
| ), |
| ), |
| ); |
| |
| expect( |
| find.byType(LinearProgressIndicator), |
| paints |
| ..rect(rect: new Rect.fromLTRB(0.0, 0.0, 200.0, 6.0)) |
| ..rect(rect: new Rect.fromLTRB(150.0, 0.0, 200.0, 6.0)) |
| ); |
| |
| expect(tester.binding.transientCallbackCount, 0); |
| }); |
| |
| testWidgets('LinearProgressIndicator indeterminate (LTR)', (WidgetTester tester) async { |
| await tester.pumpWidget( |
| const Directionality( |
| textDirection: TextDirection.ltr, |
| child: const Center( |
| child: const SizedBox( |
| width: 200.0, |
| child: const LinearProgressIndicator(), |
| ), |
| ), |
| ), |
| ); |
| |
| await tester.pump(const Duration(milliseconds: 750)); |
| |
| final double animationValue = Curves.fastOutSlowIn.transform(0.5); |
| final double startX = 200.0 * (1.5 * animationValue - 0.5); |
| |
| expect( |
| find.byType(LinearProgressIndicator), |
| paints |
| ..rect(rect: new Rect.fromLTRB(0.0, 0.0, 200.0, 6.0)) |
| ..rect(rect: new Rect.fromLTRB(startX, 0.0, 200.0, 6.0)) |
| ); |
| |
| expect(tester.binding.transientCallbackCount, 1); |
| }); |
| |
| testWidgets('LinearProgressIndicator paint (RTL)', (WidgetTester tester) async { |
| await tester.pumpWidget( |
| const Directionality( |
| textDirection: TextDirection.rtl, |
| child: const Center( |
| child: const SizedBox( |
| width: 200.0, |
| child: const LinearProgressIndicator(), |
| ), |
| ), |
| ), |
| ); |
| |
| await tester.pump(const Duration(milliseconds: 750)); |
| |
| final double animationValue = Curves.fastOutSlowIn.transform(0.5); |
| final double startX = 200.0 * (1.5 * animationValue - 0.5); |
| |
| expect( |
| find.byType(LinearProgressIndicator), |
| paints |
| ..rect(rect: new Rect.fromLTRB(0.0, 0.0, 200.0, 6.0)) |
| ..rect(rect: new Rect.fromLTRB(0.0, 0.0, 200.0 - startX, 6.0)) |
| ); |
| |
| expect(tester.binding.transientCallbackCount, 1); |
| }); |
| |
| testWidgets('LinearProgressIndicator with colors', (WidgetTester tester) async { |
| await tester.pumpWidget( |
| const Directionality( |
| textDirection: TextDirection.ltr, |
| child: const Center( |
| child: const SizedBox( |
| width: 200.0, |
| child: const LinearProgressIndicator( |
| value: 0.25, |
| valueColor: const AlwaysStoppedAnimation<Color>(Colors.white), |
| backgroundColor: Colors.black, |
| ), |
| ), |
| ), |
| ), |
| ); |
| |
| expect( |
| find.byType(LinearProgressIndicator), |
| paints |
| ..rect(rect: new Rect.fromLTRB(0.0, 0.0, 200.0, 6.0)) |
| ..rect(rect: new Rect.fromLTRB(0.0, 0.0, 50.0, 6.0), color: Colors.white) |
| ); |
| }); |
| |
| testWidgets('CircularProgressIndicator(value: 0.0) can be constructed', (WidgetTester tester) async { |
| await tester.pumpWidget( |
| const Center( |
| child: const CircularProgressIndicator(value: 0.0) |
| ) |
| ); |
| }); |
| |
| testWidgets('CircularProgressIndicator(value: null) can be constructed', (WidgetTester tester) async { |
| await tester.pumpWidget( |
| const Center( |
| child: const CircularProgressIndicator(value: null) |
| ) |
| ); |
| }); |
| |
| testWidgets('LinearProgressIndicator causes a repaint when it changes', (WidgetTester tester) async { |
| await tester.pumpWidget(new Directionality( |
| textDirection: TextDirection.ltr, |
| child: new ListView(children: <Widget>[const LinearProgressIndicator(value: 0.0)]), |
| )); |
| final List<Layer> layers1 = tester.layers; |
| await tester.pumpWidget(new Directionality( |
| textDirection: TextDirection.ltr, |
| child: new ListView(children: <Widget>[const LinearProgressIndicator(value: 0.5)])), |
| ); |
| final List<Layer> layers2 = tester.layers; |
| expect(layers1, isNot(equals(layers2))); |
| }); |
| |
| testWidgets('CircularProgressIndicator stoke width', (WidgetTester tester) async { |
| await tester.pumpWidget(const CircularProgressIndicator()); |
| |
| expect(find.byType(CircularProgressIndicator), paints..arc(strokeWidth: 4.0)); |
| |
| await tester.pumpWidget(const CircularProgressIndicator(strokeWidth: 16.0)); |
| |
| expect(find.byType(CircularProgressIndicator), paints..arc(strokeWidth: 16.0)); |
| }); |
| |
| } |