(
29 | builder: (_) => widgetBuilder.call(),
30 | settings: RouteSettings(arguments: args),
31 | );
32 | },
33 | );
34 | }
35 |
36 | Widget parent = MaterialApp(
37 | home: MockNavigatorProvider(
38 | navigator: navigator ?? MockNavigator(),
39 | child: toTest,
40 | ),
41 | );
42 |
43 | if (provider != null) {
44 | parent = ChangeNotifierProvider.value(
45 | value: provider,
46 | child: parent,
47 | );
48 | }
49 |
50 | await pumpWidget(
51 | Provider.value(
52 | value: repository,
53 | child: parent,
54 | ),
55 | );
56 | }
57 | }
58 |
--------------------------------------------------------------------------------
/test/widgets/app_theme_test.dart:
--------------------------------------------------------------------------------
1 | import 'package:flutter/cupertino.dart';
2 | import 'package:flutter_test/flutter_test.dart';
3 | import 'package:mockito/annotations.dart';
4 | import 'package:mockito/mockito.dart';
5 | import 'package:settings/view/app_theme.dart';
6 | import 'package:yaru/yaru.dart';
7 |
8 | import 'app_theme_test.mocks.dart';
9 |
10 | @GenerateMocks([GnomeSettings])
11 | void main() {
12 | test(
13 | 'App Theme Dark Mode Test',
14 | () {
15 | final settings = MockGnomeSettings();
16 | final theme = AppTheme(settings);
17 |
18 | when(settings.setValue('gtk-theme', 'Yaru-dark')).thenAnswer(
19 | (realInvocation) async {},
20 | );
21 |
22 | theme.apply(Brightness.dark, YaruVariant.orange);
23 | verify(settings.setValue('gtk-theme', 'Yaru-dark')).called(1);
24 | },
25 | );
26 |
27 | test(
28 | 'App Theme Light Mode Test',
29 | () {
30 | final settings = MockGnomeSettings();
31 | final theme = AppTheme(settings);
32 |
33 | when(settings.setValue('gtk-theme', 'Yaru')).thenAnswer(
34 | (realInvocation) async {},
35 | );
36 |
37 | theme.apply(Brightness.light, YaruVariant.orange);
38 | verify(settings.setValue('gtk-theme', 'Yaru')).called(1);
39 | },
40 | );
41 | }
42 |
--------------------------------------------------------------------------------
/test/widgets/yaru_check_box_row_test.dart:
--------------------------------------------------------------------------------
1 | import 'package:flutter/material.dart';
2 | import 'package:flutter_test/flutter_test.dart';
3 | import 'package:settings/view/common/yaru_checkbox_row.dart';
4 | import 'package:yaru/yaru.dart';
5 |
6 | void main() {
7 | testWidgets('YaruCheckboxRow Test', (tester) async {
8 | await tester.pumpWidget(
9 | MaterialApp(
10 | home: Scaffold(
11 | body: YaruCheckboxRow(
12 | onChanged: (valeu) {},
13 | enabled: true,
14 | text: 'Check Box',
15 | value: true,
16 | ),
17 | ),
18 | ),
19 | );
20 |
21 | /// The [byWidgetPredicate] method of the [CommonFinders] class is to specify the
22 | /// type of any widget and so examine the state of that type.
23 | final finder = find.byWidgetPredicate(
24 | (widget) => widget is YaruCheckbox && widget.value == true,
25 | description: 'Check Box is checked',
26 | );
27 | final sizedBoxFinder = find.byWidgetPredicate(
28 | (widget) => widget is SizedBox && widget.width == null,
29 | description: 'Sized box having width as null',
30 | );
31 | final textFinder = find.text('Check Box');
32 |
33 | expect(textFinder, findsOneWidget);
34 | expect(finder, findsOneWidget);
35 | expect(sizedBoxFinder, findsNothing);
36 | });
37 | }
38 |
--------------------------------------------------------------------------------
/test/widgets/yaru_extra_options_row_test.dart:
--------------------------------------------------------------------------------
1 | import 'package:flutter/material.dart';
2 | import 'package:flutter_test/flutter_test.dart';
3 | import 'package:settings/view/common/yaru_extra_option_row.dart';
4 | import 'package:yaru/yaru.dart';
5 |
6 | void main() {
7 | testWidgets(
8 | 'YaruExtraOptionRow widget build test',
9 | (tester) async {
10 | await tester.pumpWidget(
11 | MaterialApp(
12 | home: Scaffold(
13 | body: YaruExtraOptionRow(
14 | actionLabel: 'Repeat Keys',
15 | actionDescription: 'Key presses repeat when key is held down',
16 | value: true,
17 | onChanged: (_) {},
18 | onPressed: () {},
19 | iconData: const IconData(0),
20 | ),
21 | ),
22 | ),
23 | );
24 |
25 | expect(find.text('Repeat Keys'), findsOneWidget);
26 | expect(find.byType(YaruOptionButton), findsOneWidget);
27 |
28 | /// The [byWidgetPredicate] method of the [CommonFinders] class is to specify the
29 | /// type of any widget and so examine the state of that type.
30 | final finder = find.byWidgetPredicate(
31 | (widget) => widget is YaruSwitch && widget.value == true,
32 | description: 'Switch is enabled',
33 | );
34 | expect(finder, findsOneWidget);
35 | },
36 | );
37 | }
38 |
--------------------------------------------------------------------------------
/test/widgets/yaru_single_info_row_test.dart:
--------------------------------------------------------------------------------
1 | import 'package:flutter/material.dart';
2 | import 'package:flutter_test/flutter_test.dart';
3 | import 'package:settings/view/common/yaru_single_info_row.dart';
4 |
5 | void main() {
6 | testWidgets('- YaruSingleInfoRow Test', (tester) async {
7 | await tester.pumpWidget(
8 | const MaterialApp(
9 | home: Scaffold(
10 | body: YaruSingleInfoRow(
11 | infoLabel: 'Foo Label',
12 | infoValue: 'Foo Value',
13 | ),
14 | ),
15 | ),
16 | );
17 |
18 | // Use [widget] if you only expect to match one widget.
19 | // Throws a [StateError] if finder is empty or matches more than one widget.
20 |
21 | final findAlign =
22 | (tester.widget(find.byType(SelectableText)) as SelectableText)
23 | .textAlign;
24 |
25 | expect(find.text('Foo Label'), findsOneWidget);
26 | expect(find.text('Foo Value'), findsOneWidget);
27 | expect(findAlign, TextAlign.right);
28 | });
29 | }
30 |
--------------------------------------------------------------------------------
/test/widgets/yaru_switch_row_test.dart:
--------------------------------------------------------------------------------
1 | import 'package:flutter/material.dart';
2 | import 'package:flutter_test/flutter_test.dart';
3 | import 'package:settings/view/common/yaru_switch_row.dart';
4 | import 'package:yaru/yaru.dart';
5 |
6 | void main() {
7 | testWidgets('- YaruSwitchRow Test', (tester) async {
8 | await tester.pumpWidget(
9 | MaterialApp(
10 | home: Scaffold(
11 | body: YaruSwitchRow(
12 | onChanged: (v) {},
13 | trailingWidget: const Text('Trailing Widget'),
14 | value: true,
15 | actionDescription: 'Description',
16 | ),
17 | ),
18 | ),
19 | );
20 |
21 | // Use [widget] if you only expect to match one widget.
22 | // Throws a [StateError] if finder is empty or matches more than one widget.
23 | final findValue =
24 | (tester.widget(find.byType(YaruSwitch)) as YaruSwitch).value;
25 |
26 | expect(find.text('Description'), findsOneWidget);
27 | expect(find.text('Trailing Widget'), findsOneWidget);
28 | expect(find.byType(YaruTile), findsOneWidget);
29 | expect(findValue, true);
30 | });
31 | }
32 |
--------------------------------------------------------------------------------
/test/widgets/yaru_togggle_button_row_test.dart:
--------------------------------------------------------------------------------
1 | import 'package:flutter/material.dart';
2 | import 'package:flutter_test/flutter_test.dart';
3 | import 'package:settings/view/common/yaru_toggle_buttons_row.dart';
4 |
5 | void main() {
6 | testWidgets('- YaruToggleButtonsRow Test', (tester) async {
7 | await tester.pumpWidget(
8 | MaterialApp(
9 | home: Scaffold(
10 | body: YaruToggleButtonsRow(
11 | actionLabel: 'Foo Label',
12 | onPressed: (x) {},
13 | selectedValues: const [false],
14 | actionDescription: 'Foo Description',
15 | labels: const ['Label'],
16 | ),
17 | ),
18 | ),
19 | );
20 |
21 | expect(find.text('Foo Label'), findsOneWidget);
22 | expect(find.text('Foo Description'), findsOneWidget);
23 | expect(find.byType(ToggleButtons), findsOneWidget);
24 | expect(find.text('Label'), findsOneWidget);
25 | });
26 | }
27 |
--------------------------------------------------------------------------------
/tools/dbus/generate-remote-object.sh:
--------------------------------------------------------------------------------
1 | dart pub global activate dbus
2 |
3 | rm -rf ../../lib/generated/dbus/
4 | mkdir ../../lib/generated/dbus/
5 | dart-dbus generate-remote-object interfaces/org.gnome.Mutter.DisplayConfig.xml -o ../../lib/generated/dbus/display-config-remote-object.dart
--------------------------------------------------------------------------------