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 10struct OperatorTestParam 11{ 12 const char* str; 13 int op; 14}; 15 16class OperatorTest : public PreprocessorTest, 17 public testing::WithParamInterface<OperatorTestParam> 18{ 19}; 20 21TEST_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 33static 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 78INSTANTIATE_TEST_CASE_P(All, OperatorTest, 79 testing::ValuesIn(kOperators)); 80 81