// Copyright 2023 The Pigweed Authors
//
// Licensed under the Apache License, Version 2.0 (the "License"); you may not
// use this file except in compliance with the License. You may obtain a copy of
// the License at
//
//     https://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
// License for the specific language governing permissions and limitations under
// the License.
#pragma once

#include "pw_unit_test/framework_backend.h"  // IWYU pragma: export
// Check that the backend defined the following.

#ifndef GTEST_TEST
#error \
    "The pw_unit_test framework backend must define " \
    "GTEST_TEST(test_suite_name, test_name)"
#endif  // GTEST_TEST

#ifndef TEST
#error \
    "The pw_unit_test framework backend must define " \
    "TEST(test_suite_name, test_name)"
#endif  // TEST

#ifndef TEST_F
#error \
    "The pw_unit_test framework backend must define " \
    "TEST_F(test_fixture, test_name)"
#endif  // TEST_F

#ifndef FRIEND_TEST
#error \
    "The pw_unit_test framework backend must define " \
    "FRIEND_TEST(test_suite_name, test_name)"
#endif  // FRIEND_TEST

#ifndef EXPECT_TRUE
#error "The pw_unit_test framework backend must define EXPECT_TRUE(expr)"
#endif  // EXPECT_TRUE

#ifndef EXPECT_FALSE
#error "The pw_unit_test framework backend must define EXPECT_FALSE(expr)"
#endif  // EXPECT_FALSE

#ifndef EXPECT_EQ
#error "The pw_unit_test framework backend must define EXPECT_EQ(lhs, rhs)"
#endif  // EXPECT_EQ

#ifndef EXPECT_NE
#error "The pw_unit_test framework backend must define EXPECT_NE(lhs, rhs)"
#endif  // EXPECT_EQ

#ifndef EXPECT_GT
#error "The pw_unit_test framework backend must define EXPECT_GT(lhs, rhs)"
#endif  // EXPECT_GT

#ifndef EXPECT_GE
#error "The pw_unit_test framework backend must define EXPECT_GE(lhs, rhs)"
#endif  // EXPECT_GE

#ifndef EXPECT_LT
#error "The pw_unit_test framework backend must define EXPECT_LT(lhs, rhs)"
#endif  // EXPECT_LT

#ifndef EXPECT_LE
#error "The pw_unit_test framework backend must define EXPECT_LE(lhs, rhs)"
#endif  // EXPECT_LE

#ifndef EXPECT_NEAR
#error \
    "The pw_unit_test framework backend must define " \
    "EXPECT_NEAR(lhs, rhs, epsilon)"
#endif  // EXPECT_NEAR

#ifndef EXPECT_FLOAT_EQ
#error \
    "The pw_unit_test framework backend must define EXPECT_FLOAT_EQ(lhs, rhs)"
#endif  // EXPECT_FLOAT_EQ

#ifndef EXPECT_DOUBLE_EQ
#error \
    "The pw_unit_test framework backend must define EXPECT_DOUBLE_EQ(lhs, rhs)"
#endif  // EXPECT_DOUBLE_EQ

#ifndef EXPECT_STREQ
#error "The pw_unit_test framework backend must define EXPECT_STREQ(lhs, rhs)"
#endif  // EXPECT_STREQ

#ifndef EXPECT_STRNE
#error "The pw_unit_test framework backend must define EXPECT_STRNE(lhs, rhs)"
#endif  // EXPECT_STRNE

#ifndef ASSERT_TRUE
#error "The pw_unit_test framework backend must define ASSERT_TRUE(expr)"
#endif  // ASSERT_TRUE

#ifndef ASSERT_FALSE
#error "The pw_unit_test framework backend must define ASSERT_FALSE(expr)"
#endif  // ASSERT_FALSE

#ifndef ASSERT_EQ
#error "The pw_unit_test framework backend must define ASSERT_EQ(lhs, rhs)"
#endif  // ASSERT_EQ

#ifndef ASSERT_NE
#error "The pw_unit_test framework backend must define ASSERT_NE(lhs, rhs)"
#endif  // ASSERT_NE

#ifndef ASSERT_GT
#error "The pw_unit_test framework backend must define ASSERT_GT(lhs, rhs)"
#endif  // ASSERT_GT

#ifndef ASSERT_GE
#error "The pw_unit_test framework backend must define ASSERT_GE(lhs, rhs)"
#endif  // ASSERT_GE

#ifndef ASSERT_LT
#error "The pw_unit_test framework backend must define ASSERT_LT(lhs, rhs)"
#endif  // ASSERT_LT

#ifndef ASSERT_LE
#error "The pw_unit_test framework backend must define ASSERT_LE(lhs, rhs)"
#endif  // ASSERT_LE

#ifndef ASSERT_NEAR
#error \
    "The pw_unit_test framework backend must define "\
    "ASSERT_NEAR(lhs, rhs, epsilon)"
#endif  // ASSERT_NEAR

#ifndef ASSERT_FLOAT_EQ
#error \
    "The pw_unit_test framework backend must define ASSERT_FLOAT_EQ(lhs, rhs)"
#endif  // ASSERT_FLOAT_EQ

#ifndef ASSERT_DOUBLE_EQ
#error \
    "The pw_unit_test framework backend must define ASSERT_DOUBLE_EQ(lhs, rhs)"
#endif  // ASSERT_DOUBLE_EQ

#ifndef ASSERT_STREQ
#error "The pw_unit_test framework backend must define ASSERT_STREQ(lhs, rhs)"
#endif  // ASSERT_STREQ

#ifndef ASSERT_STRNE
#error "The pw_unit_test framework backend must define ASSERT_STRNE(lhs, rhs)"
#endif  // ASSERT_STRNE

#ifndef ADD_FAILURE
#error "The pw_unit_test framework backend must define ADD_FAILURE()"
#endif  // ADD_FAILURE

#ifndef GTEST_FAIL
#error "The pw_unit_test framework backend must define GTEST_FAIL()"
#endif  // GTEST_FAIL

#ifndef GTEST_SKIP
#error "The pw_unit_test framework backend must define GTEST_SKIP()"
#endif  // GTEST_SKIP

#ifndef FAIL
#error "The pw_unit_test framework backend must define FAIL()"
#endif  // FAIL

#ifndef GTEST_SUCCEED
#error "The pw_unit_test framework backend must define GTEST_SUCCEED()"
#endif  // GTEST_SUCCEED

#ifndef SUCCEED
#error "The pw_unit_test framework backend must define SUCCEED()"
#endif  // SUCCEED

// RUN_ALL_TESTS can be a macro or a function, check for both.
#ifndef RUN_ALL_TESTS
static_assert(&RUN_ALL_TESTS != nullptr,
              "The pw_unit_test framework backend must define RUN_ALL_TESTS()");
#endif  // RUN_ALL_TESTS

#ifndef GTEST_HAS_DEATH_TEST
#error "The pw_unit_test framework backend must define GTEST_HAS_DEATH_TEST"
#endif  // GTEST_HAS_DEATH_TEST

#ifndef EXPECT_DEATH_IF_SUPPORTED
#error \
    "The pw_unit_test framework backend must define "\
    "EXPECT_DEATH_IF_SUPPORTED(statement, regex)"
#endif  // EXPECT_DEATH_IF_SUPPORTED

#ifndef ASSERT_DEATH_IF_SUPPORTED
#error \
    "The pw_unit_test framework backend must define " \
    "ASSERT_DEATH_IF_SUPPORTED(statement, regex)"
#endif  // ASSERT_DEATH_IF_SUPPORTED
