[autofill] multi-field validation for CC date

[email protected]
BUG=179253


Review URL: https://chromiumcodereview.appspot.com/12640002

git-svn-id: svn://svn.chromium.org/chrome/trunk/src@188914 0039d316-1c4b-4281-b951-d872f2087c98
diff --git a/components/autofill/browser/validation_unittest.cc b/components/autofill/browser/validation_unittest.cc
index 3c1475b..d30c39c5 100644
--- a/components/autofill/browser/validation_unittest.cc
+++ b/components/autofill/browser/validation_unittest.cc
@@ -2,12 +2,18 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
+#include "base/time.h"
 #include "base/utf_string_conversions.h"
 #include "components/autofill/browser/validation.h"
 #include "testing/gtest/include/gtest/gtest.h"
 
 namespace {
 
+struct ExpirationDate {
+  const char* year;
+  const char* month;
+};
+
 // From https://www.paypalobjects.com/en_US/vhelp/paypalmanager_help/credit_card_numbers.htm
 const char* const kValidNumbers[] = {
   "378282246310005",
@@ -34,6 +40,17 @@
   "4111-1111-1111-1110", /* wrong Luhn checksum */
   "3056 9309 0259 04aa", /* non-digit characters */
 };
+const char kCurrentDate[]="1 May 2013";
+const ExpirationDate kValidCreditCardExpirationDate[] = {
+  { "2013", "5" },  // Valid month in current year.
+  { "2014", "1" },  // Any month in next year.
+  { "2014", " 1" },  // Whitespace in month.
+  { " 2014", "1" },  // Whitespace in year.
+};
+const ExpirationDate kInvalidCreditCardExpirationDate[] = {
+  { "2013", "04" },  // Previous month in current year.
+  { "2012", "12" },  // Any month in previous year.
+};
 const char* const kValidCreditCardSecurityCode[] = {
   "323",  // 3-digit CSC.
   "3234",  // 4-digit CSC.
@@ -70,6 +87,31 @@
   }
 }
 
+TEST(AutofillValidation, IsValidCreditCardExpirationDate)
+{
+  base::Time now;
+  ASSERT_TRUE(base::Time::FromString(kCurrentDate, &now));
+
+  for (size_t i = 0; i < arraysize(kValidCreditCardExpirationDate); ++i) {
+    const ExpirationDate data = kValidCreditCardExpirationDate[i];
+    SCOPED_TRACE(data.year);
+    SCOPED_TRACE(data.month);
+    EXPECT_TRUE(
+        autofill::IsValidCreditCardExpirationDate(ASCIIToUTF16(data.year),
+                                                  ASCIIToUTF16(data.month),
+                                                  now));
+  }
+  for (size_t i = 0; i < arraysize(kInvalidCreditCardExpirationDate); ++i) {
+    const ExpirationDate data = kInvalidCreditCardExpirationDate[i];
+    SCOPED_TRACE(data.year);
+    SCOPED_TRACE(data.month);
+    EXPECT_TRUE(
+        !autofill::IsValidCreditCardExpirationDate(ASCIIToUTF16(data.year),
+                                                   ASCIIToUTF16(data.month),
+                                                   now));
+  }
+}
+
 TEST(AutofillValidation, IsValidCreditCardSecurityCode) {
   for (size_t i = 0; i < arraysize(kValidCreditCardSecurityCode); ++i) {
     SCOPED_TRACE(kValidCreditCardSecurityCode[i]);