Made build portable

This commit is contained in:
Alessandro Autiero
2022-10-07 17:23:30 +02:00
parent 000a2a53ed
commit 55467152c9
128 changed files with 54402 additions and 7 deletions

View File

@@ -0,0 +1,83 @@
import 'package:flutter/material.dart' as m;
import 'package:flutter_test/flutter_test.dart';
import 'package:fluent_ui/fluent_ui.dart';
Widget wrapApp({required Widget child}) {
return FluentApp(home: child);
}
void main() {
testWidgets('Can nest apps', (WidgetTester tester) async {
await tester.pumpWidget(
const FluentApp(
home: FluentApp(
home: Text('Home sweet home'),
),
),
);
expect(find.text('Home sweet home'), findsOneWidget);
});
testWidgets('Can get text scale from media query',
(WidgetTester tester) async {
double? textScaleFactor;
await tester.pumpWidget(FluentApp(
home: Builder(builder: (BuildContext context) {
textScaleFactor = MediaQuery.of(context).textScaleFactor;
return Container();
}),
));
expect(textScaleFactor, isNotNull);
expect(textScaleFactor, equals(1.0));
});
testWidgets('Has default material and fluent localizations',
(WidgetTester tester) async {
await tester.pumpWidget(
FluentApp(
home: Builder(
builder: (BuildContext context) {
return Column(
children: <Widget>[
Text(MaterialLocalizations.of(context).selectAllButtonLabel),
Text(FluentLocalizations.of(context).selectAllActionLabel),
],
);
},
),
),
);
// Default US "select all" text.
expect(find.text('Select all'), findsNWidgets(2));
});
testWidgets(
'A parent material Theme is not overriden by FluentApp',
(WidgetTester tester) async {
await tester.pumpWidget(
m.Theme(
data: m.ThemeData.light(),
child: FluentApp(
theme: ThemeData.dark(),
home: Builder(
builder: (BuildContext context) {
return Column(
children: <Widget>[
Text('${m.Theme.of(context).brightness}'),
Text('${FluentTheme.of(context).brightness}'),
],
);
},
),
),
),
);
expect(find.text('Brightness.light'), findsOneWidget);
expect(find.text('Brightness.dark'), findsOneWidget);
},
);
}

View File

@@ -0,0 +1,37 @@
import 'package:fluent_ui/fluent_ui.dart';
import 'package:flutter_test/flutter_test.dart';
import 'app_test.dart';
void main() {
testWidgets('Checkbox change state accordingly', (WidgetTester tester) async {
bool? checkBoxValue = false;
await tester.pumpWidget(
StatefulBuilder(
builder: (BuildContext context, StateSetter setState) {
return wrapApp(
child: Checkbox(
checked: checkBoxValue,
onChanged: (bool? value) {
setState(() {
checkBoxValue = value;
});
},
),
);
},
),
);
expect(tester.widget<Checkbox>(find.byType(Checkbox)).checked, false);
await tester.tap(find.byType(Checkbox));
await tester.pumpAndSettle();
expect(checkBoxValue, true);
await tester.tap(find.byType(Checkbox));
await tester.pumpAndSettle();
expect(checkBoxValue, false);
});
}

View File

@@ -0,0 +1,32 @@
import 'package:fluent_ui/fluent_ui.dart';
import 'package:flutter_test/flutter_test.dart';
const primaryKeys = <String>[
'darkest',
'darker',
'dark',
'normal',
'light',
'lighter',
'lightest',
];
void main() {
test('All accent colors are opaque and equal their primary color', () {
for (final AccentColor color in Colors.accentColors) {
expect(color.value, color.normal.value);
for (final String key in primaryKeys) {
expect(color[key]!.alpha, 0xFF);
}
}
expect(Colors.blue.value, Colors.blue.normal.value);
});
test('All grey variants are opaque', () {
int currentValue = 210;
for (var i = currentValue; i > 0; i -= 10) {
expect(Colors.grey[i].alpha, 0xFF);
}
});
}

View File

