From ed86fb939075db7ab1265eb1ae08e794a1b140ff Mon Sep 17 00:00:00 2001 From: "William T. Nelson" <35801+wtn@users.noreply.github.com> Date: Sat, 7 Feb 2026 13:40:02 -0600 Subject: [PATCH] Suppress laudatory summary output when no assertions are executed. Co-authored-by: Claude --- lib/sus/config.rb | 17 ++++++++++----- test/sus/config.rb | 53 ++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 65 insertions(+), 5 deletions(-) diff --git a/lib/sus/config.rb b/lib/sus/config.rb index f65f8fb..71430d5 100644 --- a/lib/sus/config.rb +++ b/lib/sus/config.rb @@ -168,11 +168,14 @@ def print_summary(output, assertions) print_finished_statistics(output, assertions) - if !partial? and assertions.passed? - print_test_feedback(output, assertions) + unless assertions.count.zero? + if !partial? and assertions.passed? + print_test_feedback(output, assertions) + end + + print_slow_tests(output, assertions) end - print_slow_tests(output, assertions) print_failed_assertions(output, assertions) end @@ -181,9 +184,13 @@ def print_summary(output, assertions) # @parameter assertions [Assertions] The assertions instance. def print_finished_statistics(output, assertions) duration = @clock.duration - rate = assertions.count / duration - output.puts "🏁 Finished in ", @clock, "; #{rate.round(3)} assertions per second." + if assertions.count.zero? + output.puts "🏴 Finished in ", @clock, "." + else + rate = assertions.count / duration + output.puts "🏁 Finished in ", @clock, "; #{rate.round(3)} assertions per second." + end end # Print feedback about the test suite. diff --git a/test/sus/config.rb b/test/sus/config.rb index 237478c..494ea8f 100644 --- a/test/sus/config.rb +++ b/test/sus/config.rb @@ -5,6 +5,12 @@ require "fixtures" +class Target + def print(output) + output.write("target") + end +end + describe Sus::Config do include Fixtures @@ -14,4 +20,51 @@ it "can load config from file" do expect(config).not.to be(:nil?) end + + with "summary output" do + let(:io) {StringIO.new} + let(:output) {Sus::Output::Text.new(io)} + let(:assertions) {Sus::Assertions.new(output: Sus::Output.buffered)} + + with "errors and no assertions" do + it "suppresses laudatory output but prints timing" do + assertions.nested(Target.new, isolated: true) do |nested| + nested.error!(RuntimeError.new("load error")) + end + + config.before_tests(assertions, output: output) + config.after_tests(assertions, output: output) + + expect(io.string).to be(:include?, "🏴 Finished in") + expect(io.string).not.to be(:include?, "assertions per second") + expect(io.string).not.to be(:include?, "No slow tests found") + expect(io.string).to be(:include?, "Errored assertions") + end + end + + with "no assertions and no errors" do + it "suppresses laudatory output but prints timing" do + config.before_tests(assertions, output: output) + config.after_tests(assertions, output: output) + + expect(io.string).to be(:include?, "🏴 Finished in") + expect(io.string).not.to be(:include?, "assertions per second") + expect(io.string).not.to be(:include?, "No slow tests found") + end + end + + with "passing assertions" do + it "prints statistics and slow test output" do + assertions.nested(Target.new, isolated: true, measure: true) do |nested| + nested.assert(true) + end + + config.before_tests(assertions, output: output) + config.after_tests(assertions, output: output) + + expect(io.string).to be(:include?, "Finished in") + expect(io.string).to be(:include?, "No slow tests found") + end + end + end end