diff --git a/src/scratch/list.cpp b/src/scratch/list.cpp index 1f2109f1..db958547 100644 --- a/src/scratch/list.cpp +++ b/src/scratch/list.cpp @@ -43,14 +43,36 @@ bool List::contains(const Value &value) const return (indexOf(value) != -1); } -/*! Joins the list items with spaces. */ +/*! Joins the list items with spaces or without any separator if there are only digits. */ std::string List::toString() const { std::string ret; - for (int i = 0; i < size(); i++) { - ret.append(at(i).toString()); - if (i + 1 < size()) - ret.push_back(' '); + bool digits = true; + + for (const auto &item : *this) { + if (item.type() == Value::Type::Integer) { + long num = item.toLong(); + + if (num < 0 || num >= 10) { + digits = false; + break; + } + } else { + digits = false; + break; + } } + + if (digits) { + for (const auto &item : *this) + ret.append(item.toString()); + } else { + for (int i = 0; i < size(); i++) { + ret.append(at(i).toString()); + if (i + 1 < size()) + ret.push_back(' '); + } + } + return ret; } diff --git a/test/engine/engine_test.cpp b/test/engine/engine_test.cpp index b9653b18..cd97cd4a 100644 --- a/test/engine/engine_test.cpp +++ b/test/engine/engine_test.cpp @@ -422,7 +422,7 @@ TEST(EngineTest, Clones) if (i < 10) ASSERT_EQ((*list)[i].toInt(), 1); else - ASSERT_EQ((*list)[i].toString(), "1 2"); // TODO: Change this to "12" after #188 is fixed + ASSERT_EQ((*list)[i].toString(), "12"); } } diff --git a/test/scratch_classes/list_test.cpp b/test/scratch_classes/list_test.cpp index c42240c9..4464d666 100644 --- a/test/scratch_classes/list_test.cpp +++ b/test/scratch_classes/list_test.cpp @@ -151,4 +151,22 @@ TEST(ListTest, ToString) list.push_back("áä"); list.push_back("ľ š"); ASSERT_EQ(list.toString(), "áä ľ š"); + + list.clear(); + list.push_back(-2); + list.push_back(5); + list.push_back(8); + ASSERT_EQ(list.toString(), "-2 5 8"); + + list.clear(); + list.push_back(2); + list.push_back(10); + list.push_back(8); + ASSERT_EQ(list.toString(), "2 10 8"); + + list.clear(); + list.push_back(0); + list.push_back(9); + list.push_back(8); + ASSERT_EQ(list.toString(), "098"); }