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