Merge remote-tracking branch 'miloyip/master' into issue845_native_strlen
This commit is contained in:
commit
f349456bc5
@ -136,8 +136,10 @@ public:
|
|||||||
|
|
||||||
bool EndObject(SizeType memberCount = 0) {
|
bool EndObject(SizeType memberCount = 0) {
|
||||||
(void)memberCount;
|
(void)memberCount;
|
||||||
RAPIDJSON_ASSERT(Base::level_stack_.GetSize() >= sizeof(typename Base::Level));
|
RAPIDJSON_ASSERT(Base::level_stack_.GetSize() >= sizeof(typename Base::Level)); // not inside an Object
|
||||||
RAPIDJSON_ASSERT(!Base::level_stack_.template Top<typename Base::Level>()->inArray);
|
RAPIDJSON_ASSERT(!Base::level_stack_.template Top<typename Base::Level>()->inArray); // currently inside an Array, not Object
|
||||||
|
RAPIDJSON_ASSERT(0 == Base::level_stack_.template Top<typename Base::Level>()->valueCount % 2); // Object has a Key without a Value
|
||||||
|
|
||||||
bool empty = Base::level_stack_.template Pop<typename Base::Level>(1)->valueCount == 0;
|
bool empty = Base::level_stack_.template Pop<typename Base::Level>(1)->valueCount == 0;
|
||||||
|
|
||||||
if (!empty) {
|
if (!empty) {
|
||||||
|
@ -1928,7 +1928,7 @@ private:
|
|||||||
const Context& CurrentContext() const { return *schemaStack_.template Top<Context>(); }
|
const Context& CurrentContext() const { return *schemaStack_.template Top<Context>(); }
|
||||||
|
|
||||||
OutputHandler& CreateNullHandler() {
|
OutputHandler& CreateNullHandler() {
|
||||||
return *(nullHandler_ = static_cast<OutputHandler*>(GetStateAllocator().Malloc(sizeof(OutputHandler))));
|
return *(nullHandler_ = new (GetStateAllocator().Malloc(sizeof(OutputHandler))) OutputHandler);
|
||||||
}
|
}
|
||||||
|
|
||||||
static const size_t kDefaultSchemaStackCapacity = 1024;
|
static const size_t kDefaultSchemaStackCapacity = 1024;
|
||||||
|
@ -221,8 +221,9 @@ public:
|
|||||||
|
|
||||||
bool EndObject(SizeType memberCount = 0) {
|
bool EndObject(SizeType memberCount = 0) {
|
||||||
(void)memberCount;
|
(void)memberCount;
|
||||||
RAPIDJSON_ASSERT(level_stack_.GetSize() >= sizeof(Level));
|
RAPIDJSON_ASSERT(level_stack_.GetSize() >= sizeof(Level)); // not inside an Object
|
||||||
RAPIDJSON_ASSERT(!level_stack_.template Top<Level>()->inArray);
|
RAPIDJSON_ASSERT(!level_stack_.template Top<Level>()->inArray); // currently inside an Array, not Object
|
||||||
|
RAPIDJSON_ASSERT(0 == level_stack_.template Top<Level>()->valueCount % 2); // Object has a Key without a Value
|
||||||
level_stack_.template Pop<Level>(1);
|
level_stack_.template Pop<Level>(1);
|
||||||
return EndValue(WriteEndObject());
|
return EndValue(WriteEndObject());
|
||||||
}
|
}
|
||||||
|
@ -207,6 +207,57 @@ TEST(PrettyWriter, RawValue) {
|
|||||||
buffer.GetString());
|
buffer.GetString());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
TEST(PrettyWriter, InvalidEventSequence) {
|
||||||
|
// {]
|
||||||
|
{
|
||||||
|
StringBuffer buffer;
|
||||||
|
PrettyWriter<StringBuffer> writer(buffer);
|
||||||
|
writer.StartObject();
|
||||||
|
EXPECT_THROW(writer.EndArray(), AssertException);
|
||||||
|
EXPECT_FALSE(writer.IsComplete());
|
||||||
|
}
|
||||||
|
|
||||||
|
// [}
|
||||||
|
{
|
||||||
|
StringBuffer buffer;
|
||||||
|
PrettyWriter<StringBuffer> writer(buffer);
|
||||||
|
writer.StartArray();
|
||||||
|
EXPECT_THROW(writer.EndObject(), AssertException);
|
||||||
|
EXPECT_FALSE(writer.IsComplete());
|
||||||
|
}
|
||||||
|
|
||||||
|
// { 1:
|
||||||
|
{
|
||||||
|
StringBuffer buffer;
|
||||||
|
PrettyWriter<StringBuffer> writer(buffer);
|
||||||
|
writer.StartObject();
|
||||||
|
EXPECT_THROW(writer.Int(1), AssertException);
|
||||||
|
EXPECT_FALSE(writer.IsComplete());
|
||||||
|
}
|
||||||
|
|
||||||
|
// { 'a' }
|
||||||
|
{
|
||||||
|
StringBuffer buffer;
|
||||||
|
PrettyWriter<StringBuffer> writer(buffer);
|
||||||
|
writer.StartObject();
|
||||||
|
writer.Key("a");
|
||||||
|
EXPECT_THROW(writer.EndObject(), AssertException);
|
||||||
|
EXPECT_FALSE(writer.IsComplete());
|
||||||
|
}
|
||||||
|
|
||||||
|
// { 'a':'b','c' }
|
||||||
|
{
|
||||||
|
StringBuffer buffer;
|
||||||
|
PrettyWriter<StringBuffer> writer(buffer);
|
||||||
|
writer.StartObject();
|
||||||
|
writer.Key("a");
|
||||||
|
writer.String("b");
|
||||||
|
writer.Key("c");
|
||||||
|
EXPECT_THROW(writer.EndObject(), AssertException);
|
||||||
|
EXPECT_FALSE(writer.IsComplete());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
#if RAPIDJSON_HAS_CXX11_RVALUE_REFS
|
#if RAPIDJSON_HAS_CXX11_RVALUE_REFS
|
||||||
|
|
||||||
static PrettyWriter<StringBuffer> WriterGen(StringBuffer &target) {
|
static PrettyWriter<StringBuffer> WriterGen(StringBuffer &target) {
|
||||||
|
@ -1281,6 +1281,12 @@ TEST(SchemaValidatingWriter, Simple) {
|
|||||||
EXPECT_TRUE(validator.GetInvalidDocumentPointer() == SchemaDocument::PointerType(""));
|
EXPECT_TRUE(validator.GetInvalidDocumentPointer() == SchemaDocument::PointerType(""));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
TEST(Schema, Issue848) {
|
||||||
|
rapidjson::Document d;
|
||||||
|
rapidjson::SchemaDocument s(d);
|
||||||
|
rapidjson::GenericSchemaValidator<rapidjson::SchemaDocument, rapidjson::Document> v(s);
|
||||||
|
}
|
||||||
|
|
||||||
#if RAPIDJSON_HAS_CXX11_RVALUE_REFS
|
#if RAPIDJSON_HAS_CXX11_RVALUE_REFS
|
||||||
|
|
||||||
static SchemaDocument ReturnSchemaDocument() {
|
static SchemaDocument ReturnSchemaDocument() {
|
||||||
|
@ -442,6 +442,28 @@ TEST(Writer, InvalidEventSequence) {
|
|||||||
EXPECT_THROW(writer.Int(1), AssertException);
|
EXPECT_THROW(writer.Int(1), AssertException);
|
||||||
EXPECT_FALSE(writer.IsComplete());
|
EXPECT_FALSE(writer.IsComplete());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// { 'a' }
|
||||||
|
{
|
||||||
|
StringBuffer buffer;
|
||||||
|
Writer<StringBuffer> writer(buffer);
|
||||||
|
writer.StartObject();
|
||||||
|
writer.Key("a");
|
||||||
|
EXPECT_THROW(writer.EndObject(), AssertException);
|
||||||
|
EXPECT_FALSE(writer.IsComplete());
|
||||||
|
}
|
||||||
|
|
||||||
|
// { 'a':'b','c' }
|
||||||
|
{
|
||||||
|
StringBuffer buffer;
|
||||||
|
Writer<StringBuffer> writer(buffer);
|
||||||
|
writer.StartObject();
|
||||||
|
writer.Key("a");
|
||||||
|
writer.String("b");
|
||||||
|
writer.Key("c");
|
||||||
|
EXPECT_THROW(writer.EndObject(), AssertException);
|
||||||
|
EXPECT_FALSE(writer.IsComplete());
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
TEST(Writer, NaN) {
|
TEST(Writer, NaN) {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user