Skip to content

Commit

Permalink
Improve coverage for Writer and PrettyWriter
Browse files Browse the repository at this point in the history
  • Loading branch information
miloyip committed Apr 13, 2015
1 parent 3c02868 commit 18a8891
Show file tree
Hide file tree
Showing 4 changed files with 47 additions and 8 deletions.
10 changes: 6 additions & 4 deletions include/rapidjson/prettywriter.h
Original file line number Diff line number Diff line change
Expand Up @@ -100,8 +100,9 @@ class PrettyWriter : public Writer<OutputStream, SourceEncoding, TargetEncoding,
Base::os_->Put('\n');
WriteIndent();
}
if (!Base::WriteEndObject())
return false;
bool ret = Base::WriteEndObject();
(void)ret;
RAPIDJSON_ASSERT(ret == true);
if (Base::level_stack_.Empty()) // end of json text
Base::os_->Flush();
return true;
Expand All @@ -123,8 +124,9 @@ class PrettyWriter : public Writer<OutputStream, SourceEncoding, TargetEncoding,
Base::os_->Put('\n');
WriteIndent();
}
if (!Base::WriteEndArray())
return false;
bool ret = Base::WriteEndArray();
(void)ret;
RAPIDJSON_ASSERT(ret == true);
if (Base::level_stack_.Empty()) // end of json text
Base::os_->Flush();
return true;
Expand Down
5 changes: 2 additions & 3 deletions include/rapidjson/writer.h
Original file line number Diff line number Diff line change
Expand Up @@ -272,7 +272,8 @@ class Writer {
os_->Put(hexDigits[(codepoint >> 4) & 15]);
os_->Put(hexDigits[(codepoint ) & 15]);
}
else if (codepoint >= 0x010000 && codepoint <= 0x10FFFF) {
else {
RAPIDJSON_ASSERT(codepoint >= 0x010000 && codepoint <= 0x10FFFF);
// Surrogate pair
unsigned s = codepoint - 0x010000;
unsigned lead = (s >> 10) + 0xD800;
Expand All @@ -288,8 +289,6 @@ class Writer {
os_->Put(hexDigits[(trail >> 4) & 15]);
os_->Put(hexDigits[(trail ) & 15]);
}
else
return false; // invalid code point
}
else if ((sizeof(Ch) == 1 || (unsigned)c < 256) && escape[(unsigned char)c]) {
is.Take();
Expand Down
9 changes: 9 additions & 0 deletions test/unittest/prettywritertest.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -80,6 +80,15 @@ TEST(PrettyWriter, SetIndent) {
buffer.GetString());
}

TEST(PrettyWriter, String) {
StringBuffer buffer;
PrettyWriter<StringBuffer> writer(buffer);
EXPECT_TRUE(writer.StartArray());
EXPECT_TRUE(writer.String("Hello\n"));
EXPECT_TRUE(writer.EndArray());
EXPECT_STREQ("[\n \"Hello\\n\"\n]", buffer.GetString());
}

#if RAPIDJSON_HAS_STDSTRING
TEST(PrettyWriter, String_STDSTRING) {
StringBuffer buffer;
Expand Down
31 changes: 30 additions & 1 deletion test/unittest/writertest.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -343,4 +343,33 @@ TEST(Writer, InvalidEncoding) {
static const UTF32<>::Ch s[] = { 0x110000, 0 }; // Out of U+0000 to U+10FFFF
EXPECT_FALSE(writer.String(s));
}
}
}

TEST(Writer, InvalidEventSequence) {
// {]
{
StringBuffer buffer;
Writer<StringBuffer> writer(buffer);
writer.StartObject();
EXPECT_THROW(writer.EndArray(), AssertException);
EXPECT_FALSE(writer.IsComplete());
}

// [}
{
StringBuffer buffer;
Writer<StringBuffer> writer(buffer);
writer.StartArray();
EXPECT_THROW(writer.EndObject(), AssertException);
EXPECT_FALSE(writer.IsComplete());
}

// { 1:
{
StringBuffer buffer;
Writer<StringBuffer> writer(buffer);
writer.StartObject();
EXPECT_THROW(writer.Int(1), AssertException);
EXPECT_FALSE(writer.IsComplete());
}
}

0 comments on commit 18a8891

Please sign in to comment.