@@ -6,14 +6,22 @@ import 'package:flutter/services.dart';
6
6
import 'package:flutter/widgets.dart' ;
7
7
import 'package:flutter_test/flutter_test.dart' ;
8
8
9
- Future <Object ?>? Function (MethodCall )? _createWindowMethodCallHandler (WidgetTester tester) {
9
+ import '../rendering/proxy_box_test.dart' ;
10
+
11
+ Future <Object ?>? Function (MethodCall )? _createWindowMethodCallHandler ({
12
+ required WidgetTester tester,
13
+ void Function (MethodCall )? onMethodCall,
14
+ }) {
10
15
return (MethodCall call) async {
16
+ onMethodCall? .call (call);
11
17
final Map <Object ?, Object ?> args = call.arguments as Map <Object ?, Object ?>;
12
18
if (call.method == 'createWindow' ) {
13
19
final List <Object ?> size = args['size' ]! as List <Object ?>;
14
20
final String state = args['state' ] as String ? ?? WindowState .restored.toString ();
15
21
16
22
return < String , Object ? > {'viewId' : tester.view.viewId, 'size' : size, 'state' : state};
23
+ } else if (call.method == 'modifyRegular' ) {
24
+ return null ;
17
25
} else if (call.method == 'destroyWindow' ) {
18
26
await tester.binding.defaultBinaryMessenger.handlePlatformMessage (
19
27
SystemChannels .windowing.name,
@@ -38,18 +46,10 @@ void main() {
38
46
39
47
tester.binding.defaultBinaryMessenger.setMockMethodCallHandler (
40
48
SystemChannels .windowing,
41
- _createWindowMethodCallHandler (tester),
49
+ _createWindowMethodCallHandler (tester: tester ),
42
50
);
43
51
44
52
final RegularWindowController controller = RegularWindowController (size: windowSize);
45
- await tester.pumpWidget (
46
- wrapWithView: false ,
47
- Builder (
48
- builder: (BuildContext context) {
49
- return RegularWindow (controller: controller, child: Container ());
50
- },
51
- ),
52
- );
53
53
54
54
await tester.pump ();
55
55
@@ -89,7 +89,7 @@ void main() {
89
89
90
90
tester.binding.defaultBinaryMessenger.setMockMethodCallHandler (
91
91
SystemChannels .windowing,
92
- _createWindowMethodCallHandler (tester),
92
+ _createWindowMethodCallHandler (tester: tester ),
93
93
);
94
94
95
95
bool destroyed = false ;
@@ -123,19 +123,10 @@ void main() {
123
123
124
124
tester.binding.defaultBinaryMessenger.setMockMethodCallHandler (
125
125
SystemChannels .windowing,
126
- _createWindowMethodCallHandler (tester),
126
+ _createWindowMethodCallHandler (tester: tester ),
127
127
);
128
128
129
129
final RegularWindowController controller = RegularWindowController (size: initialSize);
130
- await tester.pumpWidget (
131
- wrapWithView: false ,
132
- Builder (
133
- builder: (BuildContext context) {
134
- return RegularWindow (controller: controller, child: Container ());
135
- },
136
- ),
137
- );
138
-
139
130
await tester.pump ();
140
131
141
132
await tester.binding.defaultBinaryMessenger.handlePlatformMessage (
@@ -153,4 +144,140 @@ void main() {
153
144
expect (controller.size, newSize);
154
145
},
155
146
);
147
+
148
+ testWidgets ('RegularWindowController.modify can be called when provided with a "size" argument' , (
149
+ WidgetTester tester,
150
+ ) async {
151
+ const Size initialSize = Size (800 , 600 );
152
+ const Size newSize = Size (400 , 300 );
153
+
154
+ bool wasCalled = false ;
155
+ tester.binding.defaultBinaryMessenger.setMockMethodCallHandler (
156
+ SystemChannels .windowing,
157
+ _createWindowMethodCallHandler (
158
+ tester: tester,
159
+ onMethodCall: (MethodCall call) {
160
+ if (call.method != 'modifyRegular' ) {
161
+ return ;
162
+ }
163
+
164
+ final Map <Object ?, Object ?> args = call.arguments as Map <Object ?, Object ?>;
165
+ final int viewId = args['viewId' ]! as int ;
166
+ final List <Object ?>? size = args['size' ] as List <Object ?>? ;
167
+ final String ? title = args['title' ] as String ? ;
168
+ final String ? state = args['state' ] as String ? ;
169
+ expect (viewId, tester.view.viewId);
170
+ expect (size, < double > [newSize.width, newSize.height]);
171
+ expect (title, null );
172
+ expect (state, null );
173
+ wasCalled = true ;
174
+ },
175
+ ),
176
+ );
177
+
178
+ final RegularWindowController controller = RegularWindowController (size: initialSize);
179
+ await tester.pump ();
180
+
181
+ await controller.modify (size: newSize);
182
+ await tester.pump ();
183
+
184
+ expect (wasCalled, true );
185
+ });
186
+
187
+ testWidgets (
188
+ 'RegularWindowController.modify can be called when provided with a "title" argument' ,
189
+ (WidgetTester tester) async {
190
+ const Size initialSize = Size (800 , 600 );
191
+ const String newTitle = 'New Title' ;
192
+
193
+ bool wasCalled = false ;
194
+ tester.binding.defaultBinaryMessenger.setMockMethodCallHandler (
195
+ SystemChannels .windowing,
196
+ _createWindowMethodCallHandler (
197
+ tester: tester,
198
+ onMethodCall: (MethodCall call) {
199
+ if (call.method != 'modifyRegular' ) {
200
+ return ;
201
+ }
202
+
203
+ final Map <Object ?, Object ?> args = call.arguments as Map <Object ?, Object ?>;
204
+ final int viewId = args['viewId' ]! as int ;
205
+ final List <Object ?>? size = args['size' ] as List <Object ?>? ;
206
+ final String ? title = args['title' ] as String ? ;
207
+ final String ? state = args['state' ] as String ? ;
208
+ expect (viewId, tester.view.viewId);
209
+ expect (size, null );
210
+ expect (title, newTitle);
211
+ expect (state, null );
212
+ wasCalled = true ;
213
+ },
214
+ ),
215
+ );
216
+
217
+ final RegularWindowController controller = RegularWindowController (size: initialSize);
218
+ await tester.pump ();
219
+
220
+ await controller.modify (title: newTitle);
221
+ await tester.pump ();
222
+
223
+ expect (wasCalled, true );
224
+ },
225
+ );
226
+
227
+ testWidgets (
228
+ 'RegularWindowController.modify can be called when provided with a "state" argument' ,
229
+ (WidgetTester tester) async {
230
+ const Size initialSize = Size (800 , 600 );
231
+ const WindowState newState = WindowState .minimized;
232
+
233
+ bool wasCalled = false ;
234
+ tester.binding.defaultBinaryMessenger.setMockMethodCallHandler (
235
+ SystemChannels .windowing,
236
+ _createWindowMethodCallHandler (
237
+ tester: tester,
238
+ onMethodCall: (MethodCall call) {
239
+ if (call.method != 'modifyRegular' ) {
240
+ return ;
241
+ }
242
+
243
+ final Map <Object ?, Object ?> args = call.arguments as Map <Object ?, Object ?>;
244
+ final int viewId = args['viewId' ]! as int ;
245
+ final List <Object ?>? size = args['size' ] as List <Object ?>? ;
246
+ final String ? title = args['title' ] as String ? ;
247
+ final String ? state = args['state' ] as String ? ;
248
+ expect (viewId, tester.view.viewId);
249
+ expect (size, null );
250
+ expect (title, null );
251
+ expect (state, newState.toString ());
252
+ wasCalled = true ;
253
+ },
254
+ ),
255
+ );
256
+
257
+ final RegularWindowController controller = RegularWindowController (size: initialSize);
258
+ await tester.pump ();
259
+
260
+ await controller.modify (state: newState);
261
+ await tester.pump ();
262
+
263
+ expect (wasCalled, true );
264
+ },
265
+ );
266
+
267
+ testWidgets ('RegularWindowController.modify throws when no arguments are provided' , (
268
+ WidgetTester tester,
269
+ ) async {
270
+ const Size initialSize = Size (800 , 600 );
271
+ const WindowState newState = WindowState .minimized;
272
+
273
+ tester.binding.defaultBinaryMessenger.setMockMethodCallHandler (
274
+ SystemChannels .windowing,
275
+ _createWindowMethodCallHandler (tester: tester),
276
+ );
277
+
278
+ final RegularWindowController controller = RegularWindowController (size: initialSize);
279
+ await tester.pump ();
280
+
281
+ expect (() async => controller.modify (), throwsA (isA <AssertionError >()));
282
+ });
156
283
}
0 commit comments