//===- OmptTesterGoogleTest.h - GoogleTest header variant -------*- C++ -*-===// // // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. // See https://llvm.org/LICENSE.txt for license information. // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // //===----------------------------------------------------------------------===// /// /// \file /// This file represents the GoogleTest-based header variant, defining the /// actual test classes and their behavior. /// //===----------------------------------------------------------------------===// #ifndef OPENMP_TOOLS_OMPTEST_INCLUDE_OMPTTESTERGOOGLETEST_H #define OPENMP_TOOLS_OMPTEST_INCLUDE_OMPTTESTERGOOGLETEST_H #include "AssertMacros.h" #include "OmptAliases.h" #include "OmptAssertEvent.h" #include "OmptAsserter.h" #include "OmptCallbackHandler.h" #include "OmptTesterGlobals.h" // This will allow us to override the "TEST" macro of gtest #define GTEST_DONT_DEFINE_TEST 1 #include "gtest/gtest.h" namespace testing { class GTEST_API_ OmptTestCase : public testing::Test, public omptest::OmptEventGroupInterface { public: std::unique_ptr SequenceAsserter = std::make_unique(); std::unique_ptr SetAsserter = std::make_unique(); std::unique_ptr EventReporter = std::make_unique(); protected: void SetUp() override { omptest::OmptCallbackHandler::get().subscribe(SequenceAsserter.get()); omptest::OmptCallbackHandler::get().subscribe(SetAsserter.get()); omptest::OmptCallbackHandler::get().subscribe(EventReporter.get()); } void TearDown() override { // Actively flush potential in-flight trace records flush_traced_devices(); // Remove subscribers to not be notified of events after test execution. omptest::OmptCallbackHandler::get().clearSubscribers(); // This common testcase must not encounter any failures. if (SequenceAsserter->checkState() == omptest::AssertState::Fail || SetAsserter->checkState() == omptest::AssertState::Fail) ADD_FAILURE(); } }; class GTEST_API_ OmptTestCaseXFail : public testing::OmptTestCase { protected: void TearDown() override { // Actively flush potential in-flight trace records flush_traced_devices(); // Remove subscribers to not be notified of events after test execution. omptest::OmptCallbackHandler::get().clearSubscribers(); // This eXpectedly failing testcase has to encounter at least one failure. if (SequenceAsserter->checkState() == omptest::AssertState::Pass && SetAsserter->checkState() == omptest::AssertState::Pass) ADD_FAILURE(); } }; } // namespace testing #define TEST(test_suite_name, test_name) \ GTEST_TEST_(test_suite_name, test_name, ::testing::OmptTestCase, \ ::testing::internal::GetTypeId<::testing::OmptTestCase>()) #define TEST_XFAIL(test_suite_name, test_name) \ GTEST_TEST_(test_suite_name, test_name, ::testing::OmptTestCaseXFail, \ ::testing::internal::GetTypeId<::testing::OmptTestCaseXFail>()) #endif // include guard