tabs to 4 spaces (following 0dbcc1cf)
This commit is contained in:
parent
d84c051564
commit
453eda5f94
@ -121,25 +121,27 @@ concept Handler {
|
||||
|
||||
//! Default implementation of Handler.
|
||||
/*! This can be used as base class of any reader handler.
|
||||
\note implements Handler concept
|
||||
\note implements Handler concept
|
||||
*/
|
||||
template<typename Encoding = UTF8<>, typename Derived = void>
|
||||
struct BaseReaderHandler {
|
||||
typedef typename Encoding::Ch Ch;
|
||||
typedef typename Encoding::Ch Ch;
|
||||
|
||||
bool Default() { return true; }
|
||||
bool Null() { return static_cast<Override&>(*this).Default(); }
|
||||
bool Bool(bool) { return static_cast<Override&>(*this).Default(); }
|
||||
bool Int(int) { return static_cast<Override&>(*this).Default(); }
|
||||
bool Uint(unsigned) { return static_cast<Override&>(*this).Default(); }
|
||||
bool Int64(int64_t) { return static_cast<Override&>(*this).Default(); }
|
||||
bool Uint64(uint64_t) { return static_cast<Override&>(*this).Default(); }
|
||||
bool Double(double) { return static_cast<Override&>(*this).Default(); }
|
||||
bool String(const Ch*, SizeType, bool) { return static_cast<Override&>(*this).Default(); }
|
||||
bool StartObject() { return static_cast<Override&>(*this).Default(); }
|
||||
bool EndObject(SizeType) { return static_cast<Override&>(*this).Default(); }
|
||||
bool StartArray() { return static_cast<Override&>(*this).Default(); }
|
||||
bool EndArray(SizeType) { return static_cast<Override&>(*this).Default(); }
|
||||
typedef typename internal::SelectIf<internal::IsSame<Derived, void>, BaseReaderHandler, Derived>::Type Override;
|
||||
|
||||
bool Default() { return true; }
|
||||
bool Null() { return static_cast<Override&>(*this).Default(); }
|
||||
bool Bool(bool) { return static_cast<Override&>(*this).Default(); }
|
||||
bool Int(int) { return static_cast<Override&>(*this).Default(); }
|
||||
bool Uint(unsigned) { return static_cast<Override&>(*this).Default(); }
|
||||
bool Int64(int64_t) { return static_cast<Override&>(*this).Default(); }
|
||||
bool Uint64(uint64_t) { return static_cast<Override&>(*this).Default(); }
|
||||
bool Double(double) { return static_cast<Override&>(*this).Default(); }
|
||||
bool String(const Ch*, SizeType, bool) { return static_cast<Override&>(*this).Default(); }
|
||||
bool StartObject() { return static_cast<Override&>(*this).Default(); }
|
||||
bool EndObject(SizeType) { return static_cast<Override&>(*this).Default(); }
|
||||
bool StartArray() { return static_cast<Override&>(*this).Default(); }
|
||||
bool EndArray(SizeType) { return static_cast<Override&>(*this).Default(); }
|
||||
};
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////////
|
||||
@ -382,7 +384,7 @@ public:
|
||||
RAPIDJSON_PARSE_ERROR_EARLY_RETURN(parseResult_);
|
||||
}
|
||||
else {
|
||||
ParseValue<parseFlags>(is, handler);
|
||||
ParseValue<parseFlags>(is, handler);
|
||||
RAPIDJSON_PARSE_ERROR_EARLY_RETURN(parseResult_);
|
||||
|
||||
if (!(parseFlags & kParseStopWhenDoneFlag)) {
|
||||
@ -904,8 +906,8 @@ private:
|
||||
IterativeParsingElementDelimiterState,
|
||||
IterativeParsingArrayFinishState,
|
||||
|
||||
// Single value state
|
||||
IterativeParsingValueState,
|
||||
// Single value state
|
||||
IterativeParsingValueState,
|
||||
|
||||
cIterativeParsingStateCount
|
||||
};
|
||||
@ -965,11 +967,11 @@ private:
|
||||
IterativeParsingErrorState, // Right curly bracket
|
||||
IterativeParsingErrorState, // Comma
|
||||
IterativeParsingErrorState, // Colon
|
||||
IterativeParsingValueState, // String
|
||||
IterativeParsingValueState, // False
|
||||
IterativeParsingValueState, // True
|
||||
IterativeParsingValueState, // Null
|
||||
IterativeParsingValueState // Number
|
||||
IterativeParsingValueState, // String
|
||||
IterativeParsingValueState, // False
|
||||
IterativeParsingValueState, // True
|
||||
IterativeParsingValueState, // Null
|
||||
IterativeParsingValueState // Number
|
||||
},
|
||||
// Finish(sink state)
|
||||
{
|
||||
@ -1106,12 +1108,12 @@ private:
|
||||
IterativeParsingErrorState, IterativeParsingErrorState, IterativeParsingErrorState, IterativeParsingErrorState, IterativeParsingErrorState,
|
||||
IterativeParsingErrorState, IterativeParsingErrorState, IterativeParsingErrorState, IterativeParsingErrorState, IterativeParsingErrorState,
|
||||
IterativeParsingErrorState
|
||||
},
|
||||
// Single Value (sink state)
|
||||
{
|
||||
IterativeParsingErrorState, IterativeParsingErrorState, IterativeParsingErrorState, IterativeParsingErrorState, IterativeParsingErrorState,
|
||||
IterativeParsingErrorState, IterativeParsingErrorState, IterativeParsingErrorState, IterativeParsingErrorState, IterativeParsingErrorState,
|
||||
IterativeParsingErrorState
|
||||
},
|
||||
// Single Value (sink state)
|
||||
{
|
||||
IterativeParsingErrorState, IterativeParsingErrorState, IterativeParsingErrorState, IterativeParsingErrorState, IterativeParsingErrorState,
|
||||
IterativeParsingErrorState, IterativeParsingErrorState, IterativeParsingErrorState, IterativeParsingErrorState, IterativeParsingErrorState,
|
||||
IterativeParsingErrorState
|
||||
}
|
||||
}; // End of G
|
||||
|
||||
@ -1248,13 +1250,13 @@ private:
|
||||
}
|
||||
}
|
||||
|
||||
case IterativeParsingValueState:
|
||||
// Must be non-compound value. Or it would be ObjectInitial or ArrayInitial state.
|
||||
ParseValue<parseFlags>(is, handler);
|
||||
if (HasParseError()) {
|
||||
return IterativeParsingErrorState;
|
||||
}
|
||||
return IterativeParsingFinishState;
|
||||
case IterativeParsingValueState:
|
||||
// Must be non-compound value. Or it would be ObjectInitial or ArrayInitial state.
|
||||
ParseValue<parseFlags>(is, handler);
|
||||
if (HasParseError()) {
|
||||
return IterativeParsingErrorState;
|
||||
}
|
||||
return IterativeParsingFinishState;
|
||||
|
||||
default:
|
||||
RAPIDJSON_ASSERT(false);
|
||||
@ -1270,7 +1272,7 @@ private:
|
||||
}
|
||||
|
||||
switch (src) {
|
||||
case IterativeParsingStartState: RAPIDJSON_PARSE_ERROR(kParseErrorDocumentEmpty, is.Tell());
|
||||
case IterativeParsingStartState: RAPIDJSON_PARSE_ERROR(kParseErrorDocumentEmpty, is.Tell());
|
||||
case IterativeParsingFinishState: RAPIDJSON_PARSE_ERROR(kParseErrorDocumentRootNotSingular, is.Tell());
|
||||
case IterativeParsingObjectInitialState:
|
||||
case IterativeParsingMemberDelimiterState: RAPIDJSON_PARSE_ERROR(kParseErrorObjectMissName, is.Tell());
|
||||
|
@ -46,8 +46,8 @@ TEST(JsonChecker, Reader) {
|
||||
|
||||
// jsonchecker/failXX.json
|
||||
for (int i = 1; i <= 33; i++) {
|
||||
if (i == 1) // fail1.json is valid in rapidjson, which has no limitation on type of root element (RFC 7159).
|
||||
continue;
|
||||
if (i == 1) // fail1.json is valid in rapidjson, which has no limitation on type of root element (RFC 7159).
|
||||
continue;
|
||||
if (i == 18) // fail18.json is valid in rapidjson, which has no limitation on depth of nesting.
|
||||
continue;
|
||||
|
||||
@ -59,17 +59,17 @@ TEST(JsonChecker, Reader) {
|
||||
json = ReadFile(filename, length);
|
||||
if (!json) {
|
||||
printf("jsonchecker file %s not found", filename);
|
||||
ADD_FAILURE();
|
||||
ADD_FAILURE();
|
||||
continue;
|
||||
}
|
||||
}
|
||||
|
||||
GenericDocument<UTF8<>, CrtAllocator> document; // Use Crt allocator to check exception-safety (no memory leak)
|
||||
document.Parse((const char*)json);
|
||||
EXPECT_TRUE(document.HasParseError());
|
||||
document.Parse((const char*)json);
|
||||
EXPECT_TRUE(document.HasParseError());
|
||||
|
||||
document.Parse<kParseIterativeFlag>((const char*)json);
|
||||
EXPECT_TRUE(document.HasParseError());
|
||||
document.Parse<kParseIterativeFlag>((const char*)json);
|
||||
EXPECT_TRUE(document.HasParseError());
|
||||
|
||||
free(json);
|
||||
}
|
||||
@ -90,10 +90,10 @@ TEST(JsonChecker, Reader) {
|
||||
|
||||
GenericDocument<UTF8<>, CrtAllocator> document; // Use Crt allocator to check exception-safety (no memory leak)
|
||||
document.Parse((const char*)json);
|
||||
EXPECT_FALSE(document.HasParseError());
|
||||
EXPECT_FALSE(document.HasParseError());
|
||||
|
||||
document.Parse<kParseIterativeFlag>((const char*)json);
|
||||
EXPECT_FALSE(document.HasParseError());
|
||||
document.Parse<kParseIterativeFlag>((const char*)json);
|
||||
EXPECT_FALSE(document.HasParseError());
|
||||
|
||||
free(json);
|
||||
}
|
||||
|
@ -45,7 +45,7 @@ TEST(Reader, ParseTrue) {
|
||||
StringStream s("true");
|
||||
ParseBoolHandler<true> h;
|
||||
Reader reader;
|
||||
reader.Parse(s, h);
|
||||
reader.Parse(s, h);
|
||||
EXPECT_EQ(1u, h.step_);
|
||||
}
|
||||
|
||||
@ -53,7 +53,7 @@ TEST(Reader, ParseFalse) {
|
||||
StringStream s("false");
|
||||
ParseBoolHandler<false> h;
|
||||
Reader reader;
|
||||
reader.Parse(s, h);
|
||||
reader.Parse(s, h);
|
||||
EXPECT_EQ(1u, h.step_);
|
||||
}
|
||||
|
||||
@ -108,7 +108,7 @@ TEST(Reader, ParseNumberHandler) {
|
||||
StringStream s(str); \
|
||||
Handler h; \
|
||||
Reader reader; \
|
||||
reader.Parse(s, h); \
|
||||
reader.Parse(s, h); \
|
||||
EXPECT_EQ(1u, h.step_); \
|
||||
EXPECT_EQ(double(x), h.actual_); \
|
||||
}
|
||||
@ -118,7 +118,7 @@ TEST(Reader, ParseNumberHandler) {
|
||||
StringStream s(str); \
|
||||
ParseDoubleHandler h; \
|
||||
Reader reader; \
|
||||
reader.Parse(s, h); \
|
||||
reader.Parse(s, h); \
|
||||
EXPECT_EQ(1u, h.step_); \
|
||||
EXPECT_DOUBLE_EQ(x, h.actual_); \
|
||||
}
|
||||
@ -178,11 +178,11 @@ TEST(Reader, ParseNumber_Error) {
|
||||
#define TEST_NUMBER_ERROR(errorCode, str) \
|
||||
{ \
|
||||
char buffer[1001]; \
|
||||
sprintf(buffer, "%s", str); \
|
||||
sprintf(buffer, "%s", str); \
|
||||
InsituStringStream s(buffer); \
|
||||
BaseReaderHandler<> h; \
|
||||
Reader reader; \
|
||||
EXPECT_FALSE(reader.Parse(s, h)); \
|
||||
EXPECT_FALSE(reader.Parse(s, h)); \
|
||||
EXPECT_EQ(errorCode, reader.GetParseErrorCode());\
|
||||
}
|
||||
|
||||
@ -242,14 +242,14 @@ TEST(Reader, ParseString) {
|
||||
GenericInsituStringStream<Encoding> is(buffer); \
|
||||
ParseStringHandler<Encoding> h; \
|
||||
GenericReader<Encoding, Encoding> reader; \
|
||||
reader.Parse<kParseInsituFlag | kParseValidateEncodingFlag>(is, h); \
|
||||
reader.Parse<kParseInsituFlag | kParseValidateEncodingFlag>(is, h); \
|
||||
EXPECT_EQ(0, StrCmp<Encoding::Ch>(e, h.str_)); \
|
||||
EXPECT_EQ(StrLen(e), h.length_); \
|
||||
free(buffer); \
|
||||
GenericStringStream<Encoding> s(x); \
|
||||
ParseStringHandler<Encoding> h2; \
|
||||
GenericReader<Encoding, Encoding> reader2; \
|
||||
reader2.Parse(s, h2); \
|
||||
reader2.Parse(s, h2); \
|
||||
EXPECT_EQ(0, StrCmp<Encoding::Ch>(e, h2.str_)); \
|
||||
EXPECT_EQ(StrLen(e), h2.length_); \
|
||||
}
|
||||
@ -314,7 +314,7 @@ TEST(Reader, ParseString) {
|
||||
const char e[] = "Hello\0World";
|
||||
ParseStringHandler<UTF8<> > h;
|
||||
Reader reader;
|
||||
reader.Parse(s, h);
|
||||
reader.Parse(s, h);
|
||||
EXPECT_EQ(0, memcmp(e, h.str_, h.length_ + 1));
|
||||
EXPECT_EQ(11u, h.length_);
|
||||
}
|
||||
@ -326,7 +326,7 @@ TEST(Reader, ParseString_Transcoding) {
|
||||
GenericStringStream<UTF8<> > is(x);
|
||||
GenericReader<UTF8<>, UTF16<> > reader;
|
||||
ParseStringHandler<UTF16<> > h;
|
||||
reader.Parse(is, h);
|
||||
reader.Parse(is, h);
|
||||
EXPECT_EQ(0, StrCmp<UTF16<>::Ch>(e, h.str_));
|
||||
EXPECT_EQ(StrLen(e), h.length_);
|
||||
}
|
||||
@ -335,7 +335,7 @@ TEST(Reader, ParseString_NonDestructive) {
|
||||
StringStream s("\"Hello\\nWorld\"");
|
||||
ParseStringHandler<UTF8<> > h;
|
||||
Reader reader;
|
||||
reader.Parse(s, h);
|
||||
reader.Parse(s, h);
|
||||
EXPECT_EQ(0, StrCmp("Hello\nWorld", h.str_));
|
||||
EXPECT_EQ(11u, h.length_);
|
||||
}
|
||||
@ -447,7 +447,7 @@ TEST(Reader, ParseEmptyArray) {
|
||||
InsituStringStream s(json);
|
||||
ParseArrayHandler<0> h;
|
||||
Reader reader;
|
||||
reader.Parse(s, h);
|
||||
reader.Parse(s, h);
|
||||
EXPECT_EQ(2u, h.step_);
|
||||
free(json);
|
||||
}
|
||||
@ -457,7 +457,7 @@ TEST(Reader, ParseArray) {
|
||||
InsituStringStream s(json);
|
||||
ParseArrayHandler<4> h;
|
||||
Reader reader;
|
||||
reader.Parse(s, h);
|
||||
reader.Parse(s, h);
|
||||
EXPECT_EQ(6u, h.step_);
|
||||
free(json);
|
||||
}
|
||||
@ -470,7 +470,7 @@ TEST(Reader, ParseArray_Error) {
|
||||
InsituStringStream s(buffer); \
|
||||
BaseReaderHandler<> h; \
|
||||
GenericReader<UTF8<>, UTF8<>, CrtAllocator> reader; \
|
||||
EXPECT_FALSE(reader.Parse(s, h)); \
|
||||
EXPECT_FALSE(reader.Parse(s, h)); \
|
||||
EXPECT_EQ(errorCode, reader.GetParseErrorCode());\
|
||||
}
|
||||
|
||||
@ -485,7 +485,7 @@ TEST(Reader, ParseArray_Error) {
|
||||
struct ParseObjectHandler : BaseReaderHandler<UTF8<>, ParseObjectHandler> {
|
||||
ParseObjectHandler() : step_(0) {}
|
||||
|
||||
bool Default() { ADD_FAILURE(); return false; }
|
||||
bool Default() { ADD_FAILURE(); return false; }
|
||||
bool Null() { EXPECT_EQ(8u, step_); step_++; return true; }
|
||||
bool Bool(bool b) {
|
||||
switch(step_) {
|
||||
@ -535,7 +535,7 @@ TEST(Reader, ParseObject) {
|
||||
InsituStringStream s(json2);
|
||||
ParseObjectHandler h;
|
||||
Reader reader;
|
||||
reader.Parse<kParseInsituFlag>(s, h);
|
||||
reader.Parse<kParseInsituFlag>(s, h);
|
||||
EXPECT_EQ(20u, h.step_);
|
||||
free(json2);
|
||||
}
|
||||
@ -545,7 +545,7 @@ TEST(Reader, ParseObject) {
|
||||
StringStream s(json);
|
||||
ParseObjectHandler h;
|
||||
Reader reader;
|
||||
reader.Parse(s, h);
|
||||
reader.Parse(s, h);
|
||||
EXPECT_EQ(20u, h.step_);
|
||||
}
|
||||
}
|
||||
@ -564,7 +564,7 @@ TEST(Reader, Parse_EmptyObject) {
|
||||
StringStream s("{ } ");
|
||||
ParseEmptyObjectHandler h;
|
||||
Reader reader;
|
||||
reader.Parse(s, h);
|
||||
reader.Parse(s, h);
|
||||
EXPECT_EQ(2u, h.step_);
|
||||
}
|
||||
|
||||
@ -631,7 +631,7 @@ TEST(Reader, ParseInsituIterative_MultipleRoot) {
|
||||
InsituStringStream s(buffer); \
|
||||
BaseReaderHandler<> h; \
|
||||
Reader reader; \
|
||||
EXPECT_FALSE(reader.Parse(s, h)); \
|
||||
EXPECT_FALSE(reader.Parse(s, h)); \
|
||||
EXPECT_EQ(errorCode, reader.GetParseErrorCode());\
|
||||
}
|
||||
|
||||
@ -644,17 +644,17 @@ TEST(Reader, ParseDocument_Error) {
|
||||
// The document root must not follow by other values.
|
||||
TEST_ERROR(kParseErrorDocumentRootNotSingular, "[] 0");
|
||||
TEST_ERROR(kParseErrorDocumentRootNotSingular, "{} 0");
|
||||
TEST_ERROR(kParseErrorDocumentRootNotSingular, "null []");
|
||||
TEST_ERROR(kParseErrorDocumentRootNotSingular, "0 {}");
|
||||
TEST_ERROR(kParseErrorDocumentRootNotSingular, "null []");
|
||||
TEST_ERROR(kParseErrorDocumentRootNotSingular, "0 {}");
|
||||
}
|
||||
|
||||
TEST(Reader, ParseValue_Error) {
|
||||
// Invalid value.
|
||||
TEST_ERROR(kParseErrorValueInvalid, "nulL");
|
||||
TEST_ERROR(kParseErrorValueInvalid, "truE");
|
||||
TEST_ERROR(kParseErrorValueInvalid, "falsE");
|
||||
TEST_ERROR(kParseErrorValueInvalid, "a]");
|
||||
TEST_ERROR(kParseErrorValueInvalid, ".1");
|
||||
TEST_ERROR(kParseErrorValueInvalid, "nulL");
|
||||
TEST_ERROR(kParseErrorValueInvalid, "truE");
|
||||
TEST_ERROR(kParseErrorValueInvalid, "falsE");
|
||||
TEST_ERROR(kParseErrorValueInvalid, "a]");
|
||||
TEST_ERROR(kParseErrorValueInvalid, ".1");
|
||||
}
|
||||
|
||||
TEST(Reader, ParseObject_Error) {
|
||||
|
@ -51,13 +51,13 @@ TEST(Writer, Compact) {
|
||||
}
|
||||
|
||||
TEST(Writer, Root) {
|
||||
TEST_ROUNDTRIP("null");
|
||||
TEST_ROUNDTRIP("true");
|
||||
TEST_ROUNDTRIP("false");
|
||||
TEST_ROUNDTRIP("0");
|
||||
TEST_ROUNDTRIP("\"foo\"");
|
||||
TEST_ROUNDTRIP("[]");
|
||||
TEST_ROUNDTRIP("{}");
|
||||
TEST_ROUNDTRIP("null");
|
||||
TEST_ROUNDTRIP("true");
|
||||
TEST_ROUNDTRIP("false");
|
||||
TEST_ROUNDTRIP("0");
|
||||
TEST_ROUNDTRIP("\"foo\"");
|
||||
TEST_ROUNDTRIP("[]");
|
||||
TEST_ROUNDTRIP("{}");
|
||||
}
|
||||
|
||||
TEST(Writer, Int) {
|
||||
@ -170,7 +170,7 @@ TEST(Writer, AssertRootMayBeAnyValue) {
|
||||
{\
|
||||
StringBuffer buffer;\
|
||||
Writer<StringBuffer> writer(buffer);\
|
||||
EXPECT_TRUE(x);\
|
||||
EXPECT_TRUE(x);\
|
||||
}
|
||||
T(writer.Bool(false));
|
||||
T(writer.Bool(true));
|
||||
@ -243,18 +243,18 @@ TEST(Writer, AssertMultipleRoot) {
|
||||
writer.EndObject();
|
||||
ASSERT_THROW(writer.StartObject(), AssertException);
|
||||
|
||||
writer.Reset(buffer);
|
||||
writer.Null();
|
||||
ASSERT_THROW(writer.Int(0), AssertException);
|
||||
writer.Reset(buffer);
|
||||
writer.Null();
|
||||
ASSERT_THROW(writer.Int(0), AssertException);
|
||||
|
||||
writer.Reset(buffer);
|
||||
writer.String("foo");
|
||||
ASSERT_THROW(writer.StartArray(), AssertException);
|
||||
writer.Reset(buffer);
|
||||
writer.String("foo");
|
||||
ASSERT_THROW(writer.StartArray(), AssertException);
|
||||
|
||||
writer.Reset(buffer);
|
||||
writer.StartArray();
|
||||
writer.EndArray();
|
||||
ASSERT_THROW(writer.Double(3.14), AssertException);
|
||||
writer.Reset(buffer);
|
||||
writer.StartArray();
|
||||
writer.EndArray();
|
||||
ASSERT_THROW(writer.Double(3.14), AssertException);
|
||||
}
|
||||
|
||||
TEST(Writer, RootObjectIsComplete) {
|
||||
@ -287,21 +287,21 @@ TEST(Writer, RootArrayIsComplete) {
|
||||
|
||||
TEST(Writer, RootValueIsComplete) {
|
||||
#define T(x)\
|
||||
{\
|
||||
StringBuffer buffer;\
|
||||
Writer<StringBuffer> writer(buffer);\
|
||||
EXPECT_FALSE(writer.IsComplete()); \
|
||||
x; \
|
||||
EXPECT_TRUE(writer.IsComplete()); \
|
||||
}
|
||||
T(writer.Null());
|
||||
T(writer.Bool(true));
|
||||
T(writer.Bool(false));
|
||||
T(writer.Int(0));
|
||||
T(writer.Uint(0));
|
||||
T(writer.Int64(0));
|
||||
T(writer.Uint64(0));
|
||||
T(writer.Double(0));
|
||||
T(writer.String(""));
|
||||
{\
|
||||
StringBuffer buffer;\
|
||||
Writer<StringBuffer> writer(buffer);\
|
||||
EXPECT_FALSE(writer.IsComplete()); \
|
||||
x; \
|
||||
EXPECT_TRUE(writer.IsComplete()); \
|
||||
}
|
||||
T(writer.Null());
|
||||
T(writer.Bool(true));
|
||||
T(writer.Bool(false));
|
||||
T(writer.Int(0));
|
||||
T(writer.Uint(0));
|
||||
T(writer.Int64(0));
|
||||
T(writer.Uint64(0));
|
||||
T(writer.Double(0));
|
||||
T(writer.String(""));
|
||||
#undef T
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user