//
// 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"

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_CASE_P(LineComment, CommentTest,
                        testing::Values("//foo\n", // With newline.
                                        "//foo",   // Without newline.
                                        "//**/",   // Nested block comment.
                                        "////",    // Nested line comment.
                                        "//\""));  // Invalid character.  

INSTANTIATE_TEST_CASE_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);
}
