mirror of
https://github.com/flutter/flutter.git
synced 2025-06-03 00:51:18 +00:00
147 lines
4.1 KiB
Dart
147 lines
4.1 KiB
Dart
// Copyright 2014 The Flutter 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:flutter/cupertino.dart';
|
|
import 'package:flutter/foundation.dart';
|
|
import 'package:flutter_test/flutter_test.dart';
|
|
|
|
void main() {
|
|
TestWidgetsFlutterBinding.ensureInitialized();
|
|
|
|
testWidgets('has correct backdrop filters', (WidgetTester tester) async {
|
|
await tester.pumpWidget(
|
|
CupertinoApp(
|
|
home: Center(
|
|
child: CupertinoDesktopTextSelectionToolbar(
|
|
anchor: Offset.zero,
|
|
children: <Widget>[
|
|
CupertinoDesktopTextSelectionToolbarButton(
|
|
child: const Text('Tap me'),
|
|
onPressed: () {},
|
|
),
|
|
],
|
|
),
|
|
),
|
|
),
|
|
);
|
|
|
|
final BackdropFilter toolbarFilter = tester.firstWidget<BackdropFilter>(
|
|
find.descendant(
|
|
of: find.byType(CupertinoDesktopTextSelectionToolbar),
|
|
matching: find.byType(BackdropFilter),
|
|
),
|
|
);
|
|
|
|
expect(
|
|
toolbarFilter.filter.runtimeType,
|
|
// _ComposeImageFilter is internal so we can't test if its filters are
|
|
// for blur and saturation, but checking if it's a _ComposeImageFilter
|
|
// should be enough. Outer and inner parameters don't matter, we just need
|
|
// a new _ComposeImageFilter to get its runtimeType.
|
|
//
|
|
// As web doesn't support ImageFilter.compose, we use just blur when
|
|
// kIsWeb.
|
|
kIsWeb
|
|
? ImageFilter.blur().runtimeType
|
|
: ImageFilter.compose(
|
|
outer: ImageFilter.blur(),
|
|
inner: ImageFilter.blur(),
|
|
).runtimeType,
|
|
);
|
|
});
|
|
|
|
testWidgets('has shadow', (WidgetTester tester) async {
|
|
await tester.pumpWidget(
|
|
CupertinoApp(
|
|
home: Center(
|
|
child: CupertinoDesktopTextSelectionToolbar(
|
|
anchor: Offset.zero,
|
|
children: <Widget>[
|
|
CupertinoDesktopTextSelectionToolbarButton(
|
|
child: const Text('Tap me'),
|
|
onPressed: () {},
|
|
),
|
|
],
|
|
),
|
|
),
|
|
),
|
|
);
|
|
|
|
final DecoratedBox decoratedBox = tester.firstWidget<DecoratedBox>(
|
|
find.descendant(
|
|
of: find.byType(CupertinoDesktopTextSelectionToolbar),
|
|
matching: find.byType(DecoratedBox),
|
|
),
|
|
);
|
|
|
|
expect(
|
|
(decoratedBox.decoration as BoxDecoration).boxShadow,
|
|
isNotNull,
|
|
);
|
|
});
|
|
|
|
testWidgets('is translucent', (WidgetTester tester) async {
|
|
await tester.pumpWidget(
|
|
CupertinoApp(
|
|
home: Center(
|
|
child: CupertinoDesktopTextSelectionToolbar(
|
|
anchor: Offset.zero,
|
|
children: <Widget>[
|
|
CupertinoDesktopTextSelectionToolbarButton(
|
|
child: const Text('Tap me'),
|
|
onPressed: () {},
|
|
),
|
|
],
|
|
),
|
|
),
|
|
),
|
|
);
|
|
|
|
final DecoratedBox decoratedBox = tester
|
|
.widgetList<DecoratedBox>(
|
|
find.descendant(
|
|
of: find.byType(CupertinoDesktopTextSelectionToolbar),
|
|
matching: find.byType(DecoratedBox),
|
|
),
|
|
)
|
|
// The second DecoratedBox should be the one with color.
|
|
.elementAt(1);
|
|
|
|
expect(
|
|
(decoratedBox.decoration as BoxDecoration).color!.opacity,
|
|
lessThan(1.0),
|
|
);
|
|
});
|
|
|
|
testWidgets('positions itself at the anchor', (WidgetTester tester) async {
|
|
// An arbitrary point on the screen to position at.
|
|
const Offset anchor = Offset(30.0, 40.0);
|
|
|
|
await tester.pumpWidget(
|
|
CupertinoApp(
|
|
home: Center(
|
|
child: CupertinoDesktopTextSelectionToolbar(
|
|
anchor: anchor,
|
|
children: <Widget>[
|
|
CupertinoDesktopTextSelectionToolbarButton(
|
|
child: const Text('Tap me'),
|
|
onPressed: () {},
|
|
),
|
|
],
|
|
),
|
|
),
|
|
),
|
|
);
|
|
|
|
expect(
|
|
tester
|
|
.getTopLeft(find.byType(CupertinoDesktopTextSelectionToolbarButton)),
|
|
// Greater than due to padding internal to the toolbar.
|
|
greaterThan(anchor),
|
|
);
|
|
});
|
|
}
|