@@ -102,18 +102,12 @@ Future generateCLibs(String sdkRoot, String destDir, Set<String> allFiles,
102102 path.join (sdkRoot, 'runtime/bin/ffi_test/ffi_test_dynamic_library.cc' );
103103 destinationFile =
104104 path.join (dir.path, path.basename (lib1)).replaceAll ('.cc' , '.cpp' );
105- File (destinationFile)
106- .writeAsStringSync (cleanCC (File (lib1).readAsStringSync ()));
105+ File (destinationFile).writeAsStringSync (File (lib1).readAsStringSync ());
107106
108107 final lib2 = path.join (sdkRoot, 'runtime/bin/ffi_test/ffi_test_functions.cc' );
109108 destinationFile =
110109 path.join (dir.path, path.basename (lib2)).replaceAll ('.cc' , '.cpp' );
111- File (destinationFile)
112- .writeAsStringSync (cleanCC (File (lib2).readAsStringSync ()));
113- }
114-
115- String cleanCC (String content) {
116- return content.replaceAll ('DART_EXPORT' , 'extern "C" ' );
110+ File (destinationFile).writeAsStringSync (File (lib2).readAsStringSync ());
117111}
118112
119113String cleanDart (String content) {
@@ -125,21 +119,23 @@ Future generateDartTests(
125119 final dir = await generateCleanDir (destDir);
126120
127121 final sink = File (path.join (dir.path, 'all.dart' )).openWrite ();
122+ sink.writeln ('import "dart:async";' );
123+ sink.writeln ('' );
128124 for (int i = 0 ; i < testFiles.length; ++ i) {
129125 sink.writeln ('import "${path .basename (testFiles [i ])}" as main$i ;' );
130126 }
131127 sink.writeln ('' );
132- sink.writeln ('invoke(fn) {' );
133- sink.writeln (' if (fn is void Function()) {' );
134- sink.writeln (' fn ();' );
128+ sink.writeln ('Future invoke(dynamic fun) async {' );
129+ sink.writeln (' if (fun is void Function() || fun is Future Function()) {' );
130+ sink.writeln (' return await fun ();' );
135131 sink.writeln (' } else {' );
136- sink.writeln (' fn (<String>[]);' );
132+ sink.writeln (' return await fun (<String>[]);' );
137133 sink.writeln (' }' );
138134 sink.writeln ('}' );
139135 sink.writeln ('' );
140- sink.writeln ('main() {' );
136+ sink.writeln ('dynamic main() async {' );
141137 for (int i = 0 ; i < testFiles.length; ++ i) {
142- sink.writeln (' invoke(main$i .main);' );
138+ sink.writeln (' await invoke(main$i .main);' );
143139 }
144140 sink.writeln ('}' );
145141 await sink.close ();
@@ -166,32 +162,19 @@ Stream<String> listTestFiles(
166162 await for (final file in Directory (path.join (sdkRoot, 'tests/ffi' )).list ()) {
167163 if (file is File && file.path.endsWith ('_test.dart' )) {
168164 // These tests are VM specific and cannot necessarily be run on Flutter.
169- final blacklistedTests = const [
170- 'function_callbacks_test.dart' ,
171- 'function_callbacks_test.dart' ,
172- 'function_gc_test.dart' ,
173- 'function_test.dart' ,
174- 'object_gc_test.dart' ,
175- 'regress_37100_test.dart' ,
176- 'regress_37511_callbacks_test.dart' ,
177- 'regress_37511_test.dart' ,
178- 'regress_37780_test.dart' ,
179- ];
180- if (blacklistedTests.contains (path.basename (file.path))) {
165+ if (path.basename (file.path).startsWith ('vmspecific_' )) {
181166 filteredTests.add (file.path);
182167 continue ;
183168 }
169+ // These tests use special features which are hard to test on Flutter.
184170 final contents = file.readAsStringSync ();
185- if (! contents.contains ('//#' ) &&
186- ! contents.contains ('dart:async' ) &&
187- ! contents.contains ('dart:isolate' ) &&
188- ! contents.contains ('async' ) &&
189- ! contents.contains ('Future' ) &&
190- ! contents.contains ('DynamicLibrary.process' ) &&
191- ! contents.contains ('DynamicLibrary.executable' ) &&
192- ! contents.contains ('Future' )) {
193- yield file.path;
171+ if (contents.contains (RegExp ('//# .* compile-time error' )) ||
172+ contents.contains ('DynamicLibrary.process' ) ||
173+ contents.contains ('DynamicLibrary.executable' )) {
174+ filteredTests.add (file.path);
175+ continue ;
194176 }
177+ yield file.path;
195178 }
196179 }
197180}
0 commit comments