LibTest/Utilities: Add method for TestRunner to print failed test names

If a test run has a lot of tests in it, and they fill up the terminal
buffer, it can be difficult to find out exactly which tests have failed
from your large test run. Make TestRunner print out an optional Vector
of failed test names at the end of the run, and have run-tests add each
failed or crashed test to a Vector it uses for this purpose.
This commit is contained in:
Andrew Kaster 2021-07-17 16:29:51 -06:00 committed by Ali Mohammad Pur
parent 64aac345d3
commit ff8429a749
Notes: sideshowbarker 2024-07-18 08:46:15 +09:00
2 changed files with 7 additions and 0 deletions

View file

@ -55,6 +55,7 @@ protected:
virtual Vector<String> get_test_paths() const = 0;
virtual void do_run_single_test(const String&) = 0;
virtual const Vector<String>* get_failed_test_names() const { return nullptr; }
String m_test_root;
bool m_print_times;
@ -214,6 +215,9 @@ inline void TestRunner::print_test_results() const
} else {
outln("{:>.3}s", m_total_elapsed_time_in_ms / 1000.0);
}
if (auto* failed_tests = get_failed_test_names(); failed_tests && !failed_tests->is_empty()) {
outln("Failed tests: {}", *failed_tests);
}
outln();
}

View file

@ -48,6 +48,7 @@ public:
protected:
virtual void do_run_single_test(const String& test_path) override;
virtual Vector<String> get_test_paths() const override;
virtual const Vector<String>* get_failed_test_names() const override { return &m_failed_test_names; }
virtual FileResult run_test_file(const String& test_path);
@ -57,6 +58,7 @@ protected:
NonnullRefPtr<Core::ConfigFile> m_config;
Vector<String> m_skip_directories;
Vector<String> m_skip_files;
Vector<String> m_failed_test_names;
Regex<PosixExtended> m_skip_regex;
bool m_print_all_output { false };
};
@ -120,6 +122,7 @@ void TestRunner::do_run_single_test(const String& test_path)
bool crashed_or_failed = test_result.result == Test::Result::Fail || test_result.result == Test::Result::Crashed;
bool print_stdout_stderr = crashed_or_failed || m_print_all_output;
if (crashed_or_failed) {
m_failed_test_names.append(test_path);
print_modifiers({ Test::BG_RED, Test::FG_BLACK, Test::FG_BOLD });
out("{}", test_result.result == Test::Result::Fail ? " FAIL " : "CRASHED");
print_modifiers({ Test::CLEAR });