You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
103 lines
3.2 KiB
103 lines
3.2 KiB
#include <gtest/gtest.h> |
|
|
|
#include <iostream> |
|
#include <string> |
|
#include <unordered_map> |
|
|
|
#include "headless_mode.hpp" |
|
#include "options.h" |
|
#include "utils/paths.h" |
|
|
|
namespace { |
|
|
|
// Custom listener to track and report skipped tests with reasons |
|
class SkippedTestListener : public testing::EmptyTestEventListener { |
|
std::unordered_map<std::string, int> skipReasons; |
|
int totalSkipped = 0; |
|
|
|
void OnTestPartResult(const testing::TestPartResult &test_part_result) override |
|
{ |
|
if (test_part_result.skipped()) { |
|
totalSkipped++; |
|
std::string reason = test_part_result.message(); |
|
if (reason.empty()) { |
|
reason = "No reason provided"; |
|
} |
|
skipReasons[reason]++; |
|
} |
|
} |
|
|
|
void OnTestProgramEnd(const testing::UnitTest & /*unit_test*/) override |
|
{ |
|
if (totalSkipped > 0) { |
|
std::cout << "\n"; |
|
std::cout << "========================================\n"; |
|
std::cout << "Test Skip Summary\n"; |
|
std::cout << "========================================\n"; |
|
std::cout << "Total tests skipped: " << totalSkipped << "\n\n"; |
|
|
|
// Show skip reasons, with most specific reasons first |
|
bool hasMpqReason = false; |
|
bool hasNoReason = false; |
|
int mpqSkipCount = 0; |
|
int noReasonCount = 0; |
|
|
|
for (const auto &[reason, count] : skipReasons) { |
|
if (reason.find("MPQ assets") != std::string::npos) { |
|
hasMpqReason = true; |
|
mpqSkipCount += count; |
|
continue; |
|
} |
|
if (reason == "No reason provided") { |
|
hasNoReason = true; |
|
noReasonCount += count; |
|
continue; |
|
} |
|
std::cout << " • " << count << " test" << (count > 1 ? "s" : "") << " skipped: " << reason << "\n"; |
|
} |
|
|
|
// Combine MPQ-related skips for clearer output |
|
if (hasMpqReason) { |
|
int totalMpqRelated = mpqSkipCount + (hasNoReason ? noReasonCount : 0); |
|
std::cout << " • " << totalMpqRelated << " test" << (totalMpqRelated > 1 ? "s" : "") |
|
<< " skipped: MPQ assets (spawn.mpq or DIABDAT.MPQ) not found\n"; |
|
if (hasNoReason && noReasonCount > 0) { |
|
std::cout << " (" << noReasonCount << " test" << (noReasonCount > 1 ? "s" : "") |
|
<< " automatically skipped due to test suite setup failure)\n"; |
|
} |
|
} else if (hasNoReason) { |
|
// Only "No reason provided" - show it as-is |
|
std::cout << " • " << noReasonCount << " test" << (noReasonCount > 1 ? "s" : "") |
|
<< " skipped: " << "No reason provided" << "\n"; |
|
} |
|
|
|
std::cout << "========================================\n"; |
|
} |
|
} |
|
}; |
|
|
|
} // namespace |
|
|
|
int main(int argc, char **argv) |
|
{ |
|
// Disable error dialogs. |
|
devilution::HeadlessMode = true; |
|
|
|
#if SDL_VERSION_ATLEAST(2, 0, 0) |
|
// Disable hardware cursor while testing. |
|
devilution::GetOptions().Graphics.hardwareCursor.SetValue(false); |
|
#endif |
|
|
|
#ifdef __APPLE__ |
|
devilution::paths::SetAssetsPath( |
|
devilution::paths::BasePath() + "devilutionx.app/Contents/Resources/"); |
|
#endif |
|
|
|
testing::InitGoogleTest(&argc, argv); |
|
|
|
// Add custom listener to track and report skipped tests |
|
testing::TestEventListeners &listeners = testing::UnitTest::GetInstance()->listeners(); |
|
listeners.Append(new SkippedTestListener()); |
|
|
|
return RUN_ALL_TESTS(); |
|
}
|
|
|