Skip to content

Commit 88859a8

Browse files
[pigeon] Add Flutter API integration tests (flutter#3066)
* Add the new wrapper APIs * Regenerate files * Add the new integration tests * macOS Swift implementation * iOS Swift implementation * Android Kotlin implementation; some tests disabled * Android Java implementation * iOS Obj-C implementation * Windows C++ implementation
1 parent c68bf70 commit 88859a8

File tree

18 files changed

+3869
-57
lines changed

18 files changed

+3869
-57
lines changed

packages/pigeon/pigeons/core_tests.dart

Lines changed: 66 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -187,16 +187,76 @@ abstract class HostIntegrationCoreApi {
187187
@async
188188
void callFlutterNoop();
189189

190+
@async
191+
@ObjCSelector('callFlutterEchoAllTypes:')
192+
AllTypes callFlutterEchoAllTypes(AllTypes everything);
193+
194+
// TODO(stuartmorgan): Add callFlutterEchoAllNullableTypes and the associated
195+
// test once either https://github.com/flutter/flutter/issues/116117 is fixed,
196+
// or the problematic type is moved out of AllNullableTypes and into its own
197+
// test, since the type mismatch breaks the second `encode` round.
198+
199+
@async
200+
@ObjCSelector('callFlutterSendMultipleNullableTypesABool:anInt:aString:')
201+
AllNullableTypes callFlutterSendMultipleNullableTypes(
202+
bool? aNullableBool, int? aNullableInt, String? aNullableString);
203+
204+
@async
205+
@ObjCSelector('callFlutterEchoBool:')
206+
bool callFlutterEchoBool(bool aBool);
207+
208+
@async
209+
@ObjCSelector('callFlutterEchoInt:')
210+
int callFlutterEchoInt(int anInt);
211+
212+
@async
213+
@ObjCSelector('callFlutterEchoDouble:')
214+
double callFlutterEchoDouble(double aDouble);
215+
190216
@async
191217
@ObjCSelector('callFlutterEchoString:')
192218
String callFlutterEchoString(String aString);
193219

194-
// TODO(stuartmorgan): Add callFlutterEchoAllTypes and the associated test
195-
// once either https://github.com/flutter/flutter/issues/116117 is fixed, or
196-
// the problematic type is moved out of AllTypes and into its own test, since
197-
// the type mismatch breaks the second `encode` round.
220+
@async
221+
@ObjCSelector('callFlutterEchoUint8List:')
222+
Uint8List callFlutterEchoUint8List(Uint8List aList);
223+
224+
@async
225+
@ObjCSelector('callFlutterEchoList:')
226+
List<Object?> callFlutterEchoList(List<Object?> aList);
227+
228+
@async
229+
@ObjCSelector('callFlutterEchoMap:')
230+
Map<String?, Object?> callFlutterEchoMap(Map<String?, Object?> aMap);
231+
232+
@async
233+
@ObjCSelector('callFlutterEchoNullableBool:')
234+
bool? callFlutterEchoNullableBool(bool? aBool);
235+
236+
@async
237+
@ObjCSelector('callFlutterEchoNullableInt:')
238+
int? callFlutterEchoNullableInt(int? anInt);
239+
240+
@async
241+
@ObjCSelector('callFlutterEchoNullableDouble:')
242+
double? callFlutterEchoNullableDouble(double? aDouble);
198243

199-
// TODO(stuartmorgan): Fill in the rest of the callFlutterEcho* tests.
244+
@async
245+
@ObjCSelector('callFlutterEchoNullableString:')
246+
String? callFlutterEchoNullableString(String? aString);
247+
248+
@async
249+
@ObjCSelector('callFlutterEchoNullableUint8List:')
250+
Uint8List? callFlutterEchoNullableUint8List(Uint8List? aList);
251+
252+
@async
253+
@ObjCSelector('callFlutterEchoNullableList:')
254+
List<Object?>? callFlutterEchoNullableList(List<Object?>? aList);
255+
256+
@async
257+
@ObjCSelector('callFlutterEchoNullableMap:')
258+
Map<String?, Object?>? callFlutterEchoNullableMap(
259+
Map<String?, Object?>? aMap);
200260
}
201261

202262
/// The core interface that the Dart platform_test code implements for host
@@ -280,7 +340,7 @@ abstract class FlutterIntegrationCoreApi {
280340

281341
/// Returns the passed map, to test serialization and deserialization.
282342
@ObjCSelector('echoNullableMap:')
283-
Map<String?, Object?> echoNullableMap(Map<String?, Object?> aMap);
343+
Map<String?, Object?>? echoNullableMap(Map<String?, Object?>? aMap);
284344
}
285345

286346
/// An API that can be implemented for minimal, compile-only tests.

packages/pigeon/platform_tests/alternate_language_test_plugin/android/src/main/java/com/example/alternate_language_test_plugin/AlternateLanguageTestPlugin.java

Lines changed: 176 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,8 @@
1313
import com.example.alternate_language_test_plugin.CoreTests.HostIntegrationCoreApi;
1414
import com.example.alternate_language_test_plugin.CoreTests.Result;
1515
import io.flutter.embedding.engine.plugins.FlutterPlugin;
16+
import java.util.List;
17+
import java.util.Map;
1618

1719
/** This plugin handles the native side of the integration tests in example/integration_test/. */
1820
public class AlternateLanguageTestPlugin implements FlutterPlugin, HostIntegrationCoreApi {
@@ -154,6 +156,67 @@ public void reply(Void value) {
154156
});
155157
}
156158

159+
@Override
160+
public void callFlutterEchoAllTypes(@NonNull AllTypes everything, Result<AllTypes> result) {
161+
flutterApi.echoAllTypes(
162+
everything,
163+
new FlutterIntegrationCoreApi.Reply<AllTypes>() {
164+
public void reply(AllTypes value) {
165+
result.success(value);
166+
}
167+
});
168+
}
169+
170+
@Override
171+
public void callFlutterSendMultipleNullableTypes(
172+
@Nullable Boolean aNullableBool,
173+
@Nullable Long aNullableInt,
174+
@Nullable String aNullableString,
175+
Result<AllNullableTypes> result) {
176+
flutterApi.sendMultipleNullableTypes(
177+
aNullableBool,
178+
aNullableInt,
179+
aNullableString,
180+
new FlutterIntegrationCoreApi.Reply<AllNullableTypes>() {
181+
public void reply(AllNullableTypes value) {
182+
result.success(value);
183+
}
184+
});
185+
}
186+
187+
@Override
188+
public void callFlutterEchoBool(@NonNull Boolean aBool, Result<Boolean> result) {
189+
flutterApi.echoBool(
190+
aBool,
191+
new FlutterIntegrationCoreApi.Reply<Boolean>() {
192+
public void reply(Boolean value) {
193+
result.success(value);
194+
}
195+
});
196+
}
197+
198+
@Override
199+
public void callFlutterEchoInt(@NonNull Long anInt, Result<Long> result) {
200+
flutterApi.echoInt(
201+
anInt,
202+
new FlutterIntegrationCoreApi.Reply<Long>() {
203+
public void reply(Long value) {
204+
result.success(value);
205+
}
206+
});
207+
}
208+
209+
@Override
210+
public void callFlutterEchoDouble(@NonNull Double aDouble, Result<Double> result) {
211+
flutterApi.echoDouble(
212+
aDouble,
213+
new FlutterIntegrationCoreApi.Reply<Double>() {
214+
public void reply(Double value) {
215+
result.success(value);
216+
}
217+
});
218+
}
219+
157220
@Override
158221
public void callFlutterEchoString(@NonNull String aString, Result<String> result) {
159222
flutterApi.echoString(
@@ -164,4 +227,117 @@ public void reply(String value) {
164227
}
165228
});
166229
}
230+
231+
@Override
232+
public void callFlutterEchoUint8List(@NonNull byte[] aList, Result<byte[]> result) {
233+
flutterApi.echoUint8List(
234+
aList,
235+
new FlutterIntegrationCoreApi.Reply<byte[]>() {
236+
public void reply(byte[] value) {
237+
result.success(value);
238+
}
239+
});
240+
}
241+
242+
@Override
243+
public void callFlutterEchoList(@NonNull List<Object> aList, Result<List<Object>> result) {
244+
flutterApi.echoList(
245+
aList,
246+
new FlutterIntegrationCoreApi.Reply<List<Object>>() {
247+
public void reply(List<Object> value) {
248+
result.success(value);
249+
}
250+
});
251+
}
252+
253+
@Override
254+
public void callFlutterEchoMap(
255+
@NonNull Map<String, Object> aMap, Result<Map<String, Object>> result) {
256+
flutterApi.echoMap(
257+
aMap,
258+
new FlutterIntegrationCoreApi.Reply<Map<String, Object>>() {
259+
public void reply(Map<String, Object> value) {
260+
result.success(value);
261+
}
262+
});
263+
}
264+
265+
@Override
266+
public void callFlutterEchoNullableBool(@Nullable Boolean aBool, Result<Boolean> result) {
267+
flutterApi.echoNullableBool(
268+
aBool,
269+
new FlutterIntegrationCoreApi.Reply<Boolean>() {
270+
public void reply(Boolean value) {
271+
result.success(value);
272+
}
273+
});
274+
}
275+
276+
@Override
277+
public void callFlutterEchoNullableInt(@Nullable Long anInt, Result<Long> result) {
278+
flutterApi.echoNullableInt(
279+
anInt,
280+
new FlutterIntegrationCoreApi.Reply<Long>() {
281+
public void reply(Long value) {
282+
result.success(value);
283+
}
284+
});
285+
}
286+
287+
@Override
288+
public void callFlutterEchoNullableDouble(@Nullable Double aDouble, Result<Double> result) {
289+
flutterApi.echoNullableDouble(
290+
aDouble,
291+
new FlutterIntegrationCoreApi.Reply<Double>() {
292+
public void reply(Double value) {
293+
result.success(value);
294+
}
295+
});
296+
}
297+
298+
@Override
299+
public void callFlutterEchoNullableString(@Nullable String aString, Result<String> result) {
300+
flutterApi.echoNullableString(
301+
aString,
302+
new FlutterIntegrationCoreApi.Reply<String>() {
303+
public void reply(String value) {
304+
result.success(value);
305+
}
306+
});
307+
}
308+
309+
@Override
310+
public void callFlutterEchoNullableUint8List(@Nullable byte[] aList, Result<byte[]> result) {
311+
flutterApi.echoNullableUint8List(
312+
aList,
313+
new FlutterIntegrationCoreApi.Reply<byte[]>() {
314+
public void reply(byte[] value) {
315+
result.success(value);
316+
}
317+
});
318+
}
319+
320+
@Override
321+
public void callFlutterEchoNullableList(
322+
@Nullable List<Object> aList, Result<List<Object>> result) {
323+
flutterApi.echoNullableList(
324+
aList,
325+
new FlutterIntegrationCoreApi.Reply<List<Object>>() {
326+
public void reply(List<Object> value) {
327+
result.success(value);
328+
}
329+
});
330+
}
331+
332+
@Override
333+
public void callFlutterEchoNullableMap(
334+
@Nullable Map<String, Object> aMap, Result<Map<String, Object>> result) {
335+
flutterApi.echoNullableMap(
336+
aMap,
337+
new FlutterIntegrationCoreApi.Reply<Map<String, Object>>() {
338+
public void reply(Map<String, Object> value) {
339+
result.success(value);
340+
}
341+
});
342+
}
167343
}

0 commit comments

Comments
 (0)