1// Copyright (c) 2011 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 "base/utf_string_conversions.h"
6#include "chrome/browser/autofill/autofill_profile.h"
7#include "chrome/browser/autofill/autofill_type.h"
8#include "chrome/browser/autofill/credit_card.h"
9#include "chrome/browser/autofill/select_control_handler.h"
10#include "testing/gtest/include/gtest/gtest.h"
11#include "webkit/glue/form_field.h"
12
13TEST(SelectControlHandlerTest, CreditCardMonthExact) {
14  const char* const kMonthsNumeric[] = {
15    "01", "02", "03", "04", "05", "06", "07", "08", "09", "10", "11", "12",
16  };
17  std::vector<string16> options(arraysize(kMonthsNumeric));
18  for (size_t i = 0; i < arraysize(kMonthsNumeric); ++i)
19    options[i] = ASCIIToUTF16(kMonthsNumeric[i]);
20
21  webkit_glue::FormField field;
22  field.form_control_type = ASCIIToUTF16("select-one");
23  field.option_strings = options;
24
25  CreditCard credit_card;
26  credit_card.SetInfo(CREDIT_CARD_EXP_MONTH, ASCIIToUTF16("01"));
27  autofill::FillSelectControl(credit_card, CREDIT_CARD_EXP_MONTH, &field);
28  EXPECT_EQ(ASCIIToUTF16("01"), field.value);
29}
30
31TEST(SelectControlHandlerTest, CreditCardMonthAbbreviated) {
32  const char* const kMonthsAbbreviated[] = {
33    "Jan", "Feb", "Mar", "Apr", "May", "Jun",
34    "Jul", "Aug", "Sep", "Oct", "Nov", "Dec",
35  };
36  std::vector<string16> options(arraysize(kMonthsAbbreviated));
37  for (size_t i = 0; i < arraysize(kMonthsAbbreviated); ++i)
38    options[i] = ASCIIToUTF16(kMonthsAbbreviated[i]);
39
40  webkit_glue::FormField field;
41  field.form_control_type = ASCIIToUTF16("select-one");
42  field.option_strings = options;
43
44  CreditCard credit_card;
45  credit_card.SetInfo(CREDIT_CARD_EXP_MONTH, ASCIIToUTF16("01"));
46  autofill::FillSelectControl(credit_card, CREDIT_CARD_EXP_MONTH, &field);
47  EXPECT_EQ(ASCIIToUTF16("Jan"), field.value);
48}
49
50TEST(SelectControlHandlerTest, CreditCardMonthFull) {
51  const char* const kMonthsFull[] = {
52    "January", "February", "March", "April", "May", "June",
53    "July", "August", "September", "October", "November", "December",
54  };
55  std::vector<string16> options(arraysize(kMonthsFull));
56  for (size_t i = 0; i < arraysize(kMonthsFull); ++i)
57    options[i] = ASCIIToUTF16(kMonthsFull[i]);
58
59  webkit_glue::FormField field;
60  field.form_control_type = ASCIIToUTF16("select-one");
61  field.option_strings = options;
62
63  CreditCard credit_card;
64  credit_card.SetInfo(CREDIT_CARD_EXP_MONTH, ASCIIToUTF16("01"));
65  autofill::FillSelectControl(credit_card, CREDIT_CARD_EXP_MONTH, &field);
66  EXPECT_EQ(ASCIIToUTF16("January"), field.value);
67}
68
69TEST(SelectControlHandlerTest, CreditCardMonthNumeric) {
70  const char* const kMonthsNumeric[] = {
71    "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12",
72  };
73  std::vector<string16> options(arraysize(kMonthsNumeric));
74  for (size_t i = 0; i < arraysize(kMonthsNumeric); ++i)
75    options[i] = ASCIIToUTF16(kMonthsNumeric[i]);
76
77  webkit_glue::FormField field;
78  field.form_control_type = ASCIIToUTF16("select-one");
79  field.option_strings = options;
80
81  CreditCard credit_card;
82  credit_card.SetInfo(CREDIT_CARD_EXP_MONTH, ASCIIToUTF16("01"));
83  autofill::FillSelectControl(credit_card, CREDIT_CARD_EXP_MONTH, &field);
84  EXPECT_EQ(ASCIIToUTF16("1"), field.value);
85}
86
87TEST(SelectControlHandlerTest, AddressCountryFull) {
88  const char* const kCountries[] = {
89    "Albania", "Canada"
90  };
91  std::vector<string16> options(arraysize(kCountries));
92  for (size_t i = 0; i < arraysize(kCountries); ++i)
93    options[i] = ASCIIToUTF16(kCountries[i]);
94
95  webkit_glue::FormField field;
96  field.form_control_type = ASCIIToUTF16("select-one");
97  field.option_strings = options;
98
99  AutofillProfile profile;
100  profile.SetInfo(ADDRESS_HOME_COUNTRY, ASCIIToUTF16("CA"));
101  autofill::FillSelectControl(profile, ADDRESS_HOME_COUNTRY, &field);
102  EXPECT_EQ(ASCIIToUTF16("Canada"), field.value);
103}
104
105TEST(SelectControlHandlerTest, AddressCountryAbbrev) {
106  const char* const kCountries[] = {
107    "AL", "CA"
108  };
109  std::vector<string16> options(arraysize(kCountries));
110  for (size_t i = 0; i < arraysize(kCountries); ++i)
111    options[i] = ASCIIToUTF16(kCountries[i]);
112
113  webkit_glue::FormField field;
114  field.form_control_type = ASCIIToUTF16("select-one");
115  field.option_strings = options;
116
117  AutofillProfile profile;
118  profile.SetInfo(ADDRESS_HOME_COUNTRY, ASCIIToUTF16("Canada"));
119  autofill::FillSelectControl(profile, ADDRESS_HOME_COUNTRY, &field);
120  EXPECT_EQ(ASCIIToUTF16("CA"), field.value);
121}
122
123TEST(SelectControlHandlerTest, AddressStateFull) {
124  const char* const kStates[] = {
125    "Alabama", "California"
126  };
127  std::vector<string16> options(arraysize(kStates));
128  for (size_t i = 0; i < arraysize(kStates); ++i)
129    options[i] = ASCIIToUTF16(kStates[i]);
130
131  webkit_glue::FormField field;
132  field.form_control_type = ASCIIToUTF16("select-one");
133  field.option_strings = options;
134
135  AutofillProfile profile;
136  profile.SetInfo(ADDRESS_HOME_STATE, ASCIIToUTF16("CA"));
137  autofill::FillSelectControl(profile, ADDRESS_HOME_STATE, &field);
138  EXPECT_EQ(ASCIIToUTF16("California"), field.value);
139}
140
141TEST(SelectControlHandlerTest, AddressStateAbbrev) {
142  const char* const kStates[] = {
143    "AL", "CA"
144  };
145  std::vector<string16> options(arraysize(kStates));
146  for (size_t i = 0; i < arraysize(kStates); ++i)
147    options[i] = ASCIIToUTF16(kStates[i]);
148
149  webkit_glue::FormField field;
150  field.form_control_type = ASCIIToUTF16("select-one");
151  field.option_strings = options;
152
153  AutofillProfile profile;
154  profile.SetInfo(ADDRESS_HOME_STATE, ASCIIToUTF16("California"));
155  autofill::FillSelectControl(profile, ADDRESS_HOME_STATE, &field);
156  EXPECT_EQ(ASCIIToUTF16("CA"), field.value);
157}
158