Implementing SaveToWallet in the Google Wallet client.
-Adds WalletClient::SaveAddress to save new shipping addresses
-Adds WalletClient::SaveInstruemnt to save new payment instruments
-Adds WalletClient::SaveInstrumentAndAddress
-Adds Instrument to represent payment instruments to be saved
-Adds ability to turn an Address into a DictionaryValue


BUG=164284


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

git-svn-id: svn://svn.chromium.org/chrome/trunk/src@177814 0039d316-1c4b-4281-b951-d872f2087c98
diff --git a/chrome/browser/autofill/validation_unittest.cc b/chrome/browser/autofill/validation_unittest.cc
new file mode 100644
index 0000000..bb94a0f
--- /dev/null
+++ b/chrome/browser/autofill/validation_unittest.cc
@@ -0,0 +1,51 @@
+// Copyright (c) 2013 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/utf_string_conversions.h"
+#include "chrome/browser/autofill/validation.h"
+#include "testing/gtest/include/gtest/gtest.h"
+
+namespace {
+
+// From https://www.paypalobjects.com/en_US/vhelp/paypalmanager_help/credit_card_numbers.htm
+const char* const kValidNumbers[] = {
+  "378282246310005",
+  "3714 4963 5398 431",
+  "3787-3449-3671-000",
+  "5610591081018250",
+  "3056 9309 0259 04",
+  "3852-0000-0232-37",
+  "6011111111111117",
+  "6011 0009 9013 9424",
+  "3530-1113-3330-0000",
+  "3566002020360505",
+  "5555 5555 5555 4444",
+  "5105-1051-0510-5100",
+  "4111111111111111",
+  "4012 8888 8888 1881",
+  "4222-2222-2222-2",
+  "5019717010103742",
+  "6331101999990016",
+};
+const char* const kInvalidNumbers[] = {
+  "4111 1111 112", /* too short */
+  "41111111111111111115", /* too long */
+  "4111-1111-1111-1110", /* wrong Luhn checksum */
+  "3056 9309 0259 04aa", /* non-digit characters */
+};
+
+}  // namespace
+
+TEST(AutofillValidation, IsValidCreditCardNumber) {
+  for (size_t i = 0; i < arraysize(kValidNumbers); ++i) {
+    SCOPED_TRACE(kValidNumbers[i]);
+    EXPECT_TRUE(
+        autofill::IsValidCreditCardNumber(ASCIIToUTF16(kValidNumbers[i])));
+  }
+  for (size_t i = 0; i < arraysize(kInvalidNumbers); ++i) {
+    SCOPED_TRACE(kInvalidNumbers[i]);
+    EXPECT_FALSE(
+        autofill::IsValidCreditCardNumber(ASCIIToUTF16(kInvalidNumbers[i])));
+  }
+}