xref: /aosp_15_r20/external/pdfium/fpdfsdk/cpdfsdk_helpers_unittest.cpp (revision 3ac0a46f773bac49fa9476ec2b1cf3f8da5ec3a4)
1 // Copyright 2020 The PDFium Authors
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4 
5 #include "fpdfsdk/cpdfsdk_helpers.h"
6 
7 #include "testing/gmock/include/gmock/gmock.h"
8 #include "testing/gtest/include/gtest/gtest.h"
9 
10 using ::testing::ElementsAre;
11 using ::testing::IsEmpty;
12 
TEST(CPDFSDK_HelpersTest,NulTerminateMaybeCopyAndReturnLength)13 TEST(CPDFSDK_HelpersTest, NulTerminateMaybeCopyAndReturnLength) {
14   {
15     const ByteString to_be_copied("toBeCopied");
16     constexpr size_t kExpectedToBeCopiedLen = 10;
17     ASSERT_EQ(kExpectedToBeCopiedLen, to_be_copied.GetLength());
18 
19     EXPECT_EQ(kExpectedToBeCopiedLen + 1,
20               NulTerminateMaybeCopyAndReturnLength(to_be_copied, nullptr, 0));
21 
22     // Buffer should not change if declared length is too short.
23     char buf[kExpectedToBeCopiedLen + 1];
24     memset(buf, 0x42, kExpectedToBeCopiedLen + 1);
25     ASSERT_EQ(kExpectedToBeCopiedLen + 1,
26               NulTerminateMaybeCopyAndReturnLength(to_be_copied, buf,
27                                                    kExpectedToBeCopiedLen));
28     for (char c : buf)
29       EXPECT_EQ(0x42, c);
30 
31     // Buffer should copy over if long enough.
32     ASSERT_EQ(kExpectedToBeCopiedLen + 1,
33               NulTerminateMaybeCopyAndReturnLength(to_be_copied, buf,
34                                                    kExpectedToBeCopiedLen + 1));
35     EXPECT_EQ(to_be_copied, ByteString(buf));
36   }
37   {
38     // Empty ByteString should still copy NUL terminator.
39     const ByteString empty;
40     char buf[1];
41     ASSERT_EQ(1u, NulTerminateMaybeCopyAndReturnLength(empty, buf, 1));
42     EXPECT_EQ(empty, ByteString(buf));
43   }
44 }
45 
TEST(CPDFSDK_HelpersTest,ParsePageRangeString)46 TEST(CPDFSDK_HelpersTest, ParsePageRangeString) {
47   EXPECT_THAT(ParsePageRangeString("", 1), IsEmpty());
48   EXPECT_THAT(ParsePageRangeString(" ", 1), IsEmpty());
49   EXPECT_THAT(ParsePageRangeString("clams", 1), IsEmpty());
50   EXPECT_THAT(ParsePageRangeString("0", 0), IsEmpty());
51   EXPECT_THAT(ParsePageRangeString("1", 0), IsEmpty());
52   EXPECT_THAT(ParsePageRangeString(",1", 10), IsEmpty());
53   EXPECT_THAT(ParsePageRangeString("1,", 10), IsEmpty());
54   EXPECT_THAT(ParsePageRangeString("1,clams", 1), IsEmpty());
55   EXPECT_THAT(ParsePageRangeString("clams,1", 1), IsEmpty());
56   EXPECT_THAT(ParsePageRangeString("0-1", 10), IsEmpty());
57   EXPECT_THAT(ParsePageRangeString("1-0", 10), IsEmpty());
58   EXPECT_THAT(ParsePageRangeString("1-5", 4), IsEmpty());
59   EXPECT_THAT(ParsePageRangeString("1-11,", 10), IsEmpty());
60   EXPECT_THAT(ParsePageRangeString(",1-1", 10), IsEmpty());
61   EXPECT_THAT(ParsePageRangeString("1-", 10), IsEmpty());
62   EXPECT_THAT(ParsePageRangeString("1-,", 10), IsEmpty());
63   EXPECT_THAT(ParsePageRangeString("-2,", 10), IsEmpty());
64   EXPECT_THAT(ParsePageRangeString("1-clams", 10), IsEmpty());
65   EXPECT_THAT(ParsePageRangeString("clams-1,", 10), IsEmpty());
66   EXPECT_THAT(ParsePageRangeString("1-2clams", 10), IsEmpty());
67   EXPECT_THAT(ParsePageRangeString("0,1", 10), IsEmpty());
68   EXPECT_THAT(ParsePageRangeString("1,0", 10), IsEmpty());
69   EXPECT_THAT(ParsePageRangeString("1-2,,,,3-4", 10), IsEmpty());
70   EXPECT_THAT(ParsePageRangeString("1-2-", 10), IsEmpty());
71 
72   EXPECT_THAT(ParsePageRangeString("1-1", 10), ElementsAre(0));
73   EXPECT_THAT(ParsePageRangeString("1", 1), ElementsAre(0));
74   EXPECT_THAT(ParsePageRangeString("1-4", 4), ElementsAre(0, 1, 2, 3));
75   EXPECT_THAT(ParsePageRangeString("1- 4", 4), ElementsAre(0, 1, 2, 3));
76   EXPECT_THAT(ParsePageRangeString("1 -4", 4), ElementsAre(0, 1, 2, 3));
77   EXPECT_THAT(ParsePageRangeString("1,2", 10), ElementsAre(0, 1));
78   EXPECT_THAT(ParsePageRangeString("2,1", 10), ElementsAre(1, 0));
79   EXPECT_THAT(ParsePageRangeString("1,50,2", 100), ElementsAre(0, 49, 1));
80   EXPECT_THAT(ParsePageRangeString("1-4,50", 100), ElementsAre(0, 1, 2, 3, 49));
81   EXPECT_THAT(ParsePageRangeString("50,1-2", 100), ElementsAre(49, 0, 1));
82   EXPECT_THAT(ParsePageRangeString("5  0, 1-2 ", 100),
83               ElementsAre(49, 0, 1));  // ???
84   EXPECT_THAT(ParsePageRangeString("1-3,4-6", 10),
85               ElementsAre(0, 1, 2, 3, 4, 5));
86   EXPECT_THAT(ParsePageRangeString("1-4,3-6", 10),
87               ElementsAre(0, 1, 2, 3, 2, 3, 4, 5));
88 }
89