Skip to content

Commit

Permalink
Disable theme variant detection in tests
Browse files Browse the repository at this point in the history
Building an empty SizedBox instead of the actual application is bad for
testing. Check if `FLUTTER_TEST` environment variable is set.

Fixes: canonical/ubuntu-desktop-installer#1278
  • Loading branch information
jpnurmi committed Jan 3, 2023
1 parent 4b2493e commit d80d792
Show file tree
Hide file tree
Showing 2 changed files with 19 additions and 3 deletions.
10 changes: 8 additions & 2 deletions lib/src/widgets/inherited_theme.dart
Original file line number Diff line number Diff line change
Expand Up @@ -149,7 +149,7 @@ class _YaruThemeState extends State<YaruTheme> {
@override
void initState() {
super.initState();
if (widget.data.variant == null && !kIsWeb && widget._platform.isLinux) {
if (widget.data.variant == null && canDetectVariant()) {
_settings = widget._settings ?? const YaruSettings();
updateVariant().then((_) {
_subscription = _settings!.themeNameChanged.listen(updateVariant);
Expand All @@ -163,6 +163,12 @@ class _YaruThemeState extends State<YaruTheme> {
super.dispose();
}

bool canDetectVariant() {
return !kIsWeb &&
widget._platform.isLinux &&
!widget._platform.environment.containsKey('FLUTTER_TEST');
}

// "Yaru-prussiangreen-dark" => YaruAccent.prussianGreen
YaruVariant? resolveVariant(String? name) {
if (name?.endsWith('-dark') == true) {
Expand All @@ -183,7 +189,7 @@ class _YaruThemeState extends State<YaruTheme> {
}

Future<void> updateVariant([String? value]) async {
assert(!kIsWeb && widget._platform.isLinux);
assert(canDetectVariant());
final name = value ?? await _settings?.getThemeName();
setState(() => _variant = resolveVariant(name));
}
Expand Down
12 changes: 11 additions & 1 deletion test/widget_test.dart
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,12 @@ void main() {
expect(YaruTheme.of(context).variant, YaruVariant.blue);
});

testWidgets('flutter test', (tester) async {
await tester.pumpTheme(environment: {'FLUTTER_TEST': '1'});
final context = tester.element(find.byType(Container));
expect(YaruTheme.of(context).variant, isNull);
});

group('gtk-theme', () {
testWidgets('unknown', (tester) async {
final settings = createMockSettings(theme: '');
Expand Down Expand Up @@ -193,6 +199,7 @@ extension ThemeTester on WidgetTester {
VisualDensity? visualDensity,
String desktop = '',
YaruSettings? settings,
Map<String, String>? environment,
}) async {
final data = YaruThemeData(
variant: variant,
Expand All @@ -211,7 +218,10 @@ extension ThemeTester on WidgetTester {
data: data,
platform: FakePlatform(
operatingSystem: Platform.linux,
environment: {'XDG_CURRENT_DESKTOP': desktop},
environment: {
'XDG_CURRENT_DESKTOP': desktop,
...?environment,
},
),
settings: settings,
),
Expand Down

0 comments on commit d80d792

Please sign in to comment.