Added a tests of a string with a double quote in it

This commit is contained in:
Benoît Blanchon
2014-06-25 13:47:28 +02:00
parent ca53abdc41
commit dd6fd6f198
4 changed files with 28 additions and 1 deletions

View File

@ -30,6 +30,13 @@ namespace JsonGeneratorTests
AssertJsonIs("[\"hello\"]"); AssertJsonIs("[\"hello\"]");
} }
TEST_METHOD(AddOneStringContainingDoubleQuote)
{
arr.add("\"");
AssertJsonIs("[\"\\\"\"]");
}
TEST_METHOD(AddTwoStrings) TEST_METHOD(AddTwoStrings)
{ {
arr.add("hello"); arr.add("hello");

View File

@ -6,7 +6,7 @@ void JsonObjectBase::writeObjectTo(ObjectContainer& obj, StringBuilder& sb)
{ {
case JSON_STRING: case JSON_STRING:
if (obj.value.string) if (obj.value.string)
sb.append("\"%s\"", obj.value.string); sb.appendEscaped(obj.value.string);
else else
sb.append("null"); sb.append("null");
break; break;

View File

@ -12,3 +12,22 @@ void StringBuilder::append(const char* format, ...)
length += strlen(tail); length += strlen(tail);
} }
void StringBuilder::appendEscaped(const char* s)
{
if (length > capacity - 3) return;
buffer[length++] = '"';
while (*s && length<capacity-2)
{
if (*s == '"')
buffer[length++] = '\\';
buffer[length++] = *s;
s++;
}
buffer[length++] = '"';
}

View File

@ -18,6 +18,7 @@ public:
} }
void append(const char* format, ...); void append(const char* format, ...);
void appendEscaped(const char* s);
private: private:
char* buffer; char* buffer;