|  | // Copyright 2016 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 "modules/payments/PaymentRequest.h" | 
|  |  | 
|  | #include <ostream>  // NOLINT | 
|  | #include "bindings/core/v8/ExceptionState.h" | 
|  | #include "bindings/core/v8/V8BindingForTesting.h" | 
|  | #include "core/dom/Document.h" | 
|  | #include "core/dom/ExceptionCode.h" | 
|  | #include "modules/payments/PaymentDetailsInit.h" | 
|  | #include "modules/payments/PaymentOptions.h" | 
|  | #include "modules/payments/PaymentTestHelper.h" | 
|  | #include "platform/bindings/ScriptState.h" | 
|  | #include "testing/gtest/include/gtest/gtest.h" | 
|  |  | 
|  | namespace blink { | 
|  | namespace { | 
|  |  | 
|  | class DetailsTestCase { | 
|  | public: | 
|  | DetailsTestCase(PaymentTestDetailToChange detail, | 
|  | PaymentTestDataToChange data, | 
|  | PaymentTestModificationType mod_type, | 
|  | const char* value_to_use, | 
|  | bool expect_exception = false, | 
|  | ExceptionCode expected_exception_code = 0) | 
|  | : detail_(detail), | 
|  | data_(data), | 
|  | mod_type_(mod_type), | 
|  | value_to_use_(value_to_use), | 
|  | expect_exception_(expect_exception), | 
|  | expected_exception_code_(expected_exception_code) {} | 
|  |  | 
|  | ~DetailsTestCase() {} | 
|  |  | 
|  | PaymentDetailsInit BuildDetails() const { | 
|  | return BuildPaymentDetailsInitForTest(detail_, data_, mod_type_, | 
|  | value_to_use_); | 
|  | } | 
|  |  | 
|  | bool ExpectException() const { return expect_exception_; } | 
|  |  | 
|  | ExceptionCode GetExpectedExceptionCode() const { | 
|  | return expected_exception_code_; | 
|  | } | 
|  |  | 
|  | private: | 
|  | friend std::ostream& operator<<(std::ostream&, DetailsTestCase); | 
|  | PaymentTestDetailToChange detail_; | 
|  | PaymentTestDataToChange data_; | 
|  | PaymentTestModificationType mod_type_; | 
|  | const char* value_to_use_; | 
|  | bool expect_exception_; | 
|  | ExceptionCode expected_exception_code_; | 
|  | }; | 
|  |  | 
|  | std::ostream& operator<<(std::ostream& out, DetailsTestCase test_case) { | 
|  | if (test_case.expect_exception_) | 
|  | out << "Expecting an exception when "; | 
|  | else | 
|  | out << "Not expecting an exception when "; | 
|  |  | 
|  | switch (test_case.detail_) { | 
|  | case kPaymentTestDetailTotal: | 
|  | out << "total "; | 
|  | break; | 
|  | case kPaymentTestDetailItem: | 
|  | out << "displayItem "; | 
|  | break; | 
|  | case kPaymentTestDetailShippingOption: | 
|  | out << "shippingOption "; | 
|  | break; | 
|  | case kPaymentTestDetailModifierTotal: | 
|  | out << "modifiers.total "; | 
|  | break; | 
|  | case kPaymentTestDetailModifierItem: | 
|  | out << "modifiers.displayItem "; | 
|  | break; | 
|  | case kPaymentTestDetailError: | 
|  | out << "error "; | 
|  | break; | 
|  | case kPaymentTestDetailNone: | 
|  | NOTREACHED(); | 
|  | break; | 
|  | } | 
|  |  | 
|  | switch (test_case.data_) { | 
|  | case kPaymentTestDataId: | 
|  | out << "id "; | 
|  | break; | 
|  | case kPaymentTestDataLabel: | 
|  | out << "label "; | 
|  | break; | 
|  | case kPaymentTestDataAmount: | 
|  | out << "amount "; | 
|  | break; | 
|  | case kPaymentTestDataCurrencyCode: | 
|  | out << "currency "; | 
|  | break; | 
|  | case kPaymentTestDataCurrencySystem: | 
|  | out << "currencySystem "; | 
|  | break; | 
|  | case kPaymentTestDataValue: | 
|  | out << "value "; | 
|  | break; | 
|  | case kPaymentTestDataNone: | 
|  | NOTREACHED(); | 
|  | break; | 
|  | } | 
|  |  | 
|  | switch (test_case.mod_type_) { | 
|  | case kPaymentTestOverwriteValue: | 
|  | out << "is overwritten by \"" << test_case.value_to_use_ << "\""; | 
|  | break; | 
|  | case kPaymentTestRemoveKey: | 
|  | out << "is removed"; | 
|  | break; | 
|  | } | 
|  |  | 
|  | return out; | 
|  | } | 
|  |  | 
|  | class PaymentRequestDetailsTest | 
|  | : public ::testing::TestWithParam<DetailsTestCase> {}; | 
|  |  | 
|  | TEST_P(PaymentRequestDetailsTest, ValidatesDetails) { | 
|  | V8TestingScope scope; | 
|  | scope.GetDocument().SetSecurityOrigin( | 
|  | SecurityOrigin::Create(KURL(NullURL(), "https://www.example.com/"))); | 
|  | PaymentOptions options; | 
|  | options.setRequestShipping(true); | 
|  | PaymentRequest::Create( | 
|  | scope.GetExecutionContext(), BuildPaymentMethodDataForTest(), | 
|  | GetParam().BuildDetails(), options, scope.GetExceptionState()); | 
|  |  | 
|  | EXPECT_EQ(GetParam().ExpectException(), | 
|  | scope.GetExceptionState().HadException()); | 
|  | if (GetParam().ExpectException()) | 
|  | EXPECT_EQ(GetParam().GetExpectedExceptionCode(), | 
|  | scope.GetExceptionState().Code()); | 
|  | } | 
|  |  | 
|  | INSTANTIATE_TEST_CASE_P( | 
|  | EmptyData, | 
|  | PaymentRequestDetailsTest, | 
|  | ::testing::Values(DetailsTestCase(kPaymentTestDetailTotal, | 
|  | kPaymentTestDataValue, | 
|  | kPaymentTestOverwriteValue, | 
|  | "", | 
|  | true, | 
|  | kV8TypeError), | 
|  | DetailsTestCase(kPaymentTestDetailTotal, | 
|  | kPaymentTestDataLabel, | 
|  | kPaymentTestOverwriteValue, | 
|  | "", | 
|  | false), | 
|  | DetailsTestCase(kPaymentTestDetailItem, | 
|  | kPaymentTestDataValue, | 
|  | kPaymentTestOverwriteValue, | 
|  | "", | 
|  | true, | 
|  | kV8TypeError), | 
|  | DetailsTestCase(kPaymentTestDetailItem, | 
|  | kPaymentTestDataLabel, | 
|  | kPaymentTestOverwriteValue, | 
|  | "", | 
|  | false), | 
|  | DetailsTestCase(kPaymentTestDetailShippingOption, | 
|  | kPaymentTestDataValue, | 
|  | kPaymentTestOverwriteValue, | 
|  | "", | 
|  | true, | 
|  | kV8TypeError), | 
|  | DetailsTestCase(kPaymentTestDetailShippingOption, | 
|  | kPaymentTestDataId, | 
|  | kPaymentTestOverwriteValue, | 
|  | "", | 
|  | false), | 
|  | DetailsTestCase(kPaymentTestDetailShippingOption, | 
|  | kPaymentTestDataLabel, | 
|  | kPaymentTestOverwriteValue, | 
|  | "", | 
|  | false), | 
|  | DetailsTestCase(kPaymentTestDetailModifierTotal, | 
|  | kPaymentTestDataValue, | 
|  | kPaymentTestOverwriteValue, | 
|  | "", | 
|  | true, | 
|  | kV8TypeError), | 
|  | DetailsTestCase(kPaymentTestDetailModifierTotal, | 
|  | kPaymentTestDataLabel, | 
|  | kPaymentTestOverwriteValue, | 
|  | "", | 
|  | false), | 
|  | DetailsTestCase(kPaymentTestDetailModifierItem, | 
|  | kPaymentTestDataValue, | 
|  | kPaymentTestOverwriteValue, | 
|  | "", | 
|  | true, | 
|  | kV8TypeError), | 
|  | DetailsTestCase(kPaymentTestDetailModifierItem, | 
|  | kPaymentTestDataLabel, | 
|  | kPaymentTestOverwriteValue, | 
|  | "", | 
|  | false))); | 
|  |  | 
|  | INSTANTIATE_TEST_CASE_P( | 
|  | ValidCurrencyCodeFormat, | 
|  | PaymentRequestDetailsTest, | 
|  | ::testing::Values(DetailsTestCase(kPaymentTestDetailTotal, | 
|  | kPaymentTestDataCurrencyCode, | 
|  | kPaymentTestOverwriteValue, | 
|  | "USD"), | 
|  | DetailsTestCase(kPaymentTestDetailItem, | 
|  | kPaymentTestDataCurrencyCode, | 
|  | kPaymentTestOverwriteValue, | 
|  | "USD"), | 
|  | DetailsTestCase(kPaymentTestDetailShippingOption, | 
|  | kPaymentTestDataCurrencyCode, | 
|  | kPaymentTestOverwriteValue, | 
|  | "USD"), | 
|  | DetailsTestCase(kPaymentTestDetailModifierTotal, | 
|  | kPaymentTestDataCurrencyCode, | 
|  | kPaymentTestOverwriteValue, | 
|  | "USD"), | 
|  | DetailsTestCase(kPaymentTestDetailModifierItem, | 
|  | kPaymentTestDataCurrencyCode, | 
|  | kPaymentTestOverwriteValue, | 
|  | "USD"))); | 
|  |  | 
|  | INSTANTIATE_TEST_CASE_P( | 
|  | ValidCurrencySystem, | 
|  | PaymentRequestDetailsTest, | 
|  | ::testing::Values(DetailsTestCase(kPaymentTestDetailTotal, | 
|  | kPaymentTestDataCurrencySystem, | 
|  | kPaymentTestOverwriteValue, | 
|  | "https://bitcoin.org"))); | 
|  |  | 
|  | INSTANTIATE_TEST_CASE_P( | 
|  | InvalidCurrencySystem, | 
|  | PaymentRequestDetailsTest, | 
|  | ::testing::Values(DetailsTestCase(kPaymentTestDetailTotal, | 
|  | kPaymentTestDataCurrencySystem, | 
|  | kPaymentTestOverwriteValue, | 
|  | "\\^%\\", | 
|  | true, | 
|  | kV8RangeError))); | 
|  |  | 
|  | INSTANTIATE_TEST_CASE_P( | 
|  | ValidValueFormat, | 
|  | PaymentRequestDetailsTest, | 
|  | ::testing::Values(DetailsTestCase(kPaymentTestDetailTotal, | 
|  | kPaymentTestDataValue, | 
|  | kPaymentTestOverwriteValue, | 
|  | "0"), | 
|  | DetailsTestCase(kPaymentTestDetailTotal, | 
|  | kPaymentTestDataValue, | 
|  | kPaymentTestOverwriteValue, | 
|  | "1"), | 
|  | DetailsTestCase(kPaymentTestDetailTotal, | 
|  | kPaymentTestDataValue, | 
|  | kPaymentTestOverwriteValue, | 
|  | "10"), | 
|  | DetailsTestCase(kPaymentTestDetailTotal, | 
|  | kPaymentTestDataValue, | 
|  | kPaymentTestOverwriteValue, | 
|  | "10.99"), | 
|  | DetailsTestCase(kPaymentTestDetailTotal, | 
|  | kPaymentTestDataValue, | 
|  | kPaymentTestOverwriteValue, | 
|  | "01234567890123456789.0123456789"), | 
|  | DetailsTestCase(kPaymentTestDetailTotal, | 
|  | kPaymentTestDataValue, | 
|  | kPaymentTestOverwriteValue, | 
|  | "01234567890123456789012345678.9"), | 
|  | DetailsTestCase(kPaymentTestDetailTotal, | 
|  | kPaymentTestDataValue, | 
|  | kPaymentTestOverwriteValue, | 
|  | "012345678901234567890123456789"), | 
|  | DetailsTestCase(kPaymentTestDetailItem, | 
|  | kPaymentTestDataValue, | 
|  | kPaymentTestOverwriteValue, | 
|  | "0"), | 
|  | DetailsTestCase(kPaymentTestDetailItem, | 
|  | kPaymentTestDataValue, | 
|  | kPaymentTestOverwriteValue, | 
|  | "-0"), | 
|  | DetailsTestCase(kPaymentTestDetailItem, | 
|  | kPaymentTestDataValue, | 
|  | kPaymentTestOverwriteValue, | 
|  | "1"), | 
|  | DetailsTestCase(kPaymentTestDetailItem, | 
|  | kPaymentTestDataValue, | 
|  | kPaymentTestOverwriteValue, | 
|  | "10"), | 
|  | DetailsTestCase(kPaymentTestDetailItem, | 
|  | kPaymentTestDataValue, | 
|  | kPaymentTestOverwriteValue, | 
|  | "-3"), | 
|  | DetailsTestCase(kPaymentTestDetailItem, | 
|  | kPaymentTestDataValue, | 
|  | kPaymentTestOverwriteValue, | 
|  | "10.99"), | 
|  | DetailsTestCase(kPaymentTestDetailItem, | 
|  | kPaymentTestDataValue, | 
|  | kPaymentTestOverwriteValue, | 
|  | "-3.00"), | 
|  | DetailsTestCase(kPaymentTestDetailItem, | 
|  | kPaymentTestDataValue, | 
|  | kPaymentTestOverwriteValue, | 
|  | "01234567890123456789.0123456789"), | 
|  | DetailsTestCase(kPaymentTestDetailItem, | 
|  | kPaymentTestDataValue, | 
|  | kPaymentTestOverwriteValue, | 
|  | "01234567890123456789012345678.9"), | 
|  | DetailsTestCase(kPaymentTestDetailItem, | 
|  | kPaymentTestDataValue, | 
|  | kPaymentTestOverwriteValue, | 
|  | "012345678901234567890123456789"), | 
|  | DetailsTestCase(kPaymentTestDetailItem, | 
|  | kPaymentTestDataValue, | 
|  | kPaymentTestOverwriteValue, | 
|  | "-01234567890123456789.0123456789"), | 
|  | DetailsTestCase(kPaymentTestDetailItem, | 
|  | kPaymentTestDataValue, | 
|  | kPaymentTestOverwriteValue, | 
|  | "-01234567890123456789012345678.9"), | 
|  | DetailsTestCase(kPaymentTestDetailItem, | 
|  | kPaymentTestDataValue, | 
|  | kPaymentTestOverwriteValue, | 
|  | "-012345678901234567890123456789"), | 
|  | DetailsTestCase(kPaymentTestDetailShippingOption, | 
|  | kPaymentTestDataValue, | 
|  | kPaymentTestOverwriteValue, | 
|  | "0"), | 
|  | DetailsTestCase(kPaymentTestDetailShippingOption, | 
|  | kPaymentTestDataValue, | 
|  | kPaymentTestOverwriteValue, | 
|  | "-0"), | 
|  | DetailsTestCase(kPaymentTestDetailShippingOption, | 
|  | kPaymentTestDataValue, | 
|  | kPaymentTestOverwriteValue, | 
|  | "1"), | 
|  | DetailsTestCase(kPaymentTestDetailShippingOption, | 
|  | kPaymentTestDataValue, | 
|  | kPaymentTestOverwriteValue, | 
|  | "10"), | 
|  | DetailsTestCase(kPaymentTestDetailShippingOption, | 
|  | kPaymentTestDataValue, | 
|  | kPaymentTestOverwriteValue, | 
|  | "-3"), | 
|  | DetailsTestCase(kPaymentTestDetailShippingOption, | 
|  | kPaymentTestDataValue, | 
|  | kPaymentTestOverwriteValue, | 
|  | "10.99"), | 
|  | DetailsTestCase(kPaymentTestDetailShippingOption, | 
|  | kPaymentTestDataValue, | 
|  | kPaymentTestOverwriteValue, | 
|  | "-3.00"), | 
|  | DetailsTestCase(kPaymentTestDetailShippingOption, | 
|  | kPaymentTestDataValue, | 
|  | kPaymentTestOverwriteValue, | 
|  | "01234567890123456789.0123456789"), | 
|  | DetailsTestCase(kPaymentTestDetailShippingOption, | 
|  | kPaymentTestDataValue, | 
|  | kPaymentTestOverwriteValue, | 
|  | "01234567890123456789012345678.9"), | 
|  | DetailsTestCase(kPaymentTestDetailShippingOption, | 
|  | kPaymentTestDataValue, | 
|  | kPaymentTestOverwriteValue, | 
|  | "012345678901234567890123456789"), | 
|  | DetailsTestCase(kPaymentTestDetailShippingOption, | 
|  | kPaymentTestDataValue, | 
|  | kPaymentTestOverwriteValue, | 
|  | "-01234567890123456789.0123456789"), | 
|  | DetailsTestCase(kPaymentTestDetailShippingOption, | 
|  | kPaymentTestDataValue, | 
|  | kPaymentTestOverwriteValue, | 
|  | "-01234567890123456789012345678.9"), | 
|  | DetailsTestCase(kPaymentTestDetailShippingOption, | 
|  | kPaymentTestDataValue, | 
|  | kPaymentTestOverwriteValue, | 
|  | "-012345678901234567890123456789"))); | 
|  |  | 
|  | INSTANTIATE_TEST_CASE_P( | 
|  | ValidValueFormatForModifier, | 
|  | PaymentRequestDetailsTest, | 
|  | ::testing::Values(DetailsTestCase(kPaymentTestDetailModifierTotal, | 
|  | kPaymentTestDataValue, | 
|  | kPaymentTestOverwriteValue, | 
|  | "0"), | 
|  | DetailsTestCase(kPaymentTestDetailModifierTotal, | 
|  | kPaymentTestDataValue, | 
|  | kPaymentTestOverwriteValue, | 
|  | "1"), | 
|  | DetailsTestCase(kPaymentTestDetailModifierTotal, | 
|  | kPaymentTestDataValue, | 
|  | kPaymentTestOverwriteValue, | 
|  | "10"), | 
|  | DetailsTestCase(kPaymentTestDetailModifierTotal, | 
|  | kPaymentTestDataValue, | 
|  | kPaymentTestOverwriteValue, | 
|  | "10.99"), | 
|  | DetailsTestCase(kPaymentTestDetailModifierTotal, | 
|  | kPaymentTestDataValue, | 
|  | kPaymentTestOverwriteValue, | 
|  | "01234567890123456789.0123456789"), | 
|  | DetailsTestCase(kPaymentTestDetailModifierTotal, | 
|  | kPaymentTestDataValue, | 
|  | kPaymentTestOverwriteValue, | 
|  | "01234567890123456789012345678.9"), | 
|  | DetailsTestCase(kPaymentTestDetailModifierTotal, | 
|  | kPaymentTestDataValue, | 
|  | kPaymentTestOverwriteValue, | 
|  | "012345678901234567890123456789"), | 
|  | DetailsTestCase(kPaymentTestDetailModifierItem, | 
|  | kPaymentTestDataValue, | 
|  | kPaymentTestOverwriteValue, | 
|  | "0"), | 
|  | DetailsTestCase(kPaymentTestDetailModifierItem, | 
|  | kPaymentTestDataValue, | 
|  | kPaymentTestOverwriteValue, | 
|  | "-0"), | 
|  | DetailsTestCase(kPaymentTestDetailModifierItem, | 
|  | kPaymentTestDataValue, | 
|  | kPaymentTestOverwriteValue, | 
|  | "1"), | 
|  | DetailsTestCase(kPaymentTestDetailModifierItem, | 
|  | kPaymentTestDataValue, | 
|  | kPaymentTestOverwriteValue, | 
|  | "10"), | 
|  | DetailsTestCase(kPaymentTestDetailModifierItem, | 
|  | kPaymentTestDataValue, | 
|  | kPaymentTestOverwriteValue, | 
|  | "-3"), | 
|  | DetailsTestCase(kPaymentTestDetailModifierItem, | 
|  | kPaymentTestDataValue, | 
|  | kPaymentTestOverwriteValue, | 
|  | "10.99"), | 
|  | DetailsTestCase(kPaymentTestDetailModifierItem, | 
|  | kPaymentTestDataValue, | 
|  | kPaymentTestOverwriteValue, | 
|  | "-3.00"), | 
|  | DetailsTestCase(kPaymentTestDetailModifierItem, | 
|  | kPaymentTestDataValue, | 
|  | kPaymentTestOverwriteValue, | 
|  | "01234567890123456789.0123456789"), | 
|  | DetailsTestCase(kPaymentTestDetailModifierItem, | 
|  | kPaymentTestDataValue, | 
|  | kPaymentTestOverwriteValue, | 
|  | "01234567890123456789012345678.9"), | 
|  | DetailsTestCase(kPaymentTestDetailModifierItem, | 
|  | kPaymentTestDataValue, | 
|  | kPaymentTestOverwriteValue, | 
|  | "012345678901234567890123456789"), | 
|  | DetailsTestCase(kPaymentTestDetailModifierItem, | 
|  | kPaymentTestDataValue, | 
|  | kPaymentTestOverwriteValue, | 
|  | "-01234567890123456789.0123456789"), | 
|  | DetailsTestCase(kPaymentTestDetailModifierItem, | 
|  | kPaymentTestDataValue, | 
|  | kPaymentTestOverwriteValue, | 
|  | "-01234567890123456789012345678.9"), | 
|  | DetailsTestCase(kPaymentTestDetailModifierItem, | 
|  | kPaymentTestDataValue, | 
|  | kPaymentTestOverwriteValue, | 
|  | "-012345678901234567890123456789"))); | 
|  |  | 
|  | INSTANTIATE_TEST_CASE_P( | 
|  | InvalidValueFormat, | 
|  | PaymentRequestDetailsTest, | 
|  | ::testing::Values(DetailsTestCase(kPaymentTestDetailTotal, | 
|  | kPaymentTestDataValue, | 
|  | kPaymentTestOverwriteValue, | 
|  | "-0", | 
|  | true, | 
|  | kV8TypeError), | 
|  | DetailsTestCase(kPaymentTestDetailTotal, | 
|  | kPaymentTestDataValue, | 
|  | kPaymentTestOverwriteValue, | 
|  | "-3", | 
|  | true, | 
|  | kV8TypeError), | 
|  | DetailsTestCase(kPaymentTestDetailTotal, | 
|  | kPaymentTestDataValue, | 
|  | kPaymentTestOverwriteValue, | 
|  | "-3.00", | 
|  | true, | 
|  | kV8TypeError), | 
|  | DetailsTestCase(kPaymentTestDetailTotal, | 
|  | kPaymentTestDataValue, | 
|  | kPaymentTestOverwriteValue, | 
|  | "", | 
|  | true, | 
|  | kV8TypeError), | 
|  | DetailsTestCase(kPaymentTestDetailTotal, | 
|  | kPaymentTestDataValue, | 
|  | kPaymentTestOverwriteValue, | 
|  | "-", | 
|  | true, | 
|  | kV8TypeError), | 
|  | DetailsTestCase(kPaymentTestDetailTotal, | 
|  | kPaymentTestDataValue, | 
|  | kPaymentTestOverwriteValue, | 
|  | "notdigits", | 
|  | true, | 
|  | kV8TypeError), | 
|  | DetailsTestCase(kPaymentTestDetailTotal, | 
|  | kPaymentTestDataValue, | 
|  | kPaymentTestOverwriteValue, | 
|  | "ALSONOTDIGITS", | 
|  | true, | 
|  | kV8TypeError), | 
|  | DetailsTestCase(kPaymentTestDetailTotal, | 
|  | kPaymentTestDataValue, | 
|  | kPaymentTestOverwriteValue, | 
|  | "10.", | 
|  | true, | 
|  | kV8TypeError), | 
|  | DetailsTestCase(kPaymentTestDetailTotal, | 
|  | kPaymentTestDataValue, | 
|  | kPaymentTestOverwriteValue, | 
|  | ".99", | 
|  | true, | 
|  | kV8TypeError), | 
|  | DetailsTestCase(kPaymentTestDetailTotal, | 
|  | kPaymentTestDataValue, | 
|  | kPaymentTestOverwriteValue, | 
|  | "-10.", | 
|  | true, | 
|  | kV8TypeError), | 
|  | DetailsTestCase(kPaymentTestDetailTotal, | 
|  | kPaymentTestDataValue, | 
|  | kPaymentTestOverwriteValue, | 
|  | "10-", | 
|  | true, | 
|  | kV8TypeError), | 
|  | DetailsTestCase(kPaymentTestDetailTotal, | 
|  | kPaymentTestDataValue, | 
|  | kPaymentTestOverwriteValue, | 
|  | "1-0", | 
|  | true, | 
|  | kV8TypeError), | 
|  | DetailsTestCase(kPaymentTestDetailTotal, | 
|  | kPaymentTestDataValue, | 
|  | kPaymentTestOverwriteValue, | 
|  | "1.0.0", | 
|  | true, | 
|  | kV8TypeError), | 
|  | DetailsTestCase(kPaymentTestDetailTotal, | 
|  | kPaymentTestDataValue, | 
|  | kPaymentTestOverwriteValue, | 
|  | "1/3", | 
|  | true, | 
|  | kV8TypeError), | 
|  | DetailsTestCase(kPaymentTestDetailTotal, | 
|  | kPaymentTestDataValue, | 
|  | kPaymentTestOverwriteValue, | 
|  | "-01234567890123456789.0123456789", | 
|  | true, | 
|  | kV8TypeError), | 
|  | DetailsTestCase(kPaymentTestDetailTotal, | 
|  | kPaymentTestDataValue, | 
|  | kPaymentTestOverwriteValue, | 
|  | "-01234567890123456789012345678.9", | 
|  | true, | 
|  | kV8TypeError), | 
|  | DetailsTestCase(kPaymentTestDetailTotal, | 
|  | kPaymentTestDataValue, | 
|  | kPaymentTestOverwriteValue, | 
|  | "-012345678901234567890123456789", | 
|  | true, | 
|  | kV8TypeError), | 
|  | DetailsTestCase(kPaymentTestDetailItem, | 
|  | kPaymentTestDataValue, | 
|  | kPaymentTestOverwriteValue, | 
|  | "", | 
|  | true, | 
|  | kV8TypeError), | 
|  | DetailsTestCase(kPaymentTestDetailItem, | 
|  | kPaymentTestDataValue, | 
|  | kPaymentTestOverwriteValue, | 
|  | "-", | 
|  | true, | 
|  | kV8TypeError), | 
|  | DetailsTestCase(kPaymentTestDetailItem, | 
|  | kPaymentTestDataValue, | 
|  | kPaymentTestOverwriteValue, | 
|  | "notdigits", | 
|  | true, | 
|  | kV8TypeError), | 
|  | DetailsTestCase(kPaymentTestDetailItem, | 
|  | kPaymentTestDataValue, | 
|  | kPaymentTestOverwriteValue, | 
|  | "ALSONOTDIGITS", | 
|  | true, | 
|  | kV8TypeError), | 
|  | DetailsTestCase(kPaymentTestDetailItem, | 
|  | kPaymentTestDataValue, | 
|  | kPaymentTestOverwriteValue, | 
|  | "10.", | 
|  | true, | 
|  | kV8TypeError), | 
|  | DetailsTestCase(kPaymentTestDetailItem, | 
|  | kPaymentTestDataValue, | 
|  | kPaymentTestOverwriteValue, | 
|  | ".99", | 
|  | true, | 
|  | kV8TypeError), | 
|  | DetailsTestCase(kPaymentTestDetailItem, | 
|  | kPaymentTestDataValue, | 
|  | kPaymentTestOverwriteValue, | 
|  | "-10.", | 
|  | true, | 
|  | kV8TypeError), | 
|  | DetailsTestCase(kPaymentTestDetailItem, | 
|  | kPaymentTestDataValue, | 
|  | kPaymentTestOverwriteValue, | 
|  | "10-", | 
|  | true, | 
|  | kV8TypeError), | 
|  | DetailsTestCase(kPaymentTestDetailItem, | 
|  | kPaymentTestDataValue, | 
|  | kPaymentTestOverwriteValue, | 
|  | "1-0", | 
|  | true, | 
|  | kV8TypeError), | 
|  | DetailsTestCase(kPaymentTestDetailItem, | 
|  | kPaymentTestDataValue, | 
|  | kPaymentTestOverwriteValue, | 
|  | "1.0.0", | 
|  | true, | 
|  | kV8TypeError), | 
|  | DetailsTestCase(kPaymentTestDetailItem, | 
|  | kPaymentTestDataValue, | 
|  | kPaymentTestOverwriteValue, | 
|  | "1/3", | 
|  | true, | 
|  | kV8TypeError), | 
|  | DetailsTestCase(kPaymentTestDetailShippingOption, | 
|  | kPaymentTestDataValue, | 
|  | kPaymentTestOverwriteValue, | 
|  | "", | 
|  | true, | 
|  | kV8TypeError), | 
|  | DetailsTestCase(kPaymentTestDetailShippingOption, | 
|  | kPaymentTestDataValue, | 
|  | kPaymentTestOverwriteValue, | 
|  | "-", | 
|  | true, | 
|  | kV8TypeError), | 
|  | DetailsTestCase(kPaymentTestDetailShippingOption, | 
|  | kPaymentTestDataValue, | 
|  | kPaymentTestOverwriteValue, | 
|  | "notdigits", | 
|  | true, | 
|  | kV8TypeError), | 
|  | DetailsTestCase(kPaymentTestDetailShippingOption, | 
|  | kPaymentTestDataValue, | 
|  | kPaymentTestOverwriteValue, | 
|  | "ALSONOTDIGITS", | 
|  | true, | 
|  | kV8TypeError), | 
|  | DetailsTestCase(kPaymentTestDetailShippingOption, | 
|  | kPaymentTestDataValue, | 
|  | kPaymentTestOverwriteValue, | 
|  | "10.", | 
|  | true, | 
|  | kV8TypeError), | 
|  | DetailsTestCase(kPaymentTestDetailShippingOption, | 
|  | kPaymentTestDataValue, | 
|  | kPaymentTestOverwriteValue, | 
|  | ".99", | 
|  | true, | 
|  | kV8TypeError), | 
|  | DetailsTestCase(kPaymentTestDetailShippingOption, | 
|  | kPaymentTestDataValue, | 
|  | kPaymentTestOverwriteValue, | 
|  | "-10.", | 
|  | true, | 
|  | kV8TypeError), | 
|  | DetailsTestCase(kPaymentTestDetailShippingOption, | 
|  | kPaymentTestDataValue, | 
|  | kPaymentTestOverwriteValue, | 
|  | "10-", | 
|  | true, | 
|  | kV8TypeError), | 
|  | DetailsTestCase(kPaymentTestDetailShippingOption, | 
|  | kPaymentTestDataValue, | 
|  | kPaymentTestOverwriteValue, | 
|  | "1-0", | 
|  | true, | 
|  | kV8TypeError), | 
|  | DetailsTestCase(kPaymentTestDetailShippingOption, | 
|  | kPaymentTestDataValue, | 
|  | kPaymentTestOverwriteValue, | 
|  | "1.0.0", | 
|  | true, | 
|  | kV8TypeError), | 
|  | DetailsTestCase(kPaymentTestDetailShippingOption, | 
|  | kPaymentTestDataValue, | 
|  | kPaymentTestOverwriteValue, | 
|  | "1/3", | 
|  | true, | 
|  | kV8TypeError))); | 
|  |  | 
|  | INSTANTIATE_TEST_CASE_P( | 
|  | InvalidValueFormatForModifier, | 
|  | PaymentRequestDetailsTest, | 
|  | ::testing::Values(DetailsTestCase(kPaymentTestDetailModifierTotal, | 
|  | kPaymentTestDataValue, | 
|  | kPaymentTestOverwriteValue, | 
|  | "-0", | 
|  | true, | 
|  | kV8TypeError), | 
|  | DetailsTestCase(kPaymentTestDetailModifierTotal, | 
|  | kPaymentTestDataValue, | 
|  | kPaymentTestOverwriteValue, | 
|  | "-3", | 
|  | true, | 
|  | kV8TypeError), | 
|  | DetailsTestCase(kPaymentTestDetailModifierTotal, | 
|  | kPaymentTestDataValue, | 
|  | kPaymentTestOverwriteValue, | 
|  | "-3.00", | 
|  | true, | 
|  | kV8TypeError), | 
|  | DetailsTestCase(kPaymentTestDetailModifierTotal, | 
|  | kPaymentTestDataValue, | 
|  | kPaymentTestOverwriteValue, | 
|  | "", | 
|  | true, | 
|  | kV8TypeError), | 
|  | DetailsTestCase(kPaymentTestDetailModifierTotal, | 
|  | kPaymentTestDataValue, | 
|  | kPaymentTestOverwriteValue, | 
|  | "-", | 
|  | true, | 
|  | kV8TypeError), | 
|  | DetailsTestCase(kPaymentTestDetailModifierTotal, | 
|  | kPaymentTestDataValue, | 
|  | kPaymentTestOverwriteValue, | 
|  | "notdigits", | 
|  | true, | 
|  | kV8TypeError), | 
|  | DetailsTestCase(kPaymentTestDetailModifierTotal, | 
|  | kPaymentTestDataValue, | 
|  | kPaymentTestOverwriteValue, | 
|  | "ALSONOTDIGITS", | 
|  | true, | 
|  | kV8TypeError), | 
|  | DetailsTestCase(kPaymentTestDetailModifierTotal, | 
|  | kPaymentTestDataValue, | 
|  | kPaymentTestOverwriteValue, | 
|  | "10.", | 
|  | true, | 
|  | kV8TypeError), | 
|  | DetailsTestCase(kPaymentTestDetailModifierTotal, | 
|  | kPaymentTestDataValue, | 
|  | kPaymentTestOverwriteValue, | 
|  | ".99", | 
|  | true, | 
|  | kV8TypeError), | 
|  | DetailsTestCase(kPaymentTestDetailModifierTotal, | 
|  | kPaymentTestDataValue, | 
|  | kPaymentTestOverwriteValue, | 
|  | "-10.", | 
|  | true, | 
|  | kV8TypeError), | 
|  | DetailsTestCase(kPaymentTestDetailModifierTotal, | 
|  | kPaymentTestDataValue, | 
|  | kPaymentTestOverwriteValue, | 
|  | "10-", | 
|  | true, | 
|  | kV8TypeError), | 
|  | DetailsTestCase(kPaymentTestDetailModifierTotal, | 
|  | kPaymentTestDataValue, | 
|  | kPaymentTestOverwriteValue, | 
|  | "1-0", | 
|  | true, | 
|  | kV8TypeError), | 
|  | DetailsTestCase(kPaymentTestDetailModifierTotal, | 
|  | kPaymentTestDataValue, | 
|  | kPaymentTestOverwriteValue, | 
|  | "1.0.0", | 
|  | true, | 
|  | kV8TypeError), | 
|  | DetailsTestCase(kPaymentTestDetailModifierTotal, | 
|  | kPaymentTestDataValue, | 
|  | kPaymentTestOverwriteValue, | 
|  | "1/3", | 
|  | true, | 
|  | kV8TypeError), | 
|  | DetailsTestCase(kPaymentTestDetailModifierTotal, | 
|  | kPaymentTestDataValue, | 
|  | kPaymentTestOverwriteValue, | 
|  | "-01234567890123456789.0123456789", | 
|  | true, | 
|  | kV8TypeError), | 
|  | DetailsTestCase(kPaymentTestDetailModifierTotal, | 
|  | kPaymentTestDataValue, | 
|  | kPaymentTestOverwriteValue, | 
|  | "-01234567890123456789012345678.9", | 
|  | true, | 
|  | kV8TypeError), | 
|  | DetailsTestCase(kPaymentTestDetailModifierTotal, | 
|  | kPaymentTestDataValue, | 
|  | kPaymentTestOverwriteValue, | 
|  | "-012345678901234567890123456789", | 
|  | true, | 
|  | kV8TypeError), | 
|  | DetailsTestCase(kPaymentTestDetailModifierItem, | 
|  | kPaymentTestDataValue, | 
|  | kPaymentTestOverwriteValue, | 
|  | "", | 
|  | true, | 
|  | kV8TypeError), | 
|  | DetailsTestCase(kPaymentTestDetailModifierItem, | 
|  | kPaymentTestDataValue, | 
|  | kPaymentTestOverwriteValue, | 
|  | "-", | 
|  | true, | 
|  | kV8TypeError), | 
|  | DetailsTestCase(kPaymentTestDetailModifierItem, | 
|  | kPaymentTestDataValue, | 
|  | kPaymentTestOverwriteValue, | 
|  | "notdigits", | 
|  | true, | 
|  | kV8TypeError), | 
|  | DetailsTestCase(kPaymentTestDetailModifierItem, | 
|  | kPaymentTestDataValue, | 
|  | kPaymentTestOverwriteValue, | 
|  | "ALSONOTDIGITS", | 
|  | true, | 
|  | kV8TypeError), | 
|  | DetailsTestCase(kPaymentTestDetailModifierItem, | 
|  | kPaymentTestDataValue, | 
|  | kPaymentTestOverwriteValue, | 
|  | "10.", | 
|  | true, | 
|  | kV8TypeError), | 
|  | DetailsTestCase(kPaymentTestDetailModifierItem, | 
|  | kPaymentTestDataValue, | 
|  | kPaymentTestOverwriteValue, | 
|  | ".99", | 
|  | true, | 
|  | kV8TypeError), | 
|  | DetailsTestCase(kPaymentTestDetailModifierItem, | 
|  | kPaymentTestDataValue, | 
|  | kPaymentTestOverwriteValue, | 
|  | "-10.", | 
|  | true, | 
|  | kV8TypeError), | 
|  | DetailsTestCase(kPaymentTestDetailModifierItem, | 
|  | kPaymentTestDataValue, | 
|  | kPaymentTestOverwriteValue, | 
|  | "10-", | 
|  | true, | 
|  | kV8TypeError), | 
|  | DetailsTestCase(kPaymentTestDetailModifierItem, | 
|  | kPaymentTestDataValue, | 
|  | kPaymentTestOverwriteValue, | 
|  | "1-0", | 
|  | true, | 
|  | kV8TypeError), | 
|  | DetailsTestCase(kPaymentTestDetailModifierItem, | 
|  | kPaymentTestDataValue, | 
|  | kPaymentTestOverwriteValue, | 
|  | "1.0.0", | 
|  | true, | 
|  | kV8TypeError), | 
|  | DetailsTestCase(kPaymentTestDetailModifierItem, | 
|  | kPaymentTestDataValue, | 
|  | kPaymentTestOverwriteValue, | 
|  | "1/3", | 
|  | true, | 
|  | kV8TypeError))); | 
|  |  | 
|  | }  // namespace | 
|  | }  // namespace blink |