6 #include "simpletest.h"
8 using namespace simpletest;
10 SimpleTestSuite::SimpleTestSuite(const std::string& name) :
11 name_("[" + name + "]"), prefix_("*"), testers_(), strm_(std::cout),
14 runner_.add(new SimpleTestRunner(strm_, prefix_));
17 SimpleTestSuite::SimpleTestSuite(const std::string& name,
19 name_("[" + name + "]"), prefix_("*"), testers_(), strm_(strm)
21 runner_.add(new SimpleTestRunner(strm_, prefix_));
24 bool SimpleTestSuite::addTester(const sfcr::sfc_r<bool>::type& func)
26 // テストを追加する。中身がNULLの場合には触らない。
31 testers_.push_back(func);
35 void SimpleTestSuite::run()
37 // この場合、標準出力される、std::coutが利用される。
38 // 現在保持しているテストをまとめて実行する。
39 // 実行した結果は、全て出力されるようになる。
43 SimpleTestRunner runner(strm_, prefix_);
44 std::for_each(testers_.begin(), testers_.end(),
50 void simpletest::SimpleTestSuite::printBeginMessage()
52 // 開始メッセージを、指定されたストリームに出力する。
54 const std::string separates("==================================================");
55 const std::string run(" is running...");
56 const std::string suite("Test suite is ");
58 strm_ << separates << std::endl;
59 strm_ << prefix_ << suite << name_ << run << std::endl;
60 strm_ << separates << std::endl;
63 void simpletest::SimpleTestSuite::printEndMessage()
65 // テストの終了メッセージを、指定されたストリームに出力する。
66 const std::string separates("==================================================");
67 const std::string message("SimpleTest Results.");
69 strm_ << separates << std::endl;
70 strm_ << prefix_ << message << std::endl;
74 const std::string mes("executes tests ");
75 int count = testers_.size();
77 strm_ << prefix_ << mes << count << " --> ";
78 strm_ << "success [" << runner_->getSuccess() << "] : ";
79 strm_ << "fail [" << runner_->getFail() << "] : ";
80 strm_ << "exception [" << runner_->getException() << "]" << std::endl;
83 strm_ << separates << std::endl;
86 smart_ptr<SimpleTestAsserter> simpletest::SimpleTestSuite::getAsserter()
88 return smart_ptr<simpletest::SimpleTestAsserter>(new
89 simpletest::SimpleTestAsserter(strm_, prefix_));
93 simpletest::SimpleTestRunner::SimpleTestRunner(std::ostream& strm,
94 const std::string& prefix) :
95 strm_(strm), prefix_(prefix), pImpl(new simpletest::SimpleTestRunner::PImpl)
98 void simpletest::SimpleTestRunner::innerCheck(bool b)
100 // 関数が例外を返さなかった場合に実行されるチェック関数
112 void simpletest::SimpleTestRunner::innerCheck(std::exception& e) {
113 // 例外が発行された場合、とりあえずはe.whatsを
114 // std::stringとして保持しておく。
119 void simpletest::SimpleTestRunner::printSuccess()
121 // 成功した場合のメッセージを出力する。
122 int count = pImpl->success + pImpl->fail + pImpl->exception;
123 strm_ << prefix_ << "test ";
124 strm_ << count << " is success." << std::endl;
127 void simpletest::SimpleTestRunner::printFail()
129 // 成功した場合のメッセージを出力する。
130 int count = pImpl->success + pImpl->fail + pImpl->exception;
131 strm_ << prefix_ << "test ";
132 strm_ << count << " is fail." << std::endl;
135 void simpletest::SimpleTestRunner::printException(const std::exception& e)
137 // 成功した場合のメッセージを出力する。
138 int count = pImpl->success + pImpl->fail + pImpl->exception;
139 strm_ << prefix_ << "test ";
140 strm_ << count << " is throw exception." << std::endl;
141 strm_ << e.what() << std::endl;
145 //================================================================================
148 simpletest::SimpleTestAsserter::SimpleTestAsserter(std::ostream& strm,
149 const std::string& prefix) :
150 strm_(strm), prefix_(prefix), count_(0)
154 simpletest::SimpleTestAsserter::SimpleTestAsserter(const SimpleTestAsserter& asserter) :
155 strm_(asserter.strm_), prefix_(asserter.prefix_), count_(asserter.count_)
159 SimpleTestAsserter& simpletest::SimpleTestAsserter::operator=(const SimpleTestAsserter& asserter)
161 // 代入によってコピーを作成するための処理
162 SimpleTestAsserter a(asserter);
167 bool simpletest::SimpleTestAsserter::isOk() const
169 // count_は、checkの比較関数が失敗する度にこれがインクリメントされることに
171 return count_ == 0 ? true : false;