Chromium Code Reviews| Index: chrome/browser/ui/autofill/save_card_bubble_controller_impl_unittest.cc |
| diff --git a/chrome/browser/ui/autofill/save_card_bubble_controller_impl_unittest.cc b/chrome/browser/ui/autofill/save_card_bubble_controller_impl_unittest.cc |
| new file mode 100644 |
| index 0000000000000000000000000000000000000000..7d4e723047f1e8b5fdfcaa2cb4d0cac03e315e65 |
| --- /dev/null |
| +++ b/chrome/browser/ui/autofill/save_card_bubble_controller_impl_unittest.cc |
| @@ -0,0 +1,314 @@ |
| +// Copyright 2014 The Chromium Authors. All rights reserved. |
| +// Use of this source code is governed by a BSD-style license that can be |
| +// found in the LICENSE file. |
| + |
| +#include "chrome/browser/ui/autofill/save_card_bubble_controller_impl.h" |
| + |
| +#include "base/json/json_reader.h" |
| +#include "base/strings/utf_string_conversions.h" |
| +#include "chrome/test/base/chrome_render_view_host_test_harness.h" |
| +#include "testing/gtest/include/gtest/gtest.h" |
| + |
| +namespace autofill { |
| + |
| +class SaveCardBubbleControllerImplTest |
| + : public ChromeRenderViewHostTestHarness { |
| + public: |
| + SaveCardBubbleControllerImplTest() {} |
| + |
| + void SetUp() override { |
| + ChromeRenderViewHostTestHarness::SetUp(); |
| + SaveCardBubbleControllerImpl::CreateForWebContents(web_contents()); |
| + } |
| + |
| + void SetLegalMessageExpectSuccess(const std::string& message_json) { |
| + scoped_ptr<base::Value> value(base::JSONReader::Read(message_json)); |
| + const base::ListValue* lines; |
| + ASSERT_TRUE(value->GetAsList(&lines)); |
| + EXPECT_TRUE(controller()->SetLegalMessage(*lines)); |
| + } |
| + |
| + void SetLegalMessageExpectFailure(const std::string& message_json) { |
| + scoped_ptr<base::Value> value(base::JSONReader::Read(message_json)); |
| + const base::ListValue* lines; |
| + ASSERT_TRUE(value->GetAsList(&lines)); |
| + EXPECT_FALSE(controller()->SetLegalMessage(*lines)); |
| + } |
| + |
| + protected: |
| + SaveCardBubbleControllerImpl* controller() { |
| + return SaveCardBubbleControllerImpl::FromWebContents(web_contents()); |
| + } |
| + |
| + private: |
| + DISALLOW_COPY_AND_ASSIGN(SaveCardBubbleControllerImplTest); |
| +}; |
| + |
| +TEST_F(SaveCardBubbleControllerImplTest, NoParameters) { |
| + SetLegalMessageExpectSuccess( |
| + "[ {" |
| + " \"template\": \"This is the entire message.\"" |
| + "} ]"); |
| + EXPECT_EQ(base::ASCIIToUTF16("This is the entire message."), |
| + controller()->GetLegalMessage()); |
| +} |
| + |
| +TEST_F(SaveCardBubbleControllerImplTest, SingleParameter) { |
| + SetLegalMessageExpectSuccess( |
| + "[ {" |
| + " \"template\": \"Panda {0}.\"," |
| + " \"template_parameter\": [ {" |
| + " \"display_text\": \"bears are fuzzy\"," |
| + " \"url\": \"http://www.example.com\"" |
| + " } ]" |
| + "} ]"); |
| + EXPECT_EQ(base::ASCIIToUTF16("Panda bears are fuzzy."), |
| + controller()->GetLegalMessage()); |
| + |
| + std::vector<gfx::Range> expected_ranges; |
| + expected_ranges.push_back(gfx::Range(6, 21)); |
| + EXPECT_EQ(expected_ranges, controller()->GetLegalMessageLinkRanges()); |
| + |
| + std::vector<std::string> expected_urls; |
| + expected_urls.push_back("http://www.example.com"); |
| + EXPECT_EQ(expected_urls, controller()->GetLegalMessageLinkUrlsForTesting()); |
| +} |
| + |
| +TEST_F(SaveCardBubbleControllerImplTest, MissingUrl) { |
| + SetLegalMessageExpectFailure( |
| + "[ {" |
| + " \"template\": \"Panda {0}.\"," |
| + " \"template_parameter\": [ {" |
| + " \"display_text\": \"bear\"" |
| + " } ]" |
| + "} ]"); |
| + EXPECT_TRUE(controller()->GetLegalMessage().empty()); |
| + EXPECT_TRUE(controller()->GetLegalMessageLinkRanges().empty()); |
| + EXPECT_TRUE(controller()->GetLegalMessageLinkUrlsForTesting().empty()); |
| +} |
| + |
| +TEST_F(SaveCardBubbleControllerImplTest, MissingDisplayText) { |
| + SetLegalMessageExpectFailure( |
| + "[ {" |
| + " \"template\": \"Panda {0}.\"," |
| + " \"template_parameter\": [ {" |
| + " \"url\": \"http://www.example.com\"" |
| + " } ]" |
| + "} ]"); |
| + EXPECT_TRUE(controller()->GetLegalMessage().empty()); |
| + EXPECT_TRUE(controller()->GetLegalMessageLinkRanges().empty()); |
| + EXPECT_TRUE(controller()->GetLegalMessageLinkUrlsForTesting().empty()); |
| +} |
| + |
| +TEST_F(SaveCardBubbleControllerImplTest, EscapeCharacters) { |
| + SetLegalMessageExpectSuccess( |
| + "[ {" |
| + " \"template\": \"Panda '{'{0}'}' '{1}' don't $1.\"," |
| + " \"template_parameter\": [ {" |
| + " \"display_text\": \"bears\"," |
| + " \"url\": \"http://www.example.com\"" |
| + " } ]" |
| + "} ]"); |
| + EXPECT_EQ(base::ASCIIToUTF16("Panda {bears} {1} don't $1."), |
| + controller()->GetLegalMessage()); |
| + |
| + std::vector<gfx::Range> expected_ranges; |
| + expected_ranges.push_back(gfx::Range(7, 12)); |
| + EXPECT_EQ(expected_ranges, controller()->GetLegalMessageLinkRanges()); |
| + |
| + std::vector<std::string> expected_urls; |
| + expected_urls.push_back("http://www.example.com"); |
| + EXPECT_EQ(expected_urls, controller()->GetLegalMessageLinkUrlsForTesting()); |
| +} |
| + |
| +TEST_F(SaveCardBubbleControllerImplTest, ConsecutiveDollarSigns) { |
| + SetLegalMessageExpectSuccess( |
| + "[ {" |
| + " \"template\": \"$$\"" |
| + "} ]"); |
| + |
| + // Consecutive dollar signs do not expand correctly (see comment in |
| + // ReplaceTemplatePlaceholders() in save_card_bubble_controller_impl.cc). |
| + // If this is fixed and this test starts to fail, please update the |
| + // "Caveats" section of the SaveCardBubbleControllerImpl::SetLegalMessage() |
| + // header file comment. |
| + EXPECT_EQ(base::ASCIIToUTF16("$$$"), controller()->GetLegalMessage()); |
| +} |
| + |
| +TEST_F(SaveCardBubbleControllerImplTest, DollarAndParenthesis) { |
| + // "${" does not expand correctly (see comment in |
| + // ReplaceTemplatePlaceholders() in save_card_bubble_controller_impl.cc). |
| + // If this is fixed and this test starts to fail, please update the |
| + // "Caveats" section of the SaveCardBubbleControllerImpl::SetLegalMessage() |
| + // header file comment. |
| + SetLegalMessageExpectFailure( |
| + "[ {" |
| + " \"template\": \"${0}\"," |
| + " \"template_parameter\": [ {" |
| + " \"display_text\": \"bears\"," |
| + " \"url\": \"http://www.example.com\"" |
| + " } ]" |
| + "} ]"); |
| +} |
| + |
| +TEST_F(SaveCardBubbleControllerImplTest, MultipleParameters) { |
| + SetLegalMessageExpectSuccess( |
| + "[ {" |
| + " \"template\": \"Panda {0} like {2} eat {1}.\"," |
| + " \"template_parameter\": [ {" |
| + " \"display_text\": \"bears\"," |
| + " \"url\": \"http://www.example.com/0\"" |
| + " }, {" |
| + " \"display_text\": \"bamboo\"," |
| + " \"url\": \"http://www.example.com/1\"" |
| + " }, {" |
| + " \"display_text\": \"to\"," |
| + " \"url\": \"http://www.example.com/2\"" |
| + " } ]" |
| + "} ]"); |
| + EXPECT_EQ(base::ASCIIToUTF16("Panda bears like to eat bamboo."), |
| + controller()->GetLegalMessage()); |
| + |
| + std::vector<gfx::Range> expected_ranges; |
| + expected_ranges.push_back(gfx::Range(6, 11)); |
| + expected_ranges.push_back(gfx::Range(24, 30)); |
| + expected_ranges.push_back(gfx::Range(17, 19)); |
| + EXPECT_EQ(expected_ranges, controller()->GetLegalMessageLinkRanges()); |
| + |
| + std::vector<std::string> expected_urls; |
| + expected_urls.push_back("http://www.example.com/0"); |
| + expected_urls.push_back("http://www.example.com/1"); |
| + expected_urls.push_back("http://www.example.com/2"); |
| + EXPECT_EQ(expected_urls, controller()->GetLegalMessageLinkUrlsForTesting()); |
| +} |
| + |
| +TEST_F(SaveCardBubbleControllerImplTest, MultipleLineElements) { |
| + SetLegalMessageExpectSuccess( |
| + "[ {" |
| + " \"template\": \"Panda {0}\"," |
| + " \"template_parameter\": [ {" |
| + " \"display_text\": \"bears\"," |
| + " \"url\": \"http://www.example.com/line_0_param_0\"" |
| + " } ]" |
| + "}, {" |
| + " \"template\": \"like {1} eat {0}.\"," |
| + " \"template_parameter\": [ {" |
| + " \"display_text\": \"bamboo\"," |
| + " \"url\": \"http://www.example.com/line_1_param_0\"" |
| + " }, {" |
| + " \"display_text\": \"to\"," |
| + " \"url\": \"http://www.example.com/line_1_param_1\"" |
| + " } ]" |
| + "}, {" |
| + " \"template\": \"The {0}.\"," |
| + " \"template_parameter\": [ {" |
| + " \"display_text\": \"end\"," |
| + " \"url\": \"http://www.example.com/line_2_param_0\"" |
| + " } ]" |
| + "} ]"); |
| + EXPECT_EQ(base::ASCIIToUTF16("Panda bears\nlike to eat bamboo.\nThe end."), |
| + controller()->GetLegalMessage()); |
| + |
| + std::vector<gfx::Range> expected_ranges; |
| + expected_ranges.push_back(gfx::Range(6, 11)); |
| + expected_ranges.push_back(gfx::Range(24, 30)); |
| + expected_ranges.push_back(gfx::Range(17, 19)); |
| + expected_ranges.push_back(gfx::Range(36, 39)); |
| + EXPECT_EQ(expected_ranges, controller()->GetLegalMessageLinkRanges()); |
| + |
| + std::vector<std::string> expected_urls; |
| + expected_urls.push_back("http://www.example.com/line_0_param_0"); |
| + expected_urls.push_back("http://www.example.com/line_1_param_0"); |
| + expected_urls.push_back("http://www.example.com/line_1_param_1"); |
| + expected_urls.push_back("http://www.example.com/line_2_param_0"); |
| + EXPECT_EQ(expected_urls, controller()->GetLegalMessageLinkUrlsForTesting()); |
| +} |
| + |
| +TEST_F(SaveCardBubbleControllerImplTest, EmbeddedNewlines) { |
| + SetLegalMessageExpectSuccess( |
| + "[ {" |
| + " \"template\": \"Panda {0}\nlike {2} eat {1}.\nThe {3}.\"," |
| + " \"template_parameter\": [ {" |
| + " \"display_text\": \"bears\"," |
| + " \"url\": \"http://www.example.com/0\"" |
| + " }, {" |
| + " \"display_text\": \"bamboo\"," |
| + " \"url\": \"http://www.example.com/1\"" |
| + " }, {" |
| + " \"display_text\": \"to\"," |
| + " \"url\": \"http://www.example.com/2\"" |
| + " }, {" |
| + " \"display_text\": \"end\"," |
| + " \"url\": \"http://www.example.com/3\"" |
| + " } ]" |
| + "} ]"); |
| + EXPECT_EQ(base::ASCIIToUTF16("Panda bears\nlike to eat bamboo.\nThe end."), |
| + controller()->GetLegalMessage()); |
| + |
| + std::vector<gfx::Range> expected_ranges; |
| + expected_ranges.push_back(gfx::Range(6, 11)); |
| + expected_ranges.push_back(gfx::Range(24, 30)); |
| + expected_ranges.push_back(gfx::Range(17, 19)); |
| + expected_ranges.push_back(gfx::Range(36, 39)); |
| + EXPECT_EQ(expected_ranges, controller()->GetLegalMessageLinkRanges()); |
| + |
| + std::vector<std::string> expected_urls; |
| + expected_urls.push_back("http://www.example.com/0"); |
| + expected_urls.push_back("http://www.example.com/1"); |
| + expected_urls.push_back("http://www.example.com/2"); |
| + expected_urls.push_back("http://www.example.com/3"); |
| + EXPECT_EQ(expected_urls, controller()->GetLegalMessageLinkUrlsForTesting()); |
| +} |
| + |
| +TEST_F(SaveCardBubbleControllerImplTest, MaximumPlaceholders) { |
| + SetLegalMessageExpectSuccess( |
| + "[ {" |
| + " \"template\": \"a{0} b{1} c{2} d{3} e{4} f{5} g{6}\"," |
| + " \"template_parameter\": [ {" |
| + " \"display_text\": \"A\"," |
| + " \"url\": \"http://www.example.com/0\"" |
| + " }, {" |
| + " \"display_text\": \"B\"," |
| + " \"url\": \"http://www.example.com/1\"" |
| + " }, {" |
| + " \"display_text\": \"C\"," |
| + " \"url\": \"http://www.example.com/2\"" |
| + " }, {" |
| + " \"display_text\": \"D\"," |
| + " \"url\": \"http://www.example.com/3\"" |
| + " }, {" |
| + " \"display_text\": \"E\"," |
| + " \"url\": \"http://www.example.com/4\"" |
| + " }, {" |
| + " \"display_text\": \"F\"," |
| + " \"url\": \"http://www.example.com/5\"" |
| + " }, {" |
| + " \"display_text\": \"G\"," |
| + " \"url\": \"http://www.example.com/6\"" |
| + " } ]" |
| + "} ]"); |
| + EXPECT_EQ(base::ASCIIToUTF16("aA bB cC dD eE fF gG"), |
| + controller()->GetLegalMessage()); |
| + |
| + std::vector<gfx::Range> expected_ranges; |
| + expected_ranges.push_back(gfx::Range(1, 2)); |
| + expected_ranges.push_back(gfx::Range(4, 5)); |
| + expected_ranges.push_back(gfx::Range(7, 8)); |
| + expected_ranges.push_back(gfx::Range(10, 11)); |
| + expected_ranges.push_back(gfx::Range(13, 14)); |
| + expected_ranges.push_back(gfx::Range(16, 17)); |
| + expected_ranges.push_back(gfx::Range(19, 20)); |
|
Evan Stade
2015/11/11 23:53:54
struct {
Range range;
URL url;
} test_cases[]
|
| + EXPECT_EQ(expected_ranges, controller()->GetLegalMessageLinkRanges()); |
| + |
| + std::vector<std::string> expected_urls; |
| + expected_urls.push_back("http://www.example.com/0"); |
| + expected_urls.push_back("http://www.example.com/1"); |
| + expected_urls.push_back("http://www.example.com/2"); |
| + expected_urls.push_back("http://www.example.com/3"); |
| + expected_urls.push_back("http://www.example.com/4"); |
| + expected_urls.push_back("http://www.example.com/5"); |
| + expected_urls.push_back("http://www.example.com/6"); |
| + EXPECT_EQ(expected_urls, controller()->GetLegalMessageLinkUrlsForTesting()); |
| +} |
| + |
| +} // namespace autofill |