136124de8ce9855c1cfdfb6529b47822e12123274alokp@chromium.org//
236124de8ce9855c1cfdfb6529b47822e12123274alokp@chromium.org// Copyright (c) 2012 The ANGLE Project Authors. All rights reserved.
336124de8ce9855c1cfdfb6529b47822e12123274alokp@chromium.org// Use of this source code is governed by a BSD-style license that can be
436124de8ce9855c1cfdfb6529b47822e12123274alokp@chromium.org// found in the LICENSE file.
536124de8ce9855c1cfdfb6529b47822e12123274alokp@chromium.org//
636124de8ce9855c1cfdfb6529b47822e12123274alokp@chromium.org
7fc8b72005b887731ca97db23354e61bdad4d8cd9alokp@chromium.org#include "PreprocessorTest.h"
836124de8ce9855c1cfdfb6529b47822e12123274alokp@chromium.org#include "Token.h"
936124de8ce9855c1cfdfb6529b47822e12123274alokp@chromium.org
10fc8b72005b887731ca97db23354e61bdad4d8cd9alokp@chromium.orgclass ErrorTest : public PreprocessorTest
1136124de8ce9855c1cfdfb6529b47822e12123274alokp@chromium.org{
1236124de8ce9855c1cfdfb6529b47822e12123274alokp@chromium.org};
1336124de8ce9855c1cfdfb6529b47822e12123274alokp@chromium.org
1436124de8ce9855c1cfdfb6529b47822e12123274alokp@chromium.orgTEST_F(ErrorTest, Empty)
1536124de8ce9855c1cfdfb6529b47822e12123274alokp@chromium.org{
1636124de8ce9855c1cfdfb6529b47822e12123274alokp@chromium.org    const char* str = "#error\n";
17c745adb0b20dca8f0ac3c425733d51b3c5b623d3alokp@chromium.org    const char* expected = "\n";
1836124de8ce9855c1cfdfb6529b47822e12123274alokp@chromium.org
1936124de8ce9855c1cfdfb6529b47822e12123274alokp@chromium.org    using testing::_;
2036124de8ce9855c1cfdfb6529b47822e12123274alokp@chromium.org    EXPECT_CALL(mDirectiveHandler, handleError(pp::SourceLocation(0, 1), ""));
2136124de8ce9855c1cfdfb6529b47822e12123274alokp@chromium.org    // No error or warning.
2236124de8ce9855c1cfdfb6529b47822e12123274alokp@chromium.org    EXPECT_CALL(mDiagnostics, print(_, _, _)).Times(0);
2336124de8ce9855c1cfdfb6529b47822e12123274alokp@chromium.org
24c745adb0b20dca8f0ac3c425733d51b3c5b623d3alokp@chromium.org    preprocess(str, expected);
2536124de8ce9855c1cfdfb6529b47822e12123274alokp@chromium.org}
2636124de8ce9855c1cfdfb6529b47822e12123274alokp@chromium.org
2736124de8ce9855c1cfdfb6529b47822e12123274alokp@chromium.orgTEST_F(ErrorTest, OneTokenMessage)
2836124de8ce9855c1cfdfb6529b47822e12123274alokp@chromium.org{
2936124de8ce9855c1cfdfb6529b47822e12123274alokp@chromium.org    const char* str = "#error foo\n";
30c745adb0b20dca8f0ac3c425733d51b3c5b623d3alokp@chromium.org    const char* expected = "\n";
3136124de8ce9855c1cfdfb6529b47822e12123274alokp@chromium.org
3236124de8ce9855c1cfdfb6529b47822e12123274alokp@chromium.org    using testing::_;
3336124de8ce9855c1cfdfb6529b47822e12123274alokp@chromium.org    EXPECT_CALL(mDirectiveHandler,
3436124de8ce9855c1cfdfb6529b47822e12123274alokp@chromium.org                handleError(pp::SourceLocation(0, 1), " foo"));
3536124de8ce9855c1cfdfb6529b47822e12123274alokp@chromium.org    // No error or warning.
3636124de8ce9855c1cfdfb6529b47822e12123274alokp@chromium.org    EXPECT_CALL(mDiagnostics, print(_, _, _)).Times(0);
3736124de8ce9855c1cfdfb6529b47822e12123274alokp@chromium.org
38c745adb0b20dca8f0ac3c425733d51b3c5b623d3alokp@chromium.org    preprocess(str, expected);
3936124de8ce9855c1cfdfb6529b47822e12123274alokp@chromium.org}
4036124de8ce9855c1cfdfb6529b47822e12123274alokp@chromium.org
4136124de8ce9855c1cfdfb6529b47822e12123274alokp@chromium.orgTEST_F(ErrorTest, TwoTokenMessage)
4236124de8ce9855c1cfdfb6529b47822e12123274alokp@chromium.org{
4336124de8ce9855c1cfdfb6529b47822e12123274alokp@chromium.org    const char* str = "#error foo bar\n";
44c745adb0b20dca8f0ac3c425733d51b3c5b623d3alokp@chromium.org    const char* expected = "\n";
4536124de8ce9855c1cfdfb6529b47822e12123274alokp@chromium.org
4636124de8ce9855c1cfdfb6529b47822e12123274alokp@chromium.org    using testing::_;
4736124de8ce9855c1cfdfb6529b47822e12123274alokp@chromium.org    EXPECT_CALL(mDirectiveHandler,
4836124de8ce9855c1cfdfb6529b47822e12123274alokp@chromium.org                handleError(pp::SourceLocation(0, 1), " foo bar"));
4936124de8ce9855c1cfdfb6529b47822e12123274alokp@chromium.org    // No error or warning.
5036124de8ce9855c1cfdfb6529b47822e12123274alokp@chromium.org    EXPECT_CALL(mDiagnostics, print(_, _, _)).Times(0);
5136124de8ce9855c1cfdfb6529b47822e12123274alokp@chromium.org
52c745adb0b20dca8f0ac3c425733d51b3c5b623d3alokp@chromium.org    preprocess(str, expected);
5336124de8ce9855c1cfdfb6529b47822e12123274alokp@chromium.org}
5436124de8ce9855c1cfdfb6529b47822e12123274alokp@chromium.org
5536124de8ce9855c1cfdfb6529b47822e12123274alokp@chromium.orgTEST_F(ErrorTest, Comments)
5636124de8ce9855c1cfdfb6529b47822e12123274alokp@chromium.org{
5736124de8ce9855c1cfdfb6529b47822e12123274alokp@chromium.org    const char* str = "/*foo*/"
5836124de8ce9855c1cfdfb6529b47822e12123274alokp@chromium.org                      "#"
5936124de8ce9855c1cfdfb6529b47822e12123274alokp@chromium.org                      "/*foo*/"
6036124de8ce9855c1cfdfb6529b47822e12123274alokp@chromium.org                      "error"
6136124de8ce9855c1cfdfb6529b47822e12123274alokp@chromium.org                      "/*foo*/"
6236124de8ce9855c1cfdfb6529b47822e12123274alokp@chromium.org                      "foo"
6336124de8ce9855c1cfdfb6529b47822e12123274alokp@chromium.org                      "/*foo*/"
6436124de8ce9855c1cfdfb6529b47822e12123274alokp@chromium.org                      "bar"
6536124de8ce9855c1cfdfb6529b47822e12123274alokp@chromium.org                      "/*foo*/"
6636124de8ce9855c1cfdfb6529b47822e12123274alokp@chromium.org                      "//foo"
6736124de8ce9855c1cfdfb6529b47822e12123274alokp@chromium.org                      "\n";
68c745adb0b20dca8f0ac3c425733d51b3c5b623d3alokp@chromium.org    const char* expected = "\n";
6936124de8ce9855c1cfdfb6529b47822e12123274alokp@chromium.org
7036124de8ce9855c1cfdfb6529b47822e12123274alokp@chromium.org    using testing::_;
7136124de8ce9855c1cfdfb6529b47822e12123274alokp@chromium.org    EXPECT_CALL(mDirectiveHandler,
7236124de8ce9855c1cfdfb6529b47822e12123274alokp@chromium.org                handleError(pp::SourceLocation(0, 1), " foo bar"));
7336124de8ce9855c1cfdfb6529b47822e12123274alokp@chromium.org    // No error or warning.
7436124de8ce9855c1cfdfb6529b47822e12123274alokp@chromium.org    EXPECT_CALL(mDiagnostics, print(_, _, _)).Times(0);
7536124de8ce9855c1cfdfb6529b47822e12123274alokp@chromium.org
76c745adb0b20dca8f0ac3c425733d51b3c5b623d3alokp@chromium.org    preprocess(str, expected);
7736124de8ce9855c1cfdfb6529b47822e12123274alokp@chromium.org}
7836124de8ce9855c1cfdfb6529b47822e12123274alokp@chromium.org
7936124de8ce9855c1cfdfb6529b47822e12123274alokp@chromium.orgTEST_F(ErrorTest, MissingNewline)
8036124de8ce9855c1cfdfb6529b47822e12123274alokp@chromium.org{
8136124de8ce9855c1cfdfb6529b47822e12123274alokp@chromium.org    const char* str = "#error foo";
82c745adb0b20dca8f0ac3c425733d51b3c5b623d3alokp@chromium.org    const char* expected = "";
8336124de8ce9855c1cfdfb6529b47822e12123274alokp@chromium.org
8436124de8ce9855c1cfdfb6529b47822e12123274alokp@chromium.org    using testing::_;
8536124de8ce9855c1cfdfb6529b47822e12123274alokp@chromium.org    // Directive successfully parsed.
8636124de8ce9855c1cfdfb6529b47822e12123274alokp@chromium.org    EXPECT_CALL(mDirectiveHandler,
8736124de8ce9855c1cfdfb6529b47822e12123274alokp@chromium.org                handleError(pp::SourceLocation(0, 1), " foo"));
8836124de8ce9855c1cfdfb6529b47822e12123274alokp@chromium.org    // Error reported about EOF.
897095d7a9bc09fa5776913b2ec973d4955b585d77Geoff Lang    EXPECT_CALL(mDiagnostics, print(pp::Diagnostics::PP_EOF_IN_DIRECTIVE, _, _));
9036124de8ce9855c1cfdfb6529b47822e12123274alokp@chromium.org
91c745adb0b20dca8f0ac3c425733d51b3c5b623d3alokp@chromium.org    preprocess(str, expected);
9236124de8ce9855c1cfdfb6529b47822e12123274alokp@chromium.org}
93