| // | |
| // Copyright 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" | |
| namespace angle | |
| { | |
| class CommentTest : public SimplePreprocessorTest, public testing::WithParamInterface<const char *> | |
| {}; | |
| TEST_P(CommentTest, CommentIgnored) | |
| { | |
| const char *str = GetParam(); | |
| pp::Token token; | |
| lexSingleToken(str, &token); | |
| EXPECT_EQ(pp::Token::LAST, token.type); | |
| } | |
| INSTANTIATE_TEST_SUITE_P(LineComment, | |
| CommentTest, | |
| testing::Values("//foo\n", // With newline. | |
| "//foo", // Without newline. | |
| "//**/", // Nested block comment. | |
| "////", // Nested line comment. | |
| "//\"")); // Invalid character. | |
| INSTANTIATE_TEST_SUITE_P(BlockComment, | |
| CommentTest, | |
| testing::Values("/*foo*/", | |
| "/*foo\n*/", // With newline. | |
| "/*//*/", // Nested line comment. | |
| "/*/**/", // Nested block comment. | |
| "/***/", // With lone '*'. | |
| "/*\"*/")); // Invalid character. | |
| class BlockCommentTest : public SimplePreprocessorTest | |
| {}; | |
| TEST_F(BlockCommentTest, CommentReplacedWithSpace) | |
| { | |
| const char *str = "/*foo*/bar"; | |
| pp::Token token; | |
| lexSingleToken(str, &token); | |
| EXPECT_EQ(pp::Token::IDENTIFIER, token.type); | |
| EXPECT_EQ("bar", token.text); | |
| EXPECT_TRUE(token.hasLeadingSpace()); | |
| } | |
| TEST_F(BlockCommentTest, UnterminatedComment) | |
| { | |
| const char *str = "/*foo"; | |
| using testing::_; | |
| EXPECT_CALL(mDiagnostics, print(pp::Diagnostics::PP_EOF_IN_COMMENT, _, _)); | |
| preprocess(str); | |
| } | |
| } // namespace angle |