Home | History | Annotate | Download | only in page
      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 
      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