• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 // Copyright 2017 PDFium Authors. All rights reserved.
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 "core/fpdfapi/page/cpdf_psengine.h"
6 #include "testing/gtest/include/gtest/gtest.h"
7 
TEST(CPDF_PSProc,AddOperator)8 TEST(CPDF_PSProc, AddOperator) {
9   static const struct {
10     const char* name;
11     PDF_PSOP op;
12   } kTestData[] = {
13       {"add", PSOP_ADD},         {"sub", PSOP_SUB},
14       {"mul", PSOP_MUL},         {"div", PSOP_DIV},
15       {"idiv", PSOP_IDIV},       {"mod", PSOP_MOD},
16       {"neg", PSOP_NEG},         {"abs", PSOP_ABS},
17       {"ceiling", PSOP_CEILING}, {"floor", PSOP_FLOOR},
18       {"round", PSOP_ROUND},     {"truncate", PSOP_TRUNCATE},
19       {"sqrt", PSOP_SQRT},       {"sin", PSOP_SIN},
20       {"cos", PSOP_COS},         {"atan", PSOP_ATAN},
21       {"exp", PSOP_EXP},         {"ln", PSOP_LN},
22       {"log", PSOP_LOG},         {"cvi", PSOP_CVI},
23       {"cvr", PSOP_CVR},         {"eq", PSOP_EQ},
24       {"ne", PSOP_NE},           {"gt", PSOP_GT},
25       {"ge", PSOP_GE},           {"lt", PSOP_LT},
26       {"le", PSOP_LE},           {"and", PSOP_AND},
27       {"or", PSOP_OR},           {"xor", PSOP_XOR},
28       {"not", PSOP_NOT},         {"bitshift", PSOP_BITSHIFT},
29       {"true", PSOP_TRUE},       {"false", PSOP_FALSE},
30       {"if", PSOP_IF},           {"ifelse", PSOP_IFELSE},
31       {"pop", PSOP_POP},         {"exch", PSOP_EXCH},
32       {"dup", PSOP_DUP},         {"copy", PSOP_COPY},
33       {"index", PSOP_INDEX},     {"roll", PSOP_ROLL},
34       {"55", PSOP_CONST},        {"123.4", PSOP_CONST},
35       {"-5", PSOP_CONST},        {"invalid", PSOP_CONST},
36   };
37 
38   CPDF_PSProc proc;
39   EXPECT_EQ(0U, proc.num_operators());
40   for (size_t i = 0; i < FX_ArraySize(kTestData); ++i) {
41     ByteStringView word(kTestData[i].name);
42     proc.AddOperatorForTesting(word);
43     ASSERT_EQ(i + 1, proc.num_operators());
44     const std::unique_ptr<CPDF_PSOP>& new_psop = proc.last_operator();
45     ASSERT_TRUE(new_psop);
46     PDF_PSOP new_op = new_psop->GetOp();
47     EXPECT_EQ(kTestData[i].op, new_op);
48     if (new_op == PSOP_CONST) {
49       float fv = new_psop->GetFloatValue();
50       if (word == "invalid")
51         EXPECT_FLOAT_EQ(0, fv);
52       else
53         EXPECT_EQ(word, ByteString::FormatFloat(fv));
54     }
55   }
56 }
57