mirror of
https://github.com/MarekZegare4/MeshCore-Solo.git
synced 2026-09-28 05:36:38 +00:00
* loadSerial(), support for \n and \r
This commit is contained in:
@@ -76,6 +76,8 @@ int ConfigSerializer::Context::readNext() {
|
|||||||
return TOK_ERROR;
|
return TOK_ERROR;
|
||||||
|
|
||||||
case EXPECT_STRING_ESCAPE:
|
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; }
|
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
|
return TOK_ERROR; // unsupport escape
|
||||||
|
|
||||||
|
|||||||
@@ -81,6 +81,25 @@ TEST(ConfigSerializer, SaveSerial_Basic) {
|
|||||||
EXPECT_TRUE(match);
|
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 ───────────────────────────────────────────────────────
|
// ── loadSerial: basic ───────────────────────────────────────────────────────
|
||||||
|
|
||||||
TEST(ConfigSerializer, LoadSerial_Basic) {
|
TEST(ConfigSerializer, LoadSerial_Basic) {
|
||||||
@@ -96,6 +115,30 @@ TEST(ConfigSerializer, LoadSerial_Basic) {
|
|||||||
EXPECT_TRUE(match);
|
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) {
|
TEST(ConfigSerializer, LoadSerial_UnmatchedBraces) {
|
||||||
MockInputStream s("{age:" TEST_INT_S ",flags:" TEST_INT_S ",name:\"Scott\"");
|
MockInputStream s("{age:" TEST_INT_S ",flags:" TEST_INT_S ",name:\"Scott\"");
|
||||||
TestStruct data;
|
TestStruct data;
|
||||||
|
|||||||
Reference in New Issue
Block a user