|
|
|
@ -1,9 +1,83 @@ |
|
|
|
#include <gtest/gtest.h> |
|
|
|
#include <gtest/gtest.h> |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
#include <iostream> |
|
|
|
|
|
|
|
#include <string> |
|
|
|
|
|
|
|
#include <unordered_map> |
|
|
|
|
|
|
|
|
|
|
|
#include "headless_mode.hpp" |
|
|
|
#include "headless_mode.hpp" |
|
|
|
#include "options.h" |
|
|
|
#include "options.h" |
|
|
|
#include "utils/paths.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) |
|
|
|
int main(int argc, char **argv) |
|
|
|
{ |
|
|
|
{ |
|
|
|
// Disable error dialogs.
|
|
|
|
// Disable error dialogs.
|
|
|
|
@ -20,5 +94,10 @@ int main(int argc, char **argv) |
|
|
|
#endif |
|
|
|
#endif |
|
|
|
|
|
|
|
|
|
|
|
testing::InitGoogleTest(&argc, argv); |
|
|
|
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(); |
|
|
|
return RUN_ALL_TESTS(); |
|
|
|
} |
|
|
|
} |
|
|
|
|