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