00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025 #include <cstdio>
00026 #include <exception>
00027 #include <string>
00028 #include <LampBasic.h>
00029 #include "LampUnit/TestCase.h"
00030 #include "LampUnit/TestResult.h"
00031 #include "LampUnit/TestFailure.h"
00032
00033 namespace LampUnit{
00034
00035
00036
00037 TestCase::TestCase(Lamp::String name) : name_(name), result_(NULL){
00038 }
00039
00040
00041 TestCase::TestCase() : name_(""), result_(NULL){
00042 }
00043
00044
00045 void TestCase::run(TestResult* result){
00046 result_ = result;
00047 result_->startTest(this);
00048
00049 try{
00050
00051 setUp();
00052
00053
00054 try{
00055 runTest();
00056 }catch(std::exception& exception){
00057 TestFail(exception.what());
00058 }catch(...){
00059 TestFail("runTest() catchされていない例外が発生しました。");
00060 }
00061
00062
00063 try{
00064 tearDown();
00065 }catch (...){
00066 TestFail("tearDown() catchされていない例外が発生しました。");
00067 }
00068
00069 }catch(...){
00070 TestFail("setUp() catchされていない例外が発生しました。");
00071 }
00072
00073 result_->endTest(this);
00074 result_ = NULL;
00075 }
00076
00077
00078 void TestCase::addFailure(
00079 const Lamp::String& message, const char* file, int line){
00080 TestFailure failure(this, message, file, line);
00081 result_->addFailure(failure);
00082 }
00083
00084
00085 bool TestCase::equals(const char* leftValue, const char* rightValue){
00086 if(leftValue == rightValue){ return true; }
00087 if((leftValue == NULL) || (rightValue == NULL)){ return false; }
00088 return (std::strcmp(leftValue, rightValue) == 0);
00089 }
00090
00091
00092 Lamp::String TestCase::notEqualMessage(int expected, int actual){
00093 Lamp::String result;
00094 result.format(
00095 "期待される値は %d ですが実際の値は %d でした。",
00096 expected, actual);
00097 return result;
00098 }
00099
00100
00101 Lamp::String TestCase::notEqualMessage(
00102 u_int expected, u_int actual){
00103 Lamp::String result;
00104 result.format(
00105 "期待される値は %u ですが実際の値は %u でした。",
00106 expected, actual);
00107 return result;
00108 }
00109
00110
00111 Lamp::String TestCase::notEqualMessage(
00112 float expected, float actual, float epsilon){
00113 Lamp::String result;
00114 result.format(
00115 "期待される値は %.8f(0x%x) で、許容誤差は%.8fですが"
00116 "実際の値は %.8f(0x%x) でした。",
00117 expected, *(u_int*)&expected, epsilon, actual, *(u_int*)&actual);
00118 return result;
00119 }
00120
00121
00122 Lamp::String TestCase::notEqualMessage(
00123 double expected, double actual, double epsilon){
00124 Lamp::String result;
00125 result.format(
00126 "期待される値は %.16f(0x%I64x) で、許容誤差は%.16fですが"
00127 "実際の値は %.16f(0x%I64x) でした。",
00128 expected, *(long long*)&expected, epsilon, actual, *(long long*)&actual);
00129 return result;
00130 }
00131
00132
00133 Lamp::String TestCase::notEqualMessage(const char* expected, const char* actual){
00134 Lamp::String result("期待される文字列は ");
00135 if(expected == NULL){
00136 result.append("<NULL>");
00137 }else{
00138 result.append("\"").append(expected).append("\"");
00139 }
00140 result.append(" ですが実際の文字列は ");
00141 if(actual == NULL){
00142 result.append("<NULL>");
00143 }else{
00144 result.append("\"").append(actual).append("\"");
00145 }
00146 result.append(" でした。");
00147 return result;
00148 }
00149
00150
00151 Lamp::String TestCase::equalMessage(int notExpected, int actual){
00152 Lamp::String result;
00153 result.format(
00154 "期待さない値は %d ですが実際の値は %d でした。",
00155 notExpected, actual);
00156 return result;
00157 }
00158
00159
00160 Lamp::String TestCase::equalMessage(
00161 u_int notExpected, u_int actual){
00162 Lamp::String result;
00163 result.format(
00164 "期待さない値は %u ですが実際の値は %u でした。",
00165 notExpected, actual);
00166 return result;
00167 }
00168
00169
00170 Lamp::String TestCase::equalMessage(
00171 float notExpected, float actual, float epsilon){
00172 Lamp::String result;
00173 result.format(
00174 "期待されない値は %.8f(0x%x) で、許容誤差は%.8fですが"
00175 "実際の値は %.8f(0x%x) でした。",
00176 notExpected, *(u_int*)¬Expected, epsilon, actual, *(u_int*)&actual);
00177 return result;
00178 }
00179
00180
00181 Lamp::String TestCase::equalMessage(
00182 double notExpected, double actual, double epsilon){
00183 Lamp::String result;
00184 result.format(
00185 "期待されない値は %.16f(0x%I64x) で、許容誤差は%.16fですが"
00186 "実際の値は %.16f(0x%I64x) でした。",
00187 notExpected, *(long long*)¬Expected, epsilon,
00188 actual, *(long long*)&actual);
00189 return result;
00190 }
00191
00192
00193 Lamp::String TestCase::equalMessage(const char* notExpected, const char* actual){
00194 Lamp::String result("期待されない文字列は ");
00195 if(notExpected == NULL){
00196 result.append("<NULL>");
00197 }else{
00198 result.append("\"").append(notExpected).append("\"");
00199 }
00200 result.append(" ですが実際の文字列は ");
00201 if(actual == NULL){
00202 result.append("<NULL>");
00203 }else{
00204 result.append("\"").append(actual).append("\"");
00205 }
00206 result.append(" でした。");
00207 return result;
00208 }
00209
00210 }
00211