239 lines
8.6 KiB
Dart
239 lines
8.6 KiB
Dart
// Copyright 2019 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/material.dart';
|
|
import 'package:flutter/rendering.dart';
|
|
import 'package:flutter_test/flutter_test.dart';
|
|
|
|
void main() {
|
|
test('DividerThemeData copyWith, ==, hashCode basics', () {
|
|
expect(const DividerThemeData(), const DividerThemeData().copyWith());
|
|
expect(const DividerThemeData().hashCode, const DividerThemeData().copyWith().hashCode);
|
|
});
|
|
|
|
test('DividerThemeData null fields by default', () {
|
|
const DividerThemeData dividerTheme = DividerThemeData();
|
|
expect(dividerTheme.color, null);
|
|
expect(dividerTheme.space, null);
|
|
expect(dividerTheme.thickness, null);
|
|
expect(dividerTheme.indent, null);
|
|
expect(dividerTheme.endIndent, null);
|
|
});
|
|
|
|
testWidgets('Default DividerThemeData debugFillProperties', (WidgetTester tester) async {
|
|
final DiagnosticPropertiesBuilder builder = DiagnosticPropertiesBuilder();
|
|
const DividerThemeData().debugFillProperties(builder);
|
|
|
|
final List<String> description = builder.properties
|
|
.where((DiagnosticsNode node) => !node.isFiltered(DiagnosticLevel.info))
|
|
.map((DiagnosticsNode node) => node.toString())
|
|
.toList();
|
|
|
|
expect(description, <String>[]);
|
|
});
|
|
|
|
testWidgets('DividerThemeData implements debugFillProperties', (WidgetTester tester) async {
|
|
final DiagnosticPropertiesBuilder builder = DiagnosticPropertiesBuilder();
|
|
const DividerThemeData(
|
|
color: Color(0xFFFFFFFF),
|
|
space: 5.0,
|
|
thickness: 4.0,
|
|
indent: 3.0,
|
|
endIndent: 2.0,
|
|
).debugFillProperties(builder);
|
|
|
|
final List<String> description = builder.properties
|
|
.where((DiagnosticsNode node) => !node.isFiltered(DiagnosticLevel.info))
|
|
.map((DiagnosticsNode node) => node.toString())
|
|
.toList();
|
|
|
|
expect(description, <String>[
|
|
'color: Color(0xffffffff)',
|
|
'space: 5.0',
|
|
'thickness: 4.0',
|
|
'indent: 3.0',
|
|
'endIndent: 2.0',
|
|
]);
|
|
});
|
|
|
|
group('Horizontal Divider', () {
|
|
testWidgets('Passing no DividerThemeData returns defaults', (WidgetTester tester) async {
|
|
await tester.pumpWidget(const MaterialApp(
|
|
home: Scaffold(
|
|
body: Divider(),
|
|
),
|
|
));
|
|
|
|
final RenderBox box = tester.firstRenderObject(find.byType(Divider));
|
|
expect(box.size.height, 16.0);
|
|
|
|
final Container container = tester.widget(find.byType(Container));
|
|
final BoxDecoration decoration = container.decoration;
|
|
expect(decoration.border.bottom.width, 0.0);
|
|
|
|
final ThemeData theme = ThemeData();
|
|
expect(decoration.border.bottom.color, theme.dividerColor);
|
|
|
|
final Rect dividerRect = tester.getRect(find.byType(Divider));
|
|
final Rect lineRect = tester.getRect(find.byType(DecoratedBox));
|
|
expect(lineRect.left, dividerRect.left);
|
|
expect(lineRect.right, dividerRect.right);
|
|
});
|
|
|
|
testWidgets('Uses values from DividerThemeData', (WidgetTester tester) async {
|
|
final DividerThemeData dividerTheme = _dividerTheme();
|
|
await tester.pumpWidget(MaterialApp(
|
|
theme: ThemeData(dividerTheme: dividerTheme),
|
|
home: const Scaffold(
|
|
body: Divider(),
|
|
),
|
|
));
|
|
|
|
final RenderBox box = tester.firstRenderObject(find.byType(Divider));
|
|
expect(box.size.height, dividerTheme.space);
|
|
|
|
final Container container = tester.widget(find.byType(Container));
|
|
final BoxDecoration decoration = container.decoration;
|
|
expect(decoration.border.bottom.width, dividerTheme.thickness);
|
|
expect(decoration.border.bottom.color, dividerTheme.color);
|
|
|
|
final Rect dividerRect = tester.getRect(find.byType(Divider));
|
|
final Rect lineRect = tester.getRect(find.byType(DecoratedBox));
|
|
expect(lineRect.left, dividerRect.left + dividerTheme.indent);
|
|
expect(lineRect.right, dividerRect.right - dividerTheme.endIndent);
|
|
});
|
|
|
|
testWidgets('Widget properties take priority over theme', (WidgetTester tester) async {
|
|
const Color color = Colors.purple;
|
|
const double height = 10.0;
|
|
const double thickness = 5.0;
|
|
const double indent = 8.0;
|
|
const double endIndent = 9.0;
|
|
|
|
final DividerThemeData dividerTheme = _dividerTheme();
|
|
await tester.pumpWidget(MaterialApp(
|
|
theme: ThemeData(dividerTheme: dividerTheme),
|
|
home: const Scaffold(
|
|
body: Divider(
|
|
color: color,
|
|
height: height,
|
|
thickness: thickness,
|
|
indent: indent,
|
|
endIndent: endIndent,
|
|
),
|
|
),
|
|
));
|
|
|
|
final RenderBox box = tester.firstRenderObject(find.byType(Divider));
|
|
expect(box.size.height, height);
|
|
|
|
final Container container = tester.widget(find.byType(Container));
|
|
final BoxDecoration decoration = container.decoration;
|
|
expect(decoration.border.bottom.width, thickness);
|
|
expect(decoration.border.bottom.color, color);
|
|
|
|
final Rect dividerRect = tester.getRect(find.byType(Divider));
|
|
final Rect lineRect = tester.getRect(find.byType(DecoratedBox));
|
|
expect(lineRect.left, dividerRect.left + indent);
|
|
expect(lineRect.right, dividerRect.right - endIndent);
|
|
});
|
|
});
|
|
|
|
group('Vertical Divider', () {
|
|
testWidgets('Passing no DividerThemeData returns defaults', (WidgetTester tester) async {
|
|
await tester.pumpWidget(const MaterialApp(
|
|
home: Scaffold(
|
|
body: VerticalDivider(),
|
|
),
|
|
));
|
|
|
|
final RenderBox box = tester.firstRenderObject(find.byType(VerticalDivider));
|
|
expect(box.size.width, 16.0);
|
|
|
|
final Container container = tester.widget(find.byType(Container));
|
|
final BoxDecoration decoration = container.decoration;
|
|
final Border border = decoration.border;
|
|
expect(border.left.width, 0.0);
|
|
|
|
final ThemeData theme = ThemeData();
|
|
expect(border.left.color, theme.dividerColor);
|
|
|
|
final Rect dividerRect = tester.getRect(find.byType(VerticalDivider));
|
|
final Rect lineRect = tester.getRect(find.byType(DecoratedBox));
|
|
expect(lineRect.top, dividerRect.top);
|
|
expect(lineRect.bottom, dividerRect.bottom);
|
|
});
|
|
|
|
testWidgets('Uses values from DividerThemeData', (WidgetTester tester) async {
|
|
final DividerThemeData dividerTheme = _dividerTheme();
|
|
await tester.pumpWidget(MaterialApp(
|
|
theme: ThemeData(dividerTheme: dividerTheme),
|
|
home: const Scaffold(
|
|
body: VerticalDivider(),
|
|
),
|
|
));
|
|
|
|
final RenderBox box = tester.firstRenderObject(find.byType(VerticalDivider));
|
|
expect(box.size.width, dividerTheme.space);
|
|
|
|
final Container container = tester.widget(find.byType(Container));
|
|
final BoxDecoration decoration = container.decoration;
|
|
final Border border = decoration.border;
|
|
expect(border.left.width, dividerTheme.thickness);
|
|
expect(border.left.color, dividerTheme.color);
|
|
|
|
final Rect dividerRect = tester.getRect(find.byType(VerticalDivider));
|
|
final Rect lineRect = tester.getRect(find.byType(DecoratedBox));
|
|
expect(lineRect.top, dividerRect.top + dividerTheme.indent);
|
|
expect(lineRect.bottom, dividerRect.bottom - dividerTheme.endIndent);
|
|
});
|
|
|
|
testWidgets('Widget properties take priority over theme', (WidgetTester tester) async {
|
|
const Color color = Colors.purple;
|
|
const double width = 10.0;
|
|
const double thickness = 5.0;
|
|
const double indent = 8.0;
|
|
const double endIndent = 9.0;
|
|
|
|
final DividerThemeData dividerTheme = _dividerTheme();
|
|
await tester.pumpWidget(MaterialApp(
|
|
theme: ThemeData(dividerTheme: dividerTheme),
|
|
home: const Scaffold(
|
|
body: VerticalDivider(
|
|
color: color,
|
|
width: width,
|
|
thickness: thickness,
|
|
indent: indent,
|
|
endIndent: endIndent,
|
|
),
|
|
),
|
|
));
|
|
|
|
final RenderBox box = tester.firstRenderObject(find.byType(VerticalDivider));
|
|
expect(box.size.width, width);
|
|
|
|
final Container container = tester.widget(find.byType(Container));
|
|
final BoxDecoration decoration = container.decoration;
|
|
final Border border = decoration.border;
|
|
expect(border.left.width, thickness);
|
|
expect(border.left.color, color);
|
|
|
|
final Rect dividerRect = tester.getRect(find.byType(VerticalDivider));
|
|
final Rect lineRect = tester.getRect(find.byType(DecoratedBox));
|
|
expect(lineRect.top, dividerRect.top + indent);
|
|
expect(lineRect.bottom, dividerRect.bottom - endIndent);
|
|
});
|
|
});
|
|
}
|
|
|
|
DividerThemeData _dividerTheme() {
|
|
return const DividerThemeData(
|
|
color: Colors.orange,
|
|
space: 12.0,
|
|
thickness: 2.0,
|
|
indent: 7.0,
|
|
endIndent: 5.0,
|
|
);
|
|
}
|