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