Add regression test for FX_Number.

Add more test cases, as the single test case for crbug.com/pdfium/539
was insufficient to catch the same issue happening again with a
different value.

Restructure the test to test more cases easily.

Bug: chromium:1124998
Change-Id: I75cd9f68ffd266665348f0be2d61dcac02dfc0f9
Reviewed-on: https://pdfium-review.googlesource.com/c/pdfium/+/73337
Commit-Queue: Lei Zhang <thestig@chromium.org>
Reviewed-by: Tom Sepez <tsepez@chromium.org>
diff --git a/core/fxcrt/fx_number_unittest.cpp b/core/fxcrt/fx_number_unittest.cpp
index a31dc55..00652c5 100644
--- a/core/fxcrt/fx_number_unittest.cpp
+++ b/core/fxcrt/fx_number_unittest.cpp
@@ -46,39 +46,46 @@
 }
 
 TEST(fxnumber, FromStringUnsigned) {
-  {
-    FX_Number number("");
-    EXPECT_TRUE(number.IsInteger());
-    EXPECT_FALSE(number.IsSigned());
-  }
-  {
-    FX_Number number("0");
-    EXPECT_TRUE(number.IsInteger());
-    EXPECT_FALSE(number.IsSigned());
-  }
-  {
-    FX_Number number("10");
-    EXPECT_TRUE(number.IsInteger());
-    EXPECT_FALSE(number.IsSigned());
-  }
-  {
-    FX_Number number("4294967295");
-    EXPECT_TRUE(number.IsInteger());
-    EXPECT_FALSE(number.IsSigned());
-  }
-  {
-    // Value overflows.
-    FX_Number number("4223423494965252");
-    EXPECT_TRUE(number.IsInteger());
-    EXPECT_FALSE(number.IsSigned());
-  }
-  {
-    // No explicit sign will allow the number to go negative if we retrieve
-    // it as a signed value. This is needed for things like the encryption
-    // Permissions flag (Table 3.20 PDF 1.7 spec)
-    FX_Number number("4294965252");
-    EXPECT_EQ(-2044, number.GetSigned());
-  }
+  struct TestCase {
+    const char* input;
+    int expected_output;
+  };
+
+  auto test_func = [](pdfium::span<const TestCase> test_cases) {
+    for (const auto& test : test_cases) {
+      FX_Number number(test.input);
+      EXPECT_TRUE(number.IsInteger());
+      EXPECT_FALSE(number.IsSigned());
+      EXPECT_EQ(test.expected_output, number.GetSigned());
+    }
+  };
+
+  static constexpr TestCase kNormalCases[] = {
+      {"", 0},
+      {"0", 0},
+      {"10", 10},
+  };
+  test_func(kNormalCases);
+
+  static constexpr TestCase kOverflowCases[] = {
+      {"4223423494965252", 0},
+      {"4294967296", 0},
+      {"4294967297", 0},
+      {"5000000000", 0},
+  };
+  test_func(kOverflowCases);
+
+  // No explicit sign will allow the number to go negative if retrieved as a
+  // signed value. This is needed for things like the encryption permissions
+  // flag (Table 3.20 PDF 1.7 spec)
+  static constexpr TestCase kNegativeCases[] = {
+      {"4294965252", -2044},
+      {"4294967247", -49},
+      {"4294967248", -48},
+      {"4294967292", -4},
+      {"4294967295", -1},
+  };
+  test_func(kNegativeCases);
 }
 
 TEST(fxnumber, FromStringSigned) {