blob: 7ea0bac9e05a504aba563cccc0de5106afc1238e [file] [log] [blame]
// 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/PaymentsValidators.h"
#include "testing/gtest/include/gtest/gtest.h"
#include "wtf/text/WTFString.h"
#include <ostream> // NOLINT
namespace blink {
namespace {
struct TestCase {
TestCase(const char* input, bool expectedValid)
: input(input)
, expectedValid(expectedValid)
{
}
~TestCase() {}
const char* input;
bool expectedValid;
};
std::ostream& operator<<(std::ostream& out, const TestCase& testCase)
{
out << "'" << testCase.input << "' is expected to be " << (testCase.expectedValid ? "valid" : "invalid");
return out;
}
class PaymentsCurrencyValidatorTest : public testing::TestWithParam<TestCase> {
};
TEST_P(PaymentsCurrencyValidatorTest, IsValidCurrencyCodeFormat)
{
String errorMessage;
EXPECT_EQ(GetParam().expectedValid, PaymentsValidators::isValidCurrencyCodeFormat(GetParam().input, &errorMessage)) << errorMessage;
EXPECT_EQ(GetParam().expectedValid, errorMessage.isEmpty()) << errorMessage;
EXPECT_EQ(GetParam().expectedValid, PaymentsValidators::isValidCurrencyCodeFormat(GetParam().input, nullptr));
}
INSTANTIATE_TEST_CASE_P(CurrencyCodes,
PaymentsCurrencyValidatorTest,
testing::Values(
TestCase("USD", true),
// Invalid currency code formats
TestCase("US1", false),
TestCase("US", false),
TestCase("USDO", false),
TestCase("usd", false),
TestCase("", false)));
class PaymentsAmountValidatorTest : public testing::TestWithParam<TestCase> {
};
TEST_P(PaymentsAmountValidatorTest, IsValidAmountFormat)
{
String errorMessage;
EXPECT_EQ(GetParam().expectedValid, PaymentsValidators::isValidAmountFormat(GetParam().input, &errorMessage)) << errorMessage;
EXPECT_EQ(GetParam().expectedValid, errorMessage.isEmpty()) << errorMessage;
EXPECT_EQ(GetParam().expectedValid, PaymentsValidators::isValidAmountFormat(GetParam().input, nullptr));
}
INSTANTIATE_TEST_CASE_P(Amounts,
PaymentsAmountValidatorTest,
testing::Values(
TestCase("0", true),
TestCase("-0", true),
TestCase("1", true),
TestCase("10", true),
TestCase("-3", true),
TestCase("10.99", true),
TestCase("-3.00", true),
TestCase("01234567890123456789.0123456789", true),
TestCase("01234567890123456789012345678.9", true),
TestCase("012345678901234567890123456789", true),
TestCase("-01234567890123456789.0123456789", true),
TestCase("-01234567890123456789012345678.9", true),
TestCase("-012345678901234567890123456789", true),
// Invalid amount formats
TestCase("", false),
TestCase("-", false),
TestCase("notdigits", false),
TestCase("ALSONOTDIGITS", false),
TestCase("10.", false),
TestCase(".99", false),
TestCase("-10.", false),
TestCase("-.99", false),
TestCase("10-", false),
TestCase("1-0", false),
TestCase("1.0.0", false),
TestCase("1/3", false)));
class PaymentsRegionValidatorTest : public testing::TestWithParam<TestCase> {
};
TEST_P(PaymentsRegionValidatorTest, IsValidRegionCodeFormat)
{
String errorMessage;
EXPECT_EQ(GetParam().expectedValid, PaymentsValidators::isValidRegionCodeFormat(GetParam().input, &errorMessage)) << errorMessage;
EXPECT_EQ(GetParam().expectedValid, errorMessage.isEmpty()) << errorMessage;
EXPECT_EQ(GetParam().expectedValid, PaymentsValidators::isValidRegionCodeFormat(GetParam().input, nullptr));
}
INSTANTIATE_TEST_CASE_P(RegionCodes,
PaymentsRegionValidatorTest,
testing::Values(
TestCase("US", true),
// Invalid region code formats
TestCase("U1", false),
TestCase("U", false),
TestCase("us", false),
TestCase("USA", false),
TestCase("", false)));
class PaymentsLanguageValidatorTest : public testing::TestWithParam<TestCase> {
};
TEST_P(PaymentsLanguageValidatorTest, IsValidLanguageCodeFormat)
{
String errorMessage;
EXPECT_EQ(GetParam().expectedValid, PaymentsValidators::isValidLanguageCodeFormat(GetParam().input, &errorMessage)) << errorMessage;
EXPECT_EQ(GetParam().expectedValid, errorMessage.isEmpty()) << errorMessage;
EXPECT_EQ(GetParam().expectedValid, PaymentsValidators::isValidLanguageCodeFormat(GetParam().input, nullptr));
}
INSTANTIATE_TEST_CASE_P(LanguageCodes,
PaymentsLanguageValidatorTest,
testing::Values(
TestCase("", true),
TestCase("en", true),
TestCase("eng", true),
// Invalid language code formats
TestCase("e1", false),
TestCase("en1", false),
TestCase("e", false),
TestCase("engl", false),
TestCase("EN", false)));
class PaymentsScriptValidatorTest : public testing::TestWithParam<TestCase> {
};
TEST_P(PaymentsScriptValidatorTest, IsValidScriptCodeFormat)
{
String errorMessage;
EXPECT_EQ(GetParam().expectedValid, PaymentsValidators::isValidScriptCodeFormat(GetParam().input, &errorMessage)) << errorMessage;
EXPECT_EQ(GetParam().expectedValid, errorMessage.isEmpty()) << errorMessage;
EXPECT_EQ(GetParam().expectedValid, PaymentsValidators::isValidScriptCodeFormat(GetParam().input, nullptr));
}
INSTANTIATE_TEST_CASE_P(ScriptCodes,
PaymentsScriptValidatorTest,
testing::Values(
TestCase("", true),
TestCase("Latn", true),
// Invalid script code formats
TestCase("Lat1", false),
TestCase("1lat", false),
TestCase("Latin", false),
TestCase("Lat", false),
TestCase("latn", false),
TestCase("LATN", false)));
} // namespace
} // namespace blink