OLD | NEW |
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "ui/base/clipboard/custom_data_helper.h" | 5 #include "ui/base/clipboard/custom_data_helper.h" |
6 | 6 |
7 #include <utility> | 7 #include <utility> |
8 | 8 |
9 #include "base/pickle.h" | 9 #include "base/pickle.h" |
10 #include "base/strings/utf_string_conversions.h" | 10 #include "base/strings/utf_string_conversions.h" |
11 #include "testing/gtest/include/gtest/gtest.h" | 11 #include "testing/gtest/include/gtest/gtest.h" |
12 | 12 |
13 using base::ASCIIToUTF16; | 13 using base::ASCIIToUTF16; |
14 | 14 |
15 namespace ui { | 15 namespace ui { |
16 | 16 |
17 namespace { | 17 namespace { |
18 | 18 |
19 void PrepareEmptyTestData(Pickle* pickle) { | 19 void PrepareEmptyTestData(base::Pickle* pickle) { |
20 std::map<base::string16, base::string16> data; | 20 std::map<base::string16, base::string16> data; |
21 WriteCustomDataToPickle(data, pickle); | 21 WriteCustomDataToPickle(data, pickle); |
22 } | 22 } |
23 | 23 |
24 void PrepareTestData(Pickle* pickle) { | 24 void PrepareTestData(base::Pickle* pickle) { |
25 std::map<base::string16, base::string16> data; | 25 std::map<base::string16, base::string16> data; |
26 data.insert(std::make_pair(ASCIIToUTF16("abc"), base::string16())); | 26 data.insert(std::make_pair(ASCIIToUTF16("abc"), base::string16())); |
27 data.insert(std::make_pair(ASCIIToUTF16("de"), ASCIIToUTF16("1"))); | 27 data.insert(std::make_pair(ASCIIToUTF16("de"), ASCIIToUTF16("1"))); |
28 data.insert(std::make_pair(ASCIIToUTF16("f"), ASCIIToUTF16("23"))); | 28 data.insert(std::make_pair(ASCIIToUTF16("f"), ASCIIToUTF16("23"))); |
29 WriteCustomDataToPickle(data, pickle); | 29 WriteCustomDataToPickle(data, pickle); |
30 } | 30 } |
31 | 31 |
32 TEST(CustomDataHelperTest, EmptyReadTypes) { | 32 TEST(CustomDataHelperTest, EmptyReadTypes) { |
33 Pickle pickle; | 33 base::Pickle pickle; |
34 PrepareEmptyTestData(&pickle); | 34 PrepareEmptyTestData(&pickle); |
35 | 35 |
36 std::vector<base::string16> types; | 36 std::vector<base::string16> types; |
37 ReadCustomDataTypes(pickle.data(), pickle.size(), &types); | 37 ReadCustomDataTypes(pickle.data(), pickle.size(), &types); |
38 EXPECT_EQ(0u, types.size()); | 38 EXPECT_EQ(0u, types.size()); |
39 } | 39 } |
40 | 40 |
41 TEST(CustomDataHelperTest, EmptyReadSingleType) { | 41 TEST(CustomDataHelperTest, EmptyReadSingleType) { |
42 Pickle pickle; | 42 base::Pickle pickle; |
43 PrepareEmptyTestData(&pickle); | 43 PrepareEmptyTestData(&pickle); |
44 | 44 |
45 base::string16 result; | 45 base::string16 result; |
46 ReadCustomDataForType(pickle.data(), | 46 ReadCustomDataForType(pickle.data(), |
47 pickle.size(), | 47 pickle.size(), |
48 ASCIIToUTF16("f"), | 48 ASCIIToUTF16("f"), |
49 &result); | 49 &result); |
50 EXPECT_EQ(base::string16(), result); | 50 EXPECT_EQ(base::string16(), result); |
51 } | 51 } |
52 | 52 |
53 TEST(CustomDataHelperTest, EmptyReadMap) { | 53 TEST(CustomDataHelperTest, EmptyReadMap) { |
54 Pickle pickle; | 54 base::Pickle pickle; |
55 PrepareEmptyTestData(&pickle); | 55 PrepareEmptyTestData(&pickle); |
56 | 56 |
57 std::map<base::string16, base::string16> result; | 57 std::map<base::string16, base::string16> result; |
58 ReadCustomDataIntoMap(pickle.data(), pickle.size(), &result); | 58 ReadCustomDataIntoMap(pickle.data(), pickle.size(), &result); |
59 EXPECT_EQ(0u, result.size()); | 59 EXPECT_EQ(0u, result.size()); |
60 } | 60 } |
61 | 61 |
62 TEST(CustomDataHelperTest, ReadTypes) { | 62 TEST(CustomDataHelperTest, ReadTypes) { |
63 Pickle pickle; | 63 base::Pickle pickle; |
64 PrepareTestData(&pickle); | 64 PrepareTestData(&pickle); |
65 | 65 |
66 std::vector<base::string16> types; | 66 std::vector<base::string16> types; |
67 ReadCustomDataTypes(pickle.data(), pickle.size(), &types); | 67 ReadCustomDataTypes(pickle.data(), pickle.size(), &types); |
68 | 68 |
69 std::vector<base::string16> expected; | 69 std::vector<base::string16> expected; |
70 expected.push_back(ASCIIToUTF16("abc")); | 70 expected.push_back(ASCIIToUTF16("abc")); |
71 expected.push_back(ASCIIToUTF16("de")); | 71 expected.push_back(ASCIIToUTF16("de")); |
72 expected.push_back(ASCIIToUTF16("f")); | 72 expected.push_back(ASCIIToUTF16("f")); |
73 EXPECT_EQ(expected, types); | 73 EXPECT_EQ(expected, types); |
74 } | 74 } |
75 | 75 |
76 TEST(CustomDataHelperTest, ReadSingleType) { | 76 TEST(CustomDataHelperTest, ReadSingleType) { |
77 Pickle pickle; | 77 base::Pickle pickle; |
78 PrepareTestData(&pickle); | 78 PrepareTestData(&pickle); |
79 | 79 |
80 base::string16 result; | 80 base::string16 result; |
81 ReadCustomDataForType(pickle.data(), | 81 ReadCustomDataForType(pickle.data(), |
82 pickle.size(), | 82 pickle.size(), |
83 ASCIIToUTF16("abc"), | 83 ASCIIToUTF16("abc"), |
84 &result); | 84 &result); |
85 EXPECT_EQ(base::string16(), result); | 85 EXPECT_EQ(base::string16(), result); |
86 | 86 |
87 ReadCustomDataForType(pickle.data(), | 87 ReadCustomDataForType(pickle.data(), |
88 pickle.size(), | 88 pickle.size(), |
89 ASCIIToUTF16("de"), | 89 ASCIIToUTF16("de"), |
90 &result); | 90 &result); |
91 EXPECT_EQ(ASCIIToUTF16("1"), result); | 91 EXPECT_EQ(ASCIIToUTF16("1"), result); |
92 | 92 |
93 ReadCustomDataForType(pickle.data(), | 93 ReadCustomDataForType(pickle.data(), |
94 pickle.size(), | 94 pickle.size(), |
95 ASCIIToUTF16("f"), | 95 ASCIIToUTF16("f"), |
96 &result); | 96 &result); |
97 EXPECT_EQ(ASCIIToUTF16("23"), result); | 97 EXPECT_EQ(ASCIIToUTF16("23"), result); |
98 } | 98 } |
99 | 99 |
100 TEST(CustomDataHelperTest, ReadMap) { | 100 TEST(CustomDataHelperTest, ReadMap) { |
101 Pickle pickle; | 101 base::Pickle pickle; |
102 PrepareTestData(&pickle); | 102 PrepareTestData(&pickle); |
103 | 103 |
104 std::map<base::string16, base::string16> result; | 104 std::map<base::string16, base::string16> result; |
105 ReadCustomDataIntoMap(pickle.data(), pickle.size(), &result); | 105 ReadCustomDataIntoMap(pickle.data(), pickle.size(), &result); |
106 | 106 |
107 std::map<base::string16, base::string16> expected; | 107 std::map<base::string16, base::string16> expected; |
108 expected.insert(std::make_pair(ASCIIToUTF16("abc"), base::string16())); | 108 expected.insert(std::make_pair(ASCIIToUTF16("abc"), base::string16())); |
109 expected.insert(std::make_pair(ASCIIToUTF16("de"), ASCIIToUTF16("1"))); | 109 expected.insert(std::make_pair(ASCIIToUTF16("de"), ASCIIToUTF16("1"))); |
110 expected.insert(std::make_pair(ASCIIToUTF16("f"), ASCIIToUTF16("23"))); | 110 expected.insert(std::make_pair(ASCIIToUTF16("f"), ASCIIToUTF16("23"))); |
111 EXPECT_EQ(expected, result); | 111 EXPECT_EQ(expected, result); |
112 } | 112 } |
113 | 113 |
114 TEST(CustomDataHelperTest, BadReadTypes) { | 114 TEST(CustomDataHelperTest, BadReadTypes) { |
115 // ReadCustomDataTypes makes the additional guarantee that the contents of the | 115 // ReadCustomDataTypes makes the additional guarantee that the contents of the |
116 // result vector will not change if the input is malformed. | 116 // result vector will not change if the input is malformed. |
117 std::vector<base::string16> expected; | 117 std::vector<base::string16> expected; |
118 expected.push_back(ASCIIToUTF16("abc")); | 118 expected.push_back(ASCIIToUTF16("abc")); |
119 expected.push_back(ASCIIToUTF16("de")); | 119 expected.push_back(ASCIIToUTF16("de")); |
120 expected.push_back(ASCIIToUTF16("f")); | 120 expected.push_back(ASCIIToUTF16("f")); |
121 | 121 |
122 Pickle malformed; | 122 base::Pickle malformed; |
123 malformed.WriteSizeT(1000); | 123 malformed.WriteSizeT(1000); |
124 malformed.WriteString16(ASCIIToUTF16("hello")); | 124 malformed.WriteString16(ASCIIToUTF16("hello")); |
125 malformed.WriteString16(ASCIIToUTF16("world")); | 125 malformed.WriteString16(ASCIIToUTF16("world")); |
126 std::vector<base::string16> actual(expected); | 126 std::vector<base::string16> actual(expected); |
127 ReadCustomDataTypes(malformed.data(), malformed.size(), &actual); | 127 ReadCustomDataTypes(malformed.data(), malformed.size(), &actual); |
128 EXPECT_EQ(expected, actual); | 128 EXPECT_EQ(expected, actual); |
129 | 129 |
130 Pickle malformed2; | 130 base::Pickle malformed2; |
131 malformed2.WriteSizeT(1); | 131 malformed2.WriteSizeT(1); |
132 malformed2.WriteString16(ASCIIToUTF16("hello")); | 132 malformed2.WriteString16(ASCIIToUTF16("hello")); |
133 std::vector<base::string16> actual2(expected); | 133 std::vector<base::string16> actual2(expected); |
134 ReadCustomDataTypes(malformed2.data(), malformed2.size(), &actual2); | 134 ReadCustomDataTypes(malformed2.data(), malformed2.size(), &actual2); |
135 EXPECT_EQ(expected, actual2); | 135 EXPECT_EQ(expected, actual2); |
136 } | 136 } |
137 | 137 |
138 TEST(CustomDataHelperTest, BadPickle) { | 138 TEST(CustomDataHelperTest, BadPickle) { |
139 base::string16 result_data; | 139 base::string16 result_data; |
140 std::map<base::string16, base::string16> result_map; | 140 std::map<base::string16, base::string16> result_map; |
141 | 141 |
142 Pickle malformed; | 142 base::Pickle malformed; |
143 malformed.WriteSizeT(1000); | 143 malformed.WriteSizeT(1000); |
144 malformed.WriteString16(ASCIIToUTF16("hello")); | 144 malformed.WriteString16(ASCIIToUTF16("hello")); |
145 malformed.WriteString16(ASCIIToUTF16("world")); | 145 malformed.WriteString16(ASCIIToUTF16("world")); |
146 | 146 |
147 ReadCustomDataForType(malformed.data(), | 147 ReadCustomDataForType(malformed.data(), |
148 malformed.size(), | 148 malformed.size(), |
149 ASCIIToUTF16("f"), | 149 ASCIIToUTF16("f"), |
150 &result_data); | 150 &result_data); |
151 ReadCustomDataIntoMap(malformed.data(), malformed.size(), &result_map); | 151 ReadCustomDataIntoMap(malformed.data(), malformed.size(), &result_map); |
152 EXPECT_EQ(0u, result_data.size()); | 152 EXPECT_EQ(0u, result_data.size()); |
153 EXPECT_EQ(0u, result_map.size()); | 153 EXPECT_EQ(0u, result_map.size()); |
154 | 154 |
155 Pickle malformed2; | 155 base::Pickle malformed2; |
156 malformed2.WriteSizeT(1); | 156 malformed2.WriteSizeT(1); |
157 malformed2.WriteString16(ASCIIToUTF16("hello")); | 157 malformed2.WriteString16(ASCIIToUTF16("hello")); |
158 | 158 |
159 ReadCustomDataForType(malformed2.data(), | 159 ReadCustomDataForType(malformed2.data(), |
160 malformed2.size(), | 160 malformed2.size(), |
161 ASCIIToUTF16("f"), | 161 ASCIIToUTF16("f"), |
162 &result_data); | 162 &result_data); |
163 ReadCustomDataIntoMap(malformed2.data(), malformed2.size(), &result_map); | 163 ReadCustomDataIntoMap(malformed2.data(), malformed2.size(), &result_map); |
164 EXPECT_EQ(0u, result_data.size()); | 164 EXPECT_EQ(0u, result_data.size()); |
165 EXPECT_EQ(0u, result_map.size()); | 165 EXPECT_EQ(0u, result_map.size()); |
166 } | 166 } |
167 | 167 |
168 } // namespace | 168 } // namespace |
169 | 169 |
170 } // namespace ui | 170 } // namespace ui |
OLD | NEW |