#include <memory>
#include <sstream>
#include <iostream>
#include <iomanip>
#include <j/io/term.hpp>
#include <j/cppunit/cppunit.hpp>
using namespace j::io::Term;
namespace j
{
namespace cppunit
{
////////////////////////////////////////////////////////////////////////
//
// TestCase
//
/**
* TestCase を構築します。
*/
TestCase::TestCase() noexcept { /* NOP */ }
/**
* TestCase を破棄します。
*/
TestCase::~TestCase() noexcept { /* NOP */ }
/**
* 各テストケース実施前に実行されます。
*/
void TestCase::setUp() { /* NOP */ }
/**
* 各テストケース実施後に実行されます。
*/
void TestCase::tearDown() { /* NOP */ }
////////////////////////////////////////////////////////////////////////
//
// TestManager
//
/**
* TestManager を構築します。
*/
TestManager::TestManager() : okCount(0), ngCount(0)
{
// NOP
}
/**
* TestManager を破棄します。
* 破棄するタイミングで、テスト結果を出力します。
*/
TestManager::~TestManager()
{
// NOP
}
/**
* テスト結果を追加します。
*
* @param file ファイル
*/
void TestManager::addTestResult(const char *title, const char *func, const char *file, int line, bool result, const j::lang::AssertionError *e)
{
std::ostringstream msg;
msg << title << " [" << func << "] ";
std::cout << BLD << Color::CYN << std::setw(5) << std::setfill('0') << std::right << (okCount + ngCount + 1) << " ";
std::cout << BLD << Color::CYN << std::setw(84) << std::setfill(' ') << std::left << msg.str() << Color::DEF << CLR;
if (result)
{ // テスト成功
std::cout << BLD << Color::CYN << "[ " << Color::GRN << "OK" << Color::CYN << " ]" << Color::DEF << CLR << std::endl;
okCount++;
}
else
{ // テスト失敗
std::cout << BLD << Color::CYN << "[ " << Color::RED << "NG" << Color::CYN << " ]" << Color::DEF << CLR << std::endl;
ngCount++;
if (e)
{
std::cerr << BLD << Color::YEL << e->toString() << Color::DEF << CLR << std::endl;
std::cerr << BLD << Color::YEL << "\tat " << file << ":" << line << " [RUN_TEST]" << Color::DEF << CLR << std::endl;
}
}
}
/**
* テスト結果を出力します。
*/
void TestManager::printResult()
{
std::string line(80, '-');
std::cout << BLD << Color::CYN << line << Color::DEF << CLR << std::endl;
std::cout << BLD << Color::GRN << " Success : " << okCount << Color::DEF << CLR << std::endl;
std::cout << BLD << Color::RED << " Failure : " << ngCount << Color::DEF << CLR << std::endl;
std::cout << BLD << Color::CYN << " Total : " << (okCount + ngCount) << Color::DEF << CLR << std::endl;
std::cout << std::endl;
}
// テスト実施用インスタンス
TestManager testManager;
} // namespace cppunit
} // namespace j