diff options
Diffstat (limited to 'Source/ThirdParty/ANGLE/src/tests/preprocessor_tests/identifier_test.cpp')
-rw-r--r-- | Source/ThirdParty/ANGLE/src/tests/preprocessor_tests/identifier_test.cpp | 162 |
1 files changed, 162 insertions, 0 deletions
diff --git a/Source/ThirdParty/ANGLE/src/tests/preprocessor_tests/identifier_test.cpp b/Source/ThirdParty/ANGLE/src/tests/preprocessor_tests/identifier_test.cpp new file mode 100644 index 000000000..4712b38cb --- /dev/null +++ b/Source/ThirdParty/ANGLE/src/tests/preprocessor_tests/identifier_test.cpp @@ -0,0 +1,162 @@ +// +// 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 "compiler/preprocessor/Token.h" + +#define CLOSED_RANGE(x, y) testing::Range(x, static_cast<char>((y) + 1)) + +class IdentifierTest : public PreprocessorTest +{ +protected: + void expectIdentifier(const std::string& str) + { + const char* cstr = str.c_str(); + ASSERT_TRUE(mPreprocessor.init(1, &cstr, 0)); + + pp::Token token; + mPreprocessor.lex(&token); + EXPECT_EQ(pp::Token::IDENTIFIER, token.type); + EXPECT_EQ(str, token.text); + } +}; + +class SingleLetterIdentifierTest : public IdentifierTest, + public testing::WithParamInterface<char> +{ +}; + +// This test covers identifier names of form [_a-zA-Z]. +TEST_P(SingleLetterIdentifierTest, Identified) +{ + std::string str(1, GetParam()); + expectIdentifier(str); +} + +// Test string: '_' +INSTANTIATE_TEST_CASE_P(Underscore, + SingleLetterIdentifierTest, + testing::Values('_')); + +// Test string: [a-z] +INSTANTIATE_TEST_CASE_P(a_z, + SingleLetterIdentifierTest, + CLOSED_RANGE('a', 'z')); + +// Test string: [A-Z] +INSTANTIATE_TEST_CASE_P(A_Z, + SingleLetterIdentifierTest, + CLOSED_RANGE('A', 'Z')); + +typedef std::tr1::tuple<char, char> IdentifierParams; +class DoubleLetterIdentifierTest : + public IdentifierTest, + public testing::WithParamInterface<IdentifierParams> +{ +}; + +// This test covers identifier names of form [_a-zA-Z][_a-zA-Z0-9]. +TEST_P(DoubleLetterIdentifierTest, Identified) +{ + std::string str; + str.push_back(std::tr1::get<0>(GetParam())); + str.push_back(std::tr1::get<1>(GetParam())); + + expectIdentifier(str); +} + +// Test string: "__" +INSTANTIATE_TEST_CASE_P(Underscore_Underscore, + DoubleLetterIdentifierTest, + testing::Combine(testing::Values('_'), + testing::Values('_'))); + +// Test string: "_"[a-z] +INSTANTIATE_TEST_CASE_P(Underscore_a_z, + DoubleLetterIdentifierTest, + testing::Combine(testing::Values('_'), + CLOSED_RANGE('a', 'z'))); + +// Test string: "_"[A-Z] +INSTANTIATE_TEST_CASE_P(Underscore_A_Z, + DoubleLetterIdentifierTest, + testing::Combine(testing::Values('_'), + CLOSED_RANGE('A', 'Z'))); + +// Test string: "_"[0-9] +INSTANTIATE_TEST_CASE_P(Underscore_0_9, + DoubleLetterIdentifierTest, + testing::Combine(testing::Values('_'), + CLOSED_RANGE('0', '9'))); + +// Test string: [a-z]"_" +INSTANTIATE_TEST_CASE_P(a_z_Underscore, + DoubleLetterIdentifierTest, + testing::Combine(CLOSED_RANGE('a', 'z'), + testing::Values('_'))); + +// Test string: [a-z][a-z] +INSTANTIATE_TEST_CASE_P(a_z_a_z, + DoubleLetterIdentifierTest, + testing::Combine(CLOSED_RANGE('a', 'z'), + CLOSED_RANGE('a', 'z'))); + +// Test string: [a-z][A-Z] +INSTANTIATE_TEST_CASE_P(a_z_A_Z, + DoubleLetterIdentifierTest, + testing::Combine(CLOSED_RANGE('a', 'z'), + CLOSED_RANGE('A', 'Z'))); + +// Test string: [a-z][0-9] +INSTANTIATE_TEST_CASE_P(a_z_0_9, + DoubleLetterIdentifierTest, + testing::Combine(CLOSED_RANGE('a', 'z'), + CLOSED_RANGE('0', '9'))); + +// Test string: [A-Z]"_" +INSTANTIATE_TEST_CASE_P(A_Z_Underscore, + DoubleLetterIdentifierTest, + testing::Combine(CLOSED_RANGE('A', 'Z'), + testing::Values('_'))); + +// Test string: [A-Z][a-z] +INSTANTIATE_TEST_CASE_P(A_Z_a_z, + DoubleLetterIdentifierTest, + testing::Combine(CLOSED_RANGE('A', 'Z'), + CLOSED_RANGE('a', 'z'))); + +// Test string: [A-Z][A-Z] +INSTANTIATE_TEST_CASE_P(A_Z_A_Z, + DoubleLetterIdentifierTest, + testing::Combine(CLOSED_RANGE('A', 'Z'), + CLOSED_RANGE('A', 'Z'))); + +// Test string: [A-Z][0-9] +INSTANTIATE_TEST_CASE_P(A_Z_0_9, + DoubleLetterIdentifierTest, + testing::Combine(CLOSED_RANGE('A', 'Z'), + CLOSED_RANGE('0', '9'))); + +// The tests above cover one-letter and various combinations of two-letter +// identifier names. This test covers all characters in a single string. +TEST_F(IdentifierTest, AllLetters) +{ + std::string str; + for (char c = 'a'; c <= 'z'; ++c) + str.push_back(c); + + str.push_back('_'); + + for (char c = 'A'; c <= 'Z'; ++c) + str.push_back(c); + + str.push_back('_'); + + for (char c = '0'; c <= '9'; ++c) + str.push_back(c); + + expectIdentifier(str); +} |