172a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen// Copyright (c) 2011 The Chromium Authors. All rights reserved.
272a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen// Use of this source code is governed by a BSD-style license that can be
372a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen// found in the LICENSE file.
472a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen
572a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen#include "base/utf_string_conversions.h"
672a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen#include "chrome/browser/autofill/autofill_profile.h"
772a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen#include "chrome/browser/autofill/autofill_type.h"
872a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen#include "chrome/browser/autofill/credit_card.h"
972a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen#include "chrome/browser/autofill/select_control_handler.h"
1072a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen#include "testing/gtest/include/gtest/gtest.h"
1172a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen#include "webkit/glue/form_field.h"
1272a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen
1372a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian MonsenTEST(SelectControlHandlerTest, CreditCardMonthExact) {
1472a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen  const char* const kMonthsNumeric[] = {
1572a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen    "01", "02", "03", "04", "05", "06", "07", "08", "09", "10", "11", "12",
1672a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen  };
1772a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen  std::vector<string16> options(arraysize(kMonthsNumeric));
1872a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen  for (size_t i = 0; i < arraysize(kMonthsNumeric); ++i)
1972a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen    options[i] = ASCIIToUTF16(kMonthsNumeric[i]);
2072a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen
2172a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen  webkit_glue::FormField field;
22ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  field.form_control_type = ASCIIToUTF16("select-one");
23ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  field.option_strings = options;
2472a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen
2572a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen  CreditCard credit_card;
26ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  credit_card.SetInfo(CREDIT_CARD_EXP_MONTH, ASCIIToUTF16("01"));
27ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  autofill::FillSelectControl(credit_card, CREDIT_CARD_EXP_MONTH, &field);
28ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  EXPECT_EQ(ASCIIToUTF16("01"), field.value);
2972a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen}
3072a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen
3172a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian MonsenTEST(SelectControlHandlerTest, CreditCardMonthAbbreviated) {
3272a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen  const char* const kMonthsAbbreviated[] = {
3372a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen    "Jan", "Feb", "Mar", "Apr", "May", "Jun",
3472a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen    "Jul", "Aug", "Sep", "Oct", "Nov", "Dec",
3572a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen  };
3672a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen  std::vector<string16> options(arraysize(kMonthsAbbreviated));
3772a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen  for (size_t i = 0; i < arraysize(kMonthsAbbreviated); ++i)
3872a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen    options[i] = ASCIIToUTF16(kMonthsAbbreviated[i]);
3972a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen
4072a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen  webkit_glue::FormField field;
41ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  field.form_control_type = ASCIIToUTF16("select-one");
42ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  field.option_strings = options;
4372a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen
4472a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen  CreditCard credit_card;
45ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  credit_card.SetInfo(CREDIT_CARD_EXP_MONTH, ASCIIToUTF16("01"));
46ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  autofill::FillSelectControl(credit_card, CREDIT_CARD_EXP_MONTH, &field);
47ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  EXPECT_EQ(ASCIIToUTF16("Jan"), field.value);
4872a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen}
4972a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen
5072a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian MonsenTEST(SelectControlHandlerTest, CreditCardMonthFull) {
5172a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen  const char* const kMonthsFull[] = {
5272a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen    "January", "February", "March", "April", "May", "June",
5372a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen    "July", "August", "September", "October", "November", "December",
5472a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen  };
5572a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen  std::vector<string16> options(arraysize(kMonthsFull));
5672a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen  for (size_t i = 0; i < arraysize(kMonthsFull); ++i)
5772a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen    options[i] = ASCIIToUTF16(kMonthsFull[i]);
5872a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen
5972a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen  webkit_glue::FormField field;
60ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  field.form_control_type = ASCIIToUTF16("select-one");
61ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  field.option_strings = options;
6272a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen
6372a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen  CreditCard credit_card;
64ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  credit_card.SetInfo(CREDIT_CARD_EXP_MONTH, ASCIIToUTF16("01"));
65ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  autofill::FillSelectControl(credit_card, CREDIT_CARD_EXP_MONTH, &field);
66ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  EXPECT_EQ(ASCIIToUTF16("January"), field.value);
6772a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen}
6872a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen
6972a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian MonsenTEST(SelectControlHandlerTest, CreditCardMonthNumeric) {
7072a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen  const char* const kMonthsNumeric[] = {
7172a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen    "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12",
7272a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen  };
7372a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen  std::vector<string16> options(arraysize(kMonthsNumeric));
7472a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen  for (size_t i = 0; i < arraysize(kMonthsNumeric); ++i)
7572a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen    options[i] = ASCIIToUTF16(kMonthsNumeric[i]);
7672a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen
7772a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen  webkit_glue::FormField field;
78ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  field.form_control_type = ASCIIToUTF16("select-one");
79ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  field.option_strings = options;
8072a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen
8172a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen  CreditCard credit_card;
82ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  credit_card.SetInfo(CREDIT_CARD_EXP_MONTH, ASCIIToUTF16("01"));
83ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  autofill::FillSelectControl(credit_card, CREDIT_CARD_EXP_MONTH, &field);
84ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  EXPECT_EQ(ASCIIToUTF16("1"), field.value);
8572a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen}
8672a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen
8772a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian MonsenTEST(SelectControlHandlerTest, AddressCountryFull) {
8872a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen  const char* const kCountries[] = {
8972a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen    "Albania", "Canada"
9072a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen  };
9172a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen  std::vector<string16> options(arraysize(kCountries));
9272a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen  for (size_t i = 0; i < arraysize(kCountries); ++i)
9372a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen    options[i] = ASCIIToUTF16(kCountries[i]);
9472a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen
9572a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen  webkit_glue::FormField field;
96ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  field.form_control_type = ASCIIToUTF16("select-one");
97ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  field.option_strings = options;
98ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen
99ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  AutofillProfile profile;
100ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  profile.SetInfo(ADDRESS_HOME_COUNTRY, ASCIIToUTF16("CA"));
101ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  autofill::FillSelectControl(profile, ADDRESS_HOME_COUNTRY, &field);
102ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  EXPECT_EQ(ASCIIToUTF16("Canada"), field.value);
10372a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen}
10472a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen
10572a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian MonsenTEST(SelectControlHandlerTest, AddressCountryAbbrev) {
10672a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen  const char* const kCountries[] = {
10772a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen    "AL", "CA"
10872a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen  };
10972a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen  std::vector<string16> options(arraysize(kCountries));
11072a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen  for (size_t i = 0; i < arraysize(kCountries); ++i)
11172a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen    options[i] = ASCIIToUTF16(kCountries[i]);
11272a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen
11372a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen  webkit_glue::FormField field;
114ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  field.form_control_type = ASCIIToUTF16("select-one");
115ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  field.option_strings = options;
116ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen
117ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  AutofillProfile profile;
118ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  profile.SetInfo(ADDRESS_HOME_COUNTRY, ASCIIToUTF16("Canada"));
119ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  autofill::FillSelectControl(profile, ADDRESS_HOME_COUNTRY, &field);
120ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  EXPECT_EQ(ASCIIToUTF16("CA"), field.value);
12172a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen}
12272a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen
12372a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian MonsenTEST(SelectControlHandlerTest, AddressStateFull) {
12472a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen  const char* const kStates[] = {
12572a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen    "Alabama", "California"
12672a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen  };
12772a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen  std::vector<string16> options(arraysize(kStates));
12872a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen  for (size_t i = 0; i < arraysize(kStates); ++i)
12972a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen    options[i] = ASCIIToUTF16(kStates[i]);
13072a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen
13172a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen  webkit_glue::FormField field;
132ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  field.form_control_type = ASCIIToUTF16("select-one");
133ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  field.option_strings = options;
134ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen
135ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  AutofillProfile profile;
136ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  profile.SetInfo(ADDRESS_HOME_STATE, ASCIIToUTF16("CA"));
137ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  autofill::FillSelectControl(profile, ADDRESS_HOME_STATE, &field);
138ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  EXPECT_EQ(ASCIIToUTF16("California"), field.value);
13972a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen}
14072a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen
14172a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian MonsenTEST(SelectControlHandlerTest, AddressStateAbbrev) {
14272a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen  const char* const kStates[] = {
14372a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen    "AL", "CA"
14472a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen  };
14572a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen  std::vector<string16> options(arraysize(kStates));
14672a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen  for (size_t i = 0; i < arraysize(kStates); ++i)
14772a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen    options[i] = ASCIIToUTF16(kStates[i]);
14872a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen
14972a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen  webkit_glue::FormField field;
150ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  field.form_control_type = ASCIIToUTF16("select-one");
151ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  field.option_strings = options;
152ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen
153ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  AutofillProfile profile;
154ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  profile.SetInfo(ADDRESS_HOME_STATE, ASCIIToUTF16("California"));
155ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  autofill::FillSelectControl(profile, ADDRESS_HOME_STATE, &field);
156ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  EXPECT_EQ(ASCIIToUTF16("CA"), field.value);
15772a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen}
158