@@ -0,0 +1,55 @@
import 'package:fluent_ui/fluent_ui.dart';
import 'package:flutter_test/flutter_test.dart';
import 'app_test.dart';
void main() {
testWidgets('horizontal Divider correct height', (WidgetTester tester) async {
await tester.pumpWidget(
wrapApp(child: const Center(child: Divider())),
);
final RenderBox box = tester.firstRenderObject(find.byType(Divider));
expect(box.size.height, 1.0);
});
testWidgets('vertical Divider correct width', (WidgetTester tester) async {
await tester.pumpWidget(
wrapApp(child: const Center(child: Divider(direction: Axis.vertical))),
);
final RenderBox box = tester.firstRenderObject(find.byType(Divider));
expect(box.size.width, 1.0);
});
testWidgets('Divider thickness applied correctly',
(WidgetTester tester) async {
await tester.pumpWidget(
wrapApp(
child: const Center(
child: DividerTheme(
data: DividerThemeData(thickness: 4),
child: Divider(),
),
),
),
);
final RenderBox hBox = tester.firstRenderObject(find.byType(Divider));
expect(hBox.size.height, 4.0);
await tester.pumpWidget(
wrapApp(
child: const Center(
child: DividerTheme(
data: DividerThemeData(thickness: 4),
child: Divider(direction: Axis.vertical),
),
),
),
);
final RenderBox vBox = tester.firstRenderObject(find.byType(Divider));
expect(vBox.size.width, 4.0);
});
}

View File

@@ -0,0 +1,21 @@
import 'package:fluent_ui/fluent_ui.dart';
import 'package:flutter_test/flutter_test.dart';
import 'app_test.dart';
void main() {
testWidgets('DropdownButton leading is shown correctly', (tester) async {
await tester.pumpWidget(wrapApp(
child: DropDownButton(
items: [
MenuFlyoutItem(text: const Text('one'), onPressed: () {}),
MenuFlyoutItem(text: const Text('two'), onPressed: () {}),
],
leading: const Icon(FluentIcons.number),
title: const Text('Numbers'),
),
));
expect(find.byIcon(FluentIcons.number), findsOneWidget);
});
}

View File

@@ -0,0 +1,23 @@
import 'package:fluent_ui/fluent_ui.dart';
import 'package:flutter_test/flutter_test.dart';
import 'app_test.dart';
void main() {
final expanderKey = GlobalKey<ExpanderState>();
testWidgets('Expander intiallyExpanded works properly', (tester) async {
await tester.pumpWidget(
wrapApp(
child: Expander(
key: expanderKey,
initiallyExpanded: true,
header: const Text('Header'),
content: const Text('Content'),
),
),
);
expect(expanderKey.currentState!.open, true);
});
}

View File

@@ -0,0 +1,15 @@
import 'package:fluent_ui/fluent_ui.dart';
import 'package:flutter_test/flutter_test.dart';
void main() {
testWidgets('Icons specify FluentIcons font', (WidgetTester tester) async {
await tester.pumpWidget(FluentApp(
home: NavigationView(
pane: NavigationPane(),
),
));
expect(FluentIcons.clear.fontFamily, 'FluentIcons');
expect(FluentIcons.search.fontFamily, 'FluentIcons');
});
}

View File

@@ -0,0 +1,22 @@
import 'package:fluent_ui/fluent_ui.dart';
import 'package:flutter_test/flutter_test.dart';
import 'app_test.dart';
void main() {
testWidgets('InfoLabel labelStyle is applied correctly to Text',
(WidgetTester tester) async {
const labelStyle = TextStyle();
await tester.pumpWidget(
wrapApp(
child: const InfoLabel(
label: 'Label text',
labelStyle: labelStyle,
),
),
);
expect(tester.widget<Text>(find.text('Label text')).style, labelStyle);
});
}

View File

@@ -0,0 +1,12 @@
// import 'package:fluent_ui/fluent_ui.dart';
// import 'package:flutter_test/flutter_test.dart';
void main() {
// testWidgets('', (WidgetTester tester) async {
// await tester.pumpWidget(FluentApp(
// home: NavigationView(
// pane: NavigationPane(),
// ),
// ));
// });
}

View File

@@ -0,0 +1,38 @@
import 'package:fluent_ui/fluent_ui.dart';
import 'package:flutter_test/flutter_test.dart';
import 'app_test.dart';
void main() {
testWidgets('RadioButton change state accordingly',
(WidgetTester tester) async {
bool radioButtonValue = false;
await tester.pumpWidget(
StatefulBuilder(
builder: (BuildContext context, StateSetter setState) {
return wrapApp(
child: RadioButton(
checked: radioButtonValue,
onChanged: (bool value) {
setState(() {
radioButtonValue = value;
});
},
),
);
},
),
);
expect(tester.widget<RadioButton>(find.byType(RadioButton)).checked, false);
await tester.tap(find.byType(RadioButton));
await tester.pumpAndSettle();
expect(radioButtonValue, true);
await tester.tap(find.byType(RadioButton));
await tester.pumpAndSettle();
expect(radioButtonValue, false);
});
}

View File

@@ -0,0 +1,41 @@
import 'package:fluent_ui/fluent_ui.dart';
import 'package:flutter_test/flutter_test.dart';
import 'app_test.dart';
void main() {
testWidgets('ToggleButton change state accordingly',
(WidgetTester tester) async {
bool toggleButtonValue = false;
await tester.pumpWidget(
StatefulBuilder(
builder: (BuildContext context, StateSetter setState) {
return wrapApp(
child: ToggleButton(
checked: toggleButtonValue,
onChanged: (bool value) {
setState(() {
toggleButtonValue = value;
});
},
),
);
},
),
);
expect(
tester.widget<ToggleButton>(find.byType(ToggleButton)).checked,
false,
);
await tester.tap(find.byType(ToggleButton));
await tester.pumpAndSettle();
expect(toggleButtonValue, true);
await tester.tap(find.byType(ToggleButton));
await tester.pumpAndSettle();
expect(toggleButtonValue, false);
});
}

View File

@@ -0,0 +1,84 @@
import 'package:fluent_ui/fluent_ui.dart';
import 'package:flutter_test/flutter_test.dart';
import 'app_test.dart';
void main() {
testWidgets('ToggleSwitch change state accordingly',
(WidgetTester tester) async {
bool toggleSwitchValue = false;
await tester.pumpWidget(
StatefulBuilder(
builder: (BuildContext context, StateSetter setState) {
return wrapApp(
child: ToggleSwitch(
checked: toggleSwitchValue,
onChanged: (bool value) {
setState(() {
toggleSwitchValue = value;
});
},
),
);
},
),
);
expect(
tester.widget<ToggleSwitch>(find.byType(ToggleSwitch)).checked,
false,
);
await tester.tap(find.byType(ToggleSwitch));
await tester.pumpAndSettle();
expect(toggleSwitchValue, true);
await tester.tap(find.byType(ToggleSwitch));
await tester.pumpAndSettle();
expect(toggleSwitchValue, false);
});
testWidgets('ToggleSwitch can drag (LTR)', (WidgetTester tester) async {
bool value = false;
await tester.pumpWidget(
wrapApp(
child: StatefulBuilder(
builder: (BuildContext context, StateSetter setState) {
return Center(
child: ToggleSwitch(
checked: value,
onChanged: (bool newValue) {
setState(() {
value = newValue;
});
},
),
);
},
),
),
);
expect(value, isFalse);
await tester.drag(find.byType(ToggleSwitch), const Offset(-30.0, 0.0));
expect(value, isFalse);
await tester.drag(find.byType(ToggleSwitch), const Offset(30.0, 0.0));
expect(value, isTrue);
await tester.pump();
await tester.drag(find.byType(ToggleSwitch), const Offset(30.0, 0.0));
expect(value, isTrue);
await tester.pump();
await tester.drag(find.byType(ToggleSwitch), const Offset(-30.0, 0.0));
expect(value, isFalse);
});
}