Index: test/UtilSplitString.cpp |
diff --git a/test/UtilSplitString.cpp b/test/UtilSplitString.cpp |
new file mode 100644 |
index 0000000000000000000000000000000000000000..a3ca8c3abe35860c632c4f026f4c57f00515aebc |
--- /dev/null |
+++ b/test/UtilSplitString.cpp |
@@ -0,0 +1,122 @@ |
+/* |
+ * This file is part of Adblock Plus <https://adblockplus.org/>, |
+ * Copyright (C) 2006-2015 Eyeo GmbH |
+ * |
+ * Adblock Plus is free software: you can redistribute it and/or modify |
+ * it under the terms of the GNU General Public License version 3 as |
+ * published by the Free Software Foundation. |
+ * |
+ * Adblock Plus is distributed in the hope that it will be useful, |
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of |
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
+ * GNU General Public License for more details. |
+ * |
+ * You should have received a copy of the GNU General Public License |
+ * along with Adblock Plus. If not, see <http://www.gnu.org/licenses/>. |
+ */ |
Eric
2015/02/02 18:41:58
Many of the same comments from the previous file a
|
+ |
+#include <fstream> |
+#include <Windows.h> |
+#include <gtest/gtest.h> |
+ |
+#include "../src/shared/Utils.h" |
+ |
+TEST(SplitStringTest, EmptyHandler) |
+{ |
+ SplitString(L"aaa!asdasd!", L'!', std::function<bool(std::wstring::const_iterator, std::wstring::const_iterator)>()); |
+} |
+ |
+TEST(SplitStringTest, EmptyQueryString) |
+{ |
+ bool isCalled = false; |
+ SplitString(L"", L'\0', [&isCalled](std::wstring::const_iterator, std::wstring::const_iterator)->bool |
+ { |
+ return isCalled = true; |
+ }); |
+ EXPECT_FALSE(isCalled); |
+} |
+ |
+TEST(SplitStringTest, StringWithoutDelimiter) |
+{ |
+ std::wstring value; |
+ bool isCalled = false; |
+ SplitString(L"value", L'D', [&value, &isCalled](std::wstring::const_iterator begin, std::wstring::const_iterator end)->bool |
+ { |
+ EXPECT_FALSE(isCalled); |
+ isCalled = true; |
+ value.assign(begin, end); |
+ return true; |
+ }); |
+ EXPECT_EQ(L"value", value); |
+} |
+ |
+TEST(SplitStringTest, StringWithDelimiter) |
+{ |
+ std::wstring value[2]; |
+ int callNumber = 0; |
+ SplitString(L"value1&value2", L'&', [&value, &callNumber](std::wstring::const_iterator begin, std::wstring::const_iterator end)->bool |
+ { |
+ value[callNumber++].assign(begin, end); |
+ return true; |
+ }); |
+ EXPECT_EQ(L"value1", value[0]); |
+ EXPECT_EQ(L"value2", value[1]); |
+ EXPECT_EQ(2, callNumber); |
+} |
+ |
+TEST(SplitStringTest, StringWithDelimiterAtTheEnd) |
+{ |
+ std::wstring value[3]; |
+ int callNumber = 0; |
+ SplitString(L"value1&value2&", L'&', [&value, &callNumber](std::wstring::const_iterator begin, std::wstring::const_iterator end)->bool |
+ { |
+ value[callNumber++].assign(begin, end); |
+ return true; |
+ }); |
+ EXPECT_EQ(L"value1", value[0]); |
+ EXPECT_EQ(L"value2", value[1]); |
+ EXPECT_EQ(L"", value[2]); |
+ EXPECT_EQ(3, callNumber); |
+} |
+ |
+TEST(SplitStringTest, StringWithDelimiterAtTheBeginning) |
+{ |
+ std::wstring value[3]; |
+ int callNumber = 0; |
+ SplitString(L"&value1&value2", L'&', [&value, &callNumber](std::wstring::const_iterator begin, std::wstring::const_iterator end)->bool |
+ { |
+ value[callNumber++].assign(begin, end); |
+ return true; |
+ }); |
+ EXPECT_EQ(L"", value[0]); |
+ EXPECT_EQ(L"value1", value[1]); |
+ EXPECT_EQ(L"value2", value[2]); |
+ EXPECT_EQ(3, callNumber); |
+} |
+ |
+TEST(SplitStringTest, StringWithOnlyDelimiters) |
+{ |
+ std::wstring value[4]; |
+ int callNumber = 0; |
+ SplitString(L"&&&", L'&', [&value, &callNumber](std::wstring::const_iterator begin, std::wstring::const_iterator end)->bool |
+ { |
+ value[callNumber++].assign(begin, end); |
+ return true; |
+ }); |
+ EXPECT_EQ(L"", value[0]); |
+ EXPECT_EQ(L"", value[1]); |
+ EXPECT_EQ(L"", value[2]); |
+ EXPECT_EQ(L"", value[3]); |
+ EXPECT_EQ(4, callNumber); |
+} |
+ |
+TEST(SplitStringTest, ProcessUntilHandlerReturnsFalse) |
+{ |
+ int callNumber = 0; |
+ // handler is called three times |
+ SplitString(L"&&&&&&", L'&', [&callNumber](std::wstring::const_iterator begin, std::wstring::const_iterator end)->bool |
+ { |
+ return ++callNumber <= 2; |
+ }); |
+ EXPECT_EQ(3, callNumber); |
+} |