Add more tests to slider to avoid future breakages (#98772)
This commit is contained in:
parent
4b2e828924
commit
baa2803fe1
233
packages/flutter/test/material/value_indicating_slider_test.dart
Normal file
233
packages/flutter/test/material/value_indicating_slider_test.dart
Normal file
@ -0,0 +1,233 @@
|
||||
// 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.
|
||||
|
||||
// This file is run as part of a reduced test set in CI on Mac and Windows
|
||||
// machines.
|
||||
@Tags(<String>['reduced-test-set'])
|
||||
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:flutter_test/flutter_test.dart';
|
||||
|
||||
void main() {
|
||||
testWidgets('Slider value indicator', (WidgetTester tester) async {
|
||||
await _buildValueIndicatorStaticSlider(
|
||||
tester,
|
||||
value: 0,
|
||||
);
|
||||
|
||||
await _pressStartThumb(tester);
|
||||
|
||||
await expectLater(
|
||||
find.byType(MaterialApp),
|
||||
matchesGoldenFile('slider_start_text_scale_1_width_0'),
|
||||
);
|
||||
|
||||
await _buildValueIndicatorStaticSlider(
|
||||
tester,
|
||||
value: 0.5,
|
||||
);
|
||||
|
||||
await _pressMiddleThumb(tester);
|
||||
|
||||
await expectLater(
|
||||
find.byType(MaterialApp),
|
||||
matchesGoldenFile('slider_middle_text_scale_1_width_0'),
|
||||
);
|
||||
|
||||
await _buildValueIndicatorStaticSlider(
|
||||
tester,
|
||||
value: 1,
|
||||
);
|
||||
|
||||
await _pressEndThumb(tester);
|
||||
|
||||
await expectLater(
|
||||
find.byType(MaterialApp),
|
||||
matchesGoldenFile('slider_end_text_scale_1_width_0'),
|
||||
);
|
||||
});
|
||||
|
||||
testWidgets('Slider value indicator wide text', (WidgetTester tester) async {
|
||||
await _buildValueIndicatorStaticSlider(
|
||||
tester,
|
||||
value: 0,
|
||||
decimalCount: 5,
|
||||
);
|
||||
|
||||
await _pressStartThumb(tester);
|
||||
|
||||
await expectLater(
|
||||
find.byType(MaterialApp),
|
||||
matchesGoldenFile('slider_start_text_scale_1_width_5'),
|
||||
);
|
||||
|
||||
await _buildValueIndicatorStaticSlider(
|
||||
tester,
|
||||
value: 0.5,
|
||||
decimalCount: 5,
|
||||
);
|
||||
|
||||
await _pressMiddleThumb(tester);
|
||||
|
||||
await expectLater(
|
||||
find.byType(MaterialApp),
|
||||
matchesGoldenFile('slider_middle_text_scale_1_width_5'),
|
||||
);
|
||||
|
||||
await _buildValueIndicatorStaticSlider(
|
||||
tester,
|
||||
value: 1,
|
||||
decimalCount: 5,
|
||||
);
|
||||
|
||||
await _pressEndThumb(tester);
|
||||
|
||||
await expectLater(
|
||||
find.byType(MaterialApp),
|
||||
matchesGoldenFile('slider_end_text_scale_1_width_5'),
|
||||
);
|
||||
});
|
||||
|
||||
testWidgets('Slider value indicator large text scale', (WidgetTester tester) async {
|
||||
await _buildValueIndicatorStaticSlider(
|
||||
tester,
|
||||
value: 0,
|
||||
textScale: 3,
|
||||
);
|
||||
|
||||
await _pressStartThumb(tester);
|
||||
|
||||
await expectLater(
|
||||
find.byType(MaterialApp),
|
||||
matchesGoldenFile('slider_start_text_scale_4_width_0'),
|
||||
);
|
||||
|
||||
await _buildValueIndicatorStaticSlider(
|
||||
tester,
|
||||
value: 0.5,
|
||||
textScale: 3,
|
||||
);
|
||||
|
||||
await _pressMiddleThumb(tester);
|
||||
|
||||
await expectLater(
|
||||
find.byType(MaterialApp),
|
||||
matchesGoldenFile('slider_middle_text_scale_4_width_0'),
|
||||
);
|
||||
|
||||
await _buildValueIndicatorStaticSlider(
|
||||
tester,
|
||||
value: 1,
|
||||
textScale: 3,
|
||||
);
|
||||
|
||||
await _pressEndThumb(tester);
|
||||
|
||||
await expectLater(
|
||||
find.byType(MaterialApp),
|
||||
matchesGoldenFile('slider_end_text_scale_4_width_0'),
|
||||
);
|
||||
});
|
||||
|
||||
testWidgets('Slider value indicator large text scale and wide text',
|
||||
(WidgetTester tester) async {
|
||||
await _buildValueIndicatorStaticSlider(
|
||||
tester,
|
||||
value: 0,
|
||||
textScale: 3,
|
||||
decimalCount: 5,
|
||||
);
|
||||
|
||||
await _pressStartThumb(tester);
|
||||
|
||||
await expectLater(
|
||||
find.byType(MaterialApp),
|
||||
matchesGoldenFile('slider_start_text_scale_4_width_5'),
|
||||
);
|
||||
|
||||
await _buildValueIndicatorStaticSlider(
|
||||
tester,
|
||||
value: 0.5,
|
||||
textScale: 3,
|
||||
decimalCount: 5,
|
||||
);
|
||||
|
||||
await _pressMiddleThumb(tester);
|
||||
|
||||
await expectLater(
|
||||
find.byType(MaterialApp),
|
||||
matchesGoldenFile('slider_middle_text_scale_4_width_5'),
|
||||
);
|
||||
|
||||
await _buildValueIndicatorStaticSlider(
|
||||
tester,
|
||||
value: 1,
|
||||
textScale: 3,
|
||||
decimalCount: 5,
|
||||
);
|
||||
|
||||
await _pressEndThumb(tester);
|
||||
|
||||
await expectLater(
|
||||
find.byType(MaterialApp),
|
||||
matchesGoldenFile('slider_end_text_scale_4_width_5'),
|
||||
);
|
||||
});
|
||||
}
|
||||
|
||||
Future<void> _pressStartThumb(WidgetTester tester) async {
|
||||
final Offset bottomLeft = tester.getBottomLeft(find.byType(Slider));
|
||||
final Offset topLeft = tester.getTopLeft(find.byType(Slider));
|
||||
final Offset left = (bottomLeft + topLeft) / 2;
|
||||
final Offset start = left + const Offset(24, 0);
|
||||
await tester.startGesture(start);
|
||||
await tester.pumpAndSettle();
|
||||
}
|
||||
|
||||
Future<void> _pressMiddleThumb(WidgetTester tester) async {
|
||||
await tester.press(find.byType(Slider));
|
||||
await tester.pumpAndSettle();
|
||||
}
|
||||
|
||||
Future<void> _pressEndThumb(WidgetTester tester) async {
|
||||
final Offset bottomRight = tester.getBottomRight(find.byType(Slider));
|
||||
final Offset topRight = tester.getTopRight(find.byType(Slider));
|
||||
final Offset right = (bottomRight + topRight) / 2;
|
||||
final Offset start = right - const Offset(24, 0);
|
||||
await tester.startGesture(start);
|
||||
await tester.pumpAndSettle();
|
||||
}
|
||||
|
||||
Future<void> _buildValueIndicatorStaticSlider(
|
||||
WidgetTester tester, {
|
||||
required double value,
|
||||
double textScale = 1.0,
|
||||
int decimalCount = 0,
|
||||
}) async {
|
||||
await tester.pumpWidget(
|
||||
MaterialApp(
|
||||
home: Scaffold(
|
||||
body: Builder(
|
||||
builder: (BuildContext context) {
|
||||
return Center(
|
||||
child: MediaQuery(
|
||||
data: MediaQueryData(textScaleFactor: textScale),
|
||||
child: SliderTheme(
|
||||
data: Theme.of(context).sliderTheme.copyWith(
|
||||
showValueIndicator: ShowValueIndicator.always,
|
||||
),
|
||||
child: Slider(
|
||||
value: value,
|
||||
label: value.toStringAsFixed(decimalCount),
|
||||
onChanged: (double newValue) {},
|
||||
),
|
||||
),
|
||||
),
|
||||
);
|
||||
},
|
||||
),
|
||||
),
|
||||
),
|
||||
);
|
||||
}
|
Loading…
x
Reference in New Issue
Block a user