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