@@ -170,6 +170,118 @@ void main() {
170170 }
171171 });
172172
173+ // Verify inherited mediaQueryData is used.
174+ testWidgets ('MediaQueryData Inherited' , (WidgetTester tester) async {
175+ setScreenSize (tester, Size (450 , 1200 ));
176+ Key key = UniqueKey ();
177+ Widget widget = MaterialApp (
178+ home: ResponsiveWrapper (
179+ key: key,
180+ mediaQueryData:
181+ MediaQueryData (size: Size (600 , 1200 ), devicePixelRatio: 3 ),
182+ child: Container (),
183+ ),
184+ );
185+ await tester.pumpWidget (widget);
186+ await tester.pump ();
187+ MediaQuery mediaQuery = tester.widget (find.descendant (
188+ of: find.byKey (key), matching: find.byType (MediaQuery )));
189+ expect (mediaQuery.data.size, Size (600 , 1200 ));
190+
191+ // Pass MediaQueryData through builder.
192+ key = UniqueKey ();
193+ widget = MaterialApp (
194+ builder: (context, widget) => ResponsiveWrapper .builder (widget,
195+ mediaQueryData:
196+ MediaQueryData (size: Size (600 , 1200 ), devicePixelRatio: 3 )),
197+ home: Container (),
198+ );
199+ await tester.pumpWidget (widget);
200+ await tester.pump ();
201+ expect (
202+ find
203+ .byType (MediaQuery )
204+ .allCandidates
205+ .firstWhere ((element) => element.size == Size (600 , 1200 )),
206+ isNotNull);
207+ });
208+
209+ // Test maxWidth and minWidth values.
210+ testWidgets ('Max and Min Width' , (WidgetTester tester) async {
211+ // 0 value.
212+ setScreenSize (tester, Size (450 , 1200 ));
213+ Key key = UniqueKey ();
214+ Widget widget = MaterialApp (
215+ home: ResponsiveWrapper (
216+ key: key,
217+ defaultScale: true ,
218+ maxWidth: 0 ,
219+ minWidth: 0 ,
220+ child: Container (),
221+ ),
222+ );
223+ await tester.pumpWidget (widget);
224+ await tester.pump ();
225+ // Fallback to SizedBox.
226+ expect (find.byType (SizedBox ), findsOneWidget);
227+
228+ // Infinity value. (BoxConstraints forbid forcing double.infinity)
229+ key = UniqueKey ();
230+ widget = MaterialApp (
231+ home: ResponsiveWrapper (
232+ key: key,
233+ defaultScale: true ,
234+ maxWidth: 1073741823 ,
235+ minWidth: 1073741823 ,
236+ child: Container (),
237+ ),
238+ );
239+ await tester.pumpWidget (widget);
240+ await tester.pump ();
241+
242+ // maxWidth smaller than minWidth.
243+ // When defaultScale is false, minWidth is ignored.
244+ // If defaultScale is true, minWidth acts as a
245+ // scaleFactor multiplier when greater than maxWidth.
246+ key = UniqueKey ();
247+ widget = MaterialApp (
248+ home: ResponsiveWrapper (
249+ key: key,
250+ defaultScale: true ,
251+ maxWidth: 200 ,
252+ minWidth: 800 ,
253+ child: Container (),
254+ ),
255+ );
256+ await tester.pumpWidget (widget);
257+ await tester.pump ();
258+ dynamic state = tester.state (find.byKey (key));
259+ // Screen width is capped at maxWidth value.
260+ // Scale factor is 4.
261+ expect (state.screenWidth, 200 );
262+ });
263+ });
264+
265+ group ('ResponsiveBreakpoint' , () {
266+ // Test ResponsiveBreakpoint class parameters.
267+ test ('Parameters' , () {
268+ // Test empty breakpoint.
269+ ResponsiveBreakpoint responsiveBreakpoint =
270+ ResponsiveBreakpoint (breakpoint: null );
271+ // Test print empty.
272+ print (responsiveBreakpoint);
273+ expect (responsiveBreakpoint.breakpoint, null );
274+ expect (responsiveBreakpoint.autoScale, false );
275+ expect (responsiveBreakpoint.scaleFactor, 1 );
276+ expect (responsiveBreakpoint.name, null );
277+
278+ // Test setting parameters types.
279+ responsiveBreakpoint = ResponsiveBreakpoint (
280+ breakpoint: 600 , name: MOBILE , autoScale: true , scaleFactor: 1.2 );
281+ // Test print parameters.
282+ print (responsiveBreakpoint);
283+ });
284+
173285 // Test duplicate breakpoints.
174286 testWidgets ('Breakpoint Duplicate' , (WidgetTester tester) async {
175287 setScreenSize (tester, Size (450 , 1200 ));
@@ -258,55 +370,6 @@ void main() {
258370 // Negative breakpoints are not allowed.
259371 });
260372
261- // Test 0 screen width and height.
262- // Verify no errors are thrown.
263- testWidgets ('Screen Size 0' , (WidgetTester tester) async {
264- // Screen Width 0.
265- setScreenSize (tester, Size (0 , 1200 ));
266- Key key = UniqueKey ();
267- String defaultName = 'defaultName' ;
268- Widget widget = MaterialApp (
269- home: ResponsiveWrapper (
270- key: key,
271- defaultName: defaultName,
272- defaultScale: true ,
273- breakpoints: [
274- ResponsiveBreakpoint (breakpoint: 450 , name: MOBILE ),
275- ResponsiveBreakpoint (breakpoint: 600 , name: TABLET ),
276- ResponsiveBreakpoint (breakpoint: 800 , name: DESKTOP ),
277- ],
278- child: Container (),
279- ),
280- );
281- await tester.pumpWidget (widget);
282- await tester.pump ();
283- dynamic state = tester.state (find.byKey (key));
284- expect (state.activeBreakpoint? .name, defaultName);
285- MediaQuery mediaQuery = tester.widget (find.byType (MediaQuery ).first);
286- expect (mediaQuery.data.size, Size (0 , 1200 ));
287-
288- resetScreenSize (tester);
289- setScreenSize (tester, Size (450 , 0 ));
290- await tester.pump ();
291- state = tester.state (find.byKey (key));
292- expect (state.activeBreakpoint? .name, MOBILE );
293- mediaQuery = tester.widget (find.byType (MediaQuery ).first);
294- expect (mediaQuery.data.size, Size (450 , 0 ));
295-
296- resetScreenSize (tester);
297- setScreenSize (tester, Size (0 , 0 ));
298- await tester.pump ();
299- state = tester.state (find.byKey (key));
300- expect (state.activeBreakpoint? .breakpoint, null );
301- mediaQuery = tester.widget (find.byType (MediaQuery ).first);
302- expect (mediaQuery.data.size, Size (0 , 0 ));
303- });
304-
305- // Test infinite screen width and height.
306- testWidgets ('Screen Size Infinite' , (WidgetTester tester) async {
307- // Infinite screen width or height is not allowed.
308- }, skip: true );
309-
310373 // Test unnamed breakpoints.
311374 testWidgets ('Breakpoints Unnamed' , (WidgetTester tester) async {
312375 List <double > boundaryValues = [
@@ -402,23 +465,54 @@ void main() {
402465 expect (state.activeBreakpoint? .name, expectedValues[i]);
403466 }
404467 });
405- });
406468
407- test ('ResponsiveBreakpoint' , () {
408- // Test empty breakpoint.
409- ResponsiveBreakpoint responsiveBreakpoint =
410- ResponsiveBreakpoint (breakpoint: null );
411- // Test print empty.
412- print (responsiveBreakpoint);
413- expect (responsiveBreakpoint.breakpoint, null );
414- expect (responsiveBreakpoint.autoScale, false );
415- expect (responsiveBreakpoint.scaleFactor, 1 );
416- expect (responsiveBreakpoint.name, null );
469+ // Test 0 screen width and height.
470+ // Verify no errors are thrown.
471+ testWidgets ('Screen Size 0' , (WidgetTester tester) async {
472+ // Screen Width 0.
473+ setScreenSize (tester, Size (0 , 1200 ));
474+ Key key = UniqueKey ();
475+ String defaultName = 'defaultName' ;
476+ Widget widget = MaterialApp (
477+ home: ResponsiveWrapper (
478+ key: key,
479+ defaultName: defaultName,
480+ defaultScale: true ,
481+ breakpoints: [
482+ ResponsiveBreakpoint (breakpoint: 450 , name: MOBILE ),
483+ ResponsiveBreakpoint (breakpoint: 600 , name: TABLET ),
484+ ResponsiveBreakpoint (breakpoint: 800 , name: DESKTOP ),
485+ ],
486+ child: Container (),
487+ ),
488+ );
489+ await tester.pumpWidget (widget);
490+ await tester.pump ();
491+ dynamic state = tester.state (find.byKey (key));
492+ expect (state.activeBreakpoint? .name, defaultName);
493+ MediaQuery mediaQuery = tester.widget (find.byType (MediaQuery ).first);
494+ expect (mediaQuery.data.size, Size (0 , 1200 ));
417495
418- // Test setting parameters types.
419- responsiveBreakpoint = ResponsiveBreakpoint (
420- breakpoint: 600 , name: MOBILE , autoScale: true , scaleFactor: 1.2 );
421- // Test print parameters.
422- print (responsiveBreakpoint);
496+ resetScreenSize (tester);
497+ setScreenSize (tester, Size (450 , 0 ));
498+ await tester.pump ();
499+ state = tester.state (find.byKey (key));
500+ expect (state.activeBreakpoint? .name, MOBILE );
501+ mediaQuery = tester.widget (find.byType (MediaQuery ).first);
502+ expect (mediaQuery.data.size, Size (450 , 0 ));
503+
504+ resetScreenSize (tester);
505+ setScreenSize (tester, Size (0 , 0 ));
506+ await tester.pump ();
507+ state = tester.state (find.byKey (key));
508+ expect (state.activeBreakpoint? .breakpoint, null );
509+ mediaQuery = tester.widget (find.byType (MediaQuery ).first);
510+ expect (mediaQuery.data.size, Size (0 , 0 ));
511+ });
512+
513+ // Test infinite screen width and height.
514+ testWidgets ('Screen Size Infinite' , (WidgetTester tester) async {
515+ // Infinite screen width or height is not allowed.
516+ }, skip: true );
423517 });
424518}
0 commit comments