1eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch// Copyright 2013 The Chromium Authors. All rights reserved.
25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file.
45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/memory/scoped_ptr.h"
65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/memory/scoped_vector.h"
7868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#include "base/strings/string16.h"
8868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#include "base/strings/utf_string_conversions.h"
9eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#include "components/autofill/core/browser/address_field.h"
10eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#include "components/autofill/core/browser/autofill_field.h"
11eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#include "components/autofill/core/browser/autofill_scanner.h"
127d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)#include "components/autofill/core/common/form_field_data.h"
135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "testing/gtest/include/gtest/gtest.h"
145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
155d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)using base::ASCIIToUTF16;
165d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
17c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)namespace autofill {
18c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class AddressFieldTest : public testing::Test {
205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public:
215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  AddressFieldTest() {}
225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) protected:
241320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  ScopedVector<AutofillField> list_;
255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  scoped_ptr<AddressField> field_;
263240926e260ce088908e02ac07a6cf7b0c0cbf44Ben Murdoch  ServerFieldTypeMap field_type_map_;
275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Downcast for tests.
295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  static AddressField* Parse(AutofillScanner* scanner) {
302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    return static_cast<AddressField*>(AddressField::Parse(scanner));
315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private:
345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  DISALLOW_COPY_AND_ASSIGN(AddressFieldTest);
355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)};
365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(AddressFieldTest, Empty) {
385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  AutofillScanner scanner(list_.get());
395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  field_.reset(Parse(&scanner));
405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_EQ(static_cast<AddressField*>(NULL), field_.get());
415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(AddressFieldTest, NonParse) {
445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  list_.push_back(new AutofillField);
455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  AutofillScanner scanner(list_.get());
465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  field_.reset(Parse(&scanner));
475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_EQ(static_cast<AddressField*>(NULL), field_.get());
485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(AddressFieldTest, ParseOneLineAddress) {
515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  FormFieldData field;
525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  field.form_control_type = "text";
535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  field.label = ASCIIToUTF16("Address");
555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  field.name = ASCIIToUTF16("address");
565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  list_.push_back(new AutofillField(field, ASCIIToUTF16("addr1")));
575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  AutofillScanner scanner(list_.get());
595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  field_.reset(Parse(&scanner));
605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_NE(static_cast<AddressField*>(NULL), field_.get());
615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(field_->ClassifyField(&field_type_map_));
625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(
635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      field_type_map_.find(ASCIIToUTF16("addr1")) != field_type_map_.end());
645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(ADDRESS_HOME_LINE1, field_type_map_[ASCIIToUTF16("addr1")]);
655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(AddressFieldTest, ParseTwoLineAddress) {
685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  FormFieldData field;
695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  field.form_control_type = "text";
705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  field.label = ASCIIToUTF16("Address");
725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  field.name = ASCIIToUTF16("address");
735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  list_.push_back(new AutofillField(field, ASCIIToUTF16("addr1")));
745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
75c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  field.label = base::string16();
76c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  field.name = base::string16();
775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  list_.push_back(new AutofillField(field, ASCIIToUTF16("addr2")));
785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  AutofillScanner scanner(list_.get());
805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  field_.reset(Parse(&scanner));
815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_NE(static_cast<AddressField*>(NULL), field_.get());
825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(field_->ClassifyField(&field_type_map_));
835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(
845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      field_type_map_.find(ASCIIToUTF16("addr1")) != field_type_map_.end());
855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(ADDRESS_HOME_LINE1, field_type_map_[ASCIIToUTF16("addr1")]);
865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(
875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      field_type_map_.find(ASCIIToUTF16("addr2")) != field_type_map_.end());
885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(ADDRESS_HOME_LINE2, field_type_map_[ASCIIToUTF16("addr2")]);
895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(AddressFieldTest, ParseThreeLineAddress) {
925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  FormFieldData field;
935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  field.form_control_type = "text";
945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  field.label = ASCIIToUTF16("Address Line1");
965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  field.name = ASCIIToUTF16("Address1");
975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  list_.push_back(new AutofillField(field, ASCIIToUTF16("addr1")));
985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  field.label = ASCIIToUTF16("Address Line2");
1005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  field.name = ASCIIToUTF16("Address2");
1015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  list_.push_back(new AutofillField(field, ASCIIToUTF16("addr2")));
1025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  field.label = ASCIIToUTF16("Address Line3");
1045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  field.name = ASCIIToUTF16("Address3");
1055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  list_.push_back(new AutofillField(field, ASCIIToUTF16("addr3")));
1065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  AutofillScanner scanner(list_.get());
1085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  field_.reset(Parse(&scanner));
1095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_NE(static_cast<AddressField*>(NULL), field_.get());
1105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(field_->ClassifyField(&field_type_map_));
1115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(
1125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      field_type_map_.find(ASCIIToUTF16("addr1")) != field_type_map_.end());
1135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(ADDRESS_HOME_LINE1, field_type_map_[ASCIIToUTF16("addr1")]);
1145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(
1155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      field_type_map_.find(ASCIIToUTF16("addr2")) != field_type_map_.end());
1165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(ADDRESS_HOME_LINE2, field_type_map_[ASCIIToUTF16("addr2")]);
1175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(
1185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      field_type_map_.find(ASCIIToUTF16("addr3")) == field_type_map_.end());
1195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
1205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1214e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)TEST_F(AddressFieldTest, ParseStreetAddressFromTextArea) {
1224e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  FormFieldData field;
1234e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  field.form_control_type = "textarea";
1244e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)
1254e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  field.label = ASCIIToUTF16("Address");
1264e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  field.name = ASCIIToUTF16("address");
1274e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  list_.push_back(new AutofillField(field, ASCIIToUTF16("addr")));
1284e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)
1294e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  AutofillScanner scanner(list_.get());
1304e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  field_.reset(Parse(&scanner));
1314e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  ASSERT_NE(static_cast<AddressField*>(NULL), field_.get());
1324e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  ASSERT_TRUE(field_->ClassifyField(&field_type_map_));
1334e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  ASSERT_TRUE(
1344e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)      field_type_map_.find(ASCIIToUTF16("addr")) != field_type_map_.end());
135f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  EXPECT_EQ(ADDRESS_HOME_STREET_ADDRESS, field_type_map_[ASCIIToUTF16("addr")]);
1364e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)}
1374e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)
1385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(AddressFieldTest, ParseCity) {
1395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  FormFieldData field;
1405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  field.form_control_type = "text";
1415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  field.label = ASCIIToUTF16("City");
1435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  field.name = ASCIIToUTF16("city");
1445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  list_.push_back(new AutofillField(field, ASCIIToUTF16("city1")));
1455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  AutofillScanner scanner(list_.get());
1475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  field_.reset(Parse(&scanner));
1485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_NE(static_cast<AddressField*>(NULL), field_.get());
1495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(field_->ClassifyField(&field_type_map_));
1505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(
1515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      field_type_map_.find(ASCIIToUTF16("city1")) != field_type_map_.end());
1525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(ADDRESS_HOME_CITY, field_type_map_[ASCIIToUTF16("city1")]);
1535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
1545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(AddressFieldTest, ParseState) {
1565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  FormFieldData field;
1575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  field.form_control_type = "text";
1585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  field.label = ASCIIToUTF16("State");
1605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  field.name = ASCIIToUTF16("state");
1615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  list_.push_back(new AutofillField(field, ASCIIToUTF16("state1")));
1625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  AutofillScanner scanner(list_.get());
1645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  field_.reset(Parse(&scanner));
1655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_NE(static_cast<AddressField*>(NULL), field_.get());
1665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(field_->ClassifyField(&field_type_map_));
1675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(
1685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      field_type_map_.find(ASCIIToUTF16("state1")) != field_type_map_.end());
1695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(ADDRESS_HOME_STATE, field_type_map_[ASCIIToUTF16("state1")]);
1705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
1715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(AddressFieldTest, ParseZip) {
1735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  FormFieldData field;
1745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  field.form_control_type = "text";
1755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  field.label = ASCIIToUTF16("Zip");
1775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  field.name = ASCIIToUTF16("zip");
1785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  list_.push_back(new AutofillField(field, ASCIIToUTF16("zip1")));
1795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  AutofillScanner scanner(list_.get());
1815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  field_.reset(Parse(&scanner));
1825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_NE(static_cast<AddressField*>(NULL), field_.get());
1835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(field_->ClassifyField(&field_type_map_));
1845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(
1855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      field_type_map_.find(ASCIIToUTF16("zip1")) != field_type_map_.end());
1865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(ADDRESS_HOME_ZIP, field_type_map_[ASCIIToUTF16("zip1")]);
1875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
1885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(AddressFieldTest, ParseStateAndZipOneLabel) {
1905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  FormFieldData field;
1915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  field.form_control_type = "text";
1925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  field.label = ASCIIToUTF16("State/Province, Zip/Postal Code");
1945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  field.name = ASCIIToUTF16("state");
1955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  list_.push_back(new AutofillField(field, ASCIIToUTF16("state")));
1965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  field.label = ASCIIToUTF16("State/Province, Zip/Postal Code");
1985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  field.name = ASCIIToUTF16("zip");
1995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  list_.push_back(new AutofillField(field, ASCIIToUTF16("zip")));
2005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  AutofillScanner scanner(list_.get());
2025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  field_.reset(Parse(&scanner));
2035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_NE(static_cast<AddressField*>(NULL), field_.get());
2045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(field_->ClassifyField(&field_type_map_));
2055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(
2065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      field_type_map_.find(ASCIIToUTF16("state")) != field_type_map_.end());
2075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(ADDRESS_HOME_STATE, field_type_map_[ASCIIToUTF16("state")]);
2085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(
2095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      field_type_map_.find(ASCIIToUTF16("zip")) != field_type_map_.end());
2105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(ADDRESS_HOME_ZIP, field_type_map_[ASCIIToUTF16("zip")]);
2115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
2125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(AddressFieldTest, ParseCountry) {
2145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  FormFieldData field;
2155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  field.form_control_type = "text";
2165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  field.label = ASCIIToUTF16("Country");
2185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  field.name = ASCIIToUTF16("country");
2195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  list_.push_back(new AutofillField(field, ASCIIToUTF16("country1")));
2205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  AutofillScanner scanner(list_.get());
2225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  field_.reset(Parse(&scanner));
2235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_NE(static_cast<AddressField*>(NULL), field_.get());
2245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(field_->ClassifyField(&field_type_map_));
2255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(
2265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      field_type_map_.find(ASCIIToUTF16("country1")) != field_type_map_.end());
2275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(ADDRESS_HOME_COUNTRY, field_type_map_[ASCIIToUTF16("country1")]);
2285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
2295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(AddressFieldTest, ParseTwoLineAddressMissingLabel) {
2315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  FormFieldData field;
2325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  field.form_control_type = "text";
2335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  field.label = ASCIIToUTF16("Address");
2355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  field.name = ASCIIToUTF16("address");
2365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  list_.push_back(new AutofillField(field, ASCIIToUTF16("addr1")));
2375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
238c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  field.label = base::string16();
2395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  field.name = ASCIIToUTF16("bogus");
2405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  list_.push_back(new AutofillField(field, ASCIIToUTF16("addr2")));
2415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  AutofillScanner scanner(list_.get());
2435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  field_.reset(Parse(&scanner));
2445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_NE(static_cast<AddressField*>(NULL), field_.get());
2455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(field_->ClassifyField(&field_type_map_));
2465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(
2475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      field_type_map_.find(ASCIIToUTF16("addr1")) != field_type_map_.end());
2485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(ADDRESS_HOME_LINE1, field_type_map_[ASCIIToUTF16("addr1")]);
2495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(
2505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      field_type_map_.find(ASCIIToUTF16("addr2")) != field_type_map_.end());
2515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(ADDRESS_HOME_LINE2, field_type_map_[ASCIIToUTF16("addr2")]);
2525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
2535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(AddressFieldTest, ParseCompany) {
2555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  FormFieldData field;
2565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  field.form_control_type = "text";
2575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  field.label = ASCIIToUTF16("Company");
2595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  field.name = ASCIIToUTF16("company");
2605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  list_.push_back(new AutofillField(field, ASCIIToUTF16("company1")));
2615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  AutofillScanner scanner(list_.get());
2635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  field_.reset(Parse(&scanner));
2645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_NE(static_cast<AddressField*>(NULL), field_.get());
2655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(field_->ClassifyField(&field_type_map_));
2665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(
2675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      field_type_map_.find(ASCIIToUTF16("company1")) != field_type_map_.end());
2685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(COMPANY_NAME, field_type_map_[ASCIIToUTF16("company1")]);
2695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
270c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
271c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)}  // namespace autofill
272