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..f2a62748dc7978faceb17d4a05a1d23a09d9ad8f |
--- /dev/null |
+++ b/chrome/browser/ui/autofill/save_card_bubble_controller_impl_unittest.cc |
@@ -0,0 +1,349 @@ |
+// 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 "base/values.h" |
+#include "chrome/test/base/chrome_render_view_host_test_harness.h" |
+#include "testing/gtest/include/gtest/gtest.h" |
+ |
+namespace autofill { |
+ |
+typedef SaveCardBubbleController::LegalMessageLine LegalMessageLine; |
+typedef SaveCardBubbleController::LegalMessageLines LegalMessageLines; |
+ |
+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)); |
+ } |
+ |
+ // Returns true if lines are the same. |
+ bool CompareLegalMessageLines(const LegalMessageLine& a, |
+ const LegalMessageLine& b) { |
+ if (a.text != b.text) |
+ return false; |
+ if (a.links.size() != b.links.size()) |
+ return false; |
+ for (size_t i = 0; i < a.links.size(); ++i) { |
+ if (a.links[i].range != b.links[i].range) |
+ return false; |
+ if (a.links[i].url != b.links[i].url) |
+ return false; |
+ } |
+ return true; |
+ } |
+ |
+ // Returns true if messages are the same. |
+ bool CompareLegalMessages(const LegalMessageLines& a, |
+ const LegalMessageLines& b) { |
+ if (a.size() != b.size()) |
+ return false; |
+ for (size_t i = 0; i < a.size(); ++i) { |
+ if (!CompareLegalMessageLines(a[i], b[i])) |
+ return false; |
+ } |
+ return true; |
+ } |
+ |
+ 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.\"" |
+ "} ]"); |
+ |
+ LegalMessageLine expected_line; |
+ expected_line.text = base::ASCIIToUTF16("This is the entire message."); |
+ LegalMessageLines expected = {expected_line}; |
+ EXPECT_TRUE( |
+ CompareLegalMessages(expected, controller()->GetLegalMessageLines())); |
+} |
+ |
+TEST_F(SaveCardBubbleControllerImplTest, SingleParameter) { |
+ SetLegalMessageExpectSuccess( |
+ "[ {" |
+ " \"template\": \"Panda {0}.\"," |
+ " \"template_parameter\": [ {" |
+ " \"display_text\": \"bears are fuzzy\"," |
+ " \"url\": \"http://www.example.com\"" |
+ " } ]" |
+ "} ]"); |
+ |
+ LegalMessageLine expected_line; |
+ expected_line.text = base::ASCIIToUTF16("Panda bears are fuzzy."); |
+ expected_line.links = { |
+ {{6, 21}, GURL("http://www.example.com")}, |
+ }; |
+ LegalMessageLines expected = {expected_line}; |
+ EXPECT_TRUE( |
+ CompareLegalMessages(expected, controller()->GetLegalMessageLines())); |
+} |
+ |
+TEST_F(SaveCardBubbleControllerImplTest, MissingUrl) { |
+ SetLegalMessageExpectFailure( |
+ "[ {" |
+ " \"template\": \"Panda {0}.\"," |
+ " \"template_parameter\": [ {" |
+ " \"display_text\": \"bear\"" |
+ " } ]" |
+ "} ]"); |
+ EXPECT_TRUE(CompareLegalMessages(LegalMessageLines(), |
+ controller()->GetLegalMessageLines())); |
+} |
+ |
+TEST_F(SaveCardBubbleControllerImplTest, MissingDisplayText) { |
+ SetLegalMessageExpectFailure( |
+ "[ {" |
+ " \"template\": \"Panda {0}.\"," |
+ " \"template_parameter\": [ {" |
+ " \"url\": \"http://www.example.com\"" |
+ " } ]" |
+ "} ]"); |
+ EXPECT_TRUE(CompareLegalMessages(LegalMessageLines(), |
+ controller()->GetLegalMessageLines())); |
+} |
+ |
+TEST_F(SaveCardBubbleControllerImplTest, EscapeCharacters) { |
+ SetLegalMessageExpectSuccess( |
+ "[ {" |
+ " \"template\": \"Panda '{'{0}'}' '{1}' don't $1.\"," |
+ " \"template_parameter\": [ {" |
+ " \"display_text\": \"bears\"," |
+ " \"url\": \"http://www.example.com\"" |
+ " } ]" |
+ "} ]"); |
+ |
+ LegalMessageLine expected_line; |
+ expected_line.text = base::ASCIIToUTF16("Panda {bears} {1} don't $1."); |
+ expected_line.links = { |
+ {{7, 12}, GURL("http://www.example.com")}, |
+ }; |
+ LegalMessageLines expected = {expected_line}; |
+ EXPECT_TRUE( |
+ CompareLegalMessages(expected, controller()->GetLegalMessageLines())); |
+} |
+ |
+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. |
+ LegalMessageLine expected_line; |
+ expected_line.text = base::ASCIIToUTF16("$$$"); |
+ |
+ LegalMessageLines expected = {expected_line}; |
+ EXPECT_TRUE( |
+ CompareLegalMessages(expected, controller()->GetLegalMessageLines())); |
+} |
+ |
+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\"" |
+ " } ]" |
+ "} ]"); |
+ |
+ LegalMessageLine expected_line; |
+ expected_line.text = base::ASCIIToUTF16("Panda bears like to eat bamboo."); |
+ expected_line.links = { |
+ {{6, 11}, GURL("http://www.example.com/0")}, |
+ {{24, 30}, GURL("http://www.example.com/1")}, |
+ {{17, 19}, GURL("http://www.example.com/2")}, |
+ }; |
+ LegalMessageLines expected = {expected_line}; |
+ EXPECT_TRUE( |
+ CompareLegalMessages(expected, controller()->GetLegalMessageLines())); |
+} |
+ |
+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\"" |
+ " } ]" |
+ "} ]"); |
+ |
+ // Line 0. |
+ LegalMessageLine expected_line_0; |
+ expected_line_0.text = base::ASCIIToUTF16("Panda bears"); |
+ expected_line_0.links = { |
+ {{6, 11}, GURL("http://www.example.com/line_0_param_0")}, |
+ }; |
+ |
+ // Line 1. |
+ LegalMessageLine expected_line_1; |
+ expected_line_1.text = base::ASCIIToUTF16("like to eat bamboo."); |
+ expected_line_1.links = { |
+ {{12, 18}, GURL("http://www.example.com/line_1_param_0")}, |
+ {{5, 7}, GURL("http://www.example.com/line_1_param_1")}, |
+ }; |
+ |
+ // Line 2. |
+ LegalMessageLine expected_line_2; |
+ expected_line_2.text = base::ASCIIToUTF16("The end."); |
+ expected_line_2.links = { |
+ {{4, 7}, GURL("http://www.example.com/line_2_param_0")}, |
+ }; |
+ |
+ LegalMessageLines expected = {expected_line_0, expected_line_1, |
+ expected_line_2}; |
+ EXPECT_TRUE( |
+ CompareLegalMessages(expected, controller()->GetLegalMessageLines())); |
+} |
+ |
+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\"" |
+ " } ]" |
+ "} ]"); |
+ |
+ LegalMessageLine expected_line; |
+ expected_line.text = |
+ base::ASCIIToUTF16("Panda bears\nlike to eat bamboo.\nThe end."); |
+ expected_line.links = { |
+ {{6, 11}, GURL("http://www.example.com/0")}, |
+ {{24, 30}, GURL("http://www.example.com/1")}, |
+ {{17, 19}, GURL("http://www.example.com/2")}, |
+ {{36, 39}, GURL("http://www.example.com/3")}, |
+ }; |
+ LegalMessageLines expected = {expected_line}; |
+ EXPECT_TRUE( |
+ CompareLegalMessages(expected, controller()->GetLegalMessageLines())); |
+} |
+ |
+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\"" |
+ " } ]" |
+ "} ]"); |
+ |
+ LegalMessageLine expected_line; |
+ expected_line.text = base::ASCIIToUTF16("aA bB cC dD eE fF gG"); |
+ expected_line.links = { |
+ {{1, 2}, GURL("http://www.example.com/0")}, |
+ {{4, 5}, GURL("http://www.example.com/1")}, |
+ {{7, 8}, GURL("http://www.example.com/2")}, |
+ {{10, 11}, GURL("http://www.example.com/3")}, |
+ {{13, 14}, GURL("http://www.example.com/4")}, |
+ {{16, 17}, GURL("http://www.example.com/5")}, |
+ {{19, 20}, GURL("http://www.example.com/6")}, |
+ }; |
+ LegalMessageLines expected = {expected_line}; |
+ EXPECT_TRUE( |
+ CompareLegalMessages(expected, controller()->GetLegalMessageLines())); |
+} |
+ |
+} // namespace autofill |