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