// // Copyright (c) 2012 The ANGLE Project Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. // #include "PreprocessorTest.h" #include "compiler/preprocessor/Token.h" struct OperatorTestParam { const char* str; int op; }; class OperatorTest : public PreprocessorTest, public testing::WithParamInterface { }; TEST_P(OperatorTest, Identified) { OperatorTestParam param = GetParam(); ASSERT_TRUE(mPreprocessor.init(1, ¶m.str, 0)); pp::Token token; mPreprocessor.lex(&token); EXPECT_EQ(param.op, token.type); EXPECT_EQ(param.str, token.text); } static const OperatorTestParam kOperators[] = { {"(", '('}, {")", ')'}, {"[", '['}, {"]", ']'}, {".", '.'}, {"+", '+'}, {"-", '-'}, {"~", '~'}, {"!", '!'}, {"*", '*'}, {"/", '/'}, {"%", '%'}, {"<", '<'}, {">", '>'}, {"&", '&'}, {"^", '^'}, {"|", '|'}, {"?", '?'}, {":", ':'}, {"=", '='}, {",", ','}, {"++", pp::Token::OP_INC}, {"--", pp::Token::OP_DEC}, {"<<", pp::Token::OP_LEFT}, {">>", pp::Token::OP_RIGHT}, {"<=", pp::Token::OP_LE}, {">=", pp::Token::OP_GE}, {"==", pp::Token::OP_EQ}, {"!=", pp::Token::OP_NE}, {"&&", pp::Token::OP_AND}, {"^^", pp::Token::OP_XOR}, {"||", pp::Token::OP_OR}, {"+=", pp::Token::OP_ADD_ASSIGN}, {"-=", pp::Token::OP_SUB_ASSIGN}, {"*=", pp::Token::OP_MUL_ASSIGN}, {"/=", pp::Token::OP_DIV_ASSIGN}, {"%=", pp::Token::OP_MOD_ASSIGN}, {"<<=", pp::Token::OP_LEFT_ASSIGN}, {">>=", pp::Token::OP_RIGHT_ASSIGN}, {"&=", pp::Token::OP_AND_ASSIGN}, {"^=", pp::Token::OP_XOR_ASSIGN}, {"|=", pp::Token::OP_OR_ASSIGN} }; INSTANTIATE_TEST_CASE_P(All, OperatorTest, testing::ValuesIn(kOperators));