blob: ce0ae48f9bbed5fd2b69ed7223341a493ae5f281 [file] [log] [blame]
// Copyright (c) 2010 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 "base/scoped_ptr.h"
#include "base/scoped_vector.h"
#include "base/utf_string_conversions.h"
#include "chrome/browser/autofill/phone_field.h"
#include "testing/gtest/include/gtest/gtest.h"
#include "webkit/glue/form_field.h"
namespace {
class PhoneFieldTest : public testing::Test {
public:
PhoneFieldTest() {}
protected:
ScopedVector<AutoFillField> list_;
scoped_ptr<PhoneField> field_;
FieldTypeMap field_type_map_;
std::vector<AutoFillField*>::const_iterator iter_;
private:
DISALLOW_COPY_AND_ASSIGN(PhoneFieldTest);
};
TEST_F(PhoneFieldTest, Empty) {
list_.push_back(NULL);
iter_ = list_.begin();
field_.reset(PhoneField::Parse(&iter_, false));
ASSERT_EQ(static_cast<PhoneField*>(NULL), field_.get());
}
TEST_F(PhoneFieldTest, NonParse) {
list_.push_back(new AutoFillField);
list_.push_back(NULL);
iter_ = list_.begin();
field_.reset(PhoneField::Parse(&iter_, false));
ASSERT_EQ(static_cast<PhoneField*>(NULL), field_.get());
}
TEST_F(PhoneFieldTest, ParseOneLinePhone) {
list_.push_back(
new AutoFillField(webkit_glue::FormField(ASCIIToUTF16("Phone"),
ASCIIToUTF16("phone"),
string16(),
ASCIIToUTF16("text"),
0),
ASCIIToUTF16("phone1")));
list_.push_back(NULL);
iter_ = list_.begin();
field_.reset(PhoneField::Parse(&iter_, false));
ASSERT_NE(static_cast<PhoneField*>(NULL), field_.get());
ASSERT_TRUE(field_->GetFieldInfo(&field_type_map_));
ASSERT_TRUE(
field_type_map_.find(ASCIIToUTF16("phone1")) != field_type_map_.end());
EXPECT_EQ(PHONE_HOME_WHOLE_NUMBER, field_type_map_[ASCIIToUTF16("phone1")]);
}
TEST_F(PhoneFieldTest, ParseOneLinePhoneEcml) {
list_.push_back(
new AutoFillField(webkit_glue::FormField(ASCIIToUTF16("Phone"),
ASCIIToUTF16(kEcmlShipToPhone),
string16(),
ASCIIToUTF16("text"),
0),
ASCIIToUTF16("phone1")));
list_.push_back(NULL);
iter_ = list_.begin();
field_.reset(PhoneField::Parse(&iter_, true));
ASSERT_NE(static_cast<PhoneField*>(NULL), field_.get());
ASSERT_TRUE(field_->GetFieldInfo(&field_type_map_));
ASSERT_TRUE(
field_type_map_.find(ASCIIToUTF16("phone1")) != field_type_map_.end());
EXPECT_EQ(PHONE_HOME_WHOLE_NUMBER, field_type_map_[ASCIIToUTF16("phone1")]);
}
TEST_F(PhoneFieldTest, ParseTwoLinePhone) {
list_.push_back(
new AutoFillField(webkit_glue::FormField(ASCIIToUTF16("Area Code"),
ASCIIToUTF16("area code"),
string16(),
ASCIIToUTF16("text"),
0),
ASCIIToUTF16("areacode1")));
list_.push_back(
new AutoFillField(webkit_glue::FormField(ASCIIToUTF16("Phone"),
ASCIIToUTF16("phone"),
string16(),
ASCIIToUTF16("text"),
0),
ASCIIToUTF16("phone1")));
list_.push_back(NULL);
iter_ = list_.begin();
field_.reset(PhoneField::Parse(&iter_, false));
ASSERT_NE(static_cast<PhoneField*>(NULL), field_.get());
ASSERT_TRUE(field_->GetFieldInfo(&field_type_map_));
ASSERT_TRUE(
field_type_map_.find(ASCIIToUTF16("areacode1")) != field_type_map_.end());
EXPECT_EQ(PHONE_HOME_CITY_CODE, field_type_map_[ASCIIToUTF16("areacode1")]);
ASSERT_TRUE(
field_type_map_.find(ASCIIToUTF16("phone1")) != field_type_map_.end());
EXPECT_EQ(PHONE_HOME_NUMBER, field_type_map_[ASCIIToUTF16("phone1")]);
}
TEST_F(PhoneFieldTest, ParseTwoLinePhoneEcmlShipTo) {
list_.push_back(
new AutoFillField(
webkit_glue::FormField(ASCIIToUTF16("Area Code"),
ASCIIToUTF16(kEcmlShipToPostalCode),
string16(),
ASCIIToUTF16("text"),
0),
ASCIIToUTF16("areacode1")));
list_.push_back(
new AutoFillField(webkit_glue::FormField(ASCIIToUTF16("Phone"),
ASCIIToUTF16(kEcmlShipToPhone),
string16(),
ASCIIToUTF16("text"),
0),
ASCIIToUTF16("phone1")));
list_.push_back(NULL);
iter_ = list_.begin();
field_.reset(PhoneField::Parse(&iter_, false));
ASSERT_NE(static_cast<PhoneField*>(NULL), field_.get());
ASSERT_TRUE(field_->GetFieldInfo(&field_type_map_));
ASSERT_TRUE(
field_type_map_.find(ASCIIToUTF16("areacode1")) != field_type_map_.end());
EXPECT_EQ(PHONE_HOME_CITY_CODE, field_type_map_[ASCIIToUTF16("areacode1")]);
ASSERT_TRUE(
field_type_map_.find(ASCIIToUTF16("phone1")) != field_type_map_.end());
EXPECT_EQ(PHONE_HOME_NUMBER, field_type_map_[ASCIIToUTF16("phone1")]);
}
TEST_F(PhoneFieldTest, ParseTwoLinePhoneEcmlBillTo) {
list_.push_back(
new AutoFillField(
webkit_glue::FormField(ASCIIToUTF16("Area Code"),
ASCIIToUTF16(kEcmlBillToPostalCode),
string16(),
ASCIIToUTF16("text"),
0),
ASCIIToUTF16("areacode1")));
list_.push_back(
new AutoFillField(webkit_glue::FormField(ASCIIToUTF16("Phone"),
ASCIIToUTF16(kEcmlBillToPhone),
string16(),
ASCIIToUTF16("text"),
0),
ASCIIToUTF16("phone1")));
list_.push_back(NULL);
iter_ = list_.begin();
field_.reset(PhoneField::Parse(&iter_, false));
ASSERT_NE(static_cast<PhoneField*>(NULL), field_.get());
ASSERT_TRUE(field_->GetFieldInfo(&field_type_map_));
ASSERT_TRUE(
field_type_map_.find(ASCIIToUTF16("areacode1")) != field_type_map_.end());
EXPECT_EQ(PHONE_HOME_CITY_CODE, field_type_map_[ASCIIToUTF16("areacode1")]);
ASSERT_TRUE(
field_type_map_.find(ASCIIToUTF16("phone1")) != field_type_map_.end());
EXPECT_EQ(PHONE_HOME_NUMBER, field_type_map_[ASCIIToUTF16("phone1")]);
}
TEST_F(PhoneFieldTest, ThreePartPhoneNumber) {
list_.push_back(
new AutoFillField(webkit_glue::FormField(ASCIIToUTF16("Phone:"),
ASCIIToUTF16("dayphone1"),
string16(),
ASCIIToUTF16("text"),
0),
ASCIIToUTF16("areacode1")));
list_.push_back(
new AutoFillField(webkit_glue::FormField(ASCIIToUTF16("-"),
ASCIIToUTF16("dayphone2"),
string16(),
ASCIIToUTF16("text"),
0),
ASCIIToUTF16("prefix1")));
list_.push_back(
new AutoFillField(webkit_glue::FormField(ASCIIToUTF16("-"),
ASCIIToUTF16("dayphone3"),
string16(),
ASCIIToUTF16("text"),
0),
ASCIIToUTF16("suffix1")));
list_.push_back(
new AutoFillField(webkit_glue::FormField(ASCIIToUTF16("ext.:"),
ASCIIToUTF16("dayphone4"),
string16(),
ASCIIToUTF16("text"),
0),
ASCIIToUTF16("ext1")));
list_.push_back(NULL);
iter_ = list_.begin();
field_.reset(PhoneField::Parse(&iter_, false));
ASSERT_NE(static_cast<PhoneField*>(NULL), field_.get());
ASSERT_TRUE(field_->GetFieldInfo(&field_type_map_));
ASSERT_TRUE(
field_type_map_.find(ASCIIToUTF16("areacode1")) != field_type_map_.end());
EXPECT_EQ(PHONE_HOME_CITY_CODE, field_type_map_[ASCIIToUTF16("areacode1")]);
ASSERT_TRUE(
field_type_map_.find(ASCIIToUTF16("prefix1")) != field_type_map_.end());
EXPECT_EQ(PHONE_HOME_NUMBER, field_type_map_[ASCIIToUTF16("prefix1")]);
ASSERT_TRUE(
field_type_map_.find(ASCIIToUTF16("suffix1")) != field_type_map_.end());
EXPECT_EQ(PHONE_HOME_NUMBER, field_type_map_[ASCIIToUTF16("suffix1")]);
}
// This scenario of explicitly labeled "prefix" and "suffix" phone numbers
// encountered in http://crbug.com/40694 with page
// https://www.wrapables.com/jsp/Signup.jsp.
TEST_F(PhoneFieldTest, ThreePartPhoneNumberPrefixSuffix) {
list_.push_back(
new AutoFillField(webkit_glue::FormField(ASCIIToUTF16("Phone:"),
ASCIIToUTF16("area"),
string16(),
ASCIIToUTF16("text"),
0),
ASCIIToUTF16("areacode1")));
list_.push_back(
new AutoFillField(webkit_glue::FormField(string16(),
ASCIIToUTF16("prefix"),
string16(),
ASCIIToUTF16("text"),
0),
ASCIIToUTF16("prefix1")));
list_.push_back(
new AutoFillField(webkit_glue::FormField(string16(),
ASCIIToUTF16("suffix"),
string16(),
ASCIIToUTF16("text"),
0),
ASCIIToUTF16("suffix1")));
list_.push_back(NULL);
iter_ = list_.begin();
field_.reset(PhoneField::Parse(&iter_, false));
ASSERT_NE(static_cast<PhoneField*>(NULL), field_.get());
ASSERT_TRUE(field_->GetFieldInfo(&field_type_map_));
ASSERT_TRUE(
field_type_map_.find(ASCIIToUTF16("areacode1")) != field_type_map_.end());
EXPECT_EQ(PHONE_HOME_CITY_CODE, field_type_map_[ASCIIToUTF16("areacode1")]);
ASSERT_TRUE(
field_type_map_.find(ASCIIToUTF16("prefix1")) != field_type_map_.end());
EXPECT_EQ(PHONE_HOME_NUMBER, field_type_map_[ASCIIToUTF16("prefix1")]);
ASSERT_TRUE(
field_type_map_.find(ASCIIToUTF16("suffix1")) != field_type_map_.end());
EXPECT_EQ(PHONE_HOME_NUMBER, field_type_map_[ASCIIToUTF16("suffix1")]);
}
} // namespace