From 3a3b19813ac94f1412578b88157255fe94e9f360 Mon Sep 17 00:00:00 2001 From: "anthropic-code-agent[bot]" <242468646+Claude@users.noreply.github.com> Date: Sat, 4 Apr 2026 02:21:32 +0000 Subject: [PATCH 1/3] Initial plan From 728c45136d2b811ff0c68e079dfe9d2f4334cc02 Mon Sep 17 00:00:00 2001 From: "anthropic-code-agent[bot]" <242468646+Claude@users.noreply.github.com> Date: Sat, 4 Apr 2026 02:26:18 +0000 Subject: [PATCH 2/3] feat: implement report-only output mode - Add reportOnly to OutputMode enum - Update UserSettingsRegister to allow 'report-only' value - Update UserSettingsRepositoryImpl to parse report-only mode - Create ReportOnlyOutputGenerator that suppresses intermediate output - Update OutputGeneratorModule factory to handle reportOnly mode - Add comprehensive tests for ReportOnlyOutputGenerator Agent-Logs-Url: https://github.com/talesbarreto/pull_request_coverage/sessions/c1a5db9e-5d0c-4bd9-bbb4-1c5dc71c8122 Co-authored-by: talesbarreto <7644323+talesbarreto@users.noreply.github.com> --- .../user_settings_repository_impl.dart | 7 +- lib/src/di/output_generator_module.dart | 11 +++ .../user_settings/models/output_mode.dart | 1 + .../user_settings/user_settings_register.dart | 2 +- .../report_only_output_generator.dart | 32 +++++++++ .../text_output_generator_test.dart | 67 +++++++++++++++++++ 6 files changed, 118 insertions(+), 2 deletions(-) create mode 100644 lib/src/presentation/output_generator/report_only_output_generator.dart diff --git a/lib/src/data/user_settings/user_settings_repository_impl.dart b/lib/src/data/user_settings/user_settings_repository_impl.dart index b7c9fa3..cd274f0 100644 --- a/lib/src/data/user_settings/user_settings_repository_impl.dart +++ b/lib/src/data/user_settings/user_settings_repository_impl.dart @@ -103,7 +103,12 @@ class UserSettingsRepositoryImpl implements UserSettingsRepository { showUncoveredCode: arg.getBooleanOrDefault(UserSettingsRegister.showUncoveredCode), useColorfulOutput: arg.getBooleanOrDefault(UserSettingsRegister.useColorfulOutput), reportFullyCoveredFiles: arg.getBooleanOrDefault(UserSettingsRegister.reportFullyCoveredFiles), - outputMode: arg.getString(UserSettingsRegister.outputMode) == "markdown" ? OutputMode.markdown : OutputMode.cli, + outputMode: () { + final mode = arg.getString(UserSettingsRegister.outputMode); + if (mode == "markdown") return OutputMode.markdown; + if (mode == "report-only") return OutputMode.reportOnly; + return OutputMode.cli; + }(), fractionalDigits: arg.getInt(UserSettingsRegister.fractionDigits) ?? 2, markdownMode: arg.getString(UserSettingsRegister.markdownMode) == "dart" ? MarkdownMode.dart : MarkdownMode.diff, diff --git a/lib/src/di/output_generator_module.dart b/lib/src/di/output_generator_module.dart index 7a6c216..e2cab91 100644 --- a/lib/src/di/output_generator_module.dart +++ b/lib/src/di/output_generator_module.dart @@ -2,6 +2,7 @@ import 'package:pull_request_coverage/src/domain/user_settings/models/output_mod import 'package:pull_request_coverage/src/domain/user_settings/models/user_settings.dart'; import 'package:pull_request_coverage/src/presentation/output_generator/cli_output_generator.dart'; import 'package:pull_request_coverage/src/presentation/output_generator/markdown_output_generator.dart'; +import 'package:pull_request_coverage/src/presentation/output_generator/report_only_output_generator.dart'; import 'package:pull_request_coverage/src/presentation/output_generator/table_builder.dart'; import 'package:pull_request_coverage/src/presentation/use_case/colorize_text.dart'; import 'package:pull_request_coverage/src/presentation/use_case/get_result_table.dart'; @@ -42,6 +43,16 @@ class OutputGeneratorModule { ), printEmoji: printEmoji, ); + case OutputMode.reportOnly: + return ReportOnlyOutputGenerator( + userSettings: userSettings, + print: print, + getResultTable: GetResultTable( + tableBuilder: TableBuilder(), + colorizeText: colorizeText, + printEmoji: printEmoji, + ), + ); } } } diff --git a/lib/src/domain/user_settings/models/output_mode.dart b/lib/src/domain/user_settings/models/output_mode.dart index 8ad3e77..f847c14 100644 --- a/lib/src/domain/user_settings/models/output_mode.dart +++ b/lib/src/domain/user_settings/models/output_mode.dart @@ -1,4 +1,5 @@ enum OutputMode { cli, markdown, + reportOnly, } diff --git a/lib/src/domain/user_settings/user_settings_register.dart b/lib/src/domain/user_settings/user_settings_register.dart index 11d5e37..489eb56 100644 --- a/lib/src/domain/user_settings/user_settings_register.dart +++ b/lib/src/domain/user_settings/user_settings_register.dart @@ -97,7 +97,7 @@ class UserSettingsRegister { static const outputMode = UserSettingsRegister( names: ["output-mode"], defaultValue: "cli", - allowed: ["cli", "markdown"], + allowed: ["cli", "markdown", "report-only"], ); static const markdownMode = UserSettingsRegister( diff --git a/lib/src/presentation/output_generator/report_only_output_generator.dart b/lib/src/presentation/output_generator/report_only_output_generator.dart new file mode 100644 index 0000000..042708a --- /dev/null +++ b/lib/src/presentation/output_generator/report_only_output_generator.dart @@ -0,0 +1,32 @@ +import 'package:pull_request_coverage/src/domain/analyzer/models/analysis_result.dart'; +import 'package:pull_request_coverage/src/domain/analyzer/models/file_report.dart'; +import 'package:pull_request_coverage/src/domain/user_settings/models/user_settings.dart'; +import 'package:pull_request_coverage/src/presentation/output_generator/output_generator.dart'; +import 'package:pull_request_coverage/src/presentation/use_case/get_result_table.dart'; + +class ReportOnlyOutputGenerator implements OutputGenerator { + final UserSettings userSettings; + final GetResultTable getResultTable; + final void Function(String message) print; + + ReportOnlyOutputGenerator({ + required this.userSettings, + required this.getResultTable, + required this.print, + }); + + @override + void addFileReport(FileReport report) { + // In report-only mode, we suppress all intermediate output + // and only show the final summary table + } + + @override + void terminate(AnalysisResult analysisResult) { + if (analysisResult.linesMissingTests == 0 && userSettings.fullyTestedMessage != null) { + print(userSettings.fullyTestedMessage.toString()); + } else { + print(getResultTable(userSettings, analysisResult)); + } + } +} diff --git a/test/src/presentation/output_generator/text_output_generator_test.dart b/test/src/presentation/output_generator/text_output_generator_test.dart index ac0e9bc..f807d89 100644 --- a/test/src/presentation/output_generator/text_output_generator_test.dart +++ b/test/src/presentation/output_generator/text_output_generator_test.dart @@ -1,7 +1,9 @@ import 'package:pull_request_coverage/src/domain/analyzer/models/analysis_result.dart'; +import 'package:pull_request_coverage/src/domain/analyzer/models/file_report.dart'; import 'package:pull_request_coverage/src/domain/user_settings/models/user_settings.dart'; import 'package:pull_request_coverage/src/presentation/output_generator/cli_output_generator.dart'; import 'package:pull_request_coverage/src/presentation/output_generator/markdown_output_generator.dart'; +import 'package:pull_request_coverage/src/presentation/output_generator/report_only_output_generator.dart'; import 'package:pull_request_coverage/src/presentation/output_generator/output_generator.dart'; import 'package:pull_request_coverage/src/presentation/use_case/colorize_text.dart'; import 'package:pull_request_coverage/src/presentation/use_case/get_result_table.dart'; @@ -38,6 +40,16 @@ void main() { ); testFunction(generator, output); }); + + test("`$description` on ReportOnly output generator", () { + final output = StringBuffer(); + final generator = ReportOnlyOutputGenerator( + userSettings: userOptions, + getResultTable: getResultTable, + print: (String message) => output.write(message), + ); + testFunction(generator, output); + }); } group("When `fullyTestedMessage` is set", () { @@ -98,6 +110,61 @@ void main() { ); }); }); + + group("ReportOnly output generator", () { + test("should suppress file reports", () { + final output = StringBuffer(); + final generator = ReportOnlyOutputGenerator( + userSettings: UserSettings(), + getResultTable: const FakeGetResultTable(), + print: (String message) => output.write(message), + ); + + const fileReport = FileReport( + filePath: "test/file.dart", + chunks: [], + newLinesCount: 10, + linesThatShouldBeTestedCount: 10, + linesMissingTestsCount: 5, + untestedAndIgnoredLines: 0, + ); + + generator.addFileReport(fileReport); + + // Verify no output was produced from addFileReport + expect(output.toString(), isEmpty); + }); + + test("should only output summary table on terminate", () { + final output = StringBuffer(); + final generator = ReportOnlyOutputGenerator( + userSettings: UserSettings(), + getResultTable: const FakeGetResultTable(), + print: (String message) => output.write(message), + ); + + const fileReport = FileReport( + filePath: "test/file.dart", + chunks: [], + newLinesCount: 10, + linesThatShouldBeTestedCount: 10, + linesMissingTestsCount: 5, + untestedAndIgnoredLines: 0, + ); + + const result = AnalysisResult( + linesThatShouldBeTested: 10, + linesMissingTests: 5, + untestedIgnoredLines: 0, + ); + + generator.addFileReport(fileReport); + generator.terminate(result); + + // Verify only the result table was output + expect(output.toString(), equals(FakeGetResultTable.table)); + }); + }); } class FakeGetResultTable implements GetResultTable { From e4decce90199c6d6b292154051695c906bfe505a Mon Sep 17 00:00:00 2001 From: "anthropic-code-agent[bot]" <242468646+Claude@users.noreply.github.com> Date: Sat, 11 Apr 2026 01:56:07 +0000 Subject: [PATCH 3/3] refactor: change report-only from output mode to boolean flag Per feedback, refactored implementation: - Remove reportOnly from OutputMode enum - Add reportOnly boolean field to UserSettings - Add reportOnly getter to OutputGenerator interface - Both CliOutputGenerator and MarkdownOutputGenerator check reportOnly flag - Delete ReportOnlyOutputGenerator class - Add report-only setting to UserSettingsRegister - Update UserSettingsRepositoryImpl to parse boolean flag - Update tests to test reportOnly flag on both generators - Document report-only setting in README.md Usage: --report-only true (works with both cli and markdown modes) Agent-Logs-Url: https://github.com/talesbarreto/pull_request_coverage/sessions/5e22ab0b-93ef-4584-9da5-a8a19916d5fb Co-authored-by: talesbarreto <7644323+talesbarreto@users.noreply.github.com> --- README.md | 2 + .../user_settings_repository_impl.dart | 8 +- lib/src/di/output_generator_module.dart | 11 -- .../user_settings/models/output_mode.dart | 1 - .../user_settings/models/user_settings.dart | 2 + .../user_settings/user_settings_register.dart | 9 +- .../cli_output_generator.dart | 5 + .../markdown_output_generator.dart | 5 + .../output_generator/output_generator.dart | 2 + .../report_only_output_generator.dart | 32 ----- .../text_output_generator_test.dart | 111 ++++++++---------- 11 files changed, 73 insertions(+), 115 deletions(-) delete mode 100644 lib/src/presentation/output_generator/report_only_output_generator.dart diff --git a/README.md b/README.md index 7fc5e76..8761f6e 100644 --- a/README.md +++ b/README.md @@ -118,6 +118,8 @@ Check [example](https://github.com/talesbarreto/pull_request_coverage/tree/main/ - **report-fully-covered-files** (`true`): Prints the file path of each fully covered file as a celebratory message =) +- **report-only** (`false`): When set to `true`, suppresses intermediate file reports and outputs only the final summary table. This is useful for logging, CI summaries, or other scenarios where detailed file-by-file analysis is not needed. Works with both `cli` and `markdown` output modes. + - **show-uncovered-code** (`true`): When set to `true`, the source code of the uncovered lines will be printed in red font color, making it easier to identify the missing tests. If this parameter is set to `false`, only the file path will be logged. - **use-colorful-output** (`true`): By default, `pull_request_coverage` utilizes a colorful font to highlight uncovered lines. You can disable this feature by setting this parameter to `false`. Please note that this option is only available when the output mode is set to `cli`. diff --git a/lib/src/data/user_settings/user_settings_repository_impl.dart b/lib/src/data/user_settings/user_settings_repository_impl.dart index cd274f0..169fb62 100644 --- a/lib/src/data/user_settings/user_settings_repository_impl.dart +++ b/lib/src/data/user_settings/user_settings_repository_impl.dart @@ -103,12 +103,8 @@ class UserSettingsRepositoryImpl implements UserSettingsRepository { showUncoveredCode: arg.getBooleanOrDefault(UserSettingsRegister.showUncoveredCode), useColorfulOutput: arg.getBooleanOrDefault(UserSettingsRegister.useColorfulOutput), reportFullyCoveredFiles: arg.getBooleanOrDefault(UserSettingsRegister.reportFullyCoveredFiles), - outputMode: () { - final mode = arg.getString(UserSettingsRegister.outputMode); - if (mode == "markdown") return OutputMode.markdown; - if (mode == "report-only") return OutputMode.reportOnly; - return OutputMode.cli; - }(), + reportOnly: arg.getBooleanOrDefault(UserSettingsRegister.reportOnly), + outputMode: arg.getString(UserSettingsRegister.outputMode) == "markdown" ? OutputMode.markdown : OutputMode.cli, fractionalDigits: arg.getInt(UserSettingsRegister.fractionDigits) ?? 2, markdownMode: arg.getString(UserSettingsRegister.markdownMode) == "dart" ? MarkdownMode.dart : MarkdownMode.diff, diff --git a/lib/src/di/output_generator_module.dart b/lib/src/di/output_generator_module.dart index e2cab91..7a6c216 100644 --- a/lib/src/di/output_generator_module.dart +++ b/lib/src/di/output_generator_module.dart @@ -2,7 +2,6 @@ import 'package:pull_request_coverage/src/domain/user_settings/models/output_mod import 'package:pull_request_coverage/src/domain/user_settings/models/user_settings.dart'; import 'package:pull_request_coverage/src/presentation/output_generator/cli_output_generator.dart'; import 'package:pull_request_coverage/src/presentation/output_generator/markdown_output_generator.dart'; -import 'package:pull_request_coverage/src/presentation/output_generator/report_only_output_generator.dart'; import 'package:pull_request_coverage/src/presentation/output_generator/table_builder.dart'; import 'package:pull_request_coverage/src/presentation/use_case/colorize_text.dart'; import 'package:pull_request_coverage/src/presentation/use_case/get_result_table.dart'; @@ -43,16 +42,6 @@ class OutputGeneratorModule { ), printEmoji: printEmoji, ); - case OutputMode.reportOnly: - return ReportOnlyOutputGenerator( - userSettings: userSettings, - print: print, - getResultTable: GetResultTable( - tableBuilder: TableBuilder(), - colorizeText: colorizeText, - printEmoji: printEmoji, - ), - ); } } } diff --git a/lib/src/domain/user_settings/models/output_mode.dart b/lib/src/domain/user_settings/models/output_mode.dart index f847c14..8ad3e77 100644 --- a/lib/src/domain/user_settings/models/output_mode.dart +++ b/lib/src/domain/user_settings/models/output_mode.dart @@ -1,5 +1,4 @@ enum OutputMode { cli, markdown, - reportOnly, } diff --git a/lib/src/domain/user_settings/models/user_settings.dart b/lib/src/domain/user_settings/models/user_settings.dart index bf97ba9..33c2385 100644 --- a/lib/src/domain/user_settings/models/user_settings.dart +++ b/lib/src/domain/user_settings/models/user_settings.dart @@ -16,6 +16,7 @@ class UserSettings { final bool ignoreKnownGeneratedFiles; final bool reportFullyCoveredFiles; final bool useEmojis; + final bool reportOnly; final OutputMode outputMode; final MarkdownMode markdownMode; final int fractionalDigits; @@ -40,6 +41,7 @@ class UserSettings { this.useColorfulOutput = true, this.ignoreKnownGeneratedFiles = true, this.reportFullyCoveredFiles = true, + this.reportOnly = false, this.stdinTimeout = const Duration(seconds: 1), this.deprecatedFilterSet = false, this.lineFilters = const [], diff --git a/lib/src/domain/user_settings/user_settings_register.dart b/lib/src/domain/user_settings/user_settings_register.dart index 489eb56..da7698a 100644 --- a/lib/src/domain/user_settings/user_settings_register.dart +++ b/lib/src/domain/user_settings/user_settings_register.dart @@ -30,6 +30,7 @@ class UserSettingsRegister { useColorfulOutput, showUncoveredCode, reportFullyCoveredFiles, + reportOnly, outputMode, markdownMode, fractionDigits, @@ -94,10 +95,16 @@ class UserSettingsRegister { defaultValue: true, ); + static const reportOnly = UserSettingsRegister( + names: ["report-only"], + description: "Suppress intermediate file reports and output only the final summary table", + defaultValue: false, + ); + static const outputMode = UserSettingsRegister( names: ["output-mode"], defaultValue: "cli", - allowed: ["cli", "markdown", "report-only"], + allowed: ["cli", "markdown"], ); static const markdownMode = UserSettingsRegister( diff --git a/lib/src/presentation/output_generator/cli_output_generator.dart b/lib/src/presentation/output_generator/cli_output_generator.dart index 122d0fb..ed0b3bf 100644 --- a/lib/src/presentation/output_generator/cli_output_generator.dart +++ b/lib/src/presentation/output_generator/cli_output_generator.dart @@ -22,6 +22,9 @@ class CliOutputGenerator implements OutputGenerator { required this.print, }); + @override + bool get reportOnly => userSettings.reportOnly; + final _missingTestFilesReport = StringBuffer(); String? _getLine(FileLine fileLine) { @@ -74,6 +77,8 @@ class CliOutputGenerator implements OutputGenerator { @override void addFileReport(FileReport fileReport) { + if (reportOnly) return; + final stringBuffer = StringBuffer(); if (fileReport.linesMissingTestsCount > 0 || userSettings.reportFullyCoveredFiles) { stringBuffer.write(_getFileHeader(fileReport)); diff --git a/lib/src/presentation/output_generator/markdown_output_generator.dart b/lib/src/presentation/output_generator/markdown_output_generator.dart index 752eb7a..d465848 100644 --- a/lib/src/presentation/output_generator/markdown_output_generator.dart +++ b/lib/src/presentation/output_generator/markdown_output_generator.dart @@ -20,6 +20,9 @@ class MarkdownOutputGenerator implements OutputGenerator { required this.print, }); + @override + bool get reportOnly => userSettings.reportOnly; + final _missingTestFilesReport = StringBuffer(); String? _getSourceCodeHeader() => userSettings.markdownMode == MarkdownMode.diff ? "```diff\n" : "```dart\n"; @@ -87,6 +90,8 @@ class MarkdownOutputGenerator implements OutputGenerator { @override Future addFileReport(FileReport fileReport) async { + if (reportOnly) return; + final stringBuffer = StringBuffer(); if (fileReport.linesMissingTestsCount > 0 || userSettings.reportFullyCoveredFiles) { stringBuffer.writeln(_getFileHeader(fileReport)); diff --git a/lib/src/presentation/output_generator/output_generator.dart b/lib/src/presentation/output_generator/output_generator.dart index 3dd4835..6dc1ea3 100644 --- a/lib/src/presentation/output_generator/output_generator.dart +++ b/lib/src/presentation/output_generator/output_generator.dart @@ -9,6 +9,8 @@ abstract class OutputGenerator { static const successEmoji = "✅"; static const failEmoji = "❌"; + bool get reportOnly; + void addFileReport(FileReport report); void terminate(AnalysisResult analysisResult); diff --git a/lib/src/presentation/output_generator/report_only_output_generator.dart b/lib/src/presentation/output_generator/report_only_output_generator.dart deleted file mode 100644 index 042708a..0000000 --- a/lib/src/presentation/output_generator/report_only_output_generator.dart +++ /dev/null @@ -1,32 +0,0 @@ -import 'package:pull_request_coverage/src/domain/analyzer/models/analysis_result.dart'; -import 'package:pull_request_coverage/src/domain/analyzer/models/file_report.dart'; -import 'package:pull_request_coverage/src/domain/user_settings/models/user_settings.dart'; -import 'package:pull_request_coverage/src/presentation/output_generator/output_generator.dart'; -import 'package:pull_request_coverage/src/presentation/use_case/get_result_table.dart'; - -class ReportOnlyOutputGenerator implements OutputGenerator { - final UserSettings userSettings; - final GetResultTable getResultTable; - final void Function(String message) print; - - ReportOnlyOutputGenerator({ - required this.userSettings, - required this.getResultTable, - required this.print, - }); - - @override - void addFileReport(FileReport report) { - // In report-only mode, we suppress all intermediate output - // and only show the final summary table - } - - @override - void terminate(AnalysisResult analysisResult) { - if (analysisResult.linesMissingTests == 0 && userSettings.fullyTestedMessage != null) { - print(userSettings.fullyTestedMessage.toString()); - } else { - print(getResultTable(userSettings, analysisResult)); - } - } -} diff --git a/test/src/presentation/output_generator/text_output_generator_test.dart b/test/src/presentation/output_generator/text_output_generator_test.dart index f807d89..f32c978 100644 --- a/test/src/presentation/output_generator/text_output_generator_test.dart +++ b/test/src/presentation/output_generator/text_output_generator_test.dart @@ -3,7 +3,6 @@ import 'package:pull_request_coverage/src/domain/analyzer/models/file_report.dar import 'package:pull_request_coverage/src/domain/user_settings/models/user_settings.dart'; import 'package:pull_request_coverage/src/presentation/output_generator/cli_output_generator.dart'; import 'package:pull_request_coverage/src/presentation/output_generator/markdown_output_generator.dart'; -import 'package:pull_request_coverage/src/presentation/output_generator/report_only_output_generator.dart'; import 'package:pull_request_coverage/src/presentation/output_generator/output_generator.dart'; import 'package:pull_request_coverage/src/presentation/use_case/colorize_text.dart'; import 'package:pull_request_coverage/src/presentation/use_case/get_result_table.dart'; @@ -40,16 +39,6 @@ void main() { ); testFunction(generator, output); }); - - test("`$description` on ReportOnly output generator", () { - final output = StringBuffer(); - final generator = ReportOnlyOutputGenerator( - userSettings: userOptions, - getResultTable: getResultTable, - print: (String message) => output.write(message), - ); - testFunction(generator, output); - }); } group("When `fullyTestedMessage` is set", () { @@ -111,59 +100,53 @@ void main() { }); }); - group("ReportOnly output generator", () { - test("should suppress file reports", () { - final output = StringBuffer(); - final generator = ReportOnlyOutputGenerator( - userSettings: UserSettings(), - getResultTable: const FakeGetResultTable(), - print: (String message) => output.write(message), - ); - - const fileReport = FileReport( - filePath: "test/file.dart", - chunks: [], - newLinesCount: 10, - linesThatShouldBeTestedCount: 10, - linesMissingTestsCount: 5, - untestedAndIgnoredLines: 0, - ); - - generator.addFileReport(fileReport); - - // Verify no output was produced from addFileReport - expect(output.toString(), isEmpty); - }); - - test("should only output summary table on terminate", () { - final output = StringBuffer(); - final generator = ReportOnlyOutputGenerator( - userSettings: UserSettings(), - getResultTable: const FakeGetResultTable(), - print: (String message) => output.write(message), - ); - - const fileReport = FileReport( - filePath: "test/file.dart", - chunks: [], - newLinesCount: 10, - linesThatShouldBeTestedCount: 10, - linesMissingTestsCount: 5, - untestedAndIgnoredLines: 0, - ); - - const result = AnalysisResult( - linesThatShouldBeTested: 10, - linesMissingTests: 5, - untestedIgnoredLines: 0, - ); - - generator.addFileReport(fileReport); - generator.terminate(result); - - // Verify only the result table was output - expect(output.toString(), equals(FakeGetResultTable.table)); - }); + group("When `reportOnly` is true", () { + testGenerator( + "should suppress file reports", + UserSettings(reportOnly: true), + (generator, output) { + const fileReport = FileReport( + filePath: "test/file.dart", + chunks: [], + newLinesCount: 10, + linesThatShouldBeTestedCount: 10, + linesMissingTestsCount: 5, + untestedAndIgnoredLines: 0, + ); + + generator.addFileReport(fileReport); + + // Verify no output was produced from addFileReport + expect(output.toString(), isEmpty); + }, + ); + + testGenerator( + "should only output summary table on terminate", + UserSettings(reportOnly: true), + (generator, output) { + const fileReport = FileReport( + filePath: "test/file.dart", + chunks: [], + newLinesCount: 10, + linesThatShouldBeTestedCount: 10, + linesMissingTestsCount: 5, + untestedAndIgnoredLines: 0, + ); + + const result = AnalysisResult( + linesThatShouldBeTested: 10, + linesMissingTests: 5, + untestedIgnoredLines: 0, + ); + + generator.addFileReport(fileReport); + generator.terminate(result); + + // Verify only the result table was output + expect(output.toString(), equals(FakeGetResultTable.table)); + }, + ); }); }