| OLD | NEW |
| 1 // Copyright 2017 The Chromium Authors. All rights reserved. | 1 // Copyright 2017 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 "components/doodle/doodle_types.h" | 5 #include "components/doodle/doodle_types.h" |
| 6 | 6 |
| 7 #include <memory> | 7 #include <memory> |
| 8 #include <string> | 8 #include <string> |
| 9 | 9 |
| 10 #include "base/json/json_reader.h" | 10 #include "base/json/json_reader.h" |
| (...skipping 123 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 134 TEST(DoodleConfigTest, ParsesMinimalConfig) { | 134 TEST(DoodleConfigTest, ParsesMinimalConfig) { |
| 135 std::string json = R"json({ | 135 std::string json = R"json({ |
| 136 "large_image":{"url":"https://doodle.com/img.jpg"} | 136 "large_image":{"url":"https://doodle.com/img.jpg"} |
| 137 })json"; | 137 })json"; |
| 138 base::Optional<DoodleConfig> config = | 138 base::Optional<DoodleConfig> config = |
| 139 DoodleConfigFromJson(json, base::nullopt); | 139 DoodleConfigFromJson(json, base::nullopt); |
| 140 ASSERT_TRUE(config.has_value()); | 140 ASSERT_TRUE(config.has_value()); |
| 141 EXPECT_THAT(config->doodle_type, Eq(DoodleType::UNKNOWN)); | 141 EXPECT_THAT(config->doodle_type, Eq(DoodleType::UNKNOWN)); |
| 142 EXPECT_THAT(config->alt_text, Eq(std::string())); | 142 EXPECT_THAT(config->alt_text, Eq(std::string())); |
| 143 EXPECT_THAT(config->interactive_html, Eq(std::string())); | 143 EXPECT_THAT(config->interactive_html, Eq(std::string())); |
| 144 EXPECT_THAT(config->search_url, Eq(GURL())); | |
| 145 EXPECT_THAT(config->target_url, Eq(GURL())); | 144 EXPECT_THAT(config->target_url, Eq(GURL())); |
| 146 EXPECT_THAT(config->fullpage_interactive_url, Eq(GURL())); | |
| 147 EXPECT_FALSE(config->large_cta_image.has_value()); | 145 EXPECT_FALSE(config->large_cta_image.has_value()); |
| 148 EXPECT_FALSE(config->transparent_large_image.has_value()); | 146 EXPECT_FALSE(config->transparent_large_image.has_value()); |
| 149 } | 147 } |
| 150 | 148 |
| 151 TEST(DoodleConfigTest, ParsesFullConfig) { | 149 TEST(DoodleConfigTest, ParsesFullConfig) { |
| 152 std::string json = R"json({ | 150 std::string json = R"json({ |
| 153 "doodle_type":"SLIDESHOW", | 151 "doodle_type":"SLIDESHOW", |
| 154 "alt_text":"some text", | 152 "alt_text":"some text", |
| 155 "interactive_html":"<div id='dood'></div>", | 153 "interactive_html":"<div id='dood'></div>", |
| 156 "search_url":"https://doodle.com/search", | |
| 157 "target_url":"https://doodle.com/target", | 154 "target_url":"https://doodle.com/target", |
| 158 "fullpage_interactive_url":"https://doodle.com/interactive", | |
| 159 "large_image":{"url":"https://doodle.com/img.jpg"}, | 155 "large_image":{"url":"https://doodle.com/img.jpg"}, |
| 160 "large_cta_image":{"url":"https://doodle.com/cta.jpg"}, | 156 "large_cta_image":{"url":"https://doodle.com/cta.jpg"}, |
| 161 "transparent_large_image":{"url":"https://doodle.com/transparent.jpg"} | 157 "transparent_large_image":{"url":"https://doodle.com/transparent.jpg"} |
| 162 })json"; | 158 })json"; |
| 163 base::Optional<DoodleConfig> config = | 159 base::Optional<DoodleConfig> config = |
| 164 DoodleConfigFromJson(json, base::nullopt); | 160 DoodleConfigFromJson(json, base::nullopt); |
| 165 ASSERT_TRUE(config.has_value()); | 161 ASSERT_TRUE(config.has_value()); |
| 166 EXPECT_THAT(config->doodle_type, Eq(DoodleType::SLIDESHOW)); | 162 EXPECT_THAT(config->doodle_type, Eq(DoodleType::SLIDESHOW)); |
| 167 EXPECT_THAT(config->alt_text, Eq("some text")); | 163 EXPECT_THAT(config->alt_text, Eq("some text")); |
| 168 EXPECT_THAT(config->interactive_html, Eq("<div id='dood'></div>")); | 164 EXPECT_THAT(config->interactive_html, Eq("<div id='dood'></div>")); |
| 169 EXPECT_THAT(config->search_url, Eq(GURL("https://doodle.com/search"))); | |
| 170 EXPECT_THAT(config->target_url, Eq(GURL("https://doodle.com/target"))); | 165 EXPECT_THAT(config->target_url, Eq(GURL("https://doodle.com/target"))); |
| 171 EXPECT_THAT(config->fullpage_interactive_url, | |
| 172 Eq(GURL("https://doodle.com/interactive"))); | |
| 173 EXPECT_THAT(config->large_image.url, Eq(GURL("https://doodle.com/img.jpg"))); | 166 EXPECT_THAT(config->large_image.url, Eq(GURL("https://doodle.com/img.jpg"))); |
| 174 ASSERT_TRUE(config->large_cta_image.has_value()); | 167 ASSERT_TRUE(config->large_cta_image.has_value()); |
| 175 EXPECT_THAT(config->large_cta_image->url, | 168 EXPECT_THAT(config->large_cta_image->url, |
| 176 Eq(GURL("https://doodle.com/cta.jpg"))); | 169 Eq(GURL("https://doodle.com/cta.jpg"))); |
| 177 ASSERT_TRUE(config->transparent_large_image.has_value()); | 170 ASSERT_TRUE(config->transparent_large_image.has_value()); |
| 178 EXPECT_THAT(config->transparent_large_image->url, | 171 EXPECT_THAT(config->transparent_large_image->url, |
| 179 Eq(GURL("https://doodle.com/transparent.jpg"))); | 172 Eq(GURL("https://doodle.com/transparent.jpg"))); |
| 180 } | 173 } |
| 181 | 174 |
| 182 TEST(DoodleConfigTest, RequiresLargeImage) { | 175 TEST(DoodleConfigTest, RequiresLargeImage) { |
| 183 std::string json = R"json({ | 176 std::string json = R"json({ |
| 184 "doodle_type":"SLIDESHOW", | 177 "doodle_type":"SLIDESHOW", |
| 185 "alt_text":"some text", | 178 "alt_text":"some text", |
| 186 "interactive_html":"<div id='dood'></div>", | 179 "interactive_html":"<div id='dood'></div>", |
| 187 "search_url":"https://doodle.com/search", | |
| 188 "target_url":"https://doodle.com/target", | 180 "target_url":"https://doodle.com/target", |
| 189 "fullpage_interactive_url":"https://doodle.com/interactive", | |
| 190 "large_cta_image":{"url":"https://doodle.com/cta.jpg"}, | 181 "large_cta_image":{"url":"https://doodle.com/cta.jpg"}, |
| 191 "transparent_large_image":{"url":"https://doodle.com/transparent.jpg"} | 182 "transparent_large_image":{"url":"https://doodle.com/transparent.jpg"} |
| 192 })json"; | 183 })json"; |
| 193 base::Optional<DoodleConfig> config = | 184 base::Optional<DoodleConfig> config = |
| 194 DoodleConfigFromJson(json, base::nullopt); | 185 DoodleConfigFromJson(json, base::nullopt); |
| 195 EXPECT_FALSE(config.has_value()); | 186 EXPECT_FALSE(config.has_value()); |
| 196 } | 187 } |
| 197 | 188 |
| 198 TEST(DoodleConfigTest, RequiresValidLargeImage) { | 189 TEST(DoodleConfigTest, RequiresValidLargeImage) { |
| 199 std::string json = R"json({ | 190 std::string json = R"json({ |
| 200 "doodle_type":"SLIDESHOW", | 191 "doodle_type":"SLIDESHOW", |
| 201 "alt_text":"some text", | 192 "alt_text":"some text", |
| 202 "interactive_html":"<div id='dood'></div>", | 193 "interactive_html":"<div id='dood'></div>", |
| 203 "search_url":"https://doodle.com/search", | |
| 204 "target_url":"https://doodle.com/target", | 194 "target_url":"https://doodle.com/target", |
| 205 "fullpage_interactive_url":"https://doodle.com/interactive", | |
| 206 "large_image":{"no_url":"asdf"}, | 195 "large_image":{"no_url":"asdf"}, |
| 207 "large_cta_image":{"url":"https://doodle.com/cta.jpg"}, | 196 "large_cta_image":{"url":"https://doodle.com/cta.jpg"}, |
| 208 "transparent_large_image":{"url":"https://doodle.com/transparent.jpg"} | 197 "transparent_large_image":{"url":"https://doodle.com/transparent.jpg"} |
| 209 })json"; | 198 })json"; |
| 210 base::Optional<DoodleConfig> config = | 199 base::Optional<DoodleConfig> config = |
| 211 DoodleConfigFromJson(json, base::nullopt); | 200 DoodleConfigFromJson(json, base::nullopt); |
| 212 EXPECT_FALSE(config.has_value()); | 201 EXPECT_FALSE(config.has_value()); |
| 213 } | 202 } |
| 214 | 203 |
| 215 TEST(DoodleConfigTest, ResolvesRelativeUrls) { | 204 TEST(DoodleConfigTest, ResolvesRelativeUrls) { |
| 216 std::string json = R"json({ | 205 std::string json = R"json({ |
| 217 "search_url":"/search", | |
| 218 "target_url":"/target", | 206 "target_url":"/target", |
| 219 "fullpage_interactive_url":"/interactive", | |
| 220 "large_image":{"url":"/large.jpg"}, | 207 "large_image":{"url":"/large.jpg"}, |
| 221 "large_cta_image":{"url":"/cta.jpg"}, | 208 "large_cta_image":{"url":"/cta.jpg"}, |
| 222 "transparent_large_image":{"url":"/transparent.jpg"} | 209 "transparent_large_image":{"url":"/transparent.jpg"} |
| 223 })json"; | 210 })json"; |
| 224 base::Optional<DoodleConfig> config = | 211 base::Optional<DoodleConfig> config = |
| 225 DoodleConfigFromJson(json, GURL("https://doodle.com/")); | 212 DoodleConfigFromJson(json, GURL("https://doodle.com/")); |
| 226 ASSERT_TRUE(config.has_value()); | 213 ASSERT_TRUE(config.has_value()); |
| 227 EXPECT_THAT(config->search_url, Eq(GURL("https://doodle.com/search"))); | |
| 228 EXPECT_THAT(config->target_url, Eq(GURL("https://doodle.com/target"))); | 214 EXPECT_THAT(config->target_url, Eq(GURL("https://doodle.com/target"))); |
| 229 EXPECT_THAT(config->fullpage_interactive_url, | |
| 230 Eq(GURL("https://doodle.com/interactive"))); | |
| 231 EXPECT_THAT(config->large_image.url, | 215 EXPECT_THAT(config->large_image.url, |
| 232 Eq(GURL("https://doodle.com/large.jpg"))); | 216 Eq(GURL("https://doodle.com/large.jpg"))); |
| 233 ASSERT_TRUE(config->large_cta_image.has_value()); | 217 ASSERT_TRUE(config->large_cta_image.has_value()); |
| 234 EXPECT_THAT(config->large_cta_image->url, | 218 EXPECT_THAT(config->large_cta_image->url, |
| 235 Eq(GURL("https://doodle.com/cta.jpg"))); | 219 Eq(GURL("https://doodle.com/cta.jpg"))); |
| 236 ASSERT_TRUE(config->transparent_large_image.has_value()); | 220 ASSERT_TRUE(config->transparent_large_image.has_value()); |
| 237 EXPECT_THAT(config->transparent_large_image->url, | 221 EXPECT_THAT(config->transparent_large_image->url, |
| 238 Eq(GURL("https://doodle.com/transparent.jpg"))); | 222 Eq(GURL("https://doodle.com/transparent.jpg"))); |
| 239 } | 223 } |
| 240 | 224 |
| 241 TEST(DoodleConfigTest, HandlesInvalidUrls) { | 225 TEST(DoodleConfigTest, HandlesInvalidUrls) { |
| 242 std::string json = R"json({ | 226 std::string json = R"json({ |
| 243 "search_url":"not_a_url", | |
| 244 "target_url":"not_a_url", | 227 "target_url":"not_a_url", |
| 245 "fullpage_interactive_url":"not_a_url", | |
| 246 "large_image":{"url":"https://doodle.com/img.jpg"} | 228 "large_image":{"url":"https://doodle.com/img.jpg"} |
| 247 })json"; | 229 })json"; |
| 248 base::Optional<DoodleConfig> config = | 230 base::Optional<DoodleConfig> config = |
| 249 DoodleConfigFromJson(json, base::nullopt); | 231 DoodleConfigFromJson(json, base::nullopt); |
| 250 // All the URLs are optional, so invalid ones shouldn't matter. | 232 // All the URLs are optional, so invalid ones shouldn't matter. |
| 251 ASSERT_TRUE(config.has_value()); | 233 ASSERT_TRUE(config.has_value()); |
| 252 EXPECT_TRUE(config->search_url.is_empty()); | |
| 253 EXPECT_TRUE(config->target_url.is_empty()); | 234 EXPECT_TRUE(config->target_url.is_empty()); |
| 254 EXPECT_TRUE(config->fullpage_interactive_url.is_empty()); | |
| 255 } | 235 } |
| 256 | 236 |
| 257 TEST(DoodleConfigTest, PreservesFieldsOverRoundtrip) { | 237 TEST(DoodleConfigTest, PreservesFieldsOverRoundtrip) { |
| 258 // Set all fields to non-default values. | 238 // Set all fields to non-default values. |
| 259 DoodleConfig config(DoodleType::SLIDESHOW, | 239 DoodleConfig config(DoodleType::SLIDESHOW, |
| 260 DoodleImage(GURL("https://www.doodle.com/img.jpg"))); | 240 DoodleImage(GURL("https://www.doodle.com/img.jpg"))); |
| 261 config.alt_text = "some text"; | 241 config.alt_text = "some text"; |
| 262 config.interactive_html = "<div id='dood'></div>"; | 242 config.interactive_html = "<div id='dood'></div>"; |
| 263 config.search_url = GURL("https://doodle.com/search"); | |
| 264 config.target_url = GURL("https://doodle.com/target"); | 243 config.target_url = GURL("https://doodle.com/target"); |
| 265 config.fullpage_interactive_url = GURL("https://doodle.com/interactive"); | |
| 266 config.large_cta_image = DoodleImage(GURL("https://www.doodle.com/cta.jpg")); | 244 config.large_cta_image = DoodleImage(GURL("https://www.doodle.com/cta.jpg")); |
| 267 config.transparent_large_image = | 245 config.transparent_large_image = |
| 268 DoodleImage(GURL("https://www.doodle.com/transparent.jpg")); | 246 DoodleImage(GURL("https://www.doodle.com/transparent.jpg")); |
| 269 | 247 |
| 270 // Convert to a dictionary and back. | 248 // Convert to a dictionary and back. |
| 271 // Note: The different |base_url| should make no difference, since all | 249 // Note: The different |base_url| should make no difference, since all |
| 272 // persisted URLs are absolute already. | 250 // persisted URLs are absolute already. |
| 273 base::Optional<DoodleConfig> after_roundtrip = DoodleConfig::FromDictionary( | 251 base::Optional<DoodleConfig> after_roundtrip = DoodleConfig::FromDictionary( |
| 274 *config.ToDictionary(), GURL("https://other.com")); | 252 *config.ToDictionary(), GURL("https://other.com")); |
| 275 | 253 |
| 276 // Make sure everything survived. | 254 // Make sure everything survived. |
| 277 ASSERT_TRUE(after_roundtrip.has_value()); | 255 ASSERT_TRUE(after_roundtrip.has_value()); |
| 278 EXPECT_THAT(*after_roundtrip, Eq(config)); | 256 EXPECT_THAT(*after_roundtrip, Eq(config)); |
| 279 } | 257 } |
| 280 | 258 |
| 281 } // namespace doodle | 259 } // namespace doodle |
| OLD | NEW |