// gtest_color.h  ——  drop-in 方式为 Google Test 启用彩色输出
#pragma once
#include "gtest.h"

#if defined(_WIN32)
#include <Windows.h>

// 确保ENABLE_VIRTUAL_TERMINAL_PROCESSING常量可用
#ifndef ENABLE_VIRTUAL_TERMINAL_PROCESSING
#define ENABLE_VIRTUAL_TERMINAL_PROCESSING 0x0004
#endif
#endif

namespace gtest_color {

inline void EnableAnsiColor() {
#if defined(_WIN32)
  // Windows 10 1703+ 支持 ANSI VT 序列，但需要手动开启
  HANDLE h = ::GetStdHandle(STD_OUTPUT_HANDLE);
  if (h != INVALID_HANDLE_VALUE) {
    DWORD mode = 0;
    if (::GetConsoleMode(h, &mode))
      ::SetConsoleMode(h, mode | ENABLE_VIRTUAL_TERMINAL_PROCESSING);
  }
#endif
  testing::GTEST_FLAG(color) = "yes";  // 等价于 --gtest_color=yes
}

inline void Init(int* argc, char** argv) {
  ::testing::InitGoogleTest(argc, argv);
  EnableAnsiColor();
}

/// 宏：直接生成 main()，适合 99 %的场景
#define GTEST_MAIN_COLORED()          \
  int main(int argc, char** argv) {   \
    ::gtest_color::Init(&argc, argv); \
    return RUN_ALL_TESTS();           \
  }
}  // namespace gtest_color
