credit_card_field_unittest.cc revision 1320f92c476a1ad9d19dba2a48c72b75566198e9
178901d17b47ef1f8d6d0a89eaf37f9523ba1de85Ben Murdoch// Copyright 2013 The Chromium Authors. All rights reserved. 278901d17b47ef1f8d6d0a89eaf37f9523ba1de85Ben Murdoch// Use of this source code is governed by a BSD-style license that can be 378901d17b47ef1f8d6d0a89eaf37f9523ba1de85Ben Murdoch// found in the LICENSE file. 478901d17b47ef1f8d6d0a89eaf37f9523ba1de85Ben Murdoch 578901d17b47ef1f8d6d0a89eaf37f9523ba1de85Ben Murdoch#include "base/memory/scoped_ptr.h" 678901d17b47ef1f8d6d0a89eaf37f9523ba1de85Ben Murdoch#include "base/memory/scoped_vector.h" 778901d17b47ef1f8d6d0a89eaf37f9523ba1de85Ben Murdoch#include "base/strings/utf_string_conversions.h" 878901d17b47ef1f8d6d0a89eaf37f9523ba1de85Ben Murdoch#include "components/autofill/core/browser/autofill_field.h" 978901d17b47ef1f8d6d0a89eaf37f9523ba1de85Ben Murdoch#include "components/autofill/core/browser/autofill_scanner.h" 1078901d17b47ef1f8d6d0a89eaf37f9523ba1de85Ben Murdoch#include "components/autofill/core/browser/credit_card_field.h" 1178901d17b47ef1f8d6d0a89eaf37f9523ba1de85Ben Murdoch#include "components/autofill/core/common/form_field_data.h" 1278901d17b47ef1f8d6d0a89eaf37f9523ba1de85Ben Murdoch#include "testing/gtest/include/gtest/gtest.h" 1378901d17b47ef1f8d6d0a89eaf37f9523ba1de85Ben Murdoch 1478901d17b47ef1f8d6d0a89eaf37f9523ba1de85Ben Murdochusing base::ASCIIToUTF16; 1578901d17b47ef1f8d6d0a89eaf37f9523ba1de85Ben Murdoch 1678901d17b47ef1f8d6d0a89eaf37f9523ba1de85Ben Murdochnamespace autofill { 1778901d17b47ef1f8d6d0a89eaf37f9523ba1de85Ben Murdoch 1878901d17b47ef1f8d6d0a89eaf37f9523ba1de85Ben Murdochclass CreditCardFieldTest : public testing::Test { 1978901d17b47ef1f8d6d0a89eaf37f9523ba1de85Ben Murdoch public: 2078901d17b47ef1f8d6d0a89eaf37f9523ba1de85Ben Murdoch CreditCardFieldTest() {} 2178901d17b47ef1f8d6d0a89eaf37f9523ba1de85Ben Murdoch virtual ~CreditCardFieldTest() {} 2278901d17b47ef1f8d6d0a89eaf37f9523ba1de85Ben Murdoch 2378901d17b47ef1f8d6d0a89eaf37f9523ba1de85Ben Murdoch protected: 2478901d17b47ef1f8d6d0a89eaf37f9523ba1de85Ben Murdoch ScopedVector<AutofillField> list_; 2578901d17b47ef1f8d6d0a89eaf37f9523ba1de85Ben Murdoch scoped_ptr<const CreditCardField> field_; 2678901d17b47ef1f8d6d0a89eaf37f9523ba1de85Ben Murdoch ServerFieldTypeMap field_type_map_; 2778901d17b47ef1f8d6d0a89eaf37f9523ba1de85Ben Murdoch 2878901d17b47ef1f8d6d0a89eaf37f9523ba1de85Ben Murdoch // Parses the contents of |list_| as a form, and stores the result into 2978901d17b47ef1f8d6d0a89eaf37f9523ba1de85Ben Murdoch // |field_|. 3078901d17b47ef1f8d6d0a89eaf37f9523ba1de85Ben Murdoch void Parse() { 3178901d17b47ef1f8d6d0a89eaf37f9523ba1de85Ben Murdoch AutofillScanner scanner(list_.get()); 3278901d17b47ef1f8d6d0a89eaf37f9523ba1de85Ben Murdoch field_.reset( 3378901d17b47ef1f8d6d0a89eaf37f9523ba1de85Ben Murdoch static_cast<const CreditCardField*>(CreditCardField::Parse(&scanner))); 3478901d17b47ef1f8d6d0a89eaf37f9523ba1de85Ben Murdoch } 3578901d17b47ef1f8d6d0a89eaf37f9523ba1de85Ben Murdoch 3678901d17b47ef1f8d6d0a89eaf37f9523ba1de85Ben Murdoch // Associates fields with their corresponding types, based on the previous 3778901d17b47ef1f8d6d0a89eaf37f9523ba1de85Ben Murdoch // call to Parse(). 3878901d17b47ef1f8d6d0a89eaf37f9523ba1de85Ben Murdoch bool ClassifyField() { 3978901d17b47ef1f8d6d0a89eaf37f9523ba1de85Ben Murdoch return field_->ClassifyField(&field_type_map_); 4078901d17b47ef1f8d6d0a89eaf37f9523ba1de85Ben Murdoch } 4178901d17b47ef1f8d6d0a89eaf37f9523ba1de85Ben Murdoch 4278901d17b47ef1f8d6d0a89eaf37f9523ba1de85Ben Murdoch private: 4378901d17b47ef1f8d6d0a89eaf37f9523ba1de85Ben Murdoch DISALLOW_COPY_AND_ASSIGN(CreditCardFieldTest); 4478901d17b47ef1f8d6d0a89eaf37f9523ba1de85Ben Murdoch}; 4578901d17b47ef1f8d6d0a89eaf37f9523ba1de85Ben Murdoch 4678901d17b47ef1f8d6d0a89eaf37f9523ba1de85Ben MurdochTEST_F(CreditCardFieldTest, Empty) { 4778901d17b47ef1f8d6d0a89eaf37f9523ba1de85Ben Murdoch Parse(); 4878901d17b47ef1f8d6d0a89eaf37f9523ba1de85Ben Murdoch ASSERT_EQ(static_cast<CreditCardField*>(NULL), field_.get()); 4978901d17b47ef1f8d6d0a89eaf37f9523ba1de85Ben Murdoch} 5078901d17b47ef1f8d6d0a89eaf37f9523ba1de85Ben Murdoch 5178901d17b47ef1f8d6d0a89eaf37f9523ba1de85Ben MurdochTEST_F(CreditCardFieldTest, NonParse) { 5278901d17b47ef1f8d6d0a89eaf37f9523ba1de85Ben Murdoch list_.push_back(new AutofillField); 5378901d17b47ef1f8d6d0a89eaf37f9523ba1de85Ben Murdoch Parse(); 5478901d17b47ef1f8d6d0a89eaf37f9523ba1de85Ben Murdoch ASSERT_EQ(static_cast<CreditCardField*>(NULL), field_.get()); 5578901d17b47ef1f8d6d0a89eaf37f9523ba1de85Ben Murdoch} 5678901d17b47ef1f8d6d0a89eaf37f9523ba1de85Ben Murdoch 5778901d17b47ef1f8d6d0a89eaf37f9523ba1de85Ben MurdochTEST_F(CreditCardFieldTest, ParseCreditCardNoNumber) { 5878901d17b47ef1f8d6d0a89eaf37f9523ba1de85Ben Murdoch FormFieldData field; 5978901d17b47ef1f8d6d0a89eaf37f9523ba1de85Ben Murdoch field.form_control_type = "text"; 6078901d17b47ef1f8d6d0a89eaf37f9523ba1de85Ben Murdoch 6178901d17b47ef1f8d6d0a89eaf37f9523ba1de85Ben Murdoch field.label = ASCIIToUTF16("Exp Month"); 6278901d17b47ef1f8d6d0a89eaf37f9523ba1de85Ben Murdoch field.name = ASCIIToUTF16("ccmonth"); 6378901d17b47ef1f8d6d0a89eaf37f9523ba1de85Ben Murdoch list_.push_back(new AutofillField(field, ASCIIToUTF16("month1"))); 6478901d17b47ef1f8d6d0a89eaf37f9523ba1de85Ben Murdoch 6578901d17b47ef1f8d6d0a89eaf37f9523ba1de85Ben Murdoch field.label = ASCIIToUTF16("Exp Year"); 6678901d17b47ef1f8d6d0a89eaf37f9523ba1de85Ben Murdoch field.name = ASCIIToUTF16("ccyear"); 6778901d17b47ef1f8d6d0a89eaf37f9523ba1de85Ben Murdoch list_.push_back(new AutofillField(field, ASCIIToUTF16("year2"))); 6878901d17b47ef1f8d6d0a89eaf37f9523ba1de85Ben Murdoch 6978901d17b47ef1f8d6d0a89eaf37f9523ba1de85Ben Murdoch Parse(); 7078901d17b47ef1f8d6d0a89eaf37f9523ba1de85Ben Murdoch ASSERT_EQ(static_cast<CreditCardField*>(NULL), field_.get()); 7178901d17b47ef1f8d6d0a89eaf37f9523ba1de85Ben Murdoch} 7278901d17b47ef1f8d6d0a89eaf37f9523ba1de85Ben Murdoch 7378901d17b47ef1f8d6d0a89eaf37f9523ba1de85Ben MurdochTEST_F(CreditCardFieldTest, ParseCreditCardNoDate) { 7478901d17b47ef1f8d6d0a89eaf37f9523ba1de85Ben Murdoch FormFieldData field; 7578901d17b47ef1f8d6d0a89eaf37f9523ba1de85Ben Murdoch field.form_control_type = "text"; 7678901d17b47ef1f8d6d0a89eaf37f9523ba1de85Ben Murdoch 7778901d17b47ef1f8d6d0a89eaf37f9523ba1de85Ben Murdoch field.label = ASCIIToUTF16("Card Number"); 7878901d17b47ef1f8d6d0a89eaf37f9523ba1de85Ben Murdoch field.name = ASCIIToUTF16("card_number"); 7978901d17b47ef1f8d6d0a89eaf37f9523ba1de85Ben Murdoch list_.push_back(new AutofillField(field, ASCIIToUTF16("number1"))); 8078901d17b47ef1f8d6d0a89eaf37f9523ba1de85Ben Murdoch 8178901d17b47ef1f8d6d0a89eaf37f9523ba1de85Ben Murdoch Parse(); 8278901d17b47ef1f8d6d0a89eaf37f9523ba1de85Ben Murdoch ASSERT_EQ(static_cast<CreditCardField*>(NULL), field_.get()); 8378901d17b47ef1f8d6d0a89eaf37f9523ba1de85Ben Murdoch} 8478901d17b47ef1f8d6d0a89eaf37f9523ba1de85Ben Murdoch 8578901d17b47ef1f8d6d0a89eaf37f9523ba1de85Ben MurdochTEST_F(CreditCardFieldTest, ParseMiniumCreditCard) { 8678901d17b47ef1f8d6d0a89eaf37f9523ba1de85Ben Murdoch FormFieldData field; 8778901d17b47ef1f8d6d0a89eaf37f9523ba1de85Ben Murdoch field.form_control_type = "text"; 8878901d17b47ef1f8d6d0a89eaf37f9523ba1de85Ben Murdoch 8978901d17b47ef1f8d6d0a89eaf37f9523ba1de85Ben Murdoch field.label = ASCIIToUTF16("Card Number"); 9078901d17b47ef1f8d6d0a89eaf37f9523ba1de85Ben Murdoch field.name = ASCIIToUTF16("card_number"); 9178901d17b47ef1f8d6d0a89eaf37f9523ba1de85Ben Murdoch list_.push_back(new AutofillField(field, ASCIIToUTF16("number1"))); 9278901d17b47ef1f8d6d0a89eaf37f9523ba1de85Ben Murdoch 9378901d17b47ef1f8d6d0a89eaf37f9523ba1de85Ben Murdoch field.label = ASCIIToUTF16("Exp Month"); 9478901d17b47ef1f8d6d0a89eaf37f9523ba1de85Ben Murdoch field.name = ASCIIToUTF16("ccmonth"); 9578901d17b47ef1f8d6d0a89eaf37f9523ba1de85Ben Murdoch list_.push_back(new AutofillField(field, ASCIIToUTF16("month2"))); 9678901d17b47ef1f8d6d0a89eaf37f9523ba1de85Ben Murdoch 9778901d17b47ef1f8d6d0a89eaf37f9523ba1de85Ben Murdoch field.label = ASCIIToUTF16("Exp Year"); 9878901d17b47ef1f8d6d0a89eaf37f9523ba1de85Ben Murdoch field.name = ASCIIToUTF16("ccyear"); 9978901d17b47ef1f8d6d0a89eaf37f9523ba1de85Ben Murdoch list_.push_back(new AutofillField(field, ASCIIToUTF16("year3"))); 10078901d17b47ef1f8d6d0a89eaf37f9523ba1de85Ben Murdoch 10178901d17b47ef1f8d6d0a89eaf37f9523ba1de85Ben Murdoch Parse(); 10278901d17b47ef1f8d6d0a89eaf37f9523ba1de85Ben Murdoch ASSERT_NE(static_cast<CreditCardField*>(NULL), field_.get()); 10378901d17b47ef1f8d6d0a89eaf37f9523ba1de85Ben Murdoch EXPECT_TRUE(ClassifyField()); 10478901d17b47ef1f8d6d0a89eaf37f9523ba1de85Ben Murdoch ASSERT_TRUE( 10578901d17b47ef1f8d6d0a89eaf37f9523ba1de85Ben Murdoch field_type_map_.find(ASCIIToUTF16("number1")) != field_type_map_.end()); 10678901d17b47ef1f8d6d0a89eaf37f9523ba1de85Ben Murdoch EXPECT_EQ(CREDIT_CARD_NUMBER, field_type_map_[ASCIIToUTF16("number1")]); 10778901d17b47ef1f8d6d0a89eaf37f9523ba1de85Ben Murdoch ASSERT_TRUE( 10878901d17b47ef1f8d6d0a89eaf37f9523ba1de85Ben Murdoch field_type_map_.find(ASCIIToUTF16("month2")) != field_type_map_.end()); 10978901d17b47ef1f8d6d0a89eaf37f9523ba1de85Ben Murdoch EXPECT_EQ(CREDIT_CARD_EXP_MONTH, field_type_map_[ASCIIToUTF16("month2")]); 11078901d17b47ef1f8d6d0a89eaf37f9523ba1de85Ben Murdoch ASSERT_TRUE( 11178901d17b47ef1f8d6d0a89eaf37f9523ba1de85Ben Murdoch field_type_map_.find(ASCIIToUTF16("year3")) != field_type_map_.end()); 11278901d17b47ef1f8d6d0a89eaf37f9523ba1de85Ben Murdoch EXPECT_EQ(CREDIT_CARD_EXP_4_DIGIT_YEAR, 11378901d17b47ef1f8d6d0a89eaf37f9523ba1de85Ben Murdoch field_type_map_[ASCIIToUTF16("year3")]); 11478901d17b47ef1f8d6d0a89eaf37f9523ba1de85Ben Murdoch} 11578901d17b47ef1f8d6d0a89eaf37f9523ba1de85Ben Murdoch 11678901d17b47ef1f8d6d0a89eaf37f9523ba1de85Ben MurdochTEST_F(CreditCardFieldTest, ParseFullCreditCard) { 11778901d17b47ef1f8d6d0a89eaf37f9523ba1de85Ben Murdoch FormFieldData field; 11878901d17b47ef1f8d6d0a89eaf37f9523ba1de85Ben Murdoch field.form_control_type = "text"; 11978901d17b47ef1f8d6d0a89eaf37f9523ba1de85Ben Murdoch 12078901d17b47ef1f8d6d0a89eaf37f9523ba1de85Ben Murdoch field.label = ASCIIToUTF16("Card Type"); 12178901d17b47ef1f8d6d0a89eaf37f9523ba1de85Ben Murdoch field.name = ASCIIToUTF16("card_type"); 12278901d17b47ef1f8d6d0a89eaf37f9523ba1de85Ben Murdoch list_.push_back(new AutofillField(field, ASCIIToUTF16("type"))); 12378901d17b47ef1f8d6d0a89eaf37f9523ba1de85Ben Murdoch 12478901d17b47ef1f8d6d0a89eaf37f9523ba1de85Ben Murdoch field.label = ASCIIToUTF16("Name on Card"); 12578901d17b47ef1f8d6d0a89eaf37f9523ba1de85Ben Murdoch field.name = ASCIIToUTF16("name_on_card"); 12678901d17b47ef1f8d6d0a89eaf37f9523ba1de85Ben Murdoch list_.push_back(new AutofillField(field, ASCIIToUTF16("name"))); 12778901d17b47ef1f8d6d0a89eaf37f9523ba1de85Ben Murdoch 12878901d17b47ef1f8d6d0a89eaf37f9523ba1de85Ben Murdoch field.label = ASCIIToUTF16("Card Number"); 12978901d17b47ef1f8d6d0a89eaf37f9523ba1de85Ben Murdoch field.name = ASCIIToUTF16("card_number"); 13078901d17b47ef1f8d6d0a89eaf37f9523ba1de85Ben Murdoch list_.push_back(new AutofillField(field, ASCIIToUTF16("number"))); 13178901d17b47ef1f8d6d0a89eaf37f9523ba1de85Ben Murdoch 13278901d17b47ef1f8d6d0a89eaf37f9523ba1de85Ben Murdoch field.label = ASCIIToUTF16("Exp Month"); 13378901d17b47ef1f8d6d0a89eaf37f9523ba1de85Ben Murdoch field.name = ASCIIToUTF16("ccmonth"); 13478901d17b47ef1f8d6d0a89eaf37f9523ba1de85Ben Murdoch list_.push_back(new AutofillField(field, ASCIIToUTF16("month"))); 13578901d17b47ef1f8d6d0a89eaf37f9523ba1de85Ben Murdoch 13678901d17b47ef1f8d6d0a89eaf37f9523ba1de85Ben Murdoch field.label = ASCIIToUTF16("Exp Year"); 13778901d17b47ef1f8d6d0a89eaf37f9523ba1de85Ben Murdoch field.name = ASCIIToUTF16("ccyear"); 13878901d17b47ef1f8d6d0a89eaf37f9523ba1de85Ben Murdoch list_.push_back(new AutofillField(field, ASCIIToUTF16("year"))); 13978901d17b47ef1f8d6d0a89eaf37f9523ba1de85Ben Murdoch 14078901d17b47ef1f8d6d0a89eaf37f9523ba1de85Ben Murdoch field.label = ASCIIToUTF16("Verification"); 14178901d17b47ef1f8d6d0a89eaf37f9523ba1de85Ben Murdoch field.name = ASCIIToUTF16("verification"); 14278901d17b47ef1f8d6d0a89eaf37f9523ba1de85Ben Murdoch list_.push_back(new AutofillField(field, ASCIIToUTF16("cvc"))); 14378901d17b47ef1f8d6d0a89eaf37f9523ba1de85Ben Murdoch 14478901d17b47ef1f8d6d0a89eaf37f9523ba1de85Ben Murdoch Parse(); 14578901d17b47ef1f8d6d0a89eaf37f9523ba1de85Ben Murdoch ASSERT_NE(static_cast<CreditCardField*>(NULL), field_.get()); 14678901d17b47ef1f8d6d0a89eaf37f9523ba1de85Ben Murdoch EXPECT_TRUE(ClassifyField()); 14778901d17b47ef1f8d6d0a89eaf37f9523ba1de85Ben Murdoch ASSERT_TRUE( 14878901d17b47ef1f8d6d0a89eaf37f9523ba1de85Ben Murdoch field_type_map_.find(ASCIIToUTF16("type")) != field_type_map_.end()); 14978901d17b47ef1f8d6d0a89eaf37f9523ba1de85Ben Murdoch EXPECT_EQ(CREDIT_CARD_TYPE, field_type_map_[ASCIIToUTF16("type")]); 15078901d17b47ef1f8d6d0a89eaf37f9523ba1de85Ben Murdoch ASSERT_TRUE( 15178901d17b47ef1f8d6d0a89eaf37f9523ba1de85Ben Murdoch field_type_map_.find(ASCIIToUTF16("name")) != field_type_map_.end()); 15278901d17b47ef1f8d6d0a89eaf37f9523ba1de85Ben Murdoch EXPECT_EQ(CREDIT_CARD_NAME, field_type_map_[ASCIIToUTF16("name")]); 15378901d17b47ef1f8d6d0a89eaf37f9523ba1de85Ben Murdoch ASSERT_TRUE( 15478901d17b47ef1f8d6d0a89eaf37f9523ba1de85Ben Murdoch field_type_map_.find(ASCIIToUTF16("number")) != field_type_map_.end()); 15578901d17b47ef1f8d6d0a89eaf37f9523ba1de85Ben Murdoch EXPECT_EQ(CREDIT_CARD_NUMBER, field_type_map_[ASCIIToUTF16("number")]); 15678901d17b47ef1f8d6d0a89eaf37f9523ba1de85Ben Murdoch ASSERT_TRUE( 15778901d17b47ef1f8d6d0a89eaf37f9523ba1de85Ben Murdoch field_type_map_.find(ASCIIToUTF16("month")) != field_type_map_.end()); 15878901d17b47ef1f8d6d0a89eaf37f9523ba1de85Ben Murdoch EXPECT_EQ(CREDIT_CARD_EXP_MONTH, field_type_map_[ASCIIToUTF16("month")]); 15978901d17b47ef1f8d6d0a89eaf37f9523ba1de85Ben Murdoch ASSERT_TRUE( 16078901d17b47ef1f8d6d0a89eaf37f9523ba1de85Ben Murdoch field_type_map_.find(ASCIIToUTF16("year")) != field_type_map_.end()); 16178901d17b47ef1f8d6d0a89eaf37f9523ba1de85Ben Murdoch EXPECT_EQ(CREDIT_CARD_EXP_4_DIGIT_YEAR, 16278901d17b47ef1f8d6d0a89eaf37f9523ba1de85Ben Murdoch field_type_map_[ASCIIToUTF16("year")]); 16378901d17b47ef1f8d6d0a89eaf37f9523ba1de85Ben Murdoch ASSERT_TRUE( 16478901d17b47ef1f8d6d0a89eaf37f9523ba1de85Ben Murdoch field_type_map_.find(ASCIIToUTF16("cvc")) != field_type_map_.end()); 16578901d17b47ef1f8d6d0a89eaf37f9523ba1de85Ben Murdoch EXPECT_EQ(CREDIT_CARD_VERIFICATION_CODE, 16678901d17b47ef1f8d6d0a89eaf37f9523ba1de85Ben Murdoch field_type_map_[ASCIIToUTF16("cvc")]); 16778901d17b47ef1f8d6d0a89eaf37f9523ba1de85Ben Murdoch} 16878901d17b47ef1f8d6d0a89eaf37f9523ba1de85Ben Murdoch 16978901d17b47ef1f8d6d0a89eaf37f9523ba1de85Ben MurdochTEST_F(CreditCardFieldTest, ParseExpMonthYear) { 17078901d17b47ef1f8d6d0a89eaf37f9523ba1de85Ben Murdoch FormFieldData field; 17178901d17b47ef1f8d6d0a89eaf37f9523ba1de85Ben Murdoch field.form_control_type = "text"; 17278901d17b47ef1f8d6d0a89eaf37f9523ba1de85Ben Murdoch 17378901d17b47ef1f8d6d0a89eaf37f9523ba1de85Ben Murdoch field.label = ASCIIToUTF16("Name on Card"); 17478901d17b47ef1f8d6d0a89eaf37f9523ba1de85Ben Murdoch field.name = ASCIIToUTF16("name_on_card"); 17578901d17b47ef1f8d6d0a89eaf37f9523ba1de85Ben Murdoch list_.push_back(new AutofillField(field, ASCIIToUTF16("name1"))); 17678901d17b47ef1f8d6d0a89eaf37f9523ba1de85Ben Murdoch 17778901d17b47ef1f8d6d0a89eaf37f9523ba1de85Ben Murdoch field.label = ASCIIToUTF16("Card Number"); 17878901d17b47ef1f8d6d0a89eaf37f9523ba1de85Ben Murdoch field.name = ASCIIToUTF16("card_number"); 17978901d17b47ef1f8d6d0a89eaf37f9523ba1de85Ben Murdoch list_.push_back(new AutofillField(field, ASCIIToUTF16("number2"))); 18078901d17b47ef1f8d6d0a89eaf37f9523ba1de85Ben Murdoch 18178901d17b47ef1f8d6d0a89eaf37f9523ba1de85Ben Murdoch field.label = ASCIIToUTF16("ExpDate Month / Year"); 18278901d17b47ef1f8d6d0a89eaf37f9523ba1de85Ben Murdoch field.name = ASCIIToUTF16("ExpDate"); 18378901d17b47ef1f8d6d0a89eaf37f9523ba1de85Ben Murdoch list_.push_back(new AutofillField(field, ASCIIToUTF16("month3"))); 18478901d17b47ef1f8d6d0a89eaf37f9523ba1de85Ben Murdoch 18578901d17b47ef1f8d6d0a89eaf37f9523ba1de85Ben Murdoch field.label = ASCIIToUTF16("ExpDate Month / Year"); 18678901d17b47ef1f8d6d0a89eaf37f9523ba1de85Ben Murdoch field.name = ASCIIToUTF16("ExpDate"); 18778901d17b47ef1f8d6d0a89eaf37f9523ba1de85Ben Murdoch list_.push_back(new AutofillField(field, ASCIIToUTF16("year4"))); 18878901d17b47ef1f8d6d0a89eaf37f9523ba1de85Ben Murdoch 18978901d17b47ef1f8d6d0a89eaf37f9523ba1de85Ben Murdoch Parse(); 19078901d17b47ef1f8d6d0a89eaf37f9523ba1de85Ben Murdoch ASSERT_NE(static_cast<CreditCardField*>(NULL), field_.get()); 19178901d17b47ef1f8d6d0a89eaf37f9523ba1de85Ben Murdoch EXPECT_TRUE(ClassifyField()); 19278901d17b47ef1f8d6d0a89eaf37f9523ba1de85Ben Murdoch ASSERT_TRUE( 19378901d17b47ef1f8d6d0a89eaf37f9523ba1de85Ben Murdoch field_type_map_.find(ASCIIToUTF16("name1")) != field_type_map_.end()); 19478901d17b47ef1f8d6d0a89eaf37f9523ba1de85Ben Murdoch EXPECT_EQ(CREDIT_CARD_NAME, field_type_map_[ASCIIToUTF16("name1")]); 19578901d17b47ef1f8d6d0a89eaf37f9523ba1de85Ben Murdoch ASSERT_TRUE( 19678901d17b47ef1f8d6d0a89eaf37f9523ba1de85Ben Murdoch field_type_map_.find(ASCIIToUTF16("number2")) != field_type_map_.end()); 19778901d17b47ef1f8d6d0a89eaf37f9523ba1de85Ben Murdoch EXPECT_EQ(CREDIT_CARD_NUMBER, field_type_map_[ASCIIToUTF16("number2")]); 19878901d17b47ef1f8d6d0a89eaf37f9523ba1de85Ben Murdoch ASSERT_TRUE( 19978901d17b47ef1f8d6d0a89eaf37f9523ba1de85Ben Murdoch field_type_map_.find(ASCIIToUTF16("month3")) != field_type_map_.end()); 20078901d17b47ef1f8d6d0a89eaf37f9523ba1de85Ben Murdoch EXPECT_EQ(CREDIT_CARD_EXP_MONTH, field_type_map_[ASCIIToUTF16("month3")]); 20178901d17b47ef1f8d6d0a89eaf37f9523ba1de85Ben Murdoch ASSERT_TRUE( 20278901d17b47ef1f8d6d0a89eaf37f9523ba1de85Ben Murdoch field_type_map_.find(ASCIIToUTF16("year4")) != field_type_map_.end()); 20378901d17b47ef1f8d6d0a89eaf37f9523ba1de85Ben Murdoch EXPECT_EQ(CREDIT_CARD_EXP_4_DIGIT_YEAR, 20478901d17b47ef1f8d6d0a89eaf37f9523ba1de85Ben Murdoch field_type_map_[ASCIIToUTF16("year4")]); 20578901d17b47ef1f8d6d0a89eaf37f9523ba1de85Ben Murdoch} 20678901d17b47ef1f8d6d0a89eaf37f9523ba1de85Ben Murdoch 20778901d17b47ef1f8d6d0a89eaf37f9523ba1de85Ben MurdochTEST_F(CreditCardFieldTest, ParseExpMonthYear2) { 20878901d17b47ef1f8d6d0a89eaf37f9523ba1de85Ben Murdoch FormFieldData field; 20978901d17b47ef1f8d6d0a89eaf37f9523ba1de85Ben Murdoch field.form_control_type = "text"; 21078901d17b47ef1f8d6d0a89eaf37f9523ba1de85Ben Murdoch 21178901d17b47ef1f8d6d0a89eaf37f9523ba1de85Ben Murdoch field.label = ASCIIToUTF16("Name on Card"); 21278901d17b47ef1f8d6d0a89eaf37f9523ba1de85Ben Murdoch field.name = ASCIIToUTF16("name_on_card"); 21378901d17b47ef1f8d6d0a89eaf37f9523ba1de85Ben Murdoch list_.push_back(new AutofillField(field, ASCIIToUTF16("name1"))); 21478901d17b47ef1f8d6d0a89eaf37f9523ba1de85Ben Murdoch 21578901d17b47ef1f8d6d0a89eaf37f9523ba1de85Ben Murdoch field.label = ASCIIToUTF16("Card Number"); 21678901d17b47ef1f8d6d0a89eaf37f9523ba1de85Ben Murdoch field.name = ASCIIToUTF16("card_number"); 21778901d17b47ef1f8d6d0a89eaf37f9523ba1de85Ben Murdoch list_.push_back(new AutofillField(field, ASCIIToUTF16("number2"))); 21878901d17b47ef1f8d6d0a89eaf37f9523ba1de85Ben Murdoch 21978901d17b47ef1f8d6d0a89eaf37f9523ba1de85Ben Murdoch field.label = ASCIIToUTF16("Expiration date Month / Year"); 22078901d17b47ef1f8d6d0a89eaf37f9523ba1de85Ben Murdoch field.name = ASCIIToUTF16("ExpDate"); 22178901d17b47ef1f8d6d0a89eaf37f9523ba1de85Ben Murdoch list_.push_back(new AutofillField(field, ASCIIToUTF16("month3"))); 22278901d17b47ef1f8d6d0a89eaf37f9523ba1de85Ben Murdoch 22378901d17b47ef1f8d6d0a89eaf37f9523ba1de85Ben Murdoch field.label = ASCIIToUTF16("Expiration date Month / Year"); 22478901d17b47ef1f8d6d0a89eaf37f9523ba1de85Ben Murdoch field.name = ASCIIToUTF16("ExpDate"); 22578901d17b47ef1f8d6d0a89eaf37f9523ba1de85Ben Murdoch list_.push_back(new AutofillField(field, ASCIIToUTF16("year4"))); 22678901d17b47ef1f8d6d0a89eaf37f9523ba1de85Ben Murdoch 22778901d17b47ef1f8d6d0a89eaf37f9523ba1de85Ben Murdoch Parse(); 22878901d17b47ef1f8d6d0a89eaf37f9523ba1de85Ben Murdoch ASSERT_NE(static_cast<CreditCardField*>(NULL), field_.get()); 22978901d17b47ef1f8d6d0a89eaf37f9523ba1de85Ben Murdoch EXPECT_TRUE(ClassifyField()); 23078901d17b47ef1f8d6d0a89eaf37f9523ba1de85Ben Murdoch ASSERT_TRUE( 23178901d17b47ef1f8d6d0a89eaf37f9523ba1de85Ben Murdoch field_type_map_.find(ASCIIToUTF16("name1")) != field_type_map_.end()); 23278901d17b47ef1f8d6d0a89eaf37f9523ba1de85Ben Murdoch EXPECT_EQ(CREDIT_CARD_NAME, field_type_map_[ASCIIToUTF16("name1")]); 23378901d17b47ef1f8d6d0a89eaf37f9523ba1de85Ben Murdoch ASSERT_TRUE( 23478901d17b47ef1f8d6d0a89eaf37f9523ba1de85Ben Murdoch field_type_map_.find(ASCIIToUTF16("number2")) != field_type_map_.end()); 23578901d17b47ef1f8d6d0a89eaf37f9523ba1de85Ben Murdoch EXPECT_EQ(CREDIT_CARD_NUMBER, field_type_map_[ASCIIToUTF16("number2")]); 23678901d17b47ef1f8d6d0a89eaf37f9523ba1de85Ben Murdoch ASSERT_TRUE( 23778901d17b47ef1f8d6d0a89eaf37f9523ba1de85Ben Murdoch field_type_map_.find(ASCIIToUTF16("month3")) != field_type_map_.end()); 23878901d17b47ef1f8d6d0a89eaf37f9523ba1de85Ben Murdoch EXPECT_EQ(CREDIT_CARD_EXP_MONTH, field_type_map_[ASCIIToUTF16("month3")]); 23978901d17b47ef1f8d6d0a89eaf37f9523ba1de85Ben Murdoch ASSERT_TRUE( 24078901d17b47ef1f8d6d0a89eaf37f9523ba1de85Ben Murdoch field_type_map_.find(ASCIIToUTF16("year4")) != field_type_map_.end()); 24178901d17b47ef1f8d6d0a89eaf37f9523ba1de85Ben Murdoch EXPECT_EQ(CREDIT_CARD_EXP_4_DIGIT_YEAR, 24278901d17b47ef1f8d6d0a89eaf37f9523ba1de85Ben Murdoch field_type_map_[ASCIIToUTF16("year4")]); 24378901d17b47ef1f8d6d0a89eaf37f9523ba1de85Ben Murdoch} 244 245TEST_F(CreditCardFieldTest, ParseExpField) { 246 FormFieldData field; 247 field.form_control_type = "text"; 248 249 field.label = ASCIIToUTF16("Name on Card"); 250 field.name = ASCIIToUTF16("name_on_card"); 251 list_.push_back(new AutofillField(field, ASCIIToUTF16("name1"))); 252 253 field.label = ASCIIToUTF16("Card Number"); 254 field.name = ASCIIToUTF16("card_number"); 255 list_.push_back(new AutofillField(field, ASCIIToUTF16("number2"))); 256 257 field.label = ASCIIToUTF16("Expiration Date (MM/YYYY)"); 258 field.name = ASCIIToUTF16("cc_exp"); 259 list_.push_back(new AutofillField(field, ASCIIToUTF16("exp3"))); 260 261 Parse(); 262 ASSERT_NE(static_cast<CreditCardField*>(NULL), field_.get()); 263 EXPECT_TRUE(ClassifyField()); 264 ASSERT_TRUE( 265 field_type_map_.find(ASCIIToUTF16("name1")) != field_type_map_.end()); 266 EXPECT_EQ(CREDIT_CARD_NAME, field_type_map_[ASCIIToUTF16("name1")]); 267 ASSERT_TRUE( 268 field_type_map_.find(ASCIIToUTF16("number2")) != field_type_map_.end()); 269 EXPECT_EQ(CREDIT_CARD_NUMBER, field_type_map_[ASCIIToUTF16("number2")]); 270 ASSERT_TRUE( 271 field_type_map_.find(ASCIIToUTF16("exp3")) != field_type_map_.end()); 272 EXPECT_EQ(CREDIT_CARD_EXP_DATE_4_DIGIT_YEAR, 273 field_type_map_[ASCIIToUTF16("exp3")]); 274} 275 276TEST_F(CreditCardFieldTest, ParseExpField2DigitYear) { 277 FormFieldData field; 278 field.form_control_type = "text"; 279 280 field.label = ASCIIToUTF16("Name on Card"); 281 field.name = ASCIIToUTF16("name_on_card"); 282 list_.push_back(new AutofillField(field, ASCIIToUTF16("name1"))); 283 284 field.label = ASCIIToUTF16("Card Number"); 285 field.name = ASCIIToUTF16("card_number"); 286 list_.push_back(new AutofillField(field, ASCIIToUTF16("number2"))); 287 288 field.label = ASCIIToUTF16("Expiration Date (MM/YY)"); 289 field.name = ASCIIToUTF16("cc_exp"); 290 list_.push_back(new AutofillField(field, ASCIIToUTF16("exp3"))); 291 292 Parse(); 293 ASSERT_NE(static_cast<CreditCardField*>(NULL), field_.get()); 294 EXPECT_TRUE(ClassifyField()); 295 ASSERT_TRUE( 296 field_type_map_.find(ASCIIToUTF16("name1")) != field_type_map_.end()); 297 EXPECT_EQ(CREDIT_CARD_NAME, field_type_map_[ASCIIToUTF16("name1")]); 298 ASSERT_TRUE( 299 field_type_map_.find(ASCIIToUTF16("number2")) != field_type_map_.end()); 300 EXPECT_EQ(CREDIT_CARD_NUMBER, field_type_map_[ASCIIToUTF16("number2")]); 301 ASSERT_TRUE( 302 field_type_map_.find(ASCIIToUTF16("exp3")) != field_type_map_.end()); 303 EXPECT_EQ(CREDIT_CARD_EXP_DATE_2_DIGIT_YEAR, 304 field_type_map_[ASCIIToUTF16("exp3")]); 305} 306 307TEST_F(CreditCardFieldTest, ParseCreditCardHolderNameWithCCFullName) { 308 FormFieldData field; 309 field.form_control_type = "text"; 310 311 field.label = ASCIIToUTF16("Name"); 312 field.name = ASCIIToUTF16("ccfullname"); 313 list_.push_back(new AutofillField(field, ASCIIToUTF16("name1"))); 314 315 Parse(); 316 ASSERT_NE(static_cast<CreditCardField*>(NULL), field_.get()); 317 EXPECT_TRUE(ClassifyField()); 318 ASSERT_TRUE( 319 field_type_map_.find(ASCIIToUTF16("name1")) != field_type_map_.end()); 320 EXPECT_EQ(CREDIT_CARD_NAME, field_type_map_[ASCIIToUTF16("name1")]); 321} 322 323// Verifies that <input type="month"> controls are able to be parsed correctly. 324TEST_F(CreditCardFieldTest, ParseMonthControl) { 325 FormFieldData field; 326 327 field.form_control_type = "text"; 328 field.label = ASCIIToUTF16("Card number:"); 329 field.name = ASCIIToUTF16("ccnumber"); 330 list_.push_back(new AutofillField(field, ASCIIToUTF16("number1"))); 331 332 field.form_control_type = "month"; 333 field.label = ASCIIToUTF16("Expiration date:"); 334 field.name = ASCIIToUTF16("ccexp"); 335 list_.push_back(new AutofillField(field, ASCIIToUTF16("date2"))); 336 337 Parse(); 338 ASSERT_NE(static_cast<CreditCardField*>(NULL), field_.get()); 339 EXPECT_TRUE(ClassifyField()); 340 ASSERT_TRUE( 341 field_type_map_.find(ASCIIToUTF16("number1")) != field_type_map_.end()); 342 EXPECT_EQ(CREDIT_CARD_NUMBER, 343 field_type_map_[ASCIIToUTF16("number1")]); 344 ASSERT_TRUE( 345 field_type_map_.find(ASCIIToUTF16("date2")) != field_type_map_.end()); 346 EXPECT_EQ(CREDIT_CARD_EXP_DATE_4_DIGIT_YEAR, 347 field_type_map_[ASCIIToUTF16("date2")]); 348} 349 350// Verify that heuristics <input name="ccyear" maxlength="2"/> considers 351// *maxlength* attribute while parsing 2 Digit expiration year. 352TEST_F(CreditCardFieldTest, ParseCreditCardExpYear_2DigitMaxLength) { 353 FormFieldData field; 354 field.form_control_type = "text"; 355 356 field.label = ASCIIToUTF16("Card Number"); 357 field.name = ASCIIToUTF16("card_number"); 358 list_.push_back(new AutofillField(field, ASCIIToUTF16("number"))); 359 360 field.label = ASCIIToUTF16("Expiration Date"); 361 field.name = ASCIIToUTF16("ccmonth"); 362 list_.push_back(new AutofillField(field, ASCIIToUTF16("month"))); 363 364 field.name = ASCIIToUTF16("ccyear"); 365 field.max_length = 2; 366 list_.push_back(new AutofillField(field, ASCIIToUTF16("year"))); 367 368 Parse(); 369 ASSERT_NE(static_cast<CreditCardField*>(NULL), field_.get()); 370 EXPECT_TRUE(ClassifyField()); 371 ASSERT_TRUE(field_type_map_.find(ASCIIToUTF16("number")) != 372 field_type_map_.end()); 373 EXPECT_EQ(CREDIT_CARD_NUMBER, field_type_map_[ASCIIToUTF16("number")]); 374 ASSERT_TRUE(field_type_map_.find(ASCIIToUTF16("month")) != 375 field_type_map_.end()); 376 EXPECT_EQ(CREDIT_CARD_EXP_MONTH, field_type_map_[ASCIIToUTF16("month")]); 377 ASSERT_TRUE(field_type_map_.find(ASCIIToUTF16("year")) != 378 field_type_map_.end()); 379 EXPECT_EQ(CREDIT_CARD_EXP_2_DIGIT_YEAR, 380 field_type_map_[ASCIIToUTF16("year")]); 381} 382 383TEST_F(CreditCardFieldTest, ParseCreditCardNumberWithSplit) { 384 FormFieldData field; 385 field.form_control_type = "text"; 386 387 field.label = ASCIIToUTF16("Card Number"); 388 field.name = ASCIIToUTF16("card_number_q1"); 389 field.max_length = 4; 390 list_.push_back(new AutofillField(field, ASCIIToUTF16("number1"))); 391 392 field.label = ASCIIToUTF16("Card Number"); 393 field.name = ASCIIToUTF16("card_number_q2"); 394 field.max_length = 4; 395 list_.push_back(new AutofillField(field, ASCIIToUTF16("number2"))); 396 397 field.label = ASCIIToUTF16("Card Number"); 398 field.name = ASCIIToUTF16("card_number_q3"); 399 field.max_length = 4; 400 list_.push_back(new AutofillField(field, ASCIIToUTF16("number3"))); 401 402 // For last credit card number input field it simply ignores the |max_length| 403 // attribute. So even having a very big number, does not conside it an invalid 404 // split for autofilling. 405 field.label = ASCIIToUTF16("Card Number"); 406 field.name = ASCIIToUTF16("card_number_q4"); 407 field.max_length = 20; 408 list_.push_back(new AutofillField(field, ASCIIToUTF16("number4"))); 409 410 field.label = ASCIIToUTF16("Exp Month"); 411 field.name = ASCIIToUTF16("ccmonth"); 412 list_.push_back(new AutofillField(field, ASCIIToUTF16("month5"))); 413 414 field.label = ASCIIToUTF16("Exp Year"); 415 field.name = ASCIIToUTF16("ccyear"); 416 list_.push_back(new AutofillField(field, ASCIIToUTF16("year6"))); 417 418 Parse(); 419 ASSERT_NE(static_cast<CreditCardField*>(NULL), field_.get()); 420 EXPECT_TRUE(ClassifyField()); 421 422 ASSERT_TRUE(field_type_map_.find(ASCIIToUTF16("number1")) != 423 field_type_map_.end()); 424 EXPECT_EQ(CREDIT_CARD_NUMBER, field_type_map_[ASCIIToUTF16("number1")]); 425 EXPECT_EQ(0U, list_[0]->credit_card_number_offset()); 426 427 ASSERT_TRUE(field_type_map_.find(ASCIIToUTF16("number2")) != 428 field_type_map_.end()); 429 EXPECT_EQ(CREDIT_CARD_NUMBER, field_type_map_[ASCIIToUTF16("number2")]); 430 EXPECT_EQ(4U, list_[1]->credit_card_number_offset()); 431 432 ASSERT_TRUE(field_type_map_.find(ASCIIToUTF16("number3")) != 433 field_type_map_.end()); 434 EXPECT_EQ(CREDIT_CARD_NUMBER, field_type_map_[ASCIIToUTF16("number3")]); 435 EXPECT_EQ(8U, list_[2]->credit_card_number_offset()); 436 437 ASSERT_TRUE(field_type_map_.find(ASCIIToUTF16("number4")) != 438 field_type_map_.end()); 439 EXPECT_EQ(CREDIT_CARD_NUMBER, field_type_map_[ASCIIToUTF16("number4")]); 440 EXPECT_EQ(12U, list_[3]->credit_card_number_offset()); 441 442 ASSERT_TRUE(field_type_map_.find(ASCIIToUTF16("month5")) != 443 field_type_map_.end()); 444 EXPECT_EQ(CREDIT_CARD_EXP_MONTH, field_type_map_[ASCIIToUTF16("month5")]); 445 ASSERT_TRUE(field_type_map_.find(ASCIIToUTF16("year6")) != 446 field_type_map_.end()); 447 EXPECT_EQ(CREDIT_CARD_EXP_4_DIGIT_YEAR, 448 field_type_map_[ASCIIToUTF16("year6")]); 449} 450 451TEST_F(CreditCardFieldTest, ParseCreditCardNumberWithInvalidSplit) { 452 FormFieldData field; 453 field.form_control_type = "text"; 454 455 field.label = ASCIIToUTF16("Name on Card"); 456 field.name = ASCIIToUTF16("name_on_card"); 457 list_.push_back(new AutofillField(field, ASCIIToUTF16("name1"))); 458 459 field.label = ASCIIToUTF16("Card Number"); 460 field.name = ASCIIToUTF16("card_number"); 461 list_.push_back(new AutofillField(field, ASCIIToUTF16("number2"))); 462 463 field.label = ASCIIToUTF16("Not Card Number"); 464 field.name = ASCIIToUTF16("not_card_number"); 465 list_.push_back(new AutofillField(field, ASCIIToUTF16("number3"))); 466 467 field.label = ASCIIToUTF16("Exp Month"); 468 field.name = ASCIIToUTF16("ccmonth"); 469 list_.push_back(new AutofillField(field, ASCIIToUTF16("month4"))); 470 471 field.label = ASCIIToUTF16("Exp Year"); 472 field.name = ASCIIToUTF16("ccyear"); 473 list_.push_back(new AutofillField(field, ASCIIToUTF16("year5"))); 474 475 Parse(); 476 ASSERT_NE(static_cast<CreditCardField*>(NULL), field_.get()); 477 EXPECT_TRUE(ClassifyField()); 478 479 ASSERT_TRUE(field_type_map_.find(ASCIIToUTF16("name1")) != 480 field_type_map_.end()); 481 EXPECT_EQ(CREDIT_CARD_NAME, field_type_map_[ASCIIToUTF16("name1")]); 482 ASSERT_TRUE(field_type_map_.find(ASCIIToUTF16("number2")) == 483 field_type_map_.end()); 484 ASSERT_TRUE(field_type_map_.find(ASCIIToUTF16("number3")) == 485 field_type_map_.end()); 486 ASSERT_TRUE(field_type_map_.find(ASCIIToUTF16("month4")) != 487 field_type_map_.end()); 488 EXPECT_EQ(CREDIT_CARD_EXP_MONTH, field_type_map_[ASCIIToUTF16("month4")]); 489 ASSERT_TRUE(field_type_map_.find(ASCIIToUTF16("year5")) != 490 field_type_map_.end()); 491 EXPECT_EQ(CREDIT_CARD_EXP_4_DIGIT_YEAR, 492 field_type_map_[ASCIIToUTF16("year5")]); 493} 494 495} // namespace autofill 496