blob: 6b8f87e26b55496d68781b496a2e8e4e15c71ebe [file] [log] [blame]
alokp@chromium.org1023bb52012-04-14 09:04:46 +00001//
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
alokp@chromium.orgfc8b7202012-05-25 00:01:13 +00007#include "PreprocessorTest.h"
alokp@chromium.org1023bb52012-04-14 09:04:46 +00008#include "Token.h"
9
alokp@chromium.org484730b2012-05-30 20:13:14 +000010#define CLOSED_RANGE(x, y) testing::Range(x, static_cast<char>((y) + 1))
11
alokp@chromium.orgfc8b7202012-05-25 00:01:13 +000012class IdentifierTest : public PreprocessorTest
alokp@chromium.org1023bb52012-04-14 09:04:46 +000013{
alokp@chromium.orgfc8b7202012-05-25 00:01:13 +000014protected:
alokp@chromium.orgc745adb2012-05-31 18:10:43 +000015 void expectIdentifier(const std::string& str)
alokp@chromium.orgfc8b7202012-05-25 00:01:13 +000016 {
17 const char* cstr = str.c_str();
18 ASSERT_TRUE(mPreprocessor.init(1, &cstr, 0));
alokp@chromium.org2c958ee2012-05-17 20:35:42 +000019
alokp@chromium.orgfc8b7202012-05-25 00:01:13 +000020 pp::Token token;
21 mPreprocessor.lex(&token);
22 EXPECT_EQ(pp::Token::IDENTIFIER, token.type);
alokp@chromium.org5b6a68e2012-06-28 20:29:13 +000023 EXPECT_EQ(str, token.text);
alokp@chromium.orgfc8b7202012-05-25 00:01:13 +000024 }
25};
26
alokp@chromium.orgfc8b7202012-05-25 00:01:13 +000027class SingleLetterIdentifierTest : public IdentifierTest,
28 public testing::WithParamInterface<char>
29{
30};
31
32// This test covers identifier names of form [_a-zA-Z].
33TEST_P(SingleLetterIdentifierTest, Identified)
34{
35 std::string str(1, GetParam());
alokp@chromium.orgc745adb2012-05-31 18:10:43 +000036 expectIdentifier(str);
alokp@chromium.org1023bb52012-04-14 09:04:46 +000037}
38
alokp@chromium.orgfc8b7202012-05-25 00:01:13 +000039// Test string: '_'
40INSTANTIATE_TEST_CASE_P(Underscore,
41 SingleLetterIdentifierTest,
42 testing::Values('_'));
43
44// Test string: [a-z]
45INSTANTIATE_TEST_CASE_P(a_z,
46 SingleLetterIdentifierTest,
47 CLOSED_RANGE('a', 'z'));
48
49// Test string: [A-Z]
50INSTANTIATE_TEST_CASE_P(A_Z,
51 SingleLetterIdentifierTest,
52 CLOSED_RANGE('A', 'Z'));
53
alokp@chromium.org1023bb52012-04-14 09:04:46 +000054typedef std::tr1::tuple<char, char> IdentifierParams;
alokp@chromium.orgfc8b7202012-05-25 00:01:13 +000055class DoubleLetterIdentifierTest :
56 public IdentifierTest,
57 public testing::WithParamInterface<IdentifierParams>
alokp@chromium.org1023bb52012-04-14 09:04:46 +000058{
59};
60
alokp@chromium.orgfc8b7202012-05-25 00:01:13 +000061// This test covers identifier names of form [_a-zA-Z][_a-zA-Z0-9].
62TEST_P(DoubleLetterIdentifierTest, Identified)
alokp@chromium.org1023bb52012-04-14 09:04:46 +000063{
alokp@chromium.orgfc8b7202012-05-25 00:01:13 +000064 std::string str;
65 str.push_back(std::tr1::get<0>(GetParam()));
66 str.push_back(std::tr1::get<1>(GetParam()));
alokp@chromium.org1023bb52012-04-14 09:04:46 +000067
alokp@chromium.orgc745adb2012-05-31 18:10:43 +000068 expectIdentifier(str);
alokp@chromium.org1023bb52012-04-14 09:04:46 +000069}
70
alokp@chromium.org1023bb52012-04-14 09:04:46 +000071// Test string: "__"
alokp@chromium.orgfc8b7202012-05-25 00:01:13 +000072INSTANTIATE_TEST_CASE_P(Underscore_Underscore,
73 DoubleLetterIdentifierTest,
alokp@chromium.org1023bb52012-04-14 09:04:46 +000074 testing::Combine(testing::Values('_'),
75 testing::Values('_')));
76
alokp@chromium.orgaaf75692012-04-25 20:44:28 +000077// Test string: "_"[a-z]
alokp@chromium.orgfc8b7202012-05-25 00:01:13 +000078INSTANTIATE_TEST_CASE_P(Underscore_a_z,
79 DoubleLetterIdentifierTest,
alokp@chromium.org1023bb52012-04-14 09:04:46 +000080 testing::Combine(testing::Values('_'),
alokp@chromium.orgaaf75692012-04-25 20:44:28 +000081 CLOSED_RANGE('a', 'z')));
alokp@chromium.org1023bb52012-04-14 09:04:46 +000082
alokp@chromium.orgaaf75692012-04-25 20:44:28 +000083// Test string: "_"[A-Z]
alokp@chromium.orgfc8b7202012-05-25 00:01:13 +000084INSTANTIATE_TEST_CASE_P(Underscore_A_Z,
85 DoubleLetterIdentifierTest,
alokp@chromium.org1023bb52012-04-14 09:04:46 +000086 testing::Combine(testing::Values('_'),
alokp@chromium.orgaaf75692012-04-25 20:44:28 +000087 CLOSED_RANGE('A', 'Z')));
alokp@chromium.org1023bb52012-04-14 09:04:46 +000088
89// Test string: "_"[0-9]
alokp@chromium.orgfc8b7202012-05-25 00:01:13 +000090INSTANTIATE_TEST_CASE_P(Underscore_0_9,
91 DoubleLetterIdentifierTest,
alokp@chromium.org1023bb52012-04-14 09:04:46 +000092 testing::Combine(testing::Values('_'),
alokp@chromium.orgaaf75692012-04-25 20:44:28 +000093 CLOSED_RANGE('0', '9')));
alokp@chromium.org1023bb52012-04-14 09:04:46 +000094
alokp@chromium.orgaaf75692012-04-25 20:44:28 +000095// Test string: [a-z]"_"
alokp@chromium.orgfc8b7202012-05-25 00:01:13 +000096INSTANTIATE_TEST_CASE_P(a_z_Underscore,
97 DoubleLetterIdentifierTest,
alokp@chromium.orgaaf75692012-04-25 20:44:28 +000098 testing::Combine(CLOSED_RANGE('a', 'z'),
alokp@chromium.org1023bb52012-04-14 09:04:46 +000099 testing::Values('_')));
100
alokp@chromium.orgaaf75692012-04-25 20:44:28 +0000101// Test string: [a-z][a-z]
alokp@chromium.orgfc8b7202012-05-25 00:01:13 +0000102INSTANTIATE_TEST_CASE_P(a_z_a_z,
103 DoubleLetterIdentifierTest,
alokp@chromium.orgaaf75692012-04-25 20:44:28 +0000104 testing::Combine(CLOSED_RANGE('a', 'z'),
105 CLOSED_RANGE('a', 'z')));
alokp@chromium.org1023bb52012-04-14 09:04:46 +0000106
alokp@chromium.orgaaf75692012-04-25 20:44:28 +0000107// Test string: [a-z][A-Z]
alokp@chromium.orgfc8b7202012-05-25 00:01:13 +0000108INSTANTIATE_TEST_CASE_P(a_z_A_Z,
109 DoubleLetterIdentifierTest,
alokp@chromium.orgaaf75692012-04-25 20:44:28 +0000110 testing::Combine(CLOSED_RANGE('a', 'z'),
111 CLOSED_RANGE('A', 'Z')));
alokp@chromium.org1023bb52012-04-14 09:04:46 +0000112
alokp@chromium.orgaaf75692012-04-25 20:44:28 +0000113// Test string: [a-z][0-9]
alokp@chromium.orgfc8b7202012-05-25 00:01:13 +0000114INSTANTIATE_TEST_CASE_P(a_z_0_9,
115 DoubleLetterIdentifierTest,
alokp@chromium.orgaaf75692012-04-25 20:44:28 +0000116 testing::Combine(CLOSED_RANGE('a', 'z'),
117 CLOSED_RANGE('0', '9')));
alokp@chromium.org1023bb52012-04-14 09:04:46 +0000118
alokp@chromium.orgaaf75692012-04-25 20:44:28 +0000119// Test string: [A-Z]"_"
alokp@chromium.orgfc8b7202012-05-25 00:01:13 +0000120INSTANTIATE_TEST_CASE_P(A_Z_Underscore,
121 DoubleLetterIdentifierTest,
alokp@chromium.orgaaf75692012-04-25 20:44:28 +0000122 testing::Combine(CLOSED_RANGE('A', 'Z'),
alokp@chromium.org1023bb52012-04-14 09:04:46 +0000123 testing::Values('_')));
124
alokp@chromium.orgaaf75692012-04-25 20:44:28 +0000125// Test string: [A-Z][a-z]
alokp@chromium.orgfc8b7202012-05-25 00:01:13 +0000126INSTANTIATE_TEST_CASE_P(A_Z_a_z,
127 DoubleLetterIdentifierTest,
alokp@chromium.orgaaf75692012-04-25 20:44:28 +0000128 testing::Combine(CLOSED_RANGE('A', 'Z'),
129 CLOSED_RANGE('a', 'z')));
alokp@chromium.org1023bb52012-04-14 09:04:46 +0000130
alokp@chromium.orgaaf75692012-04-25 20:44:28 +0000131// Test string: [A-Z][A-Z]
alokp@chromium.orgfc8b7202012-05-25 00:01:13 +0000132INSTANTIATE_TEST_CASE_P(A_Z_A_Z,
133 DoubleLetterIdentifierTest,
alokp@chromium.orgaaf75692012-04-25 20:44:28 +0000134 testing::Combine(CLOSED_RANGE('A', 'Z'),
135 CLOSED_RANGE('A', 'Z')));
alokp@chromium.org1023bb52012-04-14 09:04:46 +0000136
alokp@chromium.orgaaf75692012-04-25 20:44:28 +0000137// Test string: [A-Z][0-9]
alokp@chromium.orgfc8b7202012-05-25 00:01:13 +0000138INSTANTIATE_TEST_CASE_P(A_Z_0_9,
139 DoubleLetterIdentifierTest,
alokp@chromium.orgaaf75692012-04-25 20:44:28 +0000140 testing::Combine(CLOSED_RANGE('A', 'Z'),
141 CLOSED_RANGE('0', '9')));
alokp@chromium.org1023bb52012-04-14 09:04:46 +0000142
alokp@chromium.org1023bb52012-04-14 09:04:46 +0000143// The tests above cover one-letter and various combinations of two-letter
144// identifier names. This test covers all characters in a single string.
alokp@chromium.orgfc8b7202012-05-25 00:01:13 +0000145TEST_F(IdentifierTest, AllLetters)
alokp@chromium.org1023bb52012-04-14 09:04:46 +0000146{
147 std::string str;
Peter Kasting71117e22014-08-25 16:22:51 -0700148 for (char c = 'a'; c <= 'z'; ++c)
alokp@chromium.org1023bb52012-04-14 09:04:46 +0000149 str.push_back(c);
150
151 str.push_back('_');
152
Peter Kasting71117e22014-08-25 16:22:51 -0700153 for (char c = 'A'; c <= 'Z'; ++c)
alokp@chromium.org1023bb52012-04-14 09:04:46 +0000154 str.push_back(c);
155
156 str.push_back('_');
157
Peter Kasting71117e22014-08-25 16:22:51 -0700158 for (char c = '0'; c <= '9'; ++c)
alokp@chromium.org1023bb52012-04-14 09:04:46 +0000159 str.push_back(c);
160
alokp@chromium.orgc745adb2012-05-31 18:10:43 +0000161 expectIdentifier(str);
alokp@chromium.org1023bb52012-04-14 09:04:46 +0000162}