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) {