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, ¶m.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