⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 tut_reporter.h

📁 美国加州大学操作系统课程实验平台Nachos
💻 H
字号:
#ifndef TUT_REPORTER#define TUT_REPORTER#include <tut.h>/** * Template Unit Tests Framework for C++. * http://tut.dozen.ru * * @author dozen, tut@dozen.ru */namespace{  std::ostream& operator << (std::ostream& os,const tut::test_result& tr)  {    switch(tr.result)    {      case tut::test_result::ok:       os << '.';       break;      case tut::test_result::fail:       os << '[' << tr.test << "=F]";      break;      case tut::test_result::ex:       os << '[' << tr.test << "=X]";      break;      case tut::test_result::warn:       os << '[' << tr.test << "=W]";      break;      case tut::test_result::term:       os << '[' << tr.test << "=T]";      break;    }    return os;  }}namespace tut{  /**   * Default TUT callback handler.   */  class reporter : public tut::callback  {    std::string current_group;    typedef std::vector<tut::test_result> not_passed_list;    not_passed_list not_passed;    std::ostream& os;  public:    int ok_count;    int exceptions_count;    int failures_count;    int terminations_count;    int warnings_count;    reporter() : os(std::cout)    {      init();    }    reporter(std::ostream& out) : os(out)    {      init();    }    void run_started()    {      init();    }    void test_completed(const tut::test_result& tr)    {      if( tr.group != current_group )      {        os << std::endl << tr.group << ": " << std::flush;        current_group = tr.group;      }      os << tr << std::flush;      if( tr.result == tut::test_result::ok ) ok_count++;      else if( tr.result == tut::test_result::ex ) exceptions_count++;      else if( tr.result == tut::test_result::fail ) failures_count++;      else if( tr.result == tut::test_result::warn ) warnings_count++;      else terminations_count++;      if( tr.result != tut::test_result::ok )      {        not_passed.push_back(tr);      }    }    void run_completed()    {      os << std::endl;      if( not_passed.size() > 0 )      {        not_passed_list::const_iterator i = not_passed.begin();        while( i != not_passed.end() )        {           tut::test_result tr = *i;           os << std::endl;           os << "---> " << "test: " << tr.group << ", test<" << tr.test << ">" << std::endl;           os << "     problem: ";           switch(tr.result)           {             case test_result::fail:                os << "assertion failed" << std::endl;                break;             case test_result::ex:                os << "unexpected exception" << std::endl;               if( tr.exception_typeid != "" )               {                  os << "     exception typeid: "                     << tr.exception_typeid << std::endl;               }               break;             case test_result::term:                os << "would be terminated" << std::endl;                break;             case test_result::warn:                os << "test passed, but cleanup code (destructor) raised an exception" << std::endl;                break;             default: break;           }           if( tr.message != "" )           {             if( tr.result == test_result::fail )             {               os << "     failed assertion: \"" << tr.message << "\"" << std::endl;             }             else             {               os << "     message: \"" << tr.message << "\"" << std::endl;             }           }           ++i;        }      }      os << std::endl;      os << "tests summary:";      if( terminations_count > 0 ) os << " terminations:" << terminations_count;      if( exceptions_count > 0 ) os << " exceptions:" << exceptions_count;      if( failures_count > 0 ) os << " failures:" << failures_count;      if( warnings_count > 0 ) os << " warnings:" << warnings_count;      os << " ok:" << ok_count;      os << std::endl;    }    bool all_ok() const    {      return not_passed.size() == 0;    }    private:    void init()    {      ok_count = 0;      exceptions_count = 0;        failures_count = 0;      terminations_count = 0;      warnings_count = 0;      not_passed.clear();    }      };};#endif

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -