Browse Source

Extended testing of the new PersistentStringList.

David Piuva 5 years ago
parent
commit
5a5214c7ec

+ 5 - 2
Source/DFPSR/persistent/atomic/PersistentStringList.cpp

@@ -30,8 +30,10 @@ PERSISTENT_DEFINITION(PersistentStringList)
 
 
 bool PersistentStringList::assignValue(const ReadableString &text) {
 bool PersistentStringList::assignValue(const ReadableString &text) {
 	bool quoted = false;
 	bool quoted = false;
-	bool hadComma = true;
+	bool first = true;
+	bool hadComma = false;
 	int start = 0;
 	int start = 0;
+	this->value.clear();
 	for (int i = 0; i < text.length(); i++) {
 	for (int i = 0; i < text.length(); i++) {
 		DsrChar c = text[i];
 		DsrChar c = text[i];
 		if (quoted) {
 		if (quoted) {
@@ -54,10 +56,11 @@ bool PersistentStringList::assignValue(const ReadableString &text) {
 				}
 				}
 			} else if (c == U'\"') { // Quote sign
 			} else if (c == U'\"') { // Quote sign
 				// Start the quote
 				// Start the quote
-				if (!hadComma) {
+				if (!(first || hadComma)) {
 					throwError(U"String lists must be separated by commas!\n");
 					throwError(U"String lists must be separated by commas!\n");
 				}
 				}
 				quoted = true;
 				quoted = true;
+				first = false;
 				start = i;
 				start = i;
 			}
 			}
 		}
 		}

+ 22 - 1
Source/test/tests/PersistentTest.cpp

@@ -159,11 +159,32 @@ START_TEST(Persistent)
 	std::shared_ptr<Persistent> treeCopy = createPersistentClassFromText(exampleThree);
 	std::shared_ptr<Persistent> treeCopy = createPersistentClassFromText(exampleThree);
 	ASSERT_MATCH(treeCopy->toString(), exampleThree);
 	ASSERT_MATCH(treeCopy->toString(), exampleThree);
 
 
+	// Persistent string lists
 	PersistentStringList myList = PersistentStringList();
 	PersistentStringList myList = PersistentStringList();
 	ASSERT_EQUAL(myList.value.length(), 0);
 	ASSERT_EQUAL(myList.value.length(), 0);
 	ASSERT_MATCH(myList.toString(), U"");
 	ASSERT_MATCH(myList.toString(), U"");
 
 
-	myList = PersistentStringList(U"\"Zero 0\", \"One 1\", \"Two 2\", \"Three 3\"");
+	myList = PersistentStringList(U"\"\"");
+	ASSERT_EQUAL(myList.value.length(), 1);
+	ASSERT_MATCH(myList.value[0], U"");
+	ASSERT_MATCH(myList.toString(), U"\"\"");
+
+	myList = PersistentStringList(U"\"A\", \"B\"");
+	ASSERT_EQUAL(myList.value.length(), 2);
+	ASSERT_MATCH(myList.value[0], U"A");
+	ASSERT_MATCH(myList.value[1], U"B");
+	ASSERT_MATCH(myList.toString(), U"\"A\", \"B\"");
+
+	myList.assignValue(U"\"Only element\"");
+	ASSERT_EQUAL(myList.value.length(), 1);
+	ASSERT_MATCH(myList.value[0], U"Only element");
+	ASSERT_MATCH(myList.toString(), U"\"Only element\"");
+
+	myList = PersistentStringList(U"");
+	ASSERT_EQUAL(myList.value.length(), 0);
+	ASSERT_MATCH(myList.toString(), U"");
+
+	myList.assignValue(U"\"Zero 0\", \"One 1\", \"Two 2\", \"Three 3\"");
 	ASSERT_EQUAL(myList.value.length(), 4);
 	ASSERT_EQUAL(myList.value.length(), 4);
 	ASSERT_MATCH(myList.value[0], U"Zero 0");
 	ASSERT_MATCH(myList.value[0], U"Zero 0");
 	ASSERT_MATCH(myList.value[1], U"One 1");
 	ASSERT_MATCH(myList.value[1], U"One 1");