6 #ifndef JSONTEST_H_INCLUDED 7 #define JSONTEST_H_INCLUDED 12 #include <json/config.h> 13 #include <json/value.h> 14 #include <json/writer.h> 37 Json::String message_;
38 unsigned int nestingLevel_;
45 using Id =
unsigned int;
64 PredicateContext::Id predicateId_{1};
69 void setTestName(
const Json::String& name);
72 TestResult& addFailure(
const char* file,
unsigned int line,
73 const char* expr =
nullptr);
78 TestResult& popPredicateContext();
82 void printFailure(
bool printTestName)
const;
85 template <
typename T> TestResult& operator<<(
const T& value) {
86 Json::OStringStream oss;
87 oss << std::setprecision(16) << std::hexfloat << value;
88 return addToLastFailure(oss.str());
92 TestResult& operator<<(
bool value);
94 TestResult& operator<<(Json::Int64 value);
95 TestResult& operator<<(Json::UInt64 value);
98 TestResult& addToLastFailure(
const Json::String& message);
100 void addFailureInfo(
const char* file,
unsigned int line,
const char* expr,
101 unsigned int nestingLevel);
102 static Json::String indentText(
const Json::String& text,
103 const Json::String& indent);
105 using Failures = std::deque<Failure>;
109 PredicateContext::Id lastUsedPredicateId_{0};
111 Failure* messageTarget_{
nullptr};
120 void run(TestResult& result);
122 virtual const char* testName()
const = 0;
125 TestResult* result_{
nullptr};
128 virtual void runTestCase() = 0;
145 int runCommandLine(
int argc,
const char* argv[])
const;
148 bool runAllTest(
bool printSummary)
const;
151 size_t testCount()
const;
154 Json::String testNameAt(
size_t index)
const;
157 void runTestAt(
size_t index, TestResult& result)
const;
159 static void printUsage(
const char* appName);
162 Runner(
const Runner& other) =
delete;
163 Runner& operator=(
const Runner& other) =
delete;
166 void listTests()
const;
167 bool testIndex(
const Json::String& testName,
size_t& indexOut)
const;
168 static void preventDialogOnCrash();
171 using Factories = std::deque<TestCaseFactory>;
175 template <
typename T,
typename U>
176 TestResult& checkEqual(TestResult& result, T expected, U actual,
177 const char* file,
unsigned int line,
const char* expr) {
178 if (static_cast<U>(expected) != actual) {
179 result.addFailure(file, line, expr);
180 result <<
"Expected: " <<
static_cast<U
>(expected) <<
"\n";
181 result <<
"Actual : " << actual;
186 Json::String ToJsonString(
const char* toConvert);
187 Json::String ToJsonString(Json::String in);
188 #if JSONCPP_USING_SECURE_MEMORY 189 Json::String ToJsonString(std::string in);
192 TestResult& checkStringEqual(TestResult& result,
const Json::String& expected,
193 const Json::String& actual,
const char* file,
194 unsigned int line,
const char* expr);
201 #define JSONTEST_ASSERT(expr) \ 204 result_->addFailure(__FILE__, __LINE__, #expr) 209 #define JSONTEST_ASSERT_PRED(expr) \ 211 JsonTest::PredicateContext _minitest_Context = { \ 212 result_->predicateId_, __FILE__, __LINE__, #expr, NULL, NULL}; \ 213 result_->predicateStackTail_->next_ = &_minitest_Context; \ 214 result_->predicateId_ += 1; \ 215 result_->predicateStackTail_ = &_minitest_Context; \ 217 result_->popPredicateContext(); \ 221 #define JSONTEST_ASSERT_EQUAL(expected, actual) \ 222 JsonTest::checkEqual(*result_, expected, actual, __FILE__, __LINE__, \ 223 #expected " == " #actual) 226 #define JSONTEST_ASSERT_STRING_EQUAL(expected, actual) \ 227 JsonTest::checkStringEqual(*result_, JsonTest::ToJsonString(expected), \ 228 JsonTest::ToJsonString(actual), __FILE__, \ 229 __LINE__, #expected " == " #actual) 232 #define JSONTEST_ASSERT_THROWS(expr) \ 234 bool _threw = false; \ 241 result_->addFailure(__FILE__, __LINE__, \ 242 "expected exception thrown: " #expr); \ 246 #define JSONTEST_FIXTURE(FixtureType, name) \ 247 class Test##FixtureType##name : public FixtureType { \ 249 static JsonTest::TestCase* factory() { \ 250 return new Test##FixtureType##name(); \ 254 const char* testName() const override { return #FixtureType "/" #name; } \ 255 void runTestCase() override; \ 258 void Test##FixtureType##name::runTestCase() 260 #define JSONTEST_FIXTURE_FACTORY(FixtureType, name) \ 261 &Test##FixtureType##name::factory 263 #define JSONTEST_REGISTER_FIXTURE(runner, FixtureType, name) \ 264 (runner).add(JSONTEST_FIXTURE_FACTORY(FixtureType, name)) 267 #define JSONTEST_FIXTURE_V2(FixtureType, name, collections) \ 268 class Test##FixtureType##name : public FixtureType { \ 270 static JsonTest::TestCase* factory() { \ 271 return new Test##FixtureType##name(); \ 273 static bool collect() { \ 274 (collections).push_back(JSONTEST_FIXTURE_FACTORY(FixtureType, name)); \ 279 const char* testName() const override { return #FixtureType "/" #name; } \ 280 void runTestCase() override; \ 283 static bool test##FixtureType##name##collect = \ 284 Test##FixtureType##name::collect(); \ 286 void Test##FixtureType##name::runTestCase() 288 #endif // ifndef JSONTEST_H_INCLUDED Unit testing framework.
Definition: jsontest.h:30
TestCase *(*)() TestCaseFactory
Function pointer type for TestCase factory.
Definition: jsontest.h:132
Failure * failure_
Related Failure, set when the PredicateContext is converted into a Failure.
Definition: jsontest.h:53
Context used to create the assertion callstack on failure.
Definition: jsontest.h:44