summaryrefslogtreecommitdiff
path: root/Source/ThirdParty/ANGLE/src/tests/preprocessor_tests/pragma_test.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'Source/ThirdParty/ANGLE/src/tests/preprocessor_tests/pragma_test.cpp')
-rw-r--r--Source/ThirdParty/ANGLE/src/tests/preprocessor_tests/pragma_test.cpp154
1 files changed, 154 insertions, 0 deletions
diff --git a/Source/ThirdParty/ANGLE/src/tests/preprocessor_tests/pragma_test.cpp b/Source/ThirdParty/ANGLE/src/tests/preprocessor_tests/pragma_test.cpp
new file mode 100644
index 000000000..92992aced
--- /dev/null
+++ b/Source/ThirdParty/ANGLE/src/tests/preprocessor_tests/pragma_test.cpp
@@ -0,0 +1,154 @@
+//
+// 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 PragmaTest : public PreprocessorTest
+{
+};
+
+TEST_F(PragmaTest, EmptyName)
+{
+ const char* str = "#pragma\n";
+ const char* expected = "\n";
+
+ using testing::_;
+ // No handlePragma calls.
+ EXPECT_CALL(mDirectiveHandler, handlePragma(_, _, _, false)).Times(0);
+ // No error or warning.
+ EXPECT_CALL(mDiagnostics, print(_, _, _)).Times(0);
+
+ preprocess(str, expected);
+}
+
+TEST_F(PragmaTest, EmptyValue)
+{
+ const char* str = "#pragma foo\n";
+ const char* expected = "\n";
+
+ using testing::_;
+ EXPECT_CALL(mDirectiveHandler,
+ handlePragma(pp::SourceLocation(0, 1), "foo", "", false));
+ // No error or warning.
+ EXPECT_CALL(mDiagnostics, print(_, _, _)).Times(0);
+
+ preprocess(str, expected);
+}
+
+TEST_F(PragmaTest, NameValue)
+{
+ const char* str = "#pragma foo(bar)\n";
+ const char* expected = "\n";
+
+ using testing::_;
+ EXPECT_CALL(mDirectiveHandler,
+ handlePragma(pp::SourceLocation(0, 1), "foo", "bar", false));
+ // No error or warning.
+ EXPECT_CALL(mDiagnostics, print(_, _, _)).Times(0);
+
+ preprocess(str, expected);
+}
+
+TEST_F(PragmaTest, STDGL)
+{
+ const char* str = "#pragma STDGL\n";
+ const char* expected = "\n";
+
+ using testing::_;
+ EXPECT_CALL(mDirectiveHandler,
+ handlePragma(_, _, _, _)).Times(0);
+ // No error or warning.
+ EXPECT_CALL(mDiagnostics, print(_, _, _)).Times(0);
+
+ preprocess(str, expected);
+}
+
+TEST_F(PragmaTest, STDGLInvariantAll)
+{
+ const char* str = "#pragma STDGL invariant(all)\n";
+ const char* expected = "\n";
+
+ using testing::_;
+ EXPECT_CALL(mDirectiveHandler,
+ handlePragma(pp::SourceLocation(0, 1), "invariant", "all", true));
+ // No error or warning.
+ EXPECT_CALL(mDiagnostics, print(_, _, _)).Times(0);
+
+ preprocess(str, expected);
+}
+
+TEST_F(PragmaTest, Comments)
+{
+ const char* str = "/*foo*/"
+ "#"
+ "/*foo*/"
+ "pragma"
+ "/*foo*/"
+ "foo"
+ "/*foo*/"
+ "("
+ "/*foo*/"
+ "bar"
+ "/*foo*/"
+ ")"
+ "/*foo*/"
+ "//foo"
+ "\n";
+ const char* expected = "\n";
+
+ using testing::_;
+ EXPECT_CALL(mDirectiveHandler,
+ handlePragma(pp::SourceLocation(0, 1), "foo", "bar", false));
+ // No error or warning.
+ EXPECT_CALL(mDiagnostics, print(_, _, _)).Times(0);
+
+ preprocess(str, expected);
+}
+
+TEST_F(PragmaTest, MissingNewline)
+{
+ const char* str = "#pragma foo(bar)";
+ const char* expected = "";
+
+ using testing::_;
+ // Pragma successfully parsed.
+ EXPECT_CALL(mDirectiveHandler,
+ handlePragma(pp::SourceLocation(0, 1), "foo", "bar", false));
+ // Error reported about EOF.
+ EXPECT_CALL(mDiagnostics, print(pp::Diagnostics::PP_EOF_IN_DIRECTIVE, _, _));
+
+ preprocess(str, expected);
+}
+
+class InvalidPragmaTest : public PragmaTest,
+ public testing::WithParamInterface<const char*>
+{
+};
+
+TEST_P(InvalidPragmaTest, Identified)
+{
+ const char* str = GetParam();
+ const char* expected = "\n";
+
+ using testing::_;
+ // No handlePragma calls.
+ EXPECT_CALL(mDirectiveHandler, handlePragma(_, _, _, false)).Times(0);
+ // Unrecognized pragma warning.
+ EXPECT_CALL(mDiagnostics,
+ print(pp::Diagnostics::PP_UNRECOGNIZED_PRAGMA,
+ pp::SourceLocation(0, 1), _));
+
+ preprocess(str, expected);
+}
+
+INSTANTIATE_TEST_CASE_P(All, InvalidPragmaTest, testing::Values(
+ "#pragma 1\n", // Invalid name.
+ "#pragma foo()\n", // Missing value.
+ "#pragma foo bar)\n", // Missing left paren,
+ "#pragma foo(bar\n", // Missing right paren.
+ "#pragma foo bar\n", // Missing parens.
+ "#pragma foo(bar) baz\n")); // Extra tokens.