Mounir-Bouaiche

Example test widget

@@ -6,25 +6,79 @@ @@ -6,25 +6,79 @@
6 // tree, read text, and verify that the values of widget properties are correct. 6 // tree, read text, and verify that the values of widget properties are correct.
7 7
8 import 'package:flutter/material.dart'; 8 import 'package:flutter/material.dart';
  9 +import 'package:flutter_screenutil/flutter_screenutil.dart';
9 import 'package:flutter_test/flutter_test.dart'; 10 import 'package:flutter_test/flutter_test.dart';
10 11
11 -import 'package:example/src/first_method.dart';  
12 -  
13 void main() { 12 void main() {
14 - testWidgets('Counter increments smoke test', (WidgetTester tester) async {  
15 - // Build our app and trigger a frame.  
16 - await tester.pumpWidget(MyApp()); 13 + testWidgets('Test Responsiveness', (WidgetTester tester) async {
  14 + // Declare Sizes
  15 + const Size designSize = Size(360, 640);
  16 + const Size initialSize = designSize;
  17 + const Size biggerSize = Size(480, 920);
  18 + const Size smallerSize = Size(300, 560);
  19 +
  20 + // We'll use MediaQuery to simulate diffrent screen sizes
  21 + MediaQueryData currentData = MediaQueryData(size: initialSize);
  22 + const MediaQueryData biggerData = MediaQueryData(size: biggerSize);
  23 + const MediaQueryData smallerData = MediaQueryData(size: smallerSize);
  24 +
  25 + // Used to find a widget. See [CommonFinders.byKey].
  26 + final _key = UniqueKey();
  27 +
  28 + // Click on button. See code bellow.
  29 + Future<int> tap() async {
  30 + await tester.tap(find.byKey(_key));
  31 + return tester.pumpAndSettle();
  32 + }
  33 +
  34 + void testSize(Size size) {
  35 + expect(1.w, equals(size.width / designSize.width));
  36 + expect(1.h, equals(size.height / designSize.height));
  37 + print('[OK] Size: $size, width: ${1.w}, height: ${1.h}');
  38 + }
  39 +
  40 + await tester.pumpWidget(StatefulBuilder(
  41 + builder: (BuildContext context, StateSetter setState) {
  42 + return MediaQuery(
  43 + data: currentData,
  44 + child: ScreenUtilInit(
  45 + useInheritedMediaQuery: true,
  46 + designSize: designSize,
  47 + builder: (context, child) => MaterialApp(
  48 + home: Material(
  49 + child: TextButton(
  50 + key: _key,
  51 + child: Text('Change data'),
  52 + onPressed: () {
  53 + setState(() {
  54 + currentData = currentData.size == initialSize
  55 + // First test with bigger screen
  56 + ? biggerData
  57 + // Test with smaller screen
  58 + : smallerData;
  59 + });
  60 + },
  61 + ),
  62 + ),
  63 + ),
  64 + ),
  65 + );
  66 + },
  67 + ));
  68 +
  69 + // Tests with initial screen size
  70 + testSize(initialSize);
17 71
18 - // Verify that our counter starts at 0.  
19 - expect(find.text('0'), findsOneWidget);  
20 - expect(find.text('1'), findsNothing); 72 + // Click On button to simulate changing screen size
  73 + await tap();
  74 + // Tests with bigger screen size
  75 + testSize(biggerSize);
21 76
22 - // Tap the '+' icon and trigger a frame.  
23 - await tester.tap(find.byIcon(Icons.add));  
24 - await tester.pump(); 77 + // Click On button to simulate changing screen size
  78 + await tap();
  79 + // Tests with bigger screen size
  80 + testSize(smallerSize);
25 81
26 - // Verify that our counter has incremented.  
27 - expect(find.text('0'), findsNothing);  
28 - expect(find.text('1'), findsOneWidget); 82 + await tester.pumpAndSettle();
29 }); 83 });
30 } 84 }