1// Copyright 2013 The Chromium Authors. All rights reserved.
2// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
5#include "components/autofill/core/browser/autofill_type.h"
6#include "testing/gtest/include/gtest/gtest.h"
7
8namespace autofill {
9namespace {
10
11TEST(AutofillTypeTest, ServerFieldTypes) {
12  // No server data.
13  AutofillType none(NO_SERVER_DATA);
14  EXPECT_EQ(NO_SERVER_DATA, none.GetStorableType());
15  EXPECT_EQ(NO_GROUP, none.group());
16
17  // Unknown type.
18  AutofillType unknown(UNKNOWN_TYPE);
19  EXPECT_EQ(UNKNOWN_TYPE, unknown.GetStorableType());
20  EXPECT_EQ(NO_GROUP, unknown.group());
21
22  // Type with group but no subgroup.
23  AutofillType first(NAME_FIRST);
24  EXPECT_EQ(NAME_FIRST, first.GetStorableType());
25  EXPECT_EQ(NAME, first.group());
26
27  // Type with group and subgroup.
28  AutofillType phone(PHONE_HOME_NUMBER);
29  EXPECT_EQ(PHONE_HOME_NUMBER, phone.GetStorableType());
30  EXPECT_EQ(PHONE_HOME, phone.group());
31
32  // Billing type.
33  AutofillType billing_address(ADDRESS_BILLING_LINE1);
34  EXPECT_EQ(ADDRESS_HOME_LINE1, billing_address.GetStorableType());
35  EXPECT_EQ(ADDRESS_BILLING, billing_address.group());
36
37  // Last value, to check any offset errors.
38  AutofillType last(NAME_BILLING_SUFFIX);
39  EXPECT_EQ(NAME_SUFFIX, last.GetStorableType());
40  EXPECT_EQ(NAME_BILLING, last.group());
41
42  // Boundary (error) condition.
43  AutofillType boundary(MAX_VALID_FIELD_TYPE);
44  EXPECT_EQ(UNKNOWN_TYPE, boundary.GetStorableType());
45  EXPECT_EQ(NO_GROUP, boundary.group());
46
47  // Beyond the boundary (error) condition.
48  AutofillType beyond(static_cast<ServerFieldType>(MAX_VALID_FIELD_TYPE + 10));
49  EXPECT_EQ(UNKNOWN_TYPE, beyond.GetStorableType());
50  EXPECT_EQ(NO_GROUP, beyond.group());
51
52  // In-between value.  Missing from enum but within range.  Error condition.
53  AutofillType between(static_cast<ServerFieldType>(16));
54  EXPECT_EQ(UNKNOWN_TYPE, between.GetStorableType());
55  EXPECT_EQ(NO_GROUP, between.group());
56}
57
58TEST(AutofillTypeTest, HtmlFieldTypes) {
59  // Unknown type.
60  AutofillType unknown(HTML_TYPE_UNKNOWN, HTML_MODE_NONE);
61  EXPECT_EQ(UNKNOWN_TYPE, unknown.GetStorableType());
62  EXPECT_EQ(NO_GROUP, unknown.group());
63
64  // Type with group but no subgroup.
65  AutofillType first(HTML_TYPE_GIVEN_NAME, HTML_MODE_NONE);
66  EXPECT_EQ(NAME_FIRST, first.GetStorableType());
67  EXPECT_EQ(NAME, first.group());
68
69  // Type with group and subgroup.
70  AutofillType phone(HTML_TYPE_TEL, HTML_MODE_NONE);
71  EXPECT_EQ(PHONE_HOME_WHOLE_NUMBER, phone.GetStorableType());
72  EXPECT_EQ(PHONE_HOME, phone.group());
73
74  // Last value, to check any offset errors.
75  AutofillType last(HTML_TYPE_CREDIT_CARD_EXP_4_DIGIT_YEAR, HTML_MODE_NONE);
76  EXPECT_EQ(CREDIT_CARD_EXP_4_DIGIT_YEAR, last.GetStorableType());
77  EXPECT_EQ(CREDIT_CARD, last.group());
78
79  // Shipping mode.
80  AutofillType shipping_first(HTML_TYPE_GIVEN_NAME, HTML_MODE_SHIPPING);
81  EXPECT_EQ(NAME_FIRST, shipping_first.GetStorableType());
82  EXPECT_EQ(NAME, shipping_first.group());
83
84  // Billing mode.
85  AutofillType billing_first(HTML_TYPE_GIVEN_NAME, HTML_MODE_BILLING);
86  EXPECT_EQ(NAME_FIRST, billing_first.GetStorableType());
87  EXPECT_EQ(NAME_BILLING, billing_first.group());
88}
89
90}  // namespace
91}  // namespace autofill
92