Index: ui/base/clipboard/custom_data_helper_unittest.cc |
diff --git a/ui/base/clipboard/custom_data_helper_unittest.cc b/ui/base/clipboard/custom_data_helper_unittest.cc |
new file mode 100644 |
index 0000000000000000000000000000000000000000..05df47e6354a15add185de597a6d97e618ab336e |
--- /dev/null |
+++ b/ui/base/clipboard/custom_data_helper_unittest.cc |
@@ -0,0 +1,168 @@ |
+// Copyright (c) 2011 The Chromium Authors. All rights reserved. |
+// Use of this source code is governed by a BSD-style license that can be |
+// found in the LICENSE file. |
+ |
+#include "ui/base/clipboard/custom_data_helper.h" |
+ |
+#include <utility> |
+ |
+#include "base/pickle.h" |
+#include "base/utf_string_conversions.h" |
+#include "testing/gtest/include/gtest/gtest.h" |
+ |
+namespace ui { |
+ |
+namespace { |
+ |
+void PrepareEmptyTestData(Pickle* pickle) { |
+ std::map<string16, string16> data; |
+ WriteCustomDataToPickle(data, pickle); |
+} |
+ |
+void PrepareTestData(Pickle* pickle) { |
+ std::map<string16, string16> data; |
+ data.insert(std::make_pair(ASCIIToUTF16("abc"), ASCIIToUTF16(""))); |
+ data.insert(std::make_pair(ASCIIToUTF16("de"), ASCIIToUTF16("1"))); |
+ data.insert(std::make_pair(ASCIIToUTF16("f"), ASCIIToUTF16("23"))); |
+ WriteCustomDataToPickle(data, pickle); |
+} |
+ |
+TEST(CustomDataHelperTest, EmptyReadTypes) { |
+ Pickle pickle; |
+ PrepareEmptyTestData(&pickle); |
+ |
+ std::vector<string16> types; |
+ ReadCustomDataTypes(pickle.data(), pickle.size(), &types); |
+ EXPECT_EQ(0u, types.size()); |
+} |
+ |
+TEST(CustomDataHelperTest, EmptyReadSingleType) { |
+ Pickle pickle; |
+ PrepareEmptyTestData(&pickle); |
+ |
+ string16 result; |
+ ReadCustomDataForType(pickle.data(), |
+ pickle.size(), |
+ ASCIIToUTF16("f"), |
+ &result); |
+ EXPECT_EQ(ASCIIToUTF16(""), result); |
+} |
+ |
+TEST(CustomDataHelperTest, EmptyReadMap) { |
+ Pickle pickle; |
+ PrepareEmptyTestData(&pickle); |
+ |
+ std::map<string16, string16> result; |
+ ReadCustomDataIntoMap(pickle.data(), pickle.size(), &result); |
+ EXPECT_EQ(0u, result.size()); |
+} |
+ |
+TEST(CustomDataHelperTest, ReadTypes) { |
+ Pickle pickle; |
+ PrepareTestData(&pickle); |
+ |
+ std::vector<string16> types; |
+ ReadCustomDataTypes(pickle.data(), pickle.size(), &types); |
+ |
+ std::vector<string16> expected; |
+ expected.push_back(ASCIIToUTF16("abc")); |
+ expected.push_back(ASCIIToUTF16("de")); |
+ expected.push_back(ASCIIToUTF16("f")); |
+ EXPECT_EQ(expected, types); |
+} |
+ |
+TEST(CustomDataHelperTest, ReadSingleType) { |
+ Pickle pickle; |
+ PrepareTestData(&pickle); |
+ |
+ string16 result; |
+ ReadCustomDataForType(pickle.data(), |
+ pickle.size(), |
+ ASCIIToUTF16("abc"), |
+ &result); |
+ EXPECT_EQ(ASCIIToUTF16(""), result); |
+ |
+ ReadCustomDataForType(pickle.data(), |
+ pickle.size(), |
+ ASCIIToUTF16("de"), |
+ &result); |
+ EXPECT_EQ(ASCIIToUTF16("1"), result); |
+ |
+ ReadCustomDataForType(pickle.data(), |
+ pickle.size(), |
+ ASCIIToUTF16("f"), |
+ &result); |
+ EXPECT_EQ(ASCIIToUTF16("23"), result); |
+} |
+ |
+TEST(CustomDataHelperTest, ReadMap) { |
+ Pickle pickle; |
+ PrepareTestData(&pickle); |
+ |
+ std::map<string16, string16> result; |
+ ReadCustomDataIntoMap(pickle.data(), pickle.size(), &result); |
+ |
+ std::map<string16, string16> expected; |
+ expected.insert(std::make_pair(ASCIIToUTF16("abc"), ASCIIToUTF16(""))); |
+ expected.insert(std::make_pair(ASCIIToUTF16("de"), ASCIIToUTF16("1"))); |
+ expected.insert(std::make_pair(ASCIIToUTF16("f"), ASCIIToUTF16("23"))); |
+ EXPECT_EQ(expected, result); |
+} |
+ |
+TEST(CustomDataHelperTest, BadReadTypes) { |
+ // ReadCustomDataTypes makes the additional guarantee that the contents of the |
+ // result vector will not change if the input is malformed. |
+ std::vector<string16> expected; |
+ expected.push_back(ASCIIToUTF16("abc")); |
+ expected.push_back(ASCIIToUTF16("de")); |
+ expected.push_back(ASCIIToUTF16("f")); |
+ |
+ Pickle malformed; |
+ malformed.WriteSize(1000); |
+ malformed.WriteString16(ASCIIToUTF16("hello")); |
+ malformed.WriteString16(ASCIIToUTF16("world")); |
+ std::vector<string16> actual(expected); |
+ ReadCustomDataTypes(malformed.data(), malformed.size(), &actual); |
+ EXPECT_EQ(expected, actual); |
+ |
+ Pickle malformed2; |
+ malformed2.WriteSize(1); |
+ malformed2.WriteString16(ASCIIToUTF16("hello")); |
+ std::vector<string16> actual2(expected); |
+ ReadCustomDataTypes(malformed2.data(), malformed2.size(), &actual2); |
+ EXPECT_EQ(expected, actual2); |
+} |
+ |
+TEST(CustomDataHelperTest, BadPickle) { |
+ string16 result_data; |
+ std::map<string16, string16> result_map; |
+ |
+ Pickle malformed; |
+ malformed.WriteSize(1000); |
+ malformed.WriteString16(ASCIIToUTF16("hello")); |
+ malformed.WriteString16(ASCIIToUTF16("world")); |
+ |
+ ReadCustomDataForType(malformed.data(), |
+ malformed.size(), |
+ ASCIIToUTF16("f"), |
+ &result_data); |
+ ReadCustomDataIntoMap(malformed.data(), malformed.size(), &result_map); |
+ EXPECT_EQ(0u, result_data.size()); |
+ EXPECT_EQ(0u, result_map.size()); |
+ |
+ Pickle malformed2; |
+ malformed2.WriteSize(1); |
+ malformed2.WriteString16(ASCIIToUTF16("hello")); |
+ |
+ ReadCustomDataForType(malformed2.data(), |
+ malformed2.size(), |
+ ASCIIToUTF16("f"), |
+ &result_data); |
+ ReadCustomDataIntoMap(malformed2.data(), malformed2.size(), &result_map); |
+ EXPECT_EQ(0u, result_data.size()); |
+ EXPECT_EQ(0u, result_map.size()); |
+} |
+ |
+} // namespace |
+ |
+} // namespace ui |