Home | History | Annotate | Download | only in preprocessor_tests
      1 //
      2 // Copyright (c) 2012 The ANGLE Project Authors. All rights reserved.
      3 // Use of this source code is governed by a BSD-style license that can be
      4 // found in the LICENSE file.
      5 //
      6 
      7 #include "PreprocessorTest.h"
      8 #include "Token.h"
      9 
     10 struct OperatorTestParam
     11 {
     12     const char* str;
     13     int op;
     14 };
     15 
     16 class OperatorTest : public PreprocessorTest,
     17                      public testing::WithParamInterface<OperatorTestParam>
     18 {
     19 };
     20 
     21 TEST_P(OperatorTest, Identified)
     22 {
     23     OperatorTestParam param = GetParam();
     24 
     25     ASSERT_TRUE(mPreprocessor.init(1, &param.str, 0));
     26 
     27     pp::Token token;
     28     mPreprocessor.lex(&token);
     29     EXPECT_EQ(param.op, token.type);
     30     EXPECT_EQ(param.str, token.text);
     31 }
     32 
     33 static const OperatorTestParam kOperators[] = {
     34     {"(", '('},
     35     {")", ')'},
     36     {"[", '['},
     37     {"]", ']'},
     38     {".", '.'},
     39     {"+", '+'},
     40     {"-", '-'},
     41     {"~", '~'},
     42     {"!", '!'},
     43     {"*", '*'},
     44     {"/", '/'},
     45     {"%", '%'},
     46     {"<", '<'},
     47     {">", '>'},
     48     {"&", '&'},
     49     {"^", '^'},
     50     {"|", '|'},
     51     {"?", '?'},
     52     {":", ':'},
     53     {"=", '='},
     54     {",", ','},
     55     {"++",  pp::Token::OP_INC},
     56     {"--",  pp::Token::OP_DEC},
     57     {"<<",  pp::Token::OP_LEFT},
     58     {">>",  pp::Token::OP_RIGHT},
     59     {"<=",  pp::Token::OP_LE},
     60     {">=",  pp::Token::OP_GE},
     61     {"==",  pp::Token::OP_EQ},
     62     {"!=",  pp::Token::OP_NE},
     63     {"&&",  pp::Token::OP_AND},
     64     {"^^",  pp::Token::OP_XOR},
     65     {"||",  pp::Token::OP_OR},
     66     {"+=",  pp::Token::OP_ADD_ASSIGN},
     67     {"-=",  pp::Token::OP_SUB_ASSIGN},
     68     {"*=",  pp::Token::OP_MUL_ASSIGN},
     69     {"/=",  pp::Token::OP_DIV_ASSIGN},
     70     {"%=",  pp::Token::OP_MOD_ASSIGN},
     71     {"<<=", pp::Token::OP_LEFT_ASSIGN},
     72     {">>=", pp::Token::OP_RIGHT_ASSIGN},
     73     {"&=",  pp::Token::OP_AND_ASSIGN},
     74     {"^=",  pp::Token::OP_XOR_ASSIGN},
     75     {"|=",  pp::Token::OP_OR_ASSIGN}
     76 };
     77 
     78 INSTANTIATE_TEST_CASE_P(All, OperatorTest,
     79                         testing::ValuesIn(kOperators));
     80 
     81