@@ -573,7 +573,9 @@ Future<void> _runExampleProjectBuildTests(Directory exampleDirectory, [File? mai
573573 // Only verify caching with flutter gallery.
574574 final bool verifyCaching = exampleDirectory.path.contains ('flutter_gallery' );
575575 final String examplePath = path.relative (exampleDirectory.path, from: Directory .current.path);
576+ final bool hasNullSafety = File (path.join (examplePath, 'null_safety' )).existsSync ();
576577 final List <String > additionalArgs = < String > [
578+ if (hasNullSafety) '--no-sound-null-safety' ,
577579 if (mainFile != null ) path.relative (mainFile.path, from: exampleDirectory.absolute.path),
578580 ];
579581 if (Directory (path.join (examplePath, 'android' )).existsSync ()) {
@@ -769,14 +771,16 @@ Future<void> _runAddToAppLifeCycleTests() async {
769771}
770772
771773Future <void > _runFrameworkTests () async {
774+ final List <String > soundNullSafetyOptions = < String > ['--null-assertions' , '--sound-null-safety' ];
775+ final List <String > mixedModeNullSafetyOptions = < String > ['--null-assertions' , '--no-sound-null-safety' ];
772776 final List <String > trackWidgetCreationAlternatives = < String > ['--track-widget-creation' , '--no-track-widget-creation' ];
773777
774778 Future <void > runWidgets () async {
775779 printProgress ('${green }Running packages/flutter tests $reset for ${cyan }test/widgets/$reset ' );
776780 for (final String trackWidgetCreationOption in trackWidgetCreationAlternatives) {
777781 await _runFlutterTest (
778782 path.join (flutterRoot, 'packages' , 'flutter' ),
779- options: < String > [trackWidgetCreationOption],
783+ options: < String > [trackWidgetCreationOption, ...soundNullSafetyOptions ],
780784 tests: < String > [ path.join ('test' , 'widgets' ) + path.separator ],
781785 );
782786 }
@@ -791,13 +795,13 @@ Future<void> _runFrameworkTests() async {
791795 // Run release mode tests (see packages/flutter/test_release/README.md)
792796 await _runFlutterTest (
793797 path.join (flutterRoot, 'packages' , 'flutter' ),
794- options: < String > ['--dart-define=dart.vm.product=true' ],
798+ options: < String > ['--dart-define=dart.vm.product=true' , ...soundNullSafetyOptions ],
795799 tests: < String > ['test_release${path .separator }' ],
796800 );
797801 // Run profile mode tests (see packages/flutter/test_profile/README.md)
798802 await _runFlutterTest (
799803 path.join (flutterRoot, 'packages' , 'flutter' ),
800- options: < String > ['--dart-define=dart.vm.product=false' , '--dart-define=dart.vm.profile=true' ],
804+ options: < String > ['--dart-define=dart.vm.product=false' , '--dart-define=dart.vm.profile=true' , ...soundNullSafetyOptions ],
801805 tests: < String > ['test_profile${path .separator }' ],
802806 );
803807 }
@@ -813,7 +817,7 @@ Future<void> _runFrameworkTests() async {
813817 for (final String trackWidgetCreationOption in trackWidgetCreationAlternatives) {
814818 await _runFlutterTest (
815819 path.join (flutterRoot, 'packages' , 'flutter' ),
816- options: < String > [trackWidgetCreationOption],
820+ options: < String > [trackWidgetCreationOption, ...soundNullSafetyOptions ],
817821 tests: tests,
818822 );
819823 }
@@ -833,9 +837,9 @@ Future<void> _runFrameworkTests() async {
833837 workingDirectory: path.join (flutterRoot, 'examples' , 'api' ),
834838 );
835839 }
836- await _runFlutterTest (path.join (flutterRoot, 'examples' , 'api' ));
837- await _runFlutterTest (path.join (flutterRoot, 'examples' , 'hello_world' ));
838- await _runFlutterTest (path.join (flutterRoot, 'examples' , 'layers' ));
840+ await _runFlutterTest (path.join (flutterRoot, 'examples' , 'api' ), options : soundNullSafetyOptions );
841+ await _runFlutterTest (path.join (flutterRoot, 'examples' , 'hello_world' ), options : soundNullSafetyOptions );
842+ await _runFlutterTest (path.join (flutterRoot, 'examples' , 'layers' ), options : soundNullSafetyOptions );
839843 }
840844
841845 Future <void > runTracingTests () async {
@@ -941,6 +945,7 @@ Future<void> _runFrameworkTests() async {
941945
942946 Future <void > runPrivateTests () async {
943947 final List <String > args = < String > [
948+ '--sound-null-safety' ,
944949 'run' ,
945950 'bin/test_private.dart' ,
946951 ];
@@ -984,17 +989,17 @@ Future<void> _runFrameworkTests() async {
984989 await _runFlutterTest (path.join (flutterRoot, 'dev' , 'tools' , 'gen_defaults' ));
985990 await _runFlutterTest (path.join (flutterRoot, 'dev' , 'tools' , 'gen_keycodes' ));
986991 await _runFlutterTest (path.join (flutterRoot, 'dev' , 'benchmarks' , 'test_apps' , 'stocks' ));
987- await _runFlutterTest (path.join (flutterRoot, 'packages' , 'flutter_driver' ), tests: < String > [path.join ('test' , 'src' , 'real_tests' )]);
992+ await _runFlutterTest (path.join (flutterRoot, 'packages' , 'flutter_driver' ), tests: < String > [path.join ('test' , 'src' , 'real_tests' )], options : soundNullSafetyOptions );
988993 await _runFlutterTest (path.join (flutterRoot, 'packages' , 'integration_test' ), options: < String > [
989994 '--enable-vmservice' ,
990995 // Web-specific tests depend on Chromium, so they run as part of the web_long_running_tests shard.
991996 '--exclude-tags=web' ,
992997 ]);
993- await _runFlutterTest (path.join (flutterRoot, 'packages' , 'flutter_goldens' ));
994- await _runFlutterTest (path.join (flutterRoot, 'packages' , 'flutter_localizations' ));
995- await _runFlutterTest (path.join (flutterRoot, 'packages' , 'flutter_test' ));
996- await _runFlutterTest (path.join (flutterRoot, 'packages' , 'fuchsia_remote_debug_protocol' ));
997- await _runFlutterTest (path.join (flutterRoot, 'dev' , 'integration_tests' , 'non_nullable' ));
998+ await _runFlutterTest (path.join (flutterRoot, 'packages' , 'flutter_goldens' ), options : soundNullSafetyOptions );
999+ await _runFlutterTest (path.join (flutterRoot, 'packages' , 'flutter_localizations' ), options : soundNullSafetyOptions );
1000+ await _runFlutterTest (path.join (flutterRoot, 'packages' , 'flutter_test' ), options : soundNullSafetyOptions );
1001+ await _runFlutterTest (path.join (flutterRoot, 'packages' , 'fuchsia_remote_debug_protocol' ), options : soundNullSafetyOptions );
1002+ await _runFlutterTest (path.join (flutterRoot, 'dev' , 'integration_tests' , 'non_nullable' ), options : mixedModeNullSafetyOptions );
9981003 const String httpClientWarning =
9991004 'Warning: At least one test in this suite creates an HttpClient. When\n '
10001005 'running a test suite that uses TestWidgetsFlutterBinding, all HTTP\n '
@@ -1229,7 +1234,7 @@ Future<void> _runWebLongRunningTests() async {
12291234 '--dart-define=TEST_FLUTTER_ENGINE_VERSION=$engineVersion ' ,
12301235 ]),
12311236 () => _runWebDebugTest ('test/test.dart' ),
1232- () => _runWebDebugTest ('lib/null_safe_main.dart' ),
1237+ () => _runWebDebugTest ('lib/null_safe_main.dart' , enableNullSafety : true ),
12331238 () => _runWebDebugTest ('lib/web_define_loading.dart' ,
12341239 additionalArguments: < String > [
12351240 '--dart-define=test.valueA=Example,A' ,
@@ -1242,8 +1247,12 @@ Future<void> _runWebLongRunningTests() async {
12421247 '--dart-define=test.valueB=Value' ,
12431248 ]
12441249 ),
1245- () => _runWebDebugTest ('lib/sound_mode.dart' ),
1246- () => _runWebReleaseTest ('lib/sound_mode.dart' ),
1250+ () => _runWebDebugTest ('lib/sound_mode.dart' , additionalArguments: < String > [
1251+ '--sound-null-safety' ,
1252+ ]),
1253+ () => _runWebReleaseTest ('lib/sound_mode.dart' , additionalArguments: < String > [
1254+ '--sound-null-safety' ,
1255+ ]),
12471256 () => _runFlutterWebTest (
12481257 'html' ,
12491258 path.join (flutterRoot, 'packages' , 'integration_test' ),
@@ -1302,6 +1311,7 @@ Future<void> _runFlutterDriverWebTest({
13021311 if (driver != null ) '--driver=$driver ' ,
13031312 '--target=$target ' ,
13041313 '--browser-name=chrome' ,
1314+ '--no-sound-null-safety' ,
13051315 '-d' ,
13061316 'web-server' ,
13071317 '--$buildMode ' ,
@@ -1343,6 +1353,7 @@ Future<void> _runWebTreeshakeTest() async {
13431353 'build' ,
13441354 'web' ,
13451355 '--target=$target ' ,
1356+ '--no-sound-null-safety' ,
13461357 '--profile' ,
13471358 ],
13481359 workingDirectory: testAppDirectory,
@@ -1568,6 +1579,7 @@ Future<void> _runGalleryE2eWebTest(String buildMode, { bool canvasKit = false })
15681579 '--driver=test_driver/transitions_perf_e2e_test.dart' ,
15691580 '--target=test_driver/transitions_perf_e2e.dart' ,
15701581 '--browser-name=chrome' ,
1582+ '--no-sound-null-safety' ,
15711583 '-d' ,
15721584 'web-server' ,
15731585 '--$buildMode ' ,
@@ -1674,6 +1686,7 @@ Future<void> _runWebReleaseTest(String target, {
16741686///
16751687/// Instead, we use `flutter run --debug` and sniff out the standard output.
16761688Future <void > _runWebDebugTest (String target, {
1689+ bool enableNullSafety = false ,
16771690 List <String > additionalArguments = const < String > [],
16781691}) async {
16791692 final String testAppDirectory = path.join (flutterRoot, 'dev' , 'integration_tests' , 'web' );
@@ -1687,6 +1700,11 @@ Future<void> _runWebDebugTest(String target, {
16871700 < String > [
16881701 'run' ,
16891702 '--debug' ,
1703+ if (enableNullSafety)
1704+ ...< String > [
1705+ '--no-sound-null-safety' ,
1706+ '--null-assertions' ,
1707+ ],
16901708 '-d' ,
16911709 'chrome' ,
16921710 '--web-run-headless' ,
@@ -1729,6 +1747,7 @@ Future<void> _runFlutterWebTest(String webRenderer, String workingDirectory, Lis
17291747 '--platform=chrome' ,
17301748 '--web-renderer=$webRenderer ' ,
17311749 '--dart-define=DART_HHH_BOT=$_runningInDartHHHBot ' ,
1750+ '--sound-null-safety' ,
17321751 ...flutterTestArgs,
17331752 ...tests,
17341753 ],
0 commit comments