mirror of
https://github.com/alibaba/flutter-go.git
synced 2025-07-15 03:04:25 +08:00
Add:创建 flutter go web 版
This commit is contained in:
321
packages/flutter_web/test/widgets/banner_test.dart
Normal file
321
packages/flutter_web/test/widgets/banner_test.dart
Normal file
@ -0,0 +1,321 @@
|
||||
// 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:math' as math;
|
||||
|
||||
import 'package:flutter_web/material.dart';
|
||||
import 'package:flutter_web_test/flutter_web_test.dart';
|
||||
|
||||
import '../rendering/mock_canvas.dart';
|
||||
|
||||
class TestCanvas implements Canvas {
|
||||
final List<Invocation> invocations = <Invocation>[];
|
||||
|
||||
@override
|
||||
void noSuchMethod(Invocation invocation) {
|
||||
invocations.add(invocation);
|
||||
}
|
||||
}
|
||||
|
||||
void main() {
|
||||
// the textDirection values below are intentionally sometimes different and
|
||||
// sometimes the same as the layoutDirection, to make sure that they don't
|
||||
// affect the layout.
|
||||
|
||||
test('A Banner with a location of topStart paints in the top left (LTR)', () {
|
||||
final BannerPainter bannerPainter = BannerPainter(
|
||||
message: 'foo',
|
||||
textDirection: TextDirection.rtl,
|
||||
location: BannerLocation.topStart,
|
||||
layoutDirection: TextDirection.ltr,
|
||||
);
|
||||
|
||||
final TestCanvas canvas = TestCanvas();
|
||||
|
||||
bannerPainter.paint(canvas, const Size(1000.0, 1000.0));
|
||||
|
||||
final Invocation translateCommand =
|
||||
canvas.invocations.firstWhere((Invocation invocation) {
|
||||
return invocation.memberName == #translate;
|
||||
});
|
||||
|
||||
expect(translateCommand, isNotNull);
|
||||
expect(translateCommand.positionalArguments[0], lessThan(100.0));
|
||||
expect(translateCommand.positionalArguments[1], lessThan(100.0));
|
||||
|
||||
final Invocation rotateCommand =
|
||||
canvas.invocations.firstWhere((Invocation invocation) {
|
||||
return invocation.memberName == #rotate;
|
||||
});
|
||||
|
||||
expect(rotateCommand, isNotNull);
|
||||
expect(rotateCommand.positionalArguments[0], equals(-math.pi / 4.0));
|
||||
});
|
||||
|
||||
test('A Banner with a location of topStart paints in the top right (RTL)',
|
||||
() {
|
||||
final BannerPainter bannerPainter = BannerPainter(
|
||||
message: 'foo',
|
||||
textDirection: TextDirection.ltr,
|
||||
location: BannerLocation.topStart,
|
||||
layoutDirection: TextDirection.rtl,
|
||||
);
|
||||
|
||||
final TestCanvas canvas = TestCanvas();
|
||||
|
||||
bannerPainter.paint(canvas, const Size(1000.0, 1000.0));
|
||||
|
||||
final Invocation translateCommand =
|
||||
canvas.invocations.firstWhere((Invocation invocation) {
|
||||
return invocation.memberName == #translate;
|
||||
});
|
||||
|
||||
expect(translateCommand, isNotNull);
|
||||
expect(translateCommand.positionalArguments[0], greaterThan(900.0));
|
||||
expect(translateCommand.positionalArguments[1], lessThan(100.0));
|
||||
|
||||
final Invocation rotateCommand =
|
||||
canvas.invocations.firstWhere((Invocation invocation) {
|
||||
return invocation.memberName == #rotate;
|
||||
});
|
||||
|
||||
expect(rotateCommand, isNotNull);
|
||||
expect(rotateCommand.positionalArguments[0], equals(math.pi / 4.0));
|
||||
});
|
||||
|
||||
test('A Banner with a location of topEnd paints in the top right (LTR)', () {
|
||||
final BannerPainter bannerPainter = BannerPainter(
|
||||
message: 'foo',
|
||||
textDirection: TextDirection.ltr,
|
||||
location: BannerLocation.topEnd,
|
||||
layoutDirection: TextDirection.ltr,
|
||||
);
|
||||
|
||||
final TestCanvas canvas = TestCanvas();
|
||||
|
||||
bannerPainter.paint(canvas, const Size(1000.0, 1000.0));
|
||||
|
||||
final Invocation translateCommand =
|
||||
canvas.invocations.firstWhere((Invocation invocation) {
|
||||
return invocation.memberName == #translate;
|
||||
});
|
||||
|
||||
expect(translateCommand, isNotNull);
|
||||
expect(translateCommand.positionalArguments[0], greaterThan(900.0));
|
||||
expect(translateCommand.positionalArguments[1], lessThan(100.0));
|
||||
|
||||
final Invocation rotateCommand =
|
||||
canvas.invocations.firstWhere((Invocation invocation) {
|
||||
return invocation.memberName == #rotate;
|
||||
});
|
||||
|
||||
expect(rotateCommand, isNotNull);
|
||||
expect(rotateCommand.positionalArguments[0], equals(math.pi / 4.0));
|
||||
});
|
||||
|
||||
test('A Banner with a location of topEnd paints in the top left (RTL)', () {
|
||||
final BannerPainter bannerPainter = BannerPainter(
|
||||
message: 'foo',
|
||||
textDirection: TextDirection.rtl,
|
||||
location: BannerLocation.topEnd,
|
||||
layoutDirection: TextDirection.rtl,
|
||||
);
|
||||
|
||||
final TestCanvas canvas = TestCanvas();
|
||||
|
||||
bannerPainter.paint(canvas, const Size(1000.0, 1000.0));
|
||||
|
||||
final Invocation translateCommand =
|
||||
canvas.invocations.firstWhere((Invocation invocation) {
|
||||
return invocation.memberName == #translate;
|
||||
});
|
||||
|
||||
expect(translateCommand, isNotNull);
|
||||
expect(translateCommand.positionalArguments[0], lessThan(100.0));
|
||||
expect(translateCommand.positionalArguments[1], lessThan(100.0));
|
||||
|
||||
final Invocation rotateCommand =
|
||||
canvas.invocations.firstWhere((Invocation invocation) {
|
||||
return invocation.memberName == #rotate;
|
||||
});
|
||||
|
||||
expect(rotateCommand, isNotNull);
|
||||
expect(rotateCommand.positionalArguments[0], equals(-math.pi / 4.0));
|
||||
});
|
||||
|
||||
test(
|
||||
'A Banner with a location of bottomStart paints in the bottom left (LTR)',
|
||||
() {
|
||||
final BannerPainter bannerPainter = BannerPainter(
|
||||
message: 'foo',
|
||||
textDirection: TextDirection.ltr,
|
||||
location: BannerLocation.bottomStart,
|
||||
layoutDirection: TextDirection.ltr,
|
||||
);
|
||||
|
||||
final TestCanvas canvas = TestCanvas();
|
||||
|
||||
bannerPainter.paint(canvas, const Size(1000.0, 1000.0));
|
||||
|
||||
final Invocation translateCommand =
|
||||
canvas.invocations.firstWhere((Invocation invocation) {
|
||||
return invocation.memberName == #translate;
|
||||
});
|
||||
|
||||
expect(translateCommand, isNotNull);
|
||||
expect(translateCommand.positionalArguments[0], lessThan(100.0));
|
||||
expect(translateCommand.positionalArguments[1], greaterThan(900.0));
|
||||
|
||||
final Invocation rotateCommand =
|
||||
canvas.invocations.firstWhere((Invocation invocation) {
|
||||
return invocation.memberName == #rotate;
|
||||
});
|
||||
|
||||
expect(rotateCommand, isNotNull);
|
||||
expect(rotateCommand.positionalArguments[0], equals(math.pi / 4.0));
|
||||
});
|
||||
|
||||
test(
|
||||
'A Banner with a location of bottomStart paints in the bottom right (RTL)',
|
||||
() {
|
||||
final BannerPainter bannerPainter = BannerPainter(
|
||||
message: 'foo',
|
||||
textDirection: TextDirection.rtl,
|
||||
location: BannerLocation.bottomStart,
|
||||
layoutDirection: TextDirection.rtl,
|
||||
);
|
||||
|
||||
final TestCanvas canvas = TestCanvas();
|
||||
|
||||
bannerPainter.paint(canvas, const Size(1000.0, 1000.0));
|
||||
|
||||
final Invocation translateCommand =
|
||||
canvas.invocations.firstWhere((Invocation invocation) {
|
||||
return invocation.memberName == #translate;
|
||||
});
|
||||
|
||||
expect(translateCommand, isNotNull);
|
||||
expect(translateCommand.positionalArguments[0], greaterThan(900.0));
|
||||
expect(translateCommand.positionalArguments[1], greaterThan(900.0));
|
||||
|
||||
final Invocation rotateCommand =
|
||||
canvas.invocations.firstWhere((Invocation invocation) {
|
||||
return invocation.memberName == #rotate;
|
||||
});
|
||||
|
||||
expect(rotateCommand, isNotNull);
|
||||
expect(rotateCommand.positionalArguments[0], equals(-math.pi / 4.0));
|
||||
});
|
||||
|
||||
test('A Banner with a location of bottomEnd paints in the bottom right (LTR)',
|
||||
() {
|
||||
final BannerPainter bannerPainter = BannerPainter(
|
||||
message: 'foo',
|
||||
textDirection: TextDirection.rtl,
|
||||
location: BannerLocation.bottomEnd,
|
||||
layoutDirection: TextDirection.ltr,
|
||||
);
|
||||
|
||||
final TestCanvas canvas = TestCanvas();
|
||||
|
||||
bannerPainter.paint(canvas, const Size(1000.0, 1000.0));
|
||||
|
||||
final Invocation translateCommand =
|
||||
canvas.invocations.firstWhere((Invocation invocation) {
|
||||
return invocation.memberName == #translate;
|
||||
});
|
||||
|
||||
expect(translateCommand, isNotNull);
|
||||
expect(translateCommand.positionalArguments[0], greaterThan(900.0));
|
||||
expect(translateCommand.positionalArguments[1], greaterThan(900.0));
|
||||
|
||||
final Invocation rotateCommand =
|
||||
canvas.invocations.firstWhere((Invocation invocation) {
|
||||
return invocation.memberName == #rotate;
|
||||
});
|
||||
|
||||
expect(rotateCommand, isNotNull);
|
||||
expect(rotateCommand.positionalArguments[0], equals(-math.pi / 4.0));
|
||||
});
|
||||
|
||||
test('A Banner with a location of bottomEnd paints in the bottom left (RTL)',
|
||||
() {
|
||||
final BannerPainter bannerPainter = BannerPainter(
|
||||
message: 'foo',
|
||||
textDirection: TextDirection.ltr,
|
||||
location: BannerLocation.bottomEnd,
|
||||
layoutDirection: TextDirection.rtl,
|
||||
);
|
||||
|
||||
final TestCanvas canvas = TestCanvas();
|
||||
|
||||
bannerPainter.paint(canvas, const Size(1000.0, 1000.0));
|
||||
|
||||
final Invocation translateCommand =
|
||||
canvas.invocations.firstWhere((Invocation invocation) {
|
||||
return invocation.memberName == #translate;
|
||||
});
|
||||
|
||||
expect(translateCommand, isNotNull);
|
||||
expect(translateCommand.positionalArguments[0], lessThan(100.0));
|
||||
expect(translateCommand.positionalArguments[1], greaterThan(900.0));
|
||||
|
||||
final Invocation rotateCommand =
|
||||
canvas.invocations.firstWhere((Invocation invocation) {
|
||||
return invocation.memberName == #rotate;
|
||||
});
|
||||
|
||||
expect(rotateCommand, isNotNull);
|
||||
expect(rotateCommand.positionalArguments[0], equals(math.pi / 4.0));
|
||||
});
|
||||
|
||||
testWidgets('Banner widget', (WidgetTester tester) async {
|
||||
debugDisableShadows = false;
|
||||
await tester.pumpWidget(
|
||||
const Directionality(
|
||||
textDirection: TextDirection.ltr,
|
||||
child: Banner(message: 'Hello', location: BannerLocation.topEnd),
|
||||
),
|
||||
);
|
||||
expect(
|
||||
find.byType(CustomPaint),
|
||||
paints
|
||||
..save()
|
||||
..translate(x: 800.0, y: 0.0)
|
||||
..rotate(angle: math.pi / 4.0)
|
||||
..rect(
|
||||
rect: Rect.fromLTRB(-40.0, 28.0, 40.0, 40.0),
|
||||
color: const Color(0x7f000000),
|
||||
hasMaskFilter: true)
|
||||
..rect(
|
||||
rect: Rect.fromLTRB(-40.0, 28.0, 40.0, 40.0),
|
||||
color: const Color(0xa0b71c1c),
|
||||
hasMaskFilter: false)
|
||||
..paragraph(offset: const Offset(-40.0, 29.0))
|
||||
..restore());
|
||||
debugDisableShadows = true;
|
||||
});
|
||||
|
||||
testWidgets('Banner widget in MaterialApp', (WidgetTester tester) async {
|
||||
debugDisableShadows = false;
|
||||
await tester.pumpWidget(const MaterialApp(home: Placeholder()));
|
||||
expect(
|
||||
find.byType(CheckedModeBanner),
|
||||
paints
|
||||
..save()
|
||||
..translate(x: 800.0, y: 0.0)
|
||||
..rotate(angle: math.pi / 4.0)
|
||||
..rect(
|
||||
rect: Rect.fromLTRB(-40.0, 28.0, 40.0, 40.0),
|
||||
color: const Color(0x7f000000),
|
||||
hasMaskFilter: true)
|
||||
..rect(
|
||||
rect: Rect.fromLTRB(-40.0, 28.0, 40.0, 40.0),
|
||||
color: const Color(0xa0b71c1c),
|
||||
hasMaskFilter: false)
|
||||
..paragraph(offset: const Offset(-40.0, 29.0))
|
||||
..restore());
|
||||
debugDisableShadows = true;
|
||||
});
|
||||
}
|
Reference in New Issue
Block a user