Test an object with comma, quote and column in the value

This commit is contained in:
Benoit Blanchon
2014-08-25 10:31:03 +02:00
parent aafabd8e8d
commit 66c05041e8
3 changed files with 38 additions and 9 deletions

View File

@ -11,33 +11,50 @@ size_t IndentedPrintDecorator::write(uint8_t c)
{
case '{':
indent++;
emptyBlock = true;
previousChar = c;
return sink.write(c);
case '}':
indent--;
if (emptyBlock)
if (previousChar == '{')
{
previousChar = c;
return sink.write(c);
}
else
{
previousChar = c;
return writeln() + sink.write(c);
}
case ',':
previousChar = c;
if (isInAString)
{
return sink.write(c);
}
else
{
return writeln() + sink.write(c);
return sink.write(c) + writeln();
}
case ',':
return sink.write(c) + writeln();
case '\"':
if (previousChar != '\\')
{
isInAString = !isInAString;
}
default:
if (emptyBlock)
if (previousChar == '{')
{
emptyBlock = false;
previousChar = c;
return writeln() + sink.write(c);
}
else
{
previousChar = c;
return sink.write(c);
}
}

View File

@ -13,16 +13,19 @@ class IndentedPrintDecorator : public Print
public:
IndentedPrintDecorator(Print& p)
: indent(0), sink(p), emptyBlock(false)
: indent(0), sink(p)
{
previousChar = 0;
isInAString = false;
}
virtual size_t write(uint8_t);
private:
int indent;
bool emptyBlock;
uint8_t previousChar;
Print& sink;
bool isInAString;
size_t writeln();
};

View File

@ -56,6 +56,15 @@ namespace JsonGeneratorTests
"}");
}
TEST_METHOD(ObjectTrickyCharacters)
{
whenInputIs("{\"key\":\":\\\"',\"}");
outputMustBe(
"{\n"
" \"key\":\":\\\"',\"\n"
"}");
}
private:
void whenInputIs(const char input[])