Skip to content

Commit 740e020

Browse files
committed
Merge pull request open-source-parsers#25 from cgilling/master
add tests to check that exceptions are thrown for wrong types Nice! For the record, I would have put the add-failure into the `try` block, for simplicity.
2 parents 7ebdabc + 97c77b4 commit 740e020

File tree

2 files changed

+79
-12
lines changed

2 files changed

+79
-12
lines changed

src/test_lib_json/jsontest.h

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -241,6 +241,20 @@ TestResult &checkStringEqual(TestResult &result,
241241
__LINE__, \
242242
#expected " == " #actual)
243243

244+
/// \brief Asserts that a given expression throws an exception
245+
#define JSONTEST_ASSERT_THROWS(expr) \
246+
{ \
247+
bool _threw = false; \
248+
try { \
249+
expr; \
250+
} catch (...) { \
251+
_threw = true; \
252+
} \
253+
if (!_threw) \
254+
result_->addFailure(__FILE__, __LINE__, \
255+
"expected exception thrown: " #expr); \
256+
}
257+
244258
/// \brief Begin a fixture test case.
245259
#define JSONTEST_FIXTURE(FixtureType, name) \
246260
class Test##FixtureType##name : public FixtureType { \

src/test_lib_json/main.cpp

Lines changed: 65 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1414,18 +1414,70 @@ void ValueTest::checkIsEqual(const Json::Value &x, const Json::Value &y) {
14141414
JSONTEST_ASSERT(y.compare(x) == 0);
14151415
}
14161416

1417-
JSONTEST_FIXTURE(ValueTest, checkInteger) {
1417+
JSONTEST_FIXTURE(ValueTest, typeChecksThrowExceptions) {
14181418
#if JSON_USE_EXCEPTION
1419-
try {
1420-
Json::Value x = 1;
1421-
x["key"]; // SIGABRT?
1422-
// regression for https://sourceforge.net/p/jsoncpp/bugs/67/
1423-
JSONTEST_ASSERT(0);
1424-
}
1425-
catch (std::runtime_error const &) {
1426-
JSONTEST_ASSERT(1); // good
1427-
}
1428-
#endif // JSON_USE_EXCEPTION
1419+
1420+
Json::Value intVal(1);
1421+
Json::Value strVal("Test");
1422+
Json::Value objVal(Json::objectValue);
1423+
Json::Value arrVal(Json::arrayValue);
1424+
1425+
JSONTEST_ASSERT_THROWS(intVal["test"]);
1426+
JSONTEST_ASSERT_THROWS(strVal["test"]);
1427+
JSONTEST_ASSERT_THROWS(arrVal["test"]);
1428+
1429+
JSONTEST_ASSERT_THROWS(intVal.removeMember("test"));
1430+
JSONTEST_ASSERT_THROWS(strVal.removeMember("test"));
1431+
JSONTEST_ASSERT_THROWS(arrVal.removeMember("test"));
1432+
1433+
JSONTEST_ASSERT_THROWS(intVal.getMemberNames());
1434+
JSONTEST_ASSERT_THROWS(strVal.getMemberNames());
1435+
JSONTEST_ASSERT_THROWS(arrVal.getMemberNames());
1436+
1437+
JSONTEST_ASSERT_THROWS(intVal[0]);
1438+
JSONTEST_ASSERT_THROWS(objVal[0]);
1439+
JSONTEST_ASSERT_THROWS(strVal[0]);
1440+
1441+
JSONTEST_ASSERT_THROWS(intVal.clear());
1442+
1443+
JSONTEST_ASSERT_THROWS(intVal.resize(1));
1444+
JSONTEST_ASSERT_THROWS(strVal.resize(1));
1445+
JSONTEST_ASSERT_THROWS(objVal.resize(1));
1446+
1447+
JSONTEST_ASSERT_THROWS(intVal.asCString());
1448+
1449+
JSONTEST_ASSERT_THROWS(objVal.asString());
1450+
JSONTEST_ASSERT_THROWS(arrVal.asString());
1451+
1452+
JSONTEST_ASSERT_THROWS(strVal.asInt());
1453+
JSONTEST_ASSERT_THROWS(objVal.asInt());
1454+
JSONTEST_ASSERT_THROWS(arrVal.asInt());
1455+
1456+
JSONTEST_ASSERT_THROWS(strVal.asUInt());
1457+
JSONTEST_ASSERT_THROWS(objVal.asUInt());
1458+
JSONTEST_ASSERT_THROWS(arrVal.asUInt());
1459+
1460+
JSONTEST_ASSERT_THROWS(strVal.asInt64());
1461+
JSONTEST_ASSERT_THROWS(objVal.asInt64());
1462+
JSONTEST_ASSERT_THROWS(arrVal.asInt64());
1463+
1464+
JSONTEST_ASSERT_THROWS(strVal.asUInt64());
1465+
JSONTEST_ASSERT_THROWS(objVal.asUInt64());
1466+
JSONTEST_ASSERT_THROWS(arrVal.asUInt64());
1467+
1468+
JSONTEST_ASSERT_THROWS(strVal.asDouble());
1469+
JSONTEST_ASSERT_THROWS(objVal.asDouble());
1470+
JSONTEST_ASSERT_THROWS(arrVal.asDouble());
1471+
1472+
JSONTEST_ASSERT_THROWS(strVal.asFloat());
1473+
JSONTEST_ASSERT_THROWS(objVal.asFloat());
1474+
JSONTEST_ASSERT_THROWS(arrVal.asFloat());
1475+
1476+
JSONTEST_ASSERT_THROWS(strVal.asBool());
1477+
JSONTEST_ASSERT_THROWS(objVal.asBool());
1478+
JSONTEST_ASSERT_THROWS(arrVal.asBool());
1479+
1480+
#endif
14291481
}
14301482

14311483
JSONTEST_FIXTURE(ValueTest, offsetAccessors) {
@@ -1569,8 +1621,8 @@ int main(int argc, const char *argv[]) {
15691621
JSONTEST_REGISTER_FIXTURE(runner, ValueTest, compareArray);
15701622
JSONTEST_REGISTER_FIXTURE(runner, ValueTest, compareObject);
15711623
JSONTEST_REGISTER_FIXTURE(runner, ValueTest, compareType);
1572-
JSONTEST_REGISTER_FIXTURE(runner, ValueTest, checkInteger);
15731624
JSONTEST_REGISTER_FIXTURE(runner, ValueTest, offsetAccessors);
1625+
JSONTEST_REGISTER_FIXTURE(runner, ValueTest, typeChecksThrowExceptions);
15741626

15751627
JSONTEST_REGISTER_FIXTURE(runner, ReaderTest, parseWithNoErrors);
15761628
JSONTEST_REGISTER_FIXTURE(
@@ -1580,6 +1632,7 @@ int main(int argc, const char *argv[]) {
15801632
JSONTEST_REGISTER_FIXTURE(runner, ReaderTest, parseWithDetailError);
15811633

15821634
JSONTEST_REGISTER_FIXTURE(runner, WriterTest, dropNullPlaceholders);
1635+
15831636
return runner.runCommandLine(argc, argv);
15841637
}
15851638
// vim: et ts=2 sts=2 sw=2 tw=0

0 commit comments

Comments
 (0)