alokp@chromium.org | 1023bb5 | 2012-04-14 09:04:46 +0000 | [diff] [blame] | 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 | |
alokp@chromium.org | fc8b720 | 2012-05-25 00:01:13 +0000 | [diff] [blame] | 7 | #include "PreprocessorTest.h" |
alokp@chromium.org | 1023bb5 | 2012-04-14 09:04:46 +0000 | [diff] [blame] | 8 | #include "Token.h" |
| 9 | |
alokp@chromium.org | 484730b | 2012-05-30 20:13:14 +0000 | [diff] [blame] | 10 | #define CLOSED_RANGE(x, y) testing::Range(x, static_cast<char>((y) + 1)) |
| 11 | |
alokp@chromium.org | fc8b720 | 2012-05-25 00:01:13 +0000 | [diff] [blame] | 12 | class IdentifierTest : public PreprocessorTest |
alokp@chromium.org | 1023bb5 | 2012-04-14 09:04:46 +0000 | [diff] [blame] | 13 | { |
alokp@chromium.org | fc8b720 | 2012-05-25 00:01:13 +0000 | [diff] [blame] | 14 | protected: |
alokp@chromium.org | c745adb | 2012-05-31 18:10:43 +0000 | [diff] [blame] | 15 | void expectIdentifier(const std::string& str) |
alokp@chromium.org | fc8b720 | 2012-05-25 00:01:13 +0000 | [diff] [blame] | 16 | { |
| 17 | const char* cstr = str.c_str(); |
| 18 | ASSERT_TRUE(mPreprocessor.init(1, &cstr, 0)); |
alokp@chromium.org | 2c958ee | 2012-05-17 20:35:42 +0000 | [diff] [blame] | 19 | |
alokp@chromium.org | fc8b720 | 2012-05-25 00:01:13 +0000 | [diff] [blame] | 20 | pp::Token token; |
| 21 | mPreprocessor.lex(&token); |
| 22 | EXPECT_EQ(pp::Token::IDENTIFIER, token.type); |
alokp@chromium.org | 5b6a68e | 2012-06-28 20:29:13 +0000 | [diff] [blame] | 23 | EXPECT_EQ(str, token.text); |
alokp@chromium.org | fc8b720 | 2012-05-25 00:01:13 +0000 | [diff] [blame] | 24 | } |
| 25 | }; |
| 26 | |
alokp@chromium.org | fc8b720 | 2012-05-25 00:01:13 +0000 | [diff] [blame] | 27 | class SingleLetterIdentifierTest : public IdentifierTest, |
| 28 | public testing::WithParamInterface<char> |
| 29 | { |
| 30 | }; |
| 31 | |
| 32 | // This test covers identifier names of form [_a-zA-Z]. |
| 33 | TEST_P(SingleLetterIdentifierTest, Identified) |
| 34 | { |
| 35 | std::string str(1, GetParam()); |
alokp@chromium.org | c745adb | 2012-05-31 18:10:43 +0000 | [diff] [blame] | 36 | expectIdentifier(str); |
alokp@chromium.org | 1023bb5 | 2012-04-14 09:04:46 +0000 | [diff] [blame] | 37 | } |
| 38 | |
alokp@chromium.org | fc8b720 | 2012-05-25 00:01:13 +0000 | [diff] [blame] | 39 | // Test string: '_' |
| 40 | INSTANTIATE_TEST_CASE_P(Underscore, |
| 41 | SingleLetterIdentifierTest, |
| 42 | testing::Values('_')); |
| 43 | |
| 44 | // Test string: [a-z] |
| 45 | INSTANTIATE_TEST_CASE_P(a_z, |
| 46 | SingleLetterIdentifierTest, |
| 47 | CLOSED_RANGE('a', 'z')); |
| 48 | |
| 49 | // Test string: [A-Z] |
| 50 | INSTANTIATE_TEST_CASE_P(A_Z, |
| 51 | SingleLetterIdentifierTest, |
| 52 | CLOSED_RANGE('A', 'Z')); |
| 53 | |
alokp@chromium.org | 1023bb5 | 2012-04-14 09:04:46 +0000 | [diff] [blame] | 54 | typedef std::tr1::tuple<char, char> IdentifierParams; |
alokp@chromium.org | fc8b720 | 2012-05-25 00:01:13 +0000 | [diff] [blame] | 55 | class DoubleLetterIdentifierTest : |
| 56 | public IdentifierTest, |
| 57 | public testing::WithParamInterface<IdentifierParams> |
alokp@chromium.org | 1023bb5 | 2012-04-14 09:04:46 +0000 | [diff] [blame] | 58 | { |
| 59 | }; |
| 60 | |
alokp@chromium.org | fc8b720 | 2012-05-25 00:01:13 +0000 | [diff] [blame] | 61 | // This test covers identifier names of form [_a-zA-Z][_a-zA-Z0-9]. |
| 62 | TEST_P(DoubleLetterIdentifierTest, Identified) |
alokp@chromium.org | 1023bb5 | 2012-04-14 09:04:46 +0000 | [diff] [blame] | 63 | { |
alokp@chromium.org | fc8b720 | 2012-05-25 00:01:13 +0000 | [diff] [blame] | 64 | std::string str; |
| 65 | str.push_back(std::tr1::get<0>(GetParam())); |
| 66 | str.push_back(std::tr1::get<1>(GetParam())); |
alokp@chromium.org | 1023bb5 | 2012-04-14 09:04:46 +0000 | [diff] [blame] | 67 | |
alokp@chromium.org | c745adb | 2012-05-31 18:10:43 +0000 | [diff] [blame] | 68 | expectIdentifier(str); |
alokp@chromium.org | 1023bb5 | 2012-04-14 09:04:46 +0000 | [diff] [blame] | 69 | } |
| 70 | |
alokp@chromium.org | 1023bb5 | 2012-04-14 09:04:46 +0000 | [diff] [blame] | 71 | // Test string: "__" |
alokp@chromium.org | fc8b720 | 2012-05-25 00:01:13 +0000 | [diff] [blame] | 72 | INSTANTIATE_TEST_CASE_P(Underscore_Underscore, |
| 73 | DoubleLetterIdentifierTest, |
alokp@chromium.org | 1023bb5 | 2012-04-14 09:04:46 +0000 | [diff] [blame] | 74 | testing::Combine(testing::Values('_'), |
| 75 | testing::Values('_'))); |
| 76 | |
alokp@chromium.org | aaf7569 | 2012-04-25 20:44:28 +0000 | [diff] [blame] | 77 | // Test string: "_"[a-z] |
alokp@chromium.org | fc8b720 | 2012-05-25 00:01:13 +0000 | [diff] [blame] | 78 | INSTANTIATE_TEST_CASE_P(Underscore_a_z, |
| 79 | DoubleLetterIdentifierTest, |
alokp@chromium.org | 1023bb5 | 2012-04-14 09:04:46 +0000 | [diff] [blame] | 80 | testing::Combine(testing::Values('_'), |
alokp@chromium.org | aaf7569 | 2012-04-25 20:44:28 +0000 | [diff] [blame] | 81 | CLOSED_RANGE('a', 'z'))); |
alokp@chromium.org | 1023bb5 | 2012-04-14 09:04:46 +0000 | [diff] [blame] | 82 | |
alokp@chromium.org | aaf7569 | 2012-04-25 20:44:28 +0000 | [diff] [blame] | 83 | // Test string: "_"[A-Z] |
alokp@chromium.org | fc8b720 | 2012-05-25 00:01:13 +0000 | [diff] [blame] | 84 | INSTANTIATE_TEST_CASE_P(Underscore_A_Z, |
| 85 | DoubleLetterIdentifierTest, |
alokp@chromium.org | 1023bb5 | 2012-04-14 09:04:46 +0000 | [diff] [blame] | 86 | testing::Combine(testing::Values('_'), |
alokp@chromium.org | aaf7569 | 2012-04-25 20:44:28 +0000 | [diff] [blame] | 87 | CLOSED_RANGE('A', 'Z'))); |
alokp@chromium.org | 1023bb5 | 2012-04-14 09:04:46 +0000 | [diff] [blame] | 88 | |
| 89 | // Test string: "_"[0-9] |
alokp@chromium.org | fc8b720 | 2012-05-25 00:01:13 +0000 | [diff] [blame] | 90 | INSTANTIATE_TEST_CASE_P(Underscore_0_9, |
| 91 | DoubleLetterIdentifierTest, |
alokp@chromium.org | 1023bb5 | 2012-04-14 09:04:46 +0000 | [diff] [blame] | 92 | testing::Combine(testing::Values('_'), |
alokp@chromium.org | aaf7569 | 2012-04-25 20:44:28 +0000 | [diff] [blame] | 93 | CLOSED_RANGE('0', '9'))); |
alokp@chromium.org | 1023bb5 | 2012-04-14 09:04:46 +0000 | [diff] [blame] | 94 | |
alokp@chromium.org | aaf7569 | 2012-04-25 20:44:28 +0000 | [diff] [blame] | 95 | // Test string: [a-z]"_" |
alokp@chromium.org | fc8b720 | 2012-05-25 00:01:13 +0000 | [diff] [blame] | 96 | INSTANTIATE_TEST_CASE_P(a_z_Underscore, |
| 97 | DoubleLetterIdentifierTest, |
alokp@chromium.org | aaf7569 | 2012-04-25 20:44:28 +0000 | [diff] [blame] | 98 | testing::Combine(CLOSED_RANGE('a', 'z'), |
alokp@chromium.org | 1023bb5 | 2012-04-14 09:04:46 +0000 | [diff] [blame] | 99 | testing::Values('_'))); |
| 100 | |
alokp@chromium.org | aaf7569 | 2012-04-25 20:44:28 +0000 | [diff] [blame] | 101 | // Test string: [a-z][a-z] |
alokp@chromium.org | fc8b720 | 2012-05-25 00:01:13 +0000 | [diff] [blame] | 102 | INSTANTIATE_TEST_CASE_P(a_z_a_z, |
| 103 | DoubleLetterIdentifierTest, |
alokp@chromium.org | aaf7569 | 2012-04-25 20:44:28 +0000 | [diff] [blame] | 104 | testing::Combine(CLOSED_RANGE('a', 'z'), |
| 105 | CLOSED_RANGE('a', 'z'))); |
alokp@chromium.org | 1023bb5 | 2012-04-14 09:04:46 +0000 | [diff] [blame] | 106 | |
alokp@chromium.org | aaf7569 | 2012-04-25 20:44:28 +0000 | [diff] [blame] | 107 | // Test string: [a-z][A-Z] |
alokp@chromium.org | fc8b720 | 2012-05-25 00:01:13 +0000 | [diff] [blame] | 108 | INSTANTIATE_TEST_CASE_P(a_z_A_Z, |
| 109 | DoubleLetterIdentifierTest, |
alokp@chromium.org | aaf7569 | 2012-04-25 20:44:28 +0000 | [diff] [blame] | 110 | testing::Combine(CLOSED_RANGE('a', 'z'), |
| 111 | CLOSED_RANGE('A', 'Z'))); |
alokp@chromium.org | 1023bb5 | 2012-04-14 09:04:46 +0000 | [diff] [blame] | 112 | |
alokp@chromium.org | aaf7569 | 2012-04-25 20:44:28 +0000 | [diff] [blame] | 113 | // Test string: [a-z][0-9] |
alokp@chromium.org | fc8b720 | 2012-05-25 00:01:13 +0000 | [diff] [blame] | 114 | INSTANTIATE_TEST_CASE_P(a_z_0_9, |
| 115 | DoubleLetterIdentifierTest, |
alokp@chromium.org | aaf7569 | 2012-04-25 20:44:28 +0000 | [diff] [blame] | 116 | testing::Combine(CLOSED_RANGE('a', 'z'), |
| 117 | CLOSED_RANGE('0', '9'))); |
alokp@chromium.org | 1023bb5 | 2012-04-14 09:04:46 +0000 | [diff] [blame] | 118 | |
alokp@chromium.org | aaf7569 | 2012-04-25 20:44:28 +0000 | [diff] [blame] | 119 | // Test string: [A-Z]"_" |
alokp@chromium.org | fc8b720 | 2012-05-25 00:01:13 +0000 | [diff] [blame] | 120 | INSTANTIATE_TEST_CASE_P(A_Z_Underscore, |
| 121 | DoubleLetterIdentifierTest, |
alokp@chromium.org | aaf7569 | 2012-04-25 20:44:28 +0000 | [diff] [blame] | 122 | testing::Combine(CLOSED_RANGE('A', 'Z'), |
alokp@chromium.org | 1023bb5 | 2012-04-14 09:04:46 +0000 | [diff] [blame] | 123 | testing::Values('_'))); |
| 124 | |
alokp@chromium.org | aaf7569 | 2012-04-25 20:44:28 +0000 | [diff] [blame] | 125 | // Test string: [A-Z][a-z] |
alokp@chromium.org | fc8b720 | 2012-05-25 00:01:13 +0000 | [diff] [blame] | 126 | INSTANTIATE_TEST_CASE_P(A_Z_a_z, |
| 127 | DoubleLetterIdentifierTest, |
alokp@chromium.org | aaf7569 | 2012-04-25 20:44:28 +0000 | [diff] [blame] | 128 | testing::Combine(CLOSED_RANGE('A', 'Z'), |
| 129 | CLOSED_RANGE('a', 'z'))); |
alokp@chromium.org | 1023bb5 | 2012-04-14 09:04:46 +0000 | [diff] [blame] | 130 | |
alokp@chromium.org | aaf7569 | 2012-04-25 20:44:28 +0000 | [diff] [blame] | 131 | // Test string: [A-Z][A-Z] |
alokp@chromium.org | fc8b720 | 2012-05-25 00:01:13 +0000 | [diff] [blame] | 132 | INSTANTIATE_TEST_CASE_P(A_Z_A_Z, |
| 133 | DoubleLetterIdentifierTest, |
alokp@chromium.org | aaf7569 | 2012-04-25 20:44:28 +0000 | [diff] [blame] | 134 | testing::Combine(CLOSED_RANGE('A', 'Z'), |
| 135 | CLOSED_RANGE('A', 'Z'))); |
alokp@chromium.org | 1023bb5 | 2012-04-14 09:04:46 +0000 | [diff] [blame] | 136 | |
alokp@chromium.org | aaf7569 | 2012-04-25 20:44:28 +0000 | [diff] [blame] | 137 | // Test string: [A-Z][0-9] |
alokp@chromium.org | fc8b720 | 2012-05-25 00:01:13 +0000 | [diff] [blame] | 138 | INSTANTIATE_TEST_CASE_P(A_Z_0_9, |
| 139 | DoubleLetterIdentifierTest, |
alokp@chromium.org | aaf7569 | 2012-04-25 20:44:28 +0000 | [diff] [blame] | 140 | testing::Combine(CLOSED_RANGE('A', 'Z'), |
| 141 | CLOSED_RANGE('0', '9'))); |
alokp@chromium.org | 1023bb5 | 2012-04-14 09:04:46 +0000 | [diff] [blame] | 142 | |
alokp@chromium.org | 1023bb5 | 2012-04-14 09:04:46 +0000 | [diff] [blame] | 143 | // 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.org | fc8b720 | 2012-05-25 00:01:13 +0000 | [diff] [blame] | 145 | TEST_F(IdentifierTest, AllLetters) |
alokp@chromium.org | 1023bb5 | 2012-04-14 09:04:46 +0000 | [diff] [blame] | 146 | { |
| 147 | std::string str; |
Peter Kasting | 71117e2 | 2014-08-25 16:22:51 -0700 | [diff] [blame] | 148 | for (char c = 'a'; c <= 'z'; ++c) |
alokp@chromium.org | 1023bb5 | 2012-04-14 09:04:46 +0000 | [diff] [blame] | 149 | str.push_back(c); |
| 150 | |
| 151 | str.push_back('_'); |
| 152 | |
Peter Kasting | 71117e2 | 2014-08-25 16:22:51 -0700 | [diff] [blame] | 153 | for (char c = 'A'; c <= 'Z'; ++c) |
alokp@chromium.org | 1023bb5 | 2012-04-14 09:04:46 +0000 | [diff] [blame] | 154 | str.push_back(c); |
| 155 | |
| 156 | str.push_back('_'); |
| 157 | |
Peter Kasting | 71117e2 | 2014-08-25 16:22:51 -0700 | [diff] [blame] | 158 | for (char c = '0'; c <= '9'; ++c) |
alokp@chromium.org | 1023bb5 | 2012-04-14 09:04:46 +0000 | [diff] [blame] | 159 | str.push_back(c); |
| 160 | |
alokp@chromium.org | c745adb | 2012-05-31 18:10:43 +0000 | [diff] [blame] | 161 | expectIdentifier(str); |
alokp@chromium.org | 1023bb5 | 2012-04-14 09:04:46 +0000 | [diff] [blame] | 162 | } |