mirror of
https://github.com/alibaba/flutter-go.git
synced 2025-07-08 10:15:53 +08:00
262 lines
9.0 KiB
Dart
262 lines
9.0 KiB
Dart
// 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.
|
|
// Synced. * Contains Web DELTA *
|
|
|
|
import 'package:flutter_web/material.dart';
|
|
import 'package:flutter_web/rendering.dart';
|
|
import 'package:flutter_web_test/flutter_web_test.dart';
|
|
|
|
MaterialApp _appWithAlertDialog(WidgetTester tester, AlertDialog dialog,
|
|
{ThemeData theme}) {
|
|
return MaterialApp(
|
|
theme: theme,
|
|
home: Material(
|
|
child: Builder(builder: (BuildContext context) {
|
|
return Center(
|
|
child: RaisedButton(
|
|
child: const Text('X'),
|
|
onPressed: () {
|
|
showDialog<void>(
|
|
context: context,
|
|
builder: (BuildContext context) {
|
|
return RepaintBoundary(key: _painterKey, child: dialog);
|
|
},
|
|
);
|
|
},
|
|
),
|
|
);
|
|
}),
|
|
),
|
|
);
|
|
}
|
|
|
|
final Key _painterKey = UniqueKey();
|
|
|
|
Material _getMaterialFromDialog(WidgetTester tester) {
|
|
return tester.widget<Material>(find.descendant(
|
|
of: find.byType(AlertDialog), matching: find.byType(Material)));
|
|
}
|
|
|
|
RenderParagraph _getTextRenderObjectFromDialog(
|
|
WidgetTester tester, String text) {
|
|
return tester
|
|
.element<StatelessElement>(find.descendant(
|
|
of: find.byType(AlertDialog), matching: find.text(text)))
|
|
.renderObject;
|
|
}
|
|
|
|
void main() {
|
|
testWidgets('Dialog Theme implements debugFillProperties',
|
|
(WidgetTester tester) async {
|
|
final DiagnosticPropertiesBuilder builder = DiagnosticPropertiesBuilder();
|
|
const DialogTheme(
|
|
backgroundColor: Color(0xff123456),
|
|
elevation: 8.0,
|
|
shape: null,
|
|
titleTextStyle: TextStyle(color: Color(0xffffffff)),
|
|
contentTextStyle: TextStyle(color: Color(0xff000000)),
|
|
).debugFillProperties(builder);
|
|
final List<String> description = builder.properties
|
|
.where((DiagnosticsNode n) => !n.isFiltered(DiagnosticLevel.info))
|
|
.map((DiagnosticsNode n) => n.toString())
|
|
.toList();
|
|
expect(description, <String>[
|
|
'backgroundColor: Color(0xff123456)',
|
|
'elevation: 8.0',
|
|
'titleTextStyle: TextStyle(inherit: true, color: Color(0xffffffff))',
|
|
'contentTextStyle: TextStyle(inherit: true, color: Color(0xff000000))',
|
|
]);
|
|
});
|
|
|
|
testWidgets('Dialog background color', (WidgetTester tester) async {
|
|
const Color customColor = Colors.pink;
|
|
const AlertDialog dialog = AlertDialog(
|
|
title: Text('Title'),
|
|
actions: <Widget>[],
|
|
);
|
|
final ThemeData theme =
|
|
ThemeData(dialogTheme: const DialogTheme(backgroundColor: customColor));
|
|
|
|
await tester.pumpWidget(_appWithAlertDialog(tester, dialog, theme: theme));
|
|
await tester.tap(find.text('X'));
|
|
await tester.pumpAndSettle();
|
|
|
|
final Material materialWidget = _getMaterialFromDialog(tester);
|
|
expect(materialWidget.color, customColor);
|
|
});
|
|
|
|
testWidgets('Custom dialog elevation', (WidgetTester tester) async {
|
|
const double customElevation = 12.0;
|
|
const AlertDialog dialog = AlertDialog(
|
|
title: Text('Title'),
|
|
actions: <Widget>[],
|
|
);
|
|
final ThemeData theme =
|
|
ThemeData(dialogTheme: const DialogTheme(elevation: customElevation));
|
|
|
|
await tester.pumpWidget(_appWithAlertDialog(tester, dialog, theme: theme));
|
|
await tester.tap(find.text('X'));
|
|
await tester.pumpAndSettle();
|
|
|
|
final Material materialWidget = _getMaterialFromDialog(tester);
|
|
expect(materialWidget.elevation, customElevation);
|
|
});
|
|
|
|
testWidgets('Custom dialog shape', (WidgetTester tester) async {
|
|
const RoundedRectangleBorder customBorder = RoundedRectangleBorder(
|
|
borderRadius: BorderRadius.all(Radius.circular(16.0)));
|
|
const AlertDialog dialog = AlertDialog(
|
|
title: Text('Title'),
|
|
actions: <Widget>[],
|
|
);
|
|
final ThemeData theme =
|
|
ThemeData(dialogTheme: const DialogTheme(shape: customBorder));
|
|
|
|
await tester.pumpWidget(_appWithAlertDialog(tester, dialog, theme: theme));
|
|
await tester.tap(find.text('X'));
|
|
await tester.pumpAndSettle();
|
|
|
|
final Material materialWidget = _getMaterialFromDialog(tester);
|
|
expect(materialWidget.shape, customBorder);
|
|
});
|
|
|
|
testWidgets('Custom dialog shape matches golden',
|
|
(WidgetTester tester) async {
|
|
const RoundedRectangleBorder customBorder = RoundedRectangleBorder(
|
|
borderRadius: BorderRadius.all(Radius.circular(16.0)));
|
|
const AlertDialog dialog = AlertDialog(
|
|
title: Text('Title'),
|
|
actions: <Widget>[],
|
|
);
|
|
final ThemeData theme =
|
|
ThemeData(dialogTheme: const DialogTheme(shape: customBorder));
|
|
|
|
await tester.pumpWidget(_appWithAlertDialog(tester, dialog, theme: theme));
|
|
await tester.tap(find.text('X'));
|
|
await tester.pumpAndSettle();
|
|
|
|
await expectLater(
|
|
find.byKey(_painterKey),
|
|
matchesGoldenFile('dialog_theme.dialog_with_custom_border.png'),
|
|
skip: true,
|
|
);
|
|
}, skip: true); // TODO(flutter_web): reenable when goldens are supported.
|
|
|
|
testWidgets('Custom Title Text Style - Constructor Param',
|
|
(WidgetTester tester) async {
|
|
const String titleText = 'Title';
|
|
const TextStyle titleTextStyle = TextStyle(color: Colors.pink);
|
|
const AlertDialog dialog = AlertDialog(
|
|
title: Text(titleText),
|
|
titleTextStyle: titleTextStyle,
|
|
actions: <Widget>[],
|
|
);
|
|
|
|
await tester.pumpWidget(_appWithAlertDialog(tester, dialog));
|
|
await tester.tap(find.text('X'));
|
|
await tester.pumpAndSettle();
|
|
|
|
final RenderParagraph title =
|
|
_getTextRenderObjectFromDialog(tester, titleText);
|
|
expect(title.text.style, titleTextStyle);
|
|
});
|
|
|
|
testWidgets('Custom Title Text Style - Dialog Theme',
|
|
(WidgetTester tester) async {
|
|
const String titleText = 'Title';
|
|
const TextStyle titleTextStyle = TextStyle(color: Colors.pink);
|
|
const AlertDialog dialog = AlertDialog(
|
|
title: Text(titleText),
|
|
actions: <Widget>[],
|
|
);
|
|
final ThemeData theme = ThemeData(
|
|
dialogTheme: const DialogTheme(titleTextStyle: titleTextStyle));
|
|
|
|
await tester.pumpWidget(_appWithAlertDialog(tester, dialog, theme: theme));
|
|
await tester.tap(find.text('X'));
|
|
await tester.pumpAndSettle();
|
|
|
|
final RenderParagraph title =
|
|
_getTextRenderObjectFromDialog(tester, titleText);
|
|
expect(title.text.style, titleTextStyle);
|
|
});
|
|
|
|
testWidgets('Custom Title Text Style - Theme', (WidgetTester tester) async {
|
|
const String titleText = 'Title';
|
|
const TextStyle titleTextStyle = TextStyle(color: Colors.pink);
|
|
const AlertDialog dialog = AlertDialog(
|
|
title: Text(titleText),
|
|
actions: <Widget>[],
|
|
);
|
|
final ThemeData theme =
|
|
ThemeData(textTheme: const TextTheme(title: titleTextStyle));
|
|
|
|
await tester.pumpWidget(_appWithAlertDialog(tester, dialog, theme: theme));
|
|
await tester.tap(find.text('X'));
|
|
await tester.pumpAndSettle();
|
|
|
|
final RenderParagraph title =
|
|
_getTextRenderObjectFromDialog(tester, titleText);
|
|
expect(title.text.style.color, titleTextStyle.color);
|
|
});
|
|
|
|
testWidgets('Custom Content Text Style - Constructor Param',
|
|
(WidgetTester tester) async {
|
|
const String contentText = 'Content';
|
|
const TextStyle contentTextStyle = TextStyle(color: Colors.pink);
|
|
const AlertDialog dialog = AlertDialog(
|
|
content: Text(contentText),
|
|
contentTextStyle: contentTextStyle,
|
|
actions: <Widget>[],
|
|
);
|
|
|
|
await tester.pumpWidget(_appWithAlertDialog(tester, dialog));
|
|
await tester.tap(find.text('X'));
|
|
await tester.pumpAndSettle();
|
|
|
|
final RenderParagraph content =
|
|
_getTextRenderObjectFromDialog(tester, contentText);
|
|
expect(content.text.style, contentTextStyle);
|
|
});
|
|
|
|
testWidgets('Custom Content Text Style - Dialog Theme',
|
|
(WidgetTester tester) async {
|
|
const String contentText = 'Content';
|
|
const TextStyle contentTextStyle = TextStyle(color: Colors.pink);
|
|
const AlertDialog dialog = AlertDialog(
|
|
content: Text(contentText),
|
|
actions: <Widget>[],
|
|
);
|
|
final ThemeData theme = ThemeData(
|
|
dialogTheme: const DialogTheme(contentTextStyle: contentTextStyle));
|
|
|
|
await tester.pumpWidget(_appWithAlertDialog(tester, dialog, theme: theme));
|
|
await tester.tap(find.text('X'));
|
|
await tester.pumpAndSettle();
|
|
|
|
final RenderParagraph content =
|
|
_getTextRenderObjectFromDialog(tester, contentText);
|
|
expect(content.text.style, contentTextStyle);
|
|
});
|
|
|
|
testWidgets('Custom Content Text Style - Theme', (WidgetTester tester) async {
|
|
const String contentText = 'Content';
|
|
const TextStyle contentTextStyle = TextStyle(color: Colors.pink);
|
|
const AlertDialog dialog = AlertDialog(
|
|
content: Text(contentText),
|
|
actions: <Widget>[],
|
|
);
|
|
final ThemeData theme =
|
|
ThemeData(textTheme: const TextTheme(subhead: contentTextStyle));
|
|
|
|
await tester.pumpWidget(_appWithAlertDialog(tester, dialog, theme: theme));
|
|
await tester.tap(find.text('X'));
|
|
await tester.pumpAndSettle();
|
|
|
|
final RenderParagraph content =
|
|
_getTextRenderObjectFromDialog(tester, contentText);
|
|
expect(content.text.style.color, contentTextStyle.color);
|
|
});
|
|
}
|