1a11a6ab8020ee6641ea968806f8983d0e0896cf9alokp@chromium.org// 2a11a6ab8020ee6641ea968806f8983d0e0896cf9alokp@chromium.org// Copyright (c) 2012 The ANGLE Project Authors. All rights reserved. 3a11a6ab8020ee6641ea968806f8983d0e0896cf9alokp@chromium.org// Use of this source code is governed by a BSD-style license that can be 4a11a6ab8020ee6641ea968806f8983d0e0896cf9alokp@chromium.org// found in the LICENSE file. 5a11a6ab8020ee6641ea968806f8983d0e0896cf9alokp@chromium.org// 6a11a6ab8020ee6641ea968806f8983d0e0896cf9alokp@chromium.org 7fc8b72005b887731ca97db23354e61bdad4d8cd9alokp@chromium.org#include "PreprocessorTest.h" 8a11a6ab8020ee6641ea968806f8983d0e0896cf9alokp@chromium.org#include "Token.h" 9a11a6ab8020ee6641ea968806f8983d0e0896cf9alokp@chromium.org 10fc8b72005b887731ca97db23354e61bdad4d8cd9alokp@chromium.orgclass CommentTest : public PreprocessorTest, 11fc8b72005b887731ca97db23354e61bdad4d8cd9alokp@chromium.org public testing::WithParamInterface<const char*> 12a11a6ab8020ee6641ea968806f8983d0e0896cf9alokp@chromium.org{ 13a11a6ab8020ee6641ea968806f8983d0e0896cf9alokp@chromium.org}; 14a11a6ab8020ee6641ea968806f8983d0e0896cf9alokp@chromium.org 15a11a6ab8020ee6641ea968806f8983d0e0896cf9alokp@chromium.orgTEST_P(CommentTest, CommentIgnored) 16a11a6ab8020ee6641ea968806f8983d0e0896cf9alokp@chromium.org{ 17a11a6ab8020ee6641ea968806f8983d0e0896cf9alokp@chromium.org const char* str = GetParam(); 18a11a6ab8020ee6641ea968806f8983d0e0896cf9alokp@chromium.org 19fc8b72005b887731ca97db23354e61bdad4d8cd9alokp@chromium.org ASSERT_TRUE(mPreprocessor.init(1, &str, 0)); 202c958eefb71f1b939dbda4477df3f0c8fa47a7b8alokp@chromium.org 212c958eefb71f1b939dbda4477df3f0c8fa47a7b8alokp@chromium.org pp::Token token; 22fc8b72005b887731ca97db23354e61bdad4d8cd9alokp@chromium.org mPreprocessor.lex(&token); 23a11a6ab8020ee6641ea968806f8983d0e0896cf9alokp@chromium.org EXPECT_EQ(pp::Token::LAST, token.type); 24a11a6ab8020ee6641ea968806f8983d0e0896cf9alokp@chromium.org} 25a11a6ab8020ee6641ea968806f8983d0e0896cf9alokp@chromium.org 26a11a6ab8020ee6641ea968806f8983d0e0896cf9alokp@chromium.orgINSTANTIATE_TEST_CASE_P(LineComment, CommentTest, 27a11a6ab8020ee6641ea968806f8983d0e0896cf9alokp@chromium.org testing::Values("//foo\n", // With newline. 28a11a6ab8020ee6641ea968806f8983d0e0896cf9alokp@chromium.org "//foo", // Without newline. 29a11a6ab8020ee6641ea968806f8983d0e0896cf9alokp@chromium.org "//**/", // Nested block comment. 30a11a6ab8020ee6641ea968806f8983d0e0896cf9alokp@chromium.org "////", // Nested line comment. 31a11a6ab8020ee6641ea968806f8983d0e0896cf9alokp@chromium.org "//\"")); // Invalid character. 32a11a6ab8020ee6641ea968806f8983d0e0896cf9alokp@chromium.org 33a11a6ab8020ee6641ea968806f8983d0e0896cf9alokp@chromium.orgINSTANTIATE_TEST_CASE_P(BlockComment, CommentTest, 34a11a6ab8020ee6641ea968806f8983d0e0896cf9alokp@chromium.org testing::Values("/*foo*/", 35a11a6ab8020ee6641ea968806f8983d0e0896cf9alokp@chromium.org "/*foo\n*/", // With newline. 36a11a6ab8020ee6641ea968806f8983d0e0896cf9alokp@chromium.org "/*//*/", // Nested line comment. 37a11a6ab8020ee6641ea968806f8983d0e0896cf9alokp@chromium.org "/*/**/", // Nested block comment. 38a11a6ab8020ee6641ea968806f8983d0e0896cf9alokp@chromium.org "/***/", // With lone '*'. 39a11a6ab8020ee6641ea968806f8983d0e0896cf9alokp@chromium.org "/*\"*/")); // Invalid character. 40a11a6ab8020ee6641ea968806f8983d0e0896cf9alokp@chromium.org 41fc8b72005b887731ca97db23354e61bdad4d8cd9alokp@chromium.orgclass BlockCommentTest : public PreprocessorTest 42fc8b72005b887731ca97db23354e61bdad4d8cd9alokp@chromium.org{ 43fc8b72005b887731ca97db23354e61bdad4d8cd9alokp@chromium.org}; 44fc8b72005b887731ca97db23354e61bdad4d8cd9alokp@chromium.org 45fc8b72005b887731ca97db23354e61bdad4d8cd9alokp@chromium.orgTEST_F(BlockCommentTest, CommentReplacedWithSpace) 46a11a6ab8020ee6641ea968806f8983d0e0896cf9alokp@chromium.org{ 47a11a6ab8020ee6641ea968806f8983d0e0896cf9alokp@chromium.org const char* str = "/*foo*/bar"; 48a11a6ab8020ee6641ea968806f8983d0e0896cf9alokp@chromium.org 49fc8b72005b887731ca97db23354e61bdad4d8cd9alokp@chromium.org ASSERT_TRUE(mPreprocessor.init(1, &str, 0)); 502c958eefb71f1b939dbda4477df3f0c8fa47a7b8alokp@chromium.org 512c958eefb71f1b939dbda4477df3f0c8fa47a7b8alokp@chromium.org pp::Token token; 52fc8b72005b887731ca97db23354e61bdad4d8cd9alokp@chromium.org mPreprocessor.lex(&token); 53a11a6ab8020ee6641ea968806f8983d0e0896cf9alokp@chromium.org EXPECT_EQ(pp::Token::IDENTIFIER, token.type); 545b6a68e04a7d27dab71524fa481f42818f84a240alokp@chromium.org EXPECT_EQ("bar", token.text); 55a11a6ab8020ee6641ea968806f8983d0e0896cf9alokp@chromium.org EXPECT_TRUE(token.hasLeadingSpace()); 56a11a6ab8020ee6641ea968806f8983d0e0896cf9alokp@chromium.org} 57a11a6ab8020ee6641ea968806f8983d0e0896cf9alokp@chromium.org 58fc8b72005b887731ca97db23354e61bdad4d8cd9alokp@chromium.orgTEST_F(BlockCommentTest, UnterminatedComment) 59a11a6ab8020ee6641ea968806f8983d0e0896cf9alokp@chromium.org{ 60a11a6ab8020ee6641ea968806f8983d0e0896cf9alokp@chromium.org const char* str = "/*foo"; 61a11a6ab8020ee6641ea968806f8983d0e0896cf9alokp@chromium.org 62fc8b72005b887731ca97db23354e61bdad4d8cd9alokp@chromium.org ASSERT_TRUE(mPreprocessor.init(1, &str, 0)); 632c958eefb71f1b939dbda4477df3f0c8fa47a7b8alokp@chromium.org 642c958eefb71f1b939dbda4477df3f0c8fa47a7b8alokp@chromium.org using testing::_; 65fc8b72005b887731ca97db23354e61bdad4d8cd9alokp@chromium.org EXPECT_CALL(mDiagnostics, print(pp::Diagnostics::EOF_IN_COMMENT, _, _)); 662c958eefb71f1b939dbda4477df3f0c8fa47a7b8alokp@chromium.org 672c958eefb71f1b939dbda4477df3f0c8fa47a7b8alokp@chromium.org pp::Token token; 68fc8b72005b887731ca97db23354e61bdad4d8cd9alokp@chromium.org mPreprocessor.lex(&token); 69a11a6ab8020ee6641ea968806f8983d0e0896cf9alokp@chromium.org} 70