Skip to content

Commit 328c7a1

Browse files
committed
Responsive Wrapper Test Creation #5
1 parent a51c093 commit 328c7a1

File tree

2 files changed

+265
-6
lines changed

2 files changed

+265
-6
lines changed

README.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -154,7 +154,7 @@ Now you can proudly display the time and headache saved by using Responsive Fram
154154
155155
<img alt="Built Responsive" src="https://raw.githubusercontent.com/Codelessly/ResponsiveFramework/master/packages/Built%20Responsive%20Badge.png"/>
156156
157-
<a href="https://raw.githubusercontent.com/Codelessly/ResponsiveFramework/master/packages/Built%20Responsive%20Badge.png" download>
157+
<a id="raw-url" href="https://raw.githubusercontent.com/Codelessly/ResponsiveFramework/master/packages/Built%20Responsive%20Badge.png">
158158
<p>Download</p>
159159
</a>
160160
@@ -167,7 +167,7 @@ Now you can proudly display the time and headache saved by using Responsive Fram
167167

168168
<img alt="Built with Responsive Framework" src="https://raw.githubusercontent.com/Codelessly/ResponsiveFramework/master/packages/Built%20with%20Responsive%20Badge.png"/>
169169

170-
<a href="https://raw.githubusercontent.com/Codelessly/ResponsiveFramework/master/packages/Built%20with%20Responsive%20Badge.png" download>
170+
<a id="raw-url" href="https://raw.githubusercontent.com/Codelessly/ResponsiveFramework/master/packages/Built%20with%20Responsive%20Badge.png">
171171
<p>Download</p>
172172
</a>
173173

test/responsive_wrapper_test.dart

Lines changed: 263 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,3 @@
1-
// Test Breakpoint and MaxWidth collision.
2-
// ResponsiveBreakpoint(breakpoint: 1200, scaleFactor: 2)
3-
// maxWidth: 1200
4-
// Expected Result: UI Scales 2x at 1200.
51
import 'package:flutter/material.dart';
62
import 'package:flutter_test/flutter_test.dart';
73
import 'package:responsive_framework/responsive_framework.dart';
@@ -38,6 +34,36 @@ void main() {
3834
expect(mediaQueryData.data.size, Size(450, 1200));
3935
});
4036

37+
// Verify empty wrapper does nothing.
38+
testWidgets('Empty', (WidgetTester tester) async {
39+
setScreenSize(tester, Size(450, 1200));
40+
Key key = UniqueKey();
41+
Widget widget = MaterialApp(
42+
builder: (context, widget) => ResponsiveWrapper.builder(
43+
widget,
44+
),
45+
home: Container(),
46+
);
47+
await tester.pumpWidget(widget);
48+
await tester.pump();
49+
ResponsiveWrapper responsiveWrapper =
50+
tester.widget(find.byType(ResponsiveWrapper));
51+
// Confirm defaults.
52+
expect(responsiveWrapper.breakpoints, null);
53+
expect(responsiveWrapper.background, null);
54+
expect(responsiveWrapper.minWidth, 450);
55+
expect(responsiveWrapper.maxWidth, null);
56+
expect(responsiveWrapper.defaultName, null);
57+
expect(responsiveWrapper.defaultScale, false);
58+
expect(responsiveWrapper.defaultScaleFactor, 1);
59+
expect(responsiveWrapper.mediaQueryData, null);
60+
// Verify dimensions unchanged.
61+
MediaQuery mediaQueryData = tester.widget(find.descendant(
62+
of: find.byType(ResponsiveWrapper),
63+
matching: find.byType(MediaQuery)));
64+
expect(mediaQueryData.data.size, Size(450, 1200));
65+
});
66+
4167
// Verify initialization returns [SizedBox.shrink].
4268
testWidgets('Initialization', (WidgetTester tester) async {
4369
setScreenSize(tester, Size(450, 1200));
@@ -143,6 +169,239 @@ void main() {
143169
expect(state.activeBreakpoint?.name, expectedValues[i]);
144170
}
145171
});
172+
173+
// Test duplicate breakpoints.
174+
testWidgets('Breakpoint Duplicate', (WidgetTester tester) async {
175+
setScreenSize(tester, Size(450, 1200));
176+
Key key = UniqueKey();
177+
Widget widget = MaterialApp(
178+
home: ResponsiveWrapper(
179+
key: key,
180+
defaultScale: true,
181+
breakpoints: [
182+
ResponsiveBreakpoint(breakpoint: 600),
183+
ResponsiveBreakpoint(breakpoint: 450),
184+
ResponsiveBreakpoint(breakpoint: 450),
185+
ResponsiveBreakpoint(breakpoint: 450),
186+
ResponsiveBreakpoint(breakpoint: 450),
187+
ResponsiveBreakpoint(breakpoint: 450),
188+
ResponsiveBreakpoint(breakpoint: 450),
189+
],
190+
child: Container(),
191+
),
192+
);
193+
await tester.pumpWidget(widget);
194+
await tester.pump();
195+
dynamic state = tester.state(find.byKey(key));
196+
expect(state.activeBreakpoint?.breakpoint, 450);
197+
198+
resetScreenSize(tester);
199+
setScreenSize(tester, Size(600, 1200));
200+
await tester.pump();
201+
state = tester.state(find.byKey(key));
202+
expect(state.activeBreakpoint?.breakpoint, 600);
203+
204+
// Test duplicate named breakpoints.
205+
resetScreenSize(tester);
206+
setScreenSize(tester, Size(450, 1200));
207+
await tester.pump();
208+
key = UniqueKey();
209+
widget = MaterialApp(
210+
home: ResponsiveWrapper(
211+
key: key,
212+
defaultScale: true,
213+
breakpoints: [
214+
ResponsiveBreakpoint(breakpoint: 600, name: TABLET),
215+
ResponsiveBreakpoint(breakpoint: 450, name: MOBILE),
216+
ResponsiveBreakpoint(breakpoint: 450, name: MOBILE),
217+
ResponsiveBreakpoint(breakpoint: 450, name: MOBILE),
218+
ResponsiveBreakpoint(breakpoint: 450, name: MOBILE),
219+
ResponsiveBreakpoint(breakpoint: 450, name: MOBILE),
220+
ResponsiveBreakpoint(breakpoint: 450, name: MOBILE),
221+
],
222+
child: Container(),
223+
),
224+
);
225+
await tester.pumpWidget(widget);
226+
await tester.pump();
227+
state = tester.state(find.byKey(key));
228+
expect(state.activeBreakpoint?.name, MOBILE);
229+
230+
resetScreenSize(tester);
231+
setScreenSize(tester, Size(600, 1200));
232+
await tester.pump();
233+
state = tester.state(find.byKey(key));
234+
expect(state.activeBreakpoint?.name, TABLET);
235+
});
236+
237+
// Test breakpoint bounds (0, infinity)
238+
testWidgets('Breakpoint Bounds', (WidgetTester tester) async {
239+
setScreenSize(tester, Size(450, 1200));
240+
Key key = UniqueKey();
241+
String defaultName = 'defaultName';
242+
Widget widget = MaterialApp(
243+
home: ResponsiveWrapper(
244+
key: key,
245+
defaultName: defaultName,
246+
defaultScale: true,
247+
breakpoints: [
248+
ResponsiveBreakpoint(breakpoint: 0, name: "0"),
249+
ResponsiveBreakpoint(breakpoint: 1073741823, name: "Infinity"),
250+
],
251+
child: Container(),
252+
),
253+
);
254+
await tester.pumpWidget(widget);
255+
await tester.pump();
256+
dynamic state = tester.state(find.byKey(key));
257+
expect(state.activeBreakpoint?.name, "0");
258+
// Negative breakpoints are not allowed.
259+
});
260+
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+
310+
// Test unnamed breakpoints.
311+
testWidgets('Breakpoints Unnamed', (WidgetTester tester) async {
312+
List<double> boundaryValues = [
313+
449,
314+
450,
315+
451,
316+
599,
317+
600,
318+
601,
319+
799,
320+
800,
321+
801,
322+
];
323+
List<dynamic> expectedValues = [
324+
null,
325+
450,
326+
450,
327+
450,
328+
600,
329+
600,
330+
600,
331+
800,
332+
800,
333+
];
334+
335+
for (var i = 0; i < boundaryValues.length; i++) {
336+
resetScreenSize(tester);
337+
setScreenSize(tester, Size(boundaryValues[i], 1200));
338+
await tester.pump();
339+
UniqueKey key = UniqueKey();
340+
Widget widget = MaterialApp(
341+
home: ResponsiveWrapper(
342+
key: key,
343+
breakpoints: [
344+
ResponsiveBreakpoint(breakpoint: 450),
345+
ResponsiveBreakpoint(breakpoint: 600),
346+
ResponsiveBreakpoint(breakpoint: 800),
347+
],
348+
child: Container(),
349+
),
350+
);
351+
await tester.pumpWidget(widget);
352+
await tester.pump();
353+
dynamic state = tester.state(find.byKey(key));
354+
expect(state.activeBreakpoint?.breakpoint, expectedValues[i]);
355+
}
356+
});
357+
358+
// Test named breakpoints.
359+
testWidgets('Breakpoints Named', (WidgetTester tester) async {
360+
List<double> boundaryValues = [
361+
449,
362+
450,
363+
451,
364+
599,
365+
600,
366+
601,
367+
799,
368+
800,
369+
801
370+
];
371+
List<dynamic> expectedValues = [
372+
null,
373+
MOBILE,
374+
MOBILE,
375+
MOBILE,
376+
TABLET,
377+
TABLET,
378+
TABLET,
379+
DESKTOP,
380+
DESKTOP
381+
];
382+
383+
for (var i = 0; i < boundaryValues.length; i++) {
384+
resetScreenSize(tester);
385+
setScreenSize(tester, Size(boundaryValues[i], 1200));
386+
await tester.pump();
387+
UniqueKey key = UniqueKey();
388+
Widget widget = MaterialApp(
389+
home: ResponsiveWrapper(
390+
key: key,
391+
breakpoints: [
392+
ResponsiveBreakpoint(breakpoint: 450, name: MOBILE),
393+
ResponsiveBreakpoint(breakpoint: 600, name: TABLET),
394+
ResponsiveBreakpoint(breakpoint: 800, name: DESKTOP),
395+
],
396+
child: Container(),
397+
),
398+
);
399+
await tester.pumpWidget(widget);
400+
await tester.pump();
401+
dynamic state = tester.state(find.byKey(key));
402+
expect(state.activeBreakpoint?.name, expectedValues[i]);
403+
}
404+
});
146405
});
147406

148407
test('ResponsiveBreakpoint', () {

0 commit comments

Comments
 (0)