diff --git a/include/rapidjson/reader.h b/include/rapidjson/reader.h index 25c286b..eacdacb 100644 --- a/include/rapidjson/reader.h +++ b/include/rapidjson/reader.h @@ -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 Derived = void> struct BaseReaderHandler { - typedef typename Encoding::Ch Ch; + typedef typename Encoding::Ch Ch; - bool Default() { return true; } - bool Null() { return static_cast(*this).Default(); } - bool Bool(bool) { return static_cast(*this).Default(); } - bool Int(int) { return static_cast(*this).Default(); } - bool Uint(unsigned) { return static_cast(*this).Default(); } - bool Int64(int64_t) { return static_cast(*this).Default(); } - bool Uint64(uint64_t) { return static_cast(*this).Default(); } - bool Double(double) { return static_cast(*this).Default(); } - bool String(const Ch*, SizeType, bool) { return static_cast(*this).Default(); } - bool StartObject() { return static_cast(*this).Default(); } - bool EndObject(SizeType) { return static_cast(*this).Default(); } - bool StartArray() { return static_cast(*this).Default(); } - bool EndArray(SizeType) { return static_cast(*this).Default(); } + typedef typename internal::SelectIf, BaseReaderHandler, Derived>::Type Override; + + bool Default() { return true; } + bool Null() { return static_cast(*this).Default(); } + bool Bool(bool) { return static_cast(*this).Default(); } + bool Int(int) { return static_cast(*this).Default(); } + bool Uint(unsigned) { return static_cast(*this).Default(); } + bool Int64(int64_t) { return static_cast(*this).Default(); } + bool Uint64(uint64_t) { return static_cast(*this).Default(); } + bool Double(double) { return static_cast(*this).Default(); } + bool String(const Ch*, SizeType, bool) { return static_cast(*this).Default(); } + bool StartObject() { return static_cast(*this).Default(); } + bool EndObject(SizeType) { return static_cast(*this).Default(); } + bool StartArray() { return static_cast(*this).Default(); } + bool EndArray(SizeType) { return static_cast(*this).Default(); } }; /////////////////////////////////////////////////////////////////////////////// @@ -382,7 +384,7 @@ public: RAPIDJSON_PARSE_ERROR_EARLY_RETURN(parseResult_); } else { - ParseValue(is, handler); + ParseValue(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(is, handler); - if (HasParseError()) { - return IterativeParsingErrorState; - } - return IterativeParsingFinishState; + case IterativeParsingValueState: + // Must be non-compound value. Or it would be ObjectInitial or ArrayInitial state. + ParseValue(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()); diff --git a/test/unittest/jsoncheckertest.cpp b/test/unittest/jsoncheckertest.cpp index f4169dc..caa1b8a 100644 --- a/test/unittest/jsoncheckertest.cpp +++ b/test/unittest/jsoncheckertest.cpp @@ -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, 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((const char*)json); - EXPECT_TRUE(document.HasParseError()); + document.Parse((const char*)json); + EXPECT_TRUE(document.HasParseError()); free(json); } @@ -90,10 +90,10 @@ TEST(JsonChecker, Reader) { GenericDocument, 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((const char*)json); - EXPECT_FALSE(document.HasParseError()); + document.Parse((const char*)json); + EXPECT_FALSE(document.HasParseError()); free(json); } diff --git a/test/unittest/readertest.cpp b/test/unittest/readertest.cpp index 7f4e167..9a19f96 100644 --- a/test/unittest/readertest.cpp +++ b/test/unittest/readertest.cpp @@ -45,7 +45,7 @@ TEST(Reader, ParseTrue) { StringStream s("true"); ParseBoolHandler 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 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 is(buffer); \ ParseStringHandler h; \ GenericReader reader; \ - reader.Parse(is, h); \ + reader.Parse(is, h); \ EXPECT_EQ(0, StrCmp(e, h.str_)); \ EXPECT_EQ(StrLen(e), h.length_); \ free(buffer); \ GenericStringStream s(x); \ ParseStringHandler h2; \ GenericReader reader2; \ - reader2.Parse(s, h2); \ + reader2.Parse(s, h2); \ EXPECT_EQ(0, StrCmp(e, h2.str_)); \ EXPECT_EQ(StrLen(e), h2.length_); \ } @@ -314,7 +314,7 @@ TEST(Reader, ParseString) { const char e[] = "Hello\0World"; ParseStringHandler > 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 > is(x); GenericReader, UTF16<> > reader; ParseStringHandler > h; - reader.Parse(is, h); + reader.Parse(is, h); EXPECT_EQ(0, StrCmp::Ch>(e, h.str_)); EXPECT_EQ(StrLen(e), h.length_); } @@ -335,7 +335,7 @@ TEST(Reader, ParseString_NonDestructive) { StringStream s("\"Hello\\nWorld\""); ParseStringHandler > 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<>, 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, 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(s, h); + reader.Parse(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) { diff --git a/test/unittest/writertest.cpp b/test/unittest/writertest.cpp index fd42e8d..e313c8b 100644 --- a/test/unittest/writertest.cpp +++ b/test/unittest/writertest.cpp @@ -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 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 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 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 }