📄 suite.cpp
字号:
// suite.cpp#include "suite.h"#include <iostream>#include <stdexcept>#include <cassert>using namespace std;class TestSuiteError : public logic_error{public: TestSuiteError(const string& s = "") : logic_error(s) {}};void Suite::addTest(Test* t) throw(TestSuiteError){ // Make sure test has a stream: if (t == 0) throw TestSuiteError("Null test in Suite::addTest"); else if (m_osptr != 0 && t->getStream() == 0) t->setStream(m_osptr); m_tests.push_back(t); t->reset();}void Suite::addSuite(const Suite& s) throw(TestSuiteError){ for (size_t i = 0; i < s.m_tests.size(); ++i) addTest(s.m_tests[i]);}void Suite::free(){ // This is not a destructor because tests // don't have to be on the heap. for (size_t i = 0; i < m_tests.size(); ++i) { delete m_tests[i]; m_tests[i] = 0; }}void Suite::run(){ reset(); for (size_t i = 0; i < m_tests.size(); ++i) { assert(m_tests[i]); m_tests[i]->run(); }}long Suite::report() const{ if (m_osptr) { long totFail = 0; *m_osptr << "Suite \"" << m_name << "\"\n======="; size_t i; for (i = 0; i < m_name.size(); ++i) *m_osptr << '='; *m_osptr << "=\n"; for (i = 0; i < m_tests.size(); ++i) { assert(m_tests[i]); totFail += m_tests[i]->report(); } *m_osptr << "======="; for (i = 0; i < m_name.size(); ++i) *m_osptr << '='; *m_osptr << "=\n"; return totFail; } else return getNumFailed();}long Suite::getNumPassed() const{ long totPass = 0; for (size_t i = 0; i < m_tests.size(); ++i) { assert(m_tests[i]); totPass += m_tests[i]->getNumPassed(); } return totPass;}long Suite::getNumFailed() const{ long totFail = 0; for (size_t i = 0; i < m_tests.size(); ++i) { assert(m_tests[i]); totFail += m_tests[i]->getNumFailed(); } return totFail;}void Suite::reset(){ for (size_t i = 0; i < m_tests.size(); ++i) { assert(m_tests[i]); m_tests[i]->reset(); }}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -