|
| 1 | +import 'package:flutter/foundation.dart'; |
1 | 2 | import 'package:flutter/material.dart'; |
2 | 3 | import 'package:flutter_test/flutter_test.dart'; |
3 | 4 | import 'package:responsive_framework/responsive_framework.dart'; |
| 5 | +import 'package:responsive_framework/utils/responsive_utils.dart'; |
4 | 6 |
|
5 | 7 | import 'test_utils.dart'; |
6 | 8 |
|
@@ -827,4 +829,279 @@ void main() { |
827 | 829 | false); |
828 | 830 | }); |
829 | 831 | }); |
| 832 | + |
| 833 | + group('Landscape Mode', () { |
| 834 | + // Test if platform correctly detects landscape mode. |
| 835 | + testWidgets('Landscape Platform Android', (WidgetTester tester) async { |
| 836 | + // Width is greater than height. |
| 837 | + setScreenSize(tester, Size(1200, 800)); |
| 838 | + |
| 839 | + // Set target platform to Android. |
| 840 | + debugDefaultTargetPlatformOverride = TargetPlatform.android; |
| 841 | + |
| 842 | + Key key = UniqueKey(); |
| 843 | + Widget widget = Builder( |
| 844 | + builder: (context) { |
| 845 | + return MaterialApp( |
| 846 | + home: ResponsiveWrapper( |
| 847 | + key: key, |
| 848 | + breakpoints: [], |
| 849 | + child: Container(), |
| 850 | + shrinkWrap: false, |
| 851 | + ), |
| 852 | + ); |
| 853 | + }, |
| 854 | + ); |
| 855 | + await tester.pumpWidget(widget); |
| 856 | + await tester.pump(); |
| 857 | + dynamic state = tester.state(find.byKey(key)); |
| 858 | + // Landscape supported in Android by default. |
| 859 | + expect(state.isLandscapePlatform, true); |
| 860 | + |
| 861 | + // Unset global to avoid crash. |
| 862 | + debugDefaultTargetPlatformOverride = null; |
| 863 | + }); |
| 864 | + |
| 865 | + testWidgets('Landscape Platform iOS', (WidgetTester tester) async { |
| 866 | + // Width is greater than height. |
| 867 | + setScreenSize(tester, Size(1200, 800)); |
| 868 | + |
| 869 | + // Set target platform to Android. |
| 870 | + debugDefaultTargetPlatformOverride = TargetPlatform.iOS; |
| 871 | + |
| 872 | + Key key = UniqueKey(); |
| 873 | + Widget widget = Builder( |
| 874 | + builder: (context) { |
| 875 | + return MaterialApp( |
| 876 | + home: ResponsiveWrapper( |
| 877 | + key: key, |
| 878 | + breakpoints: [], |
| 879 | + child: Container(), |
| 880 | + shrinkWrap: false, |
| 881 | + ), |
| 882 | + ); |
| 883 | + }, |
| 884 | + ); |
| 885 | + await tester.pumpWidget(widget); |
| 886 | + await tester.pump(); |
| 887 | + dynamic state = tester.state(find.byKey(key)); |
| 888 | + // Landscape supported in Android by default. |
| 889 | + expect(state.isLandscapePlatform, true); |
| 890 | + |
| 891 | + // Unset global to avoid crash. |
| 892 | + debugDefaultTargetPlatformOverride = null; |
| 893 | + }); |
| 894 | + |
| 895 | + testWidgets('Landscape Platform Windows', (WidgetTester tester) async { |
| 896 | + // Width is greater than height. |
| 897 | + setScreenSize(tester, Size(1200, 800)); |
| 898 | + |
| 899 | + // Set target platform to Windows. |
| 900 | + debugDefaultTargetPlatformOverride = TargetPlatform.windows; |
| 901 | + |
| 902 | + Key key = UniqueKey(); |
| 903 | + Widget widget = Builder( |
| 904 | + builder: (context) { |
| 905 | + return MaterialApp( |
| 906 | + home: ResponsiveWrapper( |
| 907 | + key: key, |
| 908 | + breakpoints: [], |
| 909 | + child: Container(), |
| 910 | + shrinkWrap: false, |
| 911 | + ), |
| 912 | + // Set target platform to Windows. |
| 913 | + ); |
| 914 | + }, |
| 915 | + ); |
| 916 | + await tester.pumpWidget(widget); |
| 917 | + await tester.pump(); |
| 918 | + dynamic state = tester.state(find.byKey(key)); |
| 919 | + // Landscape not supported in windows by default. |
| 920 | + expect(state.isLandscapePlatform, false); |
| 921 | + |
| 922 | + // Unset global to avoid crash. |
| 923 | + debugDefaultTargetPlatformOverride = null; |
| 924 | + }); |
| 925 | + |
| 926 | + testWidgets('Landscape Platform Web', (WidgetTester tester) async { |
| 927 | + // TODO: How to simulate test on web? |
| 928 | + }); |
| 929 | + |
| 930 | + // Test landscape platforms override |
| 931 | + testWidgets('Landscape Platform Override', (WidgetTester tester) async { |
| 932 | + // Width is greater than height. |
| 933 | + setScreenSize(tester, Size(1200, 800)); |
| 934 | + |
| 935 | + // Set target platform to Windows. |
| 936 | + debugDefaultTargetPlatformOverride = TargetPlatform.windows; |
| 937 | + |
| 938 | + Key key = UniqueKey(); |
| 939 | + Widget widget = Builder( |
| 940 | + builder: (context) { |
| 941 | + return MaterialApp( |
| 942 | + home: ResponsiveWrapper( |
| 943 | + key: key, |
| 944 | + breakpoints: [], |
| 945 | + shrinkWrap: false, |
| 946 | + // Override platform to enable landscape on windows. |
| 947 | + landscapePlatforms: [ResponsiveTargetPlatform.windows], |
| 948 | + child: Container(), |
| 949 | + ), |
| 950 | + // Set target platform to Windows. |
| 951 | + ); |
| 952 | + }, |
| 953 | + ); |
| 954 | + await tester.pumpWidget(widget); |
| 955 | + await tester.pump(); |
| 956 | + dynamic state = tester.state(find.byKey(key)); |
| 957 | + expect(state.isLandscapePlatform, true); |
| 958 | + |
| 959 | + // Unset global to avoid crash. |
| 960 | + debugDefaultTargetPlatformOverride = null; |
| 961 | + }); |
| 962 | + |
| 963 | + testWidgets('isLandscape Function', (WidgetTester tester) async { |
| 964 | + // Width is greater than height. |
| 965 | + setScreenSize(tester, Size(1200, 800)); |
| 966 | + |
| 967 | + // Set target platform to Android. |
| 968 | + debugDefaultTargetPlatformOverride = TargetPlatform.iOS; |
| 969 | + |
| 970 | + Key key = UniqueKey(); |
| 971 | + Widget widget = Builder( |
| 972 | + builder: (context) { |
| 973 | + return MaterialApp( |
| 974 | + home: ResponsiveWrapper( |
| 975 | + key: key, |
| 976 | + breakpoints: [], |
| 977 | + breakpointsLandscape: [ |
| 978 | + ResponsiveBreakpoint.autoScale(800), |
| 979 | + ], |
| 980 | + child: Container(), |
| 981 | + shrinkWrap: false, |
| 982 | + ), |
| 983 | + ); |
| 984 | + }, |
| 985 | + ); |
| 986 | + await tester.pumpWidget(widget); |
| 987 | + await tester.pump(); |
| 988 | + dynamic state = tester.state(find.byKey(key)); |
| 989 | + // Landscape supported in Android by default. |
| 990 | + expect(state.isLandscape, true); |
| 991 | + |
| 992 | + // Switch to portrait. |
| 993 | + setScreenSize(tester, Size(800, 1200)); |
| 994 | + await tester.pump(); |
| 995 | + state = tester.state(find.byKey(key)); |
| 996 | + expect(state.isLandscape, false); |
| 997 | + |
| 998 | + // Unset global to avoid crash. |
| 999 | + debugDefaultTargetPlatformOverride = null; |
| 1000 | + }); |
| 1001 | + |
| 1002 | + // Text active breakpoints. |
| 1003 | + testWidgets('Landscape Active Breakpoints', (WidgetTester tester) async { |
| 1004 | + // Width is greater than height. |
| 1005 | + setScreenSize(tester, Size(1200, 800)); |
| 1006 | + |
| 1007 | + // Set target platform to Android. |
| 1008 | + debugDefaultTargetPlatformOverride = TargetPlatform.iOS; |
| 1009 | + |
| 1010 | + List<ResponsiveBreakpoint> breakpoints = [ |
| 1011 | + ResponsiveBreakpoint.autoScale(400), |
| 1012 | + ResponsiveBreakpoint.autoScale(800), |
| 1013 | + ResponsiveBreakpoint.autoScale(1200), |
| 1014 | + ]; |
| 1015 | + |
| 1016 | + Key key = UniqueKey(); |
| 1017 | + Widget widget = Builder( |
| 1018 | + builder: (context) { |
| 1019 | + return MaterialApp( |
| 1020 | + home: ResponsiveWrapper( |
| 1021 | + key: key, |
| 1022 | + breakpoints: [], |
| 1023 | + breakpointsLandscape: breakpoints, |
| 1024 | + child: Container(), |
| 1025 | + shrinkWrap: false, |
| 1026 | + ), |
| 1027 | + ); |
| 1028 | + }, |
| 1029 | + ); |
| 1030 | + await tester.pumpWidget(widget); |
| 1031 | + await tester.pump(); |
| 1032 | + dynamic state = tester.state(find.byKey(key)); |
| 1033 | + expect(state.breakpoints, breakpoints); |
| 1034 | + |
| 1035 | + // Unset global to avoid crash. |
| 1036 | + debugDefaultTargetPlatformOverride = null; |
| 1037 | + }); |
| 1038 | + |
| 1039 | + // Test switch active breakpoints. |
| 1040 | + testWidgets('Landscape Switch Breakpoints', (WidgetTester tester) async { |
| 1041 | + // Width is greater than height. |
| 1042 | + setScreenSize(tester, Size(1200, 800)); |
| 1043 | + |
| 1044 | + // Set target platform to Android. |
| 1045 | + debugDefaultTargetPlatformOverride = TargetPlatform.iOS; |
| 1046 | + |
| 1047 | + List<ResponsiveBreakpoint> breakpoints = [ |
| 1048 | + ResponsiveBreakpoint.autoScale(600), |
| 1049 | + ResponsiveBreakpoint.autoScale(700), |
| 1050 | + ResponsiveBreakpoint.autoScale(1000), |
| 1051 | + ]; |
| 1052 | + |
| 1053 | + List<ResponsiveBreakpoint> breakpointsLandscape = [ |
| 1054 | + ResponsiveBreakpoint.autoScale(400), |
| 1055 | + ResponsiveBreakpoint.autoScale(800), |
| 1056 | + ResponsiveBreakpoint.autoScale(1200), |
| 1057 | + ]; |
| 1058 | + |
| 1059 | + Key key = UniqueKey(); |
| 1060 | + Widget widget = Builder( |
| 1061 | + builder: (context) { |
| 1062 | + return MaterialApp( |
| 1063 | + home: ResponsiveWrapper( |
| 1064 | + key: key, |
| 1065 | + breakpoints: breakpoints, |
| 1066 | + breakpointsLandscape: breakpointsLandscape, |
| 1067 | + minWidth: 400, |
| 1068 | + minWidthLandscape: 800, |
| 1069 | + maxWidth: 1200, |
| 1070 | + maxWidthLandscape: 2560, |
| 1071 | + defaultScale: true, |
| 1072 | + defaultScaleLandscape: false, |
| 1073 | + defaultScaleFactor: 0.8, |
| 1074 | + defaultScaleFactorLandscape: 1.2, |
| 1075 | + defaultName: 'PORTRAIT', |
| 1076 | + defaultNameLandscape: 'LANDSCAPE', |
| 1077 | + child: Container(), |
| 1078 | + shrinkWrap: false, |
| 1079 | + ), |
| 1080 | + ); |
| 1081 | + }, |
| 1082 | + ); |
| 1083 | + await tester.pumpWidget(widget); |
| 1084 | + await tester.pump(); |
| 1085 | + dynamic state = tester.state(find.byKey(key)); |
| 1086 | + expect(state.breakpoints, breakpointsLandscape); |
| 1087 | + expect(state.minWidth, 800); |
| 1088 | + expect(state.maxWidth, 2560); |
| 1089 | + expect(state.defaultScale, false); |
| 1090 | + expect(state.defaultScaleFactor, 1.2); |
| 1091 | + expect(state.defaultName, 'LANDSCAPE'); |
| 1092 | + |
| 1093 | + resetScreenSize(tester); |
| 1094 | + setScreenSize(tester, Size(600, 1200)); |
| 1095 | + await tester.pump(); |
| 1096 | + expect(state.breakpoints, breakpoints); |
| 1097 | + expect(state.minWidth, 400); |
| 1098 | + expect(state.maxWidth, 1200); |
| 1099 | + expect(state.defaultScale, true); |
| 1100 | + expect(state.defaultScaleFactor, 0.8); |
| 1101 | + expect(state.defaultName, 'PORTRAIT'); |
| 1102 | + |
| 1103 | + // Unset global to avoid crash. |
| 1104 | + debugDefaultTargetPlatformOverride = null; |
| 1105 | + }); |
| 1106 | + }); |
830 | 1107 | } |
0 commit comments