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