mirror of
https://github.com/open-source-parsers/jsoncpp.git
synced 2024-12-26 18:51:04 +08:00
reinforce readToken function and add simple tests (#1012)
This commit is contained in:
parent
c5cb313ca0
commit
2cb9a5803e
@ -1227,6 +1227,14 @@ bool OurReader::readToken(Token& token) {
|
|||||||
ok = features_.allowSpecialFloats_ && match("nfinity", 7);
|
ok = features_.allowSpecialFloats_ && match("nfinity", 7);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
case '+':
|
||||||
|
if (readNumber(true)) {
|
||||||
|
token.type_ = tokenNumber;
|
||||||
|
} else {
|
||||||
|
token.type_ = tokenPosInf;
|
||||||
|
ok = features_.allowSpecialFloats_ && match("nfinity", 7);
|
||||||
|
}
|
||||||
|
break;
|
||||||
case 't':
|
case 't':
|
||||||
token.type_ = tokenTrue;
|
token.type_ = tokenTrue;
|
||||||
ok = match("rue", 3);
|
ok = match("rue", 3);
|
||||||
|
@ -2451,17 +2451,19 @@ JSONTEST_FIXTURE(CharReaderAllowSpecialFloatsTest, issue209) {
|
|||||||
Json::String errs;
|
Json::String errs;
|
||||||
Json::CharReader* reader(b.newCharReader());
|
Json::CharReader* reader(b.newCharReader());
|
||||||
{
|
{
|
||||||
char const doc[] = "{\"a\":NaN,\"b\":Infinity,\"c\":-Infinity}";
|
char const doc[] = "{\"a\":NaN,\"b\":Infinity,\"c\":-Infinity,\"d\":+Infinity}";
|
||||||
bool ok = reader->parse(doc, doc + std::strlen(doc), &root, &errs);
|
bool ok = reader->parse(doc, doc + std::strlen(doc), &root, &errs);
|
||||||
JSONTEST_ASSERT(ok);
|
JSONTEST_ASSERT(ok);
|
||||||
JSONTEST_ASSERT_STRING_EQUAL("", errs);
|
JSONTEST_ASSERT_STRING_EQUAL("", errs);
|
||||||
JSONTEST_ASSERT_EQUAL(3u, root.size());
|
JSONTEST_ASSERT_EQUAL(4u, root.size());
|
||||||
double n = root["a"].asDouble();
|
double n = root["a"].asDouble();
|
||||||
JSONTEST_ASSERT(std::isnan(n));
|
JSONTEST_ASSERT(std::isnan(n));
|
||||||
JSONTEST_ASSERT_EQUAL(std::numeric_limits<double>::infinity(),
|
JSONTEST_ASSERT_EQUAL(std::numeric_limits<double>::infinity(),
|
||||||
root.get("b", 0.0));
|
root.get("b", 0.0));
|
||||||
JSONTEST_ASSERT_EQUAL(-std::numeric_limits<double>::infinity(),
|
JSONTEST_ASSERT_EQUAL(-std::numeric_limits<double>::infinity(),
|
||||||
root.get("c", 0.0));
|
root.get("c", 0.0));
|
||||||
|
JSONTEST_ASSERT_EQUAL(std::numeric_limits<double>::infinity(),
|
||||||
|
root.get("d", 0.0));
|
||||||
}
|
}
|
||||||
|
|
||||||
struct TestData {
|
struct TestData {
|
||||||
@ -2485,7 +2487,8 @@ JSONTEST_FIXTURE(CharReaderAllowSpecialFloatsTest, issue209) {
|
|||||||
{__LINE__, false, "{\"a\":.Infinity}"}, //
|
{__LINE__, false, "{\"a\":.Infinity}"}, //
|
||||||
{__LINE__, false, "{\"a\":_Infinity}"}, //
|
{__LINE__, false, "{\"a\":_Infinity}"}, //
|
||||||
{__LINE__, false, "{\"a\":_nfinity}"}, //
|
{__LINE__, false, "{\"a\":_nfinity}"}, //
|
||||||
{__LINE__, true, "{\"a\":-Infinity}"} //
|
{__LINE__, true, "{\"a\":-Infinity}"}, //
|
||||||
|
{__LINE__, true, "{\"a\":+Infinity}"} //
|
||||||
};
|
};
|
||||||
for (const auto& td : test_data) {
|
for (const auto& td : test_data) {
|
||||||
bool ok = reader->parse(&*td.in.begin(), &*td.in.begin() + td.in.size(),
|
bool ok = reader->parse(&*td.in.begin(), &*td.in.begin() + td.in.size(),
|
||||||
@ -2499,7 +2502,7 @@ JSONTEST_FIXTURE(CharReaderAllowSpecialFloatsTest, issue209) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
{
|
{
|
||||||
char const doc[] = "{\"posInf\": Infinity, \"NegInf\": -Infinity}";
|
char const doc[] = "{\"posInf\": +Infinity, \"NegInf\": -Infinity}";
|
||||||
bool ok = reader->parse(doc, doc + std::strlen(doc), &root, &errs);
|
bool ok = reader->parse(doc, doc + std::strlen(doc), &root, &errs);
|
||||||
JSONTEST_ASSERT(ok);
|
JSONTEST_ASSERT(ok);
|
||||||
JSONTEST_ASSERT_STRING_EQUAL("", errs);
|
JSONTEST_ASSERT_STRING_EQUAL("", errs);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user