Browse Source

* loadSerial(), support for \n and \r

config-serializer
Scott Powell 4 days ago
parent
commit
d9f1e12b21
  1. 2
      src/helpers/ConfigSerializer.cpp
  2. 43
      test/test_config_serializer/test_config_serializer.cpp

2
src/helpers/ConfigSerializer.cpp

@ -76,6 +76,8 @@ int ConfigSerializer::Context::readNext() {
return TOK_ERROR;
case EXPECT_STRING_ESCAPE:
if ((c == 'n') && rd_len < CONFIG_MAX_TOKEN_LEN-1) { rd_buf[rd_len++] = '\n'; rd_mode = EXPECT_STRING_VAL; return TOK_WHITESPACE; }
if ((c == 'r') && rd_len < CONFIG_MAX_TOKEN_LEN-1) { rd_buf[rd_len++] = '\r'; rd_mode = EXPECT_STRING_VAL; return TOK_WHITESPACE; }
if ((c == '"' || c == '\\' || c == '/') && rd_len < CONFIG_MAX_TOKEN_LEN-1) { rd_buf[rd_len++] = c; rd_mode = EXPECT_STRING_VAL; return TOK_WHITESPACE; }
return TOK_ERROR; // unsupport escape

43
test/test_config_serializer/test_config_serializer.cpp

@ -81,6 +81,25 @@ TEST(ConfigSerializer, SaveSerial_Basic) {
EXPECT_TRUE(match);
}
TEST(ConfigSerializer, SaveSerial_EscChars) {
MockPrintStream s;
TestStruct data;
data.age = TEST_INT;
data.flags = TEST_INT;
strcpy(data.name, "\"Scott\"\n");
bool success = data.saveSerial(s);
EXPECT_TRUE(success);
auto l = s.getLength();
const char* expect = "{age:" TEST_INT_S ",flags:" TEST_INT_S ",name:\"\\\"Scott\\\"\\n\"}";
EXPECT_EQ(strlen(expect), l);
bool match = memcmp(s.getBytes(), expect, l) == 0;
EXPECT_TRUE(match);
}
// ── loadSerial: basic ───────────────────────────────────────────────────────
TEST(ConfigSerializer, LoadSerial_Basic) {
@ -96,6 +115,30 @@ TEST(ConfigSerializer, LoadSerial_Basic) {
EXPECT_TRUE(match);
}
TEST(ConfigSerializer, LoadSerial_HandleWhitespace) {
MockInputStream s(" { age: " TEST_INT_S " , flags: " TEST_INT_S " , name: \"Scott\" } ");
TestStruct data;
bool success = data.loadSerial(s);
EXPECT_TRUE(success);
EXPECT_EQ(TEST_INT, data.age);
EXPECT_EQ(TEST_INT, data.flags);
bool match = strcmp("Scott", data.name) == 0;
EXPECT_TRUE(match);
}
TEST(ConfigSerializer, LoadSerial_EscChars) {
MockInputStream s("{age:" TEST_INT_S ",flags:" TEST_INT_S ",name:\"\\\"Scott\\\"\\n\"}");
TestStruct data;
bool success = data.loadSerial(s);
EXPECT_TRUE(success);
bool match = strcmp("\"Scott\"\n", data.name) == 0;
EXPECT_TRUE(match);
}
TEST(ConfigSerializer, LoadSerial_UnmatchedBraces) {
MockInputStream s("{age:" TEST_INT_S ",flags:" TEST_INT_S ",name:\"Scott\"");
TestStruct data;

Loading…
Cancel
Save