// 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
