@@ -863,6 +863,127 @@ void main() {
863863 directory.delete (recursive: true ).ignore ();
864864 });
865865
866+ test (
867+ 'runs tests w/coverage + min-coverage 100 + recursive (pass)' ,
868+ () async {
869+ final directory = Directory .systemTemp.createTempSync ();
870+ File (p.join (directory.path, 'pubspec.yaml' )).createSync ();
871+ Directory (p.join (directory.path, 'test' )).createSync ();
872+
873+ final nestedDirectory = Directory (p.join (directory.path, 'test' ))
874+ ..createSync ();
875+ File (p.join (nestedDirectory.path, 'pubspec.yaml' )).createSync ();
876+ Directory (p.join (nestedDirectory.path, 'test' )).createSync ();
877+
878+ await expectLater (
879+ Flutter .test (
880+ cwd: directory.path,
881+ collectCoverage: true ,
882+ minCoverage: 100 ,
883+ recursive: true ,
884+ stdout: stdoutLogs.add,
885+ stderr: stderrLogs.add,
886+ testRunner: testRunner (
887+ Stream .fromIterable (
888+ [
889+ const DoneTestEvent (success: true , time: 0 ),
890+ const ExitTestEvent (exitCode: 0 , time: 0 ),
891+ ],
892+ ),
893+ onStart: () {
894+ File (p.join (directory.path, 'coverage' , 'lcov.info' ))
895+ ..createSync (recursive: true )
896+ ..writeAsStringSync (lcov100);
897+ File (p.join (nestedDirectory.path, 'coverage' , 'lcov.info' ))
898+ ..createSync (recursive: true )
899+ ..writeAsStringSync (lcov100);
900+ },
901+ ),
902+ logger: logger,
903+ ),
904+ completion (equals ([ExitCode .success.code, ExitCode .success.code])),
905+ );
906+
907+ expect (
908+ stdoutLogs,
909+ equals ([
910+ 'Running "flutter test" in '
911+ '${p .dirname (nestedDirectory .path )}...\n ' ,
912+ contains ('All tests passed!' ),
913+ 'Running "flutter test" in ${p .dirname (directory .path )}...\n ' ,
914+ contains ('All tests passed!' ),
915+ ]),
916+ );
917+ expect (testRunnerArgs, equals (['--coverage' , '--coverage' ]));
918+
919+ directory.delete (recursive: true ).ignore ();
920+ nestedDirectory.delete (recursive: true ).ignore ();
921+ },
922+ );
923+
924+ test (
925+ 'runs tests w/coverage + min-coverage 100 + recursive (fail)' ,
926+ () async {
927+ final directory = Directory .systemTemp.createTempSync ();
928+ File (p.join (directory.path, 'pubspec.yaml' )).createSync ();
929+ Directory (p.join (directory.path, 'test' )).createSync ();
930+
931+ final nestedDirectory = Directory (p.join (directory.path, 'test' ))
932+ ..createSync ();
933+ File (p.join (nestedDirectory.path, 'pubspec.yaml' )).createSync ();
934+ Directory (p.join (nestedDirectory.path, 'test' )).createSync ();
935+
936+ await expectLater (
937+ Flutter .test (
938+ cwd: directory.path,
939+ collectCoverage: true ,
940+ minCoverage: 100 ,
941+ recursive: true ,
942+ stdout: stdoutLogs.add,
943+ stderr: stderrLogs.add,
944+ testRunner: testRunner (
945+ Stream .fromIterable (
946+ [
947+ const DoneTestEvent (success: true , time: 0 ),
948+ const ExitTestEvent (exitCode: 0 , time: 0 ),
949+ ],
950+ ),
951+ onStart: () {
952+ File (p.join (directory.path, 'coverage' , 'lcov.info' ))
953+ ..createSync (recursive: true )
954+ ..writeAsStringSync (lcov100);
955+ File (p.join (nestedDirectory.path, 'coverage' , 'lcov.info' ))
956+ ..createSync (recursive: true )
957+ ..writeAsStringSync (lcov95);
958+ },
959+ ),
960+ logger: logger,
961+ ),
962+ throwsA (
963+ isA <MinCoverageNotMet >().having (
964+ (e) => e.coverage,
965+ 'coverage' ,
966+ 95.0 ,
967+ ),
968+ ),
969+ );
970+
971+ expect (
972+ stdoutLogs,
973+ equals ([
974+ 'Running "flutter test" in '
975+ '${p .dirname (nestedDirectory .path )}...\n ' ,
976+ contains ('All tests passed!' ),
977+ ]),
978+ );
979+ expect (stderrLogs, isEmpty);
980+ expect (testRunnerArgs, equals (['--coverage' ]));
981+
982+ directory.delete (recursive: true ).ignore ();
983+ nestedDirectory.delete (recursive: true ).ignore ();
984+ },
985+ );
986+
866987 test ('runs tests w/optimizations (passing)' , () async {
867988 final directory = Directory .systemTemp.createTempSync ();
868989 final originalVars = < String , dynamic > {'package-root' : directory.path};
0 commit comments