From d70ff2616475f1c59ca34ee0f7ab1d58e9a597c5 Mon Sep 17 00:00:00 2001 From: Benoit Blanchon Date: Wed, 22 Oct 2014 11:54:33 +0200 Subject: [PATCH] Remove support of unquoted keys --- src/Internals/QuotedString.cpp | 16 ++++++-------- test/JsonParser_Object_Tests.cpp | 28 +++++++++++++++++++------ test/QuotedString_ExtractFrom_Tests.cpp | 7 +++++++ 3 files changed, 35 insertions(+), 16 deletions(-) diff --git a/src/Internals/QuotedString.cpp b/src/Internals/QuotedString.cpp index 9b361090..0f32afa2 100644 --- a/src/Internals/QuotedString.cpp +++ b/src/Internals/QuotedString.cpp @@ -66,20 +66,16 @@ static inline bool isQuote(char c) char* QuotedString::extractFrom(char* input, char** endPtr) { char firstChar = *input; - char stopChar; - char* startPtr; - if (isQuote(firstChar)) + if (!isQuote(firstChar)) { - stopChar = firstChar; // closing quote is the same as opening quote - startPtr = input + 1; // skip the quote - } - else - { - stopChar = ':'; // assume we're parsing a key in an object - startPtr = input; // no quote to skip + // must start with a quote + return 0; } + char stopChar = firstChar; // closing quote is the same as opening quote + + char* startPtr = input + 1; // skip the quote char* readPtr = startPtr; char* writePtr = startPtr; char c; diff --git a/test/JsonParser_Object_Tests.cpp b/test/JsonParser_Object_Tests.cpp index a9df0ed0..5d4833cf 100644 --- a/test/JsonParser_Object_Tests.cpp +++ b/test/JsonParser_Object_Tests.cpp @@ -68,8 +68,7 @@ TEST_F(JsonParser_Object_Test, MissingQuotesAndColonAndValue) sizeMustBe(0); } - -TEST_F(JsonParser_Object_Test, OneStringNoSpace) +TEST_F(JsonParser_Object_Test, OneString) { whenInputIs("{\"key\":\"value\"}"); parseMustSucceed(); @@ -77,6 +76,14 @@ TEST_F(JsonParser_Object_Test, OneStringNoSpace) keyMustHaveValue("key", "value"); } +TEST_F(JsonParser_Object_Test, OneStringSingleQuotes) +{ + whenInputIs("{'key':'value'}"); + parseMustSucceed(); + sizeMustBe(1); + keyMustHaveValue("key", "value"); +} + TEST_F(JsonParser_Object_Test, OneStringSpaceBeforeKey) { whenInputIs("{ \"key\":\"value\"}"); @@ -103,8 +110,17 @@ TEST_F(JsonParser_Object_Test, OneStringSpaceBeforeValue) TEST_F(JsonParser_Object_Test, OneStringSpaceAfterValue) { - whenInputIs("{\"key\":\"value\" }"); - parseMustSucceed(); - sizeMustBe(1); - keyMustHaveValue("key", "value"); + whenInputIs("{\"key\":\"value\" }"); + parseMustSucceed(); + sizeMustBe(1); + keyMustHaveValue("key", "value"); +} + +TEST_F(JsonParser_Object_Test, TwoStrings) +{ + whenInputIs("{\"key1\":\"value1\",\"key2\":\"value2\"}"); + parseMustSucceed(); + sizeMustBe(2); + keyMustHaveValue("key1", "value1"); + keyMustHaveValue("key2", "value2"); } \ No newline at end of file diff --git a/test/QuotedString_ExtractFrom_Tests.cpp b/test/QuotedString_ExtractFrom_Tests.cpp index d017c5af..44f21c2e 100644 --- a/test/QuotedString_ExtractFrom_Tests.cpp +++ b/test/QuotedString_ExtractFrom_Tests.cpp @@ -37,6 +37,13 @@ TEST_F(QuotedString_ExtractFrom_Tests, EmptyDoubleQuotedString) trailingMustBe(""); } +TEST_F(QuotedString_ExtractFrom_Tests, NoQuotes) +{ + whenInputIs("hello world"); + + resultMustBe(0); +} + TEST_F(QuotedString_ExtractFrom_Tests, EmptySingleQuotedString) { whenInputIs("''");