OLD | NEW |
1 // Copyright 2015 The Chromium Authors. All rights reserved. | 1 // Copyright 2015 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 "chrome/common/favicon/fallback_icon_url_parser.h" | 5 #include "chrome/common/favicon/fallback_icon_url_parser.h" |
6 | 6 |
7 #include "base/memory/scoped_ptr.h" | 7 #include "base/memory/scoped_ptr.h" |
8 #include "components/favicon_base/fallback_icon_style.h" | 8 #include "components/favicon_base/fallback_icon_style.h" |
9 #include "testing/gtest/include/gtest/gtest.h" | 9 #include "testing/gtest/include/gtest/gtest.h" |
10 #include "third_party/skia/include/core/SkColor.h" | 10 #include "third_party/skia/include/core/SkColor.h" |
(...skipping 24 matching lines...) Expand all Loading... |
35 FallbackIconUrlParserTest() { | 35 FallbackIconUrlParserTest() { |
36 } | 36 } |
37 | 37 |
38 bool ParseSpecs(const std::string& specs_str, | 38 bool ParseSpecs(const std::string& specs_str, |
39 int *size, | 39 int *size, |
40 favicon_base::FallbackIconStyle* style) { | 40 favicon_base::FallbackIconStyle* style) { |
41 return ParsedFallbackIconPath::ParseSpecs(specs_str, size, style); | 41 return ParsedFallbackIconPath::ParseSpecs(specs_str, size, style); |
42 } | 42 } |
43 | 43 |
44 bool ParseColor(const std::string& color_str, SkColor* color) { | 44 bool ParseColor(const std::string& color_str, SkColor* color) { |
45 int size_dummy; | 45 return ParsedFallbackIconPath::ParseColor(color_str, color); |
46 favicon_base::FallbackIconStyle style; | |
47 std::string spec_str = "16," + color_str + ",,,"; | |
48 if (!ParseSpecs(spec_str, &size_dummy, &style)) | |
49 return false; | |
50 *color = style.background_color; | |
51 return true; | |
52 } | 46 } |
53 | 47 |
54 private: | 48 private: |
55 DISALLOW_COPY_AND_ASSIGN(FallbackIconUrlParserTest); | 49 DISALLOW_COPY_AND_ASSIGN(FallbackIconUrlParserTest); |
56 }; | 50 }; |
57 | 51 |
58 TEST_F(FallbackIconUrlParserTest, ParseColorSuccess) { | 52 TEST_F(FallbackIconUrlParserTest, ParseColorSuccess) { |
59 SkColor c; | 53 SkColor c; |
60 EXPECT_TRUE(ParseColor("#01aBf0f4", &c)); | 54 EXPECT_TRUE(ParseColor("31aBf0f4", &c)); |
61 EXPECT_EQ(SkColorSetARGB(0x01, 0xAB, 0xF0, 0xF4), c); | 55 EXPECT_EQ(SkColorSetARGB(0x31, 0xAB, 0xF0, 0xF4), c); |
62 EXPECT_TRUE(ParseColor("#01aBf0", &c)); | 56 EXPECT_TRUE(ParseColor("01aBf0", &c)); |
63 EXPECT_EQ(SkColorSetRGB(0x01, 0xAB, 0xF0), c); | 57 EXPECT_EQ(SkColorSetRGB(0x01, 0xAB, 0xF0), c); |
64 EXPECT_TRUE(ParseColor("#01a", &c)); | 58 EXPECT_TRUE(ParseColor("501a", &c)); |
| 59 EXPECT_EQ(SkColorSetARGB(0x55, 0x00, 0x11, 0xAA), c); |
| 60 EXPECT_TRUE(ParseColor("01a", &c)); |
65 EXPECT_EQ(SkColorSetRGB(0x00, 0x11, 0xAA), c); | 61 EXPECT_EQ(SkColorSetRGB(0x00, 0x11, 0xAA), c); |
66 EXPECT_TRUE(ParseColor("#000000", &c)); | 62 EXPECT_TRUE(ParseColor("000000", &c)); |
67 EXPECT_EQ(SkColorSetARGB(0xFF, 0x00, 0x00, 0x00), c); | 63 EXPECT_EQ(SkColorSetARGB(0xFF, 0x00, 0x00, 0x00), c); |
68 EXPECT_TRUE(ParseColor("red", &c)); | 64 EXPECT_TRUE(ParseColor("red", &c)); |
69 EXPECT_EQ(SkColorSetARGB(0xFF, 0xFF, 0x00, 0x00), c); | 65 EXPECT_EQ(SkColorSetARGB(0xFF, 0xFF, 0x00, 0x00), c); |
70 } | 66 } |
71 | 67 |
72 TEST_F(FallbackIconUrlParserTest, ParseColorFailure) { | 68 TEST_F(FallbackIconUrlParserTest, ParseColorFailure) { |
73 const char* test_cases[] = { | 69 const char* test_cases[] = { |
74 "#00000", | 70 "", |
75 "#000000000", | 71 "00000", |
76 " #000000", | 72 "000000000", |
77 "#ABCDEFG", | 73 " 000000", |
78 "000000", | 74 "ABCDEFG", |
79 "#000000 ", | 75 "#000", |
| 76 "#000000", |
| 77 "000000 ", |
| 78 "ABCDEFH", |
| 79 "#ABCDEF", |
80 }; | 80 }; |
81 for (size_t i = 0; i < arraysize(test_cases); ++i) { | 81 for (size_t i = 0; i < arraysize(test_cases); ++i) { |
82 SkColor c; | 82 SkColor c; |
83 EXPECT_FALSE(ParseColor(test_cases[i], &c)) | 83 EXPECT_FALSE(ParseColor(test_cases[i], &c)) |
84 << "test_cases[" << i << "]"; | 84 << "test_cases[" << i << "]"; |
85 } | 85 } |
86 } | 86 } |
87 | 87 |
88 TEST_F(FallbackIconUrlParserTest, ParseSpecsEmpty) { | 88 TEST_F(FallbackIconUrlParserTest, ParseSpecsEmpty) { |
89 int size; | 89 int size; |
90 FallbackIconStyle style; | 90 FallbackIconStyle style; |
91 EXPECT_TRUE(ParseSpecs(",,,,", &size, &style)); | 91 EXPECT_TRUE(ParseSpecs(",,,,", &size, &style)); |
92 EXPECT_EQ(16, size); | 92 EXPECT_EQ(16, size); |
93 EXPECT_EQ(kDefaultBackgroundColor, style.background_color); | 93 EXPECT_EQ(kDefaultBackgroundColor, style.background_color); |
94 EXPECT_EQ(kDefaultTextColorLight, style.text_color); | 94 EXPECT_EQ(kDefaultTextColorLight, style.text_color); |
95 EXPECT_EQ(kDefaultFontSizeRatio, style.font_size_ratio); | 95 EXPECT_EQ(kDefaultFontSizeRatio, style.font_size_ratio); |
96 EXPECT_EQ(kDefaultRoundness, style.roundness); | 96 EXPECT_EQ(kDefaultRoundness, style.roundness); |
97 } | 97 } |
98 | 98 |
99 TEST_F(FallbackIconUrlParserTest, ParseSpecsPartial) { | 99 TEST_F(FallbackIconUrlParserTest, ParseSpecsPartial) { |
100 int size; | 100 int size; |
101 FallbackIconStyle style; | 101 FallbackIconStyle style; |
102 EXPECT_TRUE(ParseSpecs(",,#aCE,,0.1", &size, &style)); | 102 EXPECT_TRUE(ParseSpecs(",,aCE,,0.1", &size, &style)); |
103 EXPECT_EQ(16, size); | 103 EXPECT_EQ(16, size); |
104 EXPECT_EQ(kDefaultBackgroundColor, style.background_color); | 104 EXPECT_EQ(kDefaultBackgroundColor, style.background_color); |
105 EXPECT_EQ(SkColorSetRGB(0xAA, 0xCC, 0xEE), style.text_color); | 105 EXPECT_EQ(SkColorSetRGB(0xAA, 0xCC, 0xEE), style.text_color); |
106 EXPECT_EQ(kDefaultFontSizeRatio, style.font_size_ratio); | 106 EXPECT_EQ(kDefaultFontSizeRatio, style.font_size_ratio); |
107 EXPECT_EQ(0.1, style.roundness); | 107 EXPECT_EQ(0.1, style.roundness); |
108 } | 108 } |
109 | 109 |
110 TEST_F(FallbackIconUrlParserTest, ParseSpecsFull) { | 110 TEST_F(FallbackIconUrlParserTest, ParseSpecsFull) { |
111 int size; | 111 int size; |
112 | 112 |
113 { | 113 { |
114 FallbackIconStyle style; | 114 FallbackIconStyle style; |
115 EXPECT_TRUE(ParseSpecs("16,#000,#f01,0.75,0.25", &size, &style)); | 115 EXPECT_TRUE(ParseSpecs("16,000,f01,0.75,0.25", &size, &style)); |
116 EXPECT_EQ(16, size); | 116 EXPECT_EQ(16, size); |
117 EXPECT_EQ(SkColorSetRGB(0x00, 0x00, 0x00), style.background_color); | 117 EXPECT_EQ(SkColorSetRGB(0x00, 0x00, 0x00), style.background_color); |
118 EXPECT_EQ(SkColorSetRGB(0xff, 0x00, 0x11), style.text_color); | 118 EXPECT_EQ(SkColorSetRGB(0xff, 0x00, 0x11), style.text_color); |
119 EXPECT_EQ(0.75, style.font_size_ratio); | 119 EXPECT_EQ(0.75, style.font_size_ratio); |
120 EXPECT_EQ(0.25, style.roundness); | 120 EXPECT_EQ(0.25, style.roundness); |
121 } | 121 } |
122 | 122 |
123 { | 123 { |
124 FallbackIconStyle style; | 124 FallbackIconStyle style; |
125 EXPECT_TRUE(ParseSpecs("48,black,#123456,0.5,0.3", &size, &style)); | 125 EXPECT_TRUE(ParseSpecs("48,black,123456,0.5,0.3", &size, &style)); |
126 EXPECT_EQ(48, size); | 126 EXPECT_EQ(48, size); |
127 EXPECT_EQ(SkColorSetRGB(0x00, 0x00, 0x00), style.background_color); | 127 EXPECT_EQ(SkColorSetRGB(0x00, 0x00, 0x00), style.background_color); |
128 EXPECT_EQ(SkColorSetRGB(0x12, 0x34, 0x56), style.text_color); | 128 EXPECT_EQ(SkColorSetRGB(0x12, 0x34, 0x56), style.text_color); |
129 EXPECT_EQ(0.5, style.font_size_ratio); | 129 EXPECT_EQ(0.5, style.font_size_ratio); |
130 EXPECT_EQ(0.3, style.roundness); | 130 EXPECT_EQ(0.3, style.roundness); |
131 } | 131 } |
132 | 132 |
133 { | 133 { |
134 FallbackIconStyle style; | 134 FallbackIconStyle style; |
135 EXPECT_TRUE(ParseSpecs("1,#000,red,0,0", &size, &style)); | 135 EXPECT_TRUE(ParseSpecs("1,000,red,0,0", &size, &style)); |
136 EXPECT_EQ(1, size); | 136 EXPECT_EQ(1, size); |
137 EXPECT_EQ(SkColorSetRGB(0x00, 0x00, 0x00), style.background_color); | 137 EXPECT_EQ(SkColorSetRGB(0x00, 0x00, 0x00), style.background_color); |
138 EXPECT_EQ(SkColorSetRGB(0xFF, 0x00, 0x00), style.text_color); | 138 EXPECT_EQ(SkColorSetRGB(0xFF, 0x00, 0x00), style.text_color); |
139 EXPECT_EQ(0, style.font_size_ratio); | 139 EXPECT_EQ(0, style.font_size_ratio); |
140 EXPECT_EQ(0, style.roundness); | 140 EXPECT_EQ(0, style.roundness); |
141 } | 141 } |
142 } | 142 } |
143 | 143 |
144 TEST_F(FallbackIconUrlParserTest, ParseSpecsDefaultTextColor) { | 144 TEST_F(FallbackIconUrlParserTest, ParseSpecsDefaultTextColor) { |
145 int size; | 145 int size; |
146 | 146 |
147 { | 147 { |
148 // Dark background -> Light text. | 148 // Dark background -> Light text. |
149 FallbackIconStyle style; | 149 FallbackIconStyle style; |
150 EXPECT_TRUE(ParseSpecs(",#000,,,", &size, &style)); | 150 EXPECT_TRUE(ParseSpecs(",000,,,", &size, &style)); |
151 EXPECT_EQ(kDefaultTextColorLight, style.text_color); | 151 EXPECT_EQ(kDefaultTextColorLight, style.text_color); |
152 } | 152 } |
153 | 153 |
154 { | 154 { |
155 // Light background -> Dark text. | 155 // Light background -> Dark text. |
156 FallbackIconStyle style; | 156 FallbackIconStyle style; |
157 EXPECT_TRUE(ParseSpecs(",#fff,,,", &size, &style)); | 157 EXPECT_TRUE(ParseSpecs(",fff,,,", &size, &style)); |
158 EXPECT_EQ(kDefaultTextColorDark, style.text_color); | 158 EXPECT_EQ(kDefaultTextColorDark, style.text_color); |
159 } | 159 } |
160 | 160 |
161 { | 161 { |
162 // Light background -> Dark text, more params don't matter. | 162 // Light background -> Dark text, more params don't matter. |
163 FallbackIconStyle style; | 163 FallbackIconStyle style; |
164 EXPECT_TRUE(ParseSpecs("107,#fff,,0.3,0.5", &size, &style)); | 164 EXPECT_TRUE(ParseSpecs("107,fff,,0.3,0.5", &size, &style)); |
165 EXPECT_EQ(kDefaultTextColorDark, style.text_color); | 165 EXPECT_EQ(kDefaultTextColorDark, style.text_color); |
166 } | 166 } |
167 } | 167 } |
168 | 168 |
169 TEST_F(FallbackIconUrlParserTest, ParseSpecsFailure) { | 169 TEST_F(FallbackIconUrlParserTest, ParseSpecsFailure) { |
170 const char* test_cases[] = { | 170 const char* test_cases[] = { |
171 // Need exactly 5 params. | 171 // Need exactly 5 params. |
172 "", | 172 "", |
173 "16", | 173 "16", |
174 "16,black", | 174 "16,black", |
175 "16,black,#fff", | 175 "16,black,fff", |
176 "16,black,#fff,0.75", | 176 "16,black,fff,0.75", |
177 ",,," | 177 ",,," |
178 ",,,,,", | 178 ",,,,,", |
179 "16,black,#fff,0.75,0.25,junk", | 179 "16,black,fff,0.75,0.25,junk", |
180 // Don't allow any space. | 180 // Don't allow any space. |
181 "16,black,#fff, 0.75,0.25", | 181 "16,black,fff, 0.75,0.25", |
182 "16,black ,#fff,0.75,0.25", | 182 "16,black ,fff,0.75,0.25", |
183 "16,black,#fff,0.75,0.25 ", | 183 "16,black,fff,0.75,0.25 ", |
184 // Adding junk text. | 184 // Adding junk text. |
185 "16,black,#fff,0.75,0.25junk", | 185 "16,black,fff,0.75,0.25junk", |
186 "junk,black,#fff,0.75,0.25", | 186 "junk,black,fff,0.75,0.25", |
187 "16,#junk,#fff,0.75,0.25", | 187 "16,#junk,fff,0.75,0.25", |
188 "16,black,#junk,0.75,0.25", | 188 "16,black,junk,0.75,0.25", |
189 "16,black,#fff,junk,0.25", | 189 "16,black,fff,junk,0.25", |
190 "16,black,#fff,0.75,junk", | 190 "16,black,fff,0.75,junk", |
191 // Out of bound. | 191 // Out of bound. |
192 "0,black,#fff,0.75,0.25", // size. | 192 "0,black,fff,0.75,0.25", // size. |
193 "4294967296,black,#fff,0.75,0.25", // size. | 193 "4294967296,black,fff,0.75,0.25", // size. |
194 "-1,black,#fff,0.75,0.25", // size. | 194 "-1,black,fff,0.75,0.25", // size. |
195 "16,black,#fff,-0.1,0.25", // font_size_ratio. | 195 "16,black,fff,-0.1,0.25", // font_size_ratio. |
196 "16,black,#fff,1.1,0.25", // font_size_ratio. | 196 "16,black,fff,1.1,0.25", // font_size_ratio. |
197 "16,black,#fff,0.75,-0.1", // roundness. | 197 "16,black,fff,0.75,-0.1", // roundness. |
198 "16,black,#fff,0.75,1.1", // roundness. | 198 "16,black,fff,0.75,1.1", // roundness. |
199 }; | 199 }; |
200 for (size_t i = 0; i < arraysize(test_cases); ++i) { | 200 for (size_t i = 0; i < arraysize(test_cases); ++i) { |
201 int size; | 201 int size; |
202 FallbackIconStyle style; | 202 FallbackIconStyle style; |
203 EXPECT_FALSE(ParseSpecs(test_cases[i], &size, &style)) | 203 EXPECT_FALSE(ParseSpecs(test_cases[i], &size, &style)) |
204 << "test_cases[" << i << "]"; | 204 << "test_cases[" << i << "]"; |
205 | 205 |
206 } | 206 } |
207 } | 207 } |
208 | 208 |
209 TEST_F(FallbackIconUrlParserTest, ParseFallbackIconPathSuccess) { | 209 TEST_F(FallbackIconUrlParserTest, ParseFallbackIconPathSuccess) { |
210 const std::string specs = "31,black,#fff,0.75,0.25"; | 210 const std::string specs = "31,black,fff,0.75,0.25"; |
211 | 211 |
212 // Everything populated. | 212 // Everything populated. |
213 { | 213 { |
214 chrome::ParsedFallbackIconPath parsed; | 214 chrome::ParsedFallbackIconPath parsed; |
215 EXPECT_TRUE(parsed.Parse(specs + "/" + kTestUrlStr)); | 215 EXPECT_TRUE(parsed.Parse(specs + "/" + kTestUrlStr)); |
216 EXPECT_EQ(GURL(kTestUrlStr), parsed.url()); | 216 EXPECT_EQ(GURL(kTestUrlStr), parsed.url()); |
217 EXPECT_EQ(31, parsed.size_in_pixels()); | 217 EXPECT_EQ(31, parsed.size_in_pixels()); |
218 const favicon_base::FallbackIconStyle& style = parsed.style(); | 218 const favicon_base::FallbackIconStyle& style = parsed.style(); |
219 EXPECT_EQ(SkColorSetRGB(0x00, 0x00, 0x00), style.background_color); | 219 EXPECT_EQ(SkColorSetRGB(0x00, 0x00, 0x00), style.background_color); |
220 EXPECT_EQ(SkColorSetRGB(0xFF, 0xFF, 0xFF), style.text_color); | 220 EXPECT_EQ(SkColorSetRGB(0xFF, 0xFF, 0xFF), style.text_color); |
(...skipping 24 matching lines...) Expand all Loading... |
245 EXPECT_EQ(kDefaultBackgroundColor, style.background_color); | 245 EXPECT_EQ(kDefaultBackgroundColor, style.background_color); |
246 EXPECT_EQ(kDefaultTextColorLight, style.text_color); | 246 EXPECT_EQ(kDefaultTextColorLight, style.text_color); |
247 EXPECT_EQ(kDefaultFontSizeRatio, style.font_size_ratio); | 247 EXPECT_EQ(kDefaultFontSizeRatio, style.font_size_ratio); |
248 EXPECT_EQ(kDefaultRoundness, style.roundness); | 248 EXPECT_EQ(kDefaultRoundness, style.roundness); |
249 } | 249 } |
250 } | 250 } |
251 | 251 |
252 TEST_F(FallbackIconUrlParserTest, ParseFallbackIconPathFailure) { | 252 TEST_F(FallbackIconUrlParserTest, ParseFallbackIconPathFailure) { |
253 const char* test_cases[] = { | 253 const char* test_cases[] = { |
254 // Bad size. | 254 // Bad size. |
255 "-1,#000,#fff,0.75,0.25/http://www.google.com/", | 255 "-1,000,fff,0.75,0.25/http://www.google.com/", |
256 // Bad specs. | 256 // Bad specs. |
257 "32,#junk,#fff,0.75,0.25/http://www.google.com/", | 257 "32,#junk,fff,0.75,0.25/http://www.google.com/", |
258 // Bad URL. | 258 // Bad URL. |
259 "32,#000,#fff,0.75,0.25/NOT A VALID URL", | 259 "32,000,fff,0.75,0.25/NOT A VALID URL", |
260 }; | 260 }; |
261 for (size_t i = 0; i < arraysize(test_cases); ++i) { | 261 for (size_t i = 0; i < arraysize(test_cases); ++i) { |
262 chrome::ParsedFallbackIconPath parsed; | 262 chrome::ParsedFallbackIconPath parsed; |
263 EXPECT_FALSE(parsed.Parse(test_cases[i])) << "test_cases[" << i << "]"; | 263 EXPECT_FALSE(parsed.Parse(test_cases[i])) << "test_cases[" << i << "]"; |
264 } | 264 } |
265 } | 265 } |
266 | 266 |
267 } // namespace chrome | 267 } // namespace chrome |
OLD | NEW |