| // |
| // 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 "Token.h" |
| |
| struct OperatorTestParam |
| { |
| const char* str; |
| int op; |
| }; |
| |
| class OperatorTest : public PreprocessorTest, |
| public testing::WithParamInterface<OperatorTestParam> |
| { |
| }; |
| |
| 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)); |
| |