blob: 4ee9f61029cc8f6f2a4b4360da0a6ef82f550dc4 [file]
// Copyright 2026 Google LLC
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// https://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
//
#include "formats/pdf/number_validator.h"
#include "gtest/gtest.h"
namespace credentio {
namespace {
TEST(NumberValidatorTest, ValidRealNumbers) {
EXPECT_TRUE(IsValidRealNumber("1.23"));
EXPECT_TRUE(IsValidRealNumber("0.0"));
EXPECT_TRUE(IsValidRealNumber("-0.0"));
EXPECT_TRUE(IsValidRealNumber("+1.5"));
EXPECT_TRUE(IsValidRealNumber(".5"));
EXPECT_TRUE(IsValidRealNumber("+.5"));
EXPECT_TRUE(IsValidRealNumber("-5."));
EXPECT_TRUE(IsValidRealNumber(".0"));
EXPECT_TRUE(IsValidRealNumber("-.0"));
EXPECT_TRUE(IsValidRealNumber("+.0"));
}
TEST(NumberValidatorTest, ValidIntegers) {
EXPECT_TRUE(IsValidRealNumber("0"));
EXPECT_TRUE(IsValidRealNumber("123"));
EXPECT_TRUE(IsValidRealNumber("-456"));
EXPECT_TRUE(IsValidRealNumber("+789"));
}
TEST(NumberValidatorTest, ValidScientificNotation) {
EXPECT_TRUE(IsValidRealNumber("1e5"));
EXPECT_TRUE(IsValidRealNumber("1E5"));
EXPECT_TRUE(IsValidRealNumber("1.2e-3"));
EXPECT_TRUE(IsValidRealNumber("+1.23E+4"));
EXPECT_TRUE(IsValidRealNumber("-1.2e3"));
EXPECT_TRUE(IsValidRealNumber(".5e+2"));
EXPECT_TRUE(IsValidRealNumber("5.e-2"));
}
TEST(NumberValidatorTest, InvalidEmptyOrNoDigits) {
EXPECT_FALSE(IsValidRealNumber(""));
EXPECT_FALSE(IsValidRealNumber("+"));
EXPECT_FALSE(IsValidRealNumber("-"));
EXPECT_FALSE(IsValidRealNumber("."));
EXPECT_FALSE(IsValidRealNumber("e"));
EXPECT_FALSE(IsValidRealNumber("E"));
EXPECT_FALSE(IsValidRealNumber("+e"));
EXPECT_FALSE(IsValidRealNumber(".e"));
EXPECT_FALSE(IsValidRealNumber("+."));
EXPECT_FALSE(IsValidRealNumber("+e-"));
EXPECT_FALSE(IsValidRealNumber(".e+"));
}
TEST(NumberValidatorTest, InvalidCharacters) {
EXPECT_FALSE(IsValidRealNumber("abc"));
EXPECT_FALSE(IsValidRealNumber("1.2a"));
EXPECT_FALSE(IsValidRealNumber(" 1.2"));
EXPECT_FALSE(IsValidRealNumber("1.2 "));
EXPECT_FALSE(IsValidRealNumber("1e 5"));
EXPECT_FALSE(IsValidRealNumber("0x123"));
EXPECT_FALSE(IsValidRealNumber("NaN"));
EXPECT_FALSE(IsValidRealNumber("inf"));
EXPECT_FALSE(IsValidRealNumber("infinity"));
}
TEST(NumberValidatorTest, InvalidMultipleSymbols) {
EXPECT_FALSE(IsValidRealNumber("1..2"));
EXPECT_FALSE(IsValidRealNumber("1ee5"));
EXPECT_FALSE(IsValidRealNumber("1e-5e-6"));
EXPECT_FALSE(IsValidRealNumber("--5"));
EXPECT_FALSE(IsValidRealNumber("++5"));
EXPECT_FALSE(IsValidRealNumber("1e+-5"));
EXPECT_FALSE(IsValidRealNumber("1e--5"));
EXPECT_FALSE(IsValidRealNumber("1e++5"));
}
TEST(NumberValidatorTest, InvalidSymbolPositions) {
EXPECT_FALSE(IsValidRealNumber("1+"));
EXPECT_FALSE(IsValidRealNumber("1-"));
EXPECT_FALSE(IsValidRealNumber("1e5+"));
EXPECT_FALSE(IsValidRealNumber("1e5-"));
EXPECT_FALSE(IsValidRealNumber("e1"));
EXPECT_FALSE(IsValidRealNumber("E12"));
}
TEST(NumberValidatorTest, InvalidDecimalAfterExponent) {
EXPECT_FALSE(IsValidRealNumber("1e5.5"));
EXPECT_FALSE(IsValidRealNumber("1.2e3.4"));
EXPECT_FALSE(IsValidRealNumber(".5e2."));
}
TEST(HexadecimalStringValidatorTest, ValidHexadecimalStrings) {
EXPECT_TRUE(IsValidHexadecimalString(""));
EXPECT_TRUE(IsValidHexadecimalString("4E6F76"));
EXPECT_TRUE(IsValidHexadecimalString("4e6f76"));
EXPECT_TRUE(IsValidHexadecimalString("0123456789ABCDEFabcdef"));
EXPECT_TRUE(IsValidHexadecimalString("4E 6F 76"));
EXPECT_TRUE(IsValidHexadecimalString("4E\t6F\r76\n"));
}
TEST(HexadecimalStringValidatorTest, InvalidHexadecimalStrings) {
EXPECT_FALSE(IsValidHexadecimalString("4E6F76g"));
EXPECT_FALSE(IsValidHexadecimalString("4e6f76-"));
EXPECT_FALSE(IsValidHexadecimalString("4E6F76+"));
EXPECT_FALSE(IsValidHexadecimalString("abc/def"));
}
} // namespace
} // namespace credentio