// Copyright 2019 The Fuchsia Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

#ifndef ZXTEST_ZXTEST_H_
#define ZXTEST_ZXTEST_H_

#include <zircon/compiler.h>

// This function will help terminate the static analyzer when it reaches
// an assertion failure site. The bugs discovered by the static analyzer will
// be suppressed as they are expected by the test cases.
__ANALYZER_CREATE_SINK
static inline void unittest_fails(void) {}

// Select the right implementation.
#define ZXTEST_INCLUDE_INTERNAL_HEADERS
#ifdef __cplusplus
#include <zxtest/cpp/zxtest.h>
#else
#include <zxtest/c/zxtest.h>
#endif
#undef ZXTEST_INCLUDE_INTERNAL_HEADERS

// This header provides all the available macros for C/C++.
// Most of these macros are equivalent to gTest macros, with a few differences:
//  * Custom messages are taken as arguments to the macro, not using stream operator.
//    ASSERT_EQ(a, b, "a + b is %d", a + b);
//    Where the first argument is a printf format string and must be a string literal.
//  * Additional QoL macros for common use case in Fuchsia platform:
//    ASSERT/EXPECT_STATUS
//    ASSERT/EXPECT_NOT_STATUS
//    ASSERT/EXPECT_OK
//    ASSERT/EXPECT_NOT_OK
//    ASSERT/EXPECT_NULL
//    ASSERT/EXPECT_NOT_NULL
//    ASSERT/EXPECT_BYTES_EQ
//    ASSERT/EXPECT_BYTES_NE
//    ASSERT/EXPECT_STREQ
//    ASSERT/EXPECT_STRNE
//    ASSERT/EXPECT_SUBSTR
//    ASSERT/EXPECT_NOT_SUBSTR
//    CURRENT_TEST_HAS_FAILURES
//    CURRENT_TEST_HAS_FATAL_FAILURE
//  * There are no matchers allowed in this library.
//  * All assertions must happen in the main thread, unless the user provides synchronization
//    for accessing the library.
//  * TEST supported in C and Cpp
//  * TEST_F supported in Cpp with ::zxtest::Test being the base Fixture class.
//
//  For more detailed information check README.

#define LIB_ZXTEST_CHECK_PTR(op, expected, actual, fatal, file, line, desc, ...)                   \
  LIB_ZXTEST_CHECK_VAR_COERCE(op, expected, actual, LIB_ZXTEST_AUTO_VAR_TYPE(actual), fatal, file, \
                              line, desc, ##__VA_ARGS__)

#define ASSERT_EQ(val2, val1, ...)                                          \
  LIB_ZXTEST_CHECK_VAR(LIB_ZXTEST_EQ, val2, val1, true, __FILE__, __LINE__, \
                       "Expected " #val1 " == " #val2 ".", ##__VA_ARGS__)

#define ASSERT_NE(val2, val1, ...)                                          \
  LIB_ZXTEST_CHECK_VAR(LIB_ZXTEST_NE, val2, val1, true, __FILE__, __LINE__, \
                       "Expected " #val1 " != " #val2 ".", ##__VA_ARGS__)

#define EXPECT_EQ(val2, val1, ...)                                           \
  LIB_ZXTEST_CHECK_VAR(LIB_ZXTEST_EQ, val2, val1, false, __FILE__, __LINE__, \
                       "Expected " #val1 " == " #val2 ".", ##__VA_ARGS__)

#define EXPECT_NE(val2, val1, ...)                                           \
  LIB_ZXTEST_CHECK_VAR(LIB_ZXTEST_NE, val2, val1, false, __FILE__, __LINE__, \
                       "Expected " #val1 " != " #val2 ".", ##__VA_ARGS__)

#define ASSERT_LT(val1, val2, ...)                                          \
  LIB_ZXTEST_CHECK_VAR(LIB_ZXTEST_LT, val2, val1, true, __FILE__, __LINE__, \
                       "Expected " #val1 " < " #val2 ".", ##__VA_ARGS__)

#define ASSERT_LE(val1, val2, ...)                                          \
  LIB_ZXTEST_CHECK_VAR(LIB_ZXTEST_LE, val2, val1, true, __FILE__, __LINE__, \
                       "Expected " #val1 " <= " #val2 ".", ##__VA_ARGS__)

#define EXPECT_LT(val1, val2, ...)                                           \
  LIB_ZXTEST_CHECK_VAR(LIB_ZXTEST_LT, val2, val1, false, __FILE__, __LINE__, \
                       "Expected " #val1 " < " #val2 ".", ##__VA_ARGS__)

#define EXPECT_LE(val1, val2, ...)                                           \
  LIB_ZXTEST_CHECK_VAR(LIB_ZXTEST_LE, val2, val1, false, __FILE__, __LINE__, \
                       "Expected " #val1 " <= " #val2 ".", ##__VA_ARGS__)

#define ASSERT_GT(val1, val2, ...)                                          \
  LIB_ZXTEST_CHECK_VAR(LIB_ZXTEST_GT, val2, val1, true, __FILE__, __LINE__, \
                       "Expected " #val1 " > " #val2 ".", ##__VA_ARGS__)

#define ASSERT_GE(val1, val2, ...)                                          \
  LIB_ZXTEST_CHECK_VAR(LIB_ZXTEST_GE, val2, val1, true, __FILE__, __LINE__, \
                       "Expected " #val1 " >= " #val2 ".", ##__VA_ARGS__)

#define EXPECT_GT(val1, val2, ...)                                           \
  LIB_ZXTEST_CHECK_VAR(LIB_ZXTEST_GT, val2, val1, false, __FILE__, __LINE__, \
                       "Expected " #val1 " > " #val2 ".", ##__VA_ARGS__)

#define EXPECT_GE(val1, val2, ...)                                           \
  LIB_ZXTEST_CHECK_VAR(LIB_ZXTEST_GE, val2, val1, false, __FILE__, __LINE__, \
                       "Expected " #val1 " >= " #val2 ".", ##__VA_ARGS__)

#define ASSERT_STREQ(val2, val1, ...)                                          \
  LIB_ZXTEST_CHECK_VAR(LIB_ZXTEST_STREQ, val2, val1, true, __FILE__, __LINE__, \
                       "Expected strings " #val1 " == " #val2 ".", ##__VA_ARGS__)

#define EXPECT_STREQ(val2, val1, ...)                                           \
  LIB_ZXTEST_CHECK_VAR(LIB_ZXTEST_STREQ, val2, val1, false, __FILE__, __LINE__, \
                       "Expected strings " #val1 " == " #val2 ".", ##__VA_ARGS__)

#define ASSERT_STRNE(val2, val1, ...)                                          \
  LIB_ZXTEST_CHECK_VAR(LIB_ZXTEST_STRNE, val2, val1, true, __FILE__, __LINE__, \
                       "Expected strings " #val1 " != " #val2 ".", ##__VA_ARGS__)

#define EXPECT_STRNE(val2, val1, ...)                                           \
  LIB_ZXTEST_CHECK_VAR(LIB_ZXTEST_STRNE, val2, val1, false, __FILE__, __LINE__, \
                       "Expected strings " #val1 " != " #val2 ".", ##__VA_ARGS__)

#define ASSERT_SUBSTR(str, substr, ...)                                              \
  LIB_ZXTEST_CHECK_VAR(LIB_ZXTEST_SUBSTR, substr, str, true, __FILE__, __LINE__,     \
                       "Expected string " #str " to contain substring " #substr ".", \
                       ##__VA_ARGS__)

#define EXPECT_SUBSTR(str, substr, ...)                                              \
  LIB_ZXTEST_CHECK_VAR(LIB_ZXTEST_SUBSTR, substr, str, false, __FILE__, __LINE__,    \
                       "Expected string " #str " to contain substring " #substr ".", \
                       ##__VA_ARGS__)

#define ASSERT_NOT_SUBSTR(str, substr, ...)                                              \
  LIB_ZXTEST_CHECK_VAR(!LIB_ZXTEST_SUBSTR, substr, str, true, __FILE__, __LINE__,        \
                       "Expected string " #str " to not contain substring " #substr ".", \
                       ##__VA_ARGS__)

#define EXPECT_NOT_SUBSTR(str, substr, ...)                                              \
  LIB_ZXTEST_CHECK_VAR(!LIB_ZXTEST_SUBSTR, substr, str, false, __FILE__, __LINE__,       \
                       "Expected string " #str " to not contain substring " #substr ".", \
                       ##__VA_ARGS__)

// Used to evaluate _ZXTEST_NULLPTR to an actual value.
#define LIB_ZXTEST_CHECK_PTR_DELEGATE(...) LIB_ZXTEST_CHECK_PTR(__VA_ARGS__)

#define ASSERT_NULL(val1, ...)                                                                     \
  LIB_ZXTEST_CHECK_PTR_DELEGATE(LIB_ZXTEST_EQ, LIB_ZXTEST_NULLPTR, val1, true, __FILE__, __LINE__, \
                                "Expected " #val1 " is null pointer.", ##__VA_ARGS__)

#define EXPECT_NULL(val1, ...)                                                            \
  LIB_ZXTEST_CHECK_PTR_DELEGATE(LIB_ZXTEST_EQ, LIB_ZXTEST_NULLPTR, val1, false, __FILE__, \
                                __LINE__, "Expected " #val1 " is null pointer.", ##__VA_ARGS__)

#define ASSERT_NOT_NULL(val1, ...)                                                                 \
  LIB_ZXTEST_CHECK_PTR_DELEGATE(LIB_ZXTEST_NE, LIB_ZXTEST_NULLPTR, val1, true, __FILE__, __LINE__, \
                                "Expected " #val1 " non null pointer.", ##__VA_ARGS__)

#define EXPECT_NOT_NULL(val1, ...)                                                        \
  LIB_ZXTEST_CHECK_PTR_DELEGATE(LIB_ZXTEST_NE, LIB_ZXTEST_NULLPTR, val1, false, __FILE__, \
                                __LINE__, "Expected " #val1 " non null pointer.", ##__VA_ARGS__)

#define ASSERT_STATUS(val1, val2, ...)                                             \
  LIB_ZXTEST_CHECK_VAR_STATUS(LIB_ZXTEST_EQ, val2, val1, true, __FILE__, __LINE__, \
                              "Expected " #val1 " is " #val2 ".", ##__VA_ARGS__)

#define ASSERT_NOT_STATUS(val1, val2, ...)                                         \
  LIB_ZXTEST_CHECK_VAR_STATUS(LIB_ZXTEST_NE, val2, val1, true, __FILE__, __LINE__, \
                              "Expected " #val1 " is " #val2 ".", ##__VA_ARGS__)

#define EXPECT_STATUS(val1, val2, ...)                                              \
  LIB_ZXTEST_CHECK_VAR_STATUS(LIB_ZXTEST_EQ, val2, val1, false, __FILE__, __LINE__, \
                              "Expected " #val1 " is " #val2 ".", ##__VA_ARGS__)

#define EXPECT_NOT_STATUS(val1, val2, ...)                                          \
  LIB_ZXTEST_CHECK_VAR_STATUS(LIB_ZXTEST_NE, val2, val1, false, __FILE__, __LINE__, \
                              "Expected " #val1 " is " #val2 ".", ##__VA_ARGS__)

#define ASSERT_OK(val1, ...)                                                        \
  LIB_ZXTEST_CHECK_VAR_STATUS(LIB_ZXTEST_EQ, ZX_OK, val1, true, __FILE__, __LINE__, \
                              "Expected " #val1 " is ZX_OK.", ##__VA_ARGS__)

#define EXPECT_OK(val1, ...)                                                         \
  LIB_ZXTEST_CHECK_VAR_STATUS(LIB_ZXTEST_EQ, ZX_OK, val1, false, __FILE__, __LINE__, \
                              "Expected " #val1 " is ZX_OK.", ##__VA_ARGS__)

#define ASSERT_NOT_OK(val1, ...)                                                    \
  LIB_ZXTEST_CHECK_VAR_STATUS(LIB_ZXTEST_NE, ZX_OK, val1, true, __FILE__, __LINE__, \
                              "Expected " #val1 " is not ZX_OK.", ##__VA_ARGS__)

#define EXPECT_NOT_OK(val1, ...)                                                     \
  LIB_ZXTEST_CHECK_VAR_STATUS(LIB_ZXTEST_NE, ZX_OK, val1, false, __FILE__, __LINE__, \
                              "Expected " #val1 " is not ZX_OK.", ##__VA_ARGS__)

#define ASSERT_BYTES_EQ(val1, val2, size, ...)                                              \
  LIB_ZXTEST_CHECK_VAR_BYTES(LIB_ZXTEST_BYTEEQ, val2, val1, size, true, __FILE__, __LINE__, \
                             "Expected " #val1 " same bytes as " #val2 ".", ##__VA_ARGS__)

#define EXPECT_BYTES_EQ(val1, val2, size, ...)                                               \
  LIB_ZXTEST_CHECK_VAR_BYTES(LIB_ZXTEST_BYTEEQ, val2, val1, size, false, __FILE__, __LINE__, \
                             "Expected " #val1 " same bytes as " #val2 ".", ##__VA_ARGS__)

#define ASSERT_BYTES_NE(val1, val2, size, ...)                                              \
  LIB_ZXTEST_CHECK_VAR_BYTES(LIB_ZXTEST_BYTENE, val2, val1, size, true, __FILE__, __LINE__, \
                             "Expected " #val1 " same bytes as " #val2 ".", ##__VA_ARGS__)

#define EXPECT_BYTES_NE(val1, val2, size, ...)                                               \
  LIB_ZXTEST_CHECK_VAR_BYTES(LIB_ZXTEST_BYTENE, val2, val1, size, false, __FILE__, __LINE__, \
                             "Expected " #val1 " same bytes as " #val2 ".", ##__VA_ARGS__)

#define ASSERT_TRUE(val, ...)                                                \
  LIB_ZXTEST_CHECK_VAR(LIB_ZXTEST_BOOL, true, val, true, __FILE__, __LINE__, \
                       "Expected " #val " is true.", ##__VA_ARGS__)

#define ASSERT_FALSE(val, ...)                                                \
  LIB_ZXTEST_CHECK_VAR(LIB_ZXTEST_BOOL, false, val, true, __FILE__, __LINE__, \
                       "Expected " #val " is false.", ##__VA_ARGS__)

#define EXPECT_TRUE(val, ...)                                                 \
  LIB_ZXTEST_CHECK_VAR(LIB_ZXTEST_BOOL, true, val, false, __FILE__, __LINE__, \
                       "Expected " #val " is true.", ##__VA_ARGS__)

#define EXPECT_FALSE(val, ...)                                                 \
  LIB_ZXTEST_CHECK_VAR(LIB_ZXTEST_BOOL, false, val, false, __FILE__, __LINE__, \
                       "Expected " #val " is false.", ##__VA_ARGS__)

#define ADD_FAILURE(...) LIB_ZXTEST_FAIL_NO_RETURN(false, "", ##__VA_ARGS__)

#define ADD_FATAL_FAILURE(...) LIB_ZXTEST_FAIL_NO_RETURN(true, "", ##__VA_ARGS__)

#define ASSERT_NO_FATAL_FAILURE(statement, ...)                                                  \
  do {                                                                                           \
    LIB_ZXTEST_ASSERT_ERROR(LIB_ZXTEST_ABORT_IF_ERROR, true,                                     \
                            "Test registered fatal failures before " #statement ".");            \
    statement;                                                                                   \
    LIB_ZXTEST_ASSERT_ERROR(LIB_ZXTEST_ABORT_IF_ERROR, true,                                     \
                            "Test registered fatal failures in " #statement ".", ##__VA_ARGS__); \
  } while (0)

#define EXPECT_NO_FATAL_FAILURE(statement, ...)                                                  \
  do {                                                                                           \
    LIB_ZXTEST_ASSERT_ERROR(LIB_ZXTEST_ABORT_IF_ERROR, true,                                     \
                            "Test registered fatal failures before " #statement ".");            \
    statement;                                                                                   \
    LIB_ZXTEST_ASSERT_ERROR(LIB_ZXTEST_ABORT_IF_ERROR, false,                                    \
                            "Test registered fatal failures in " #statement ".", ##__VA_ARGS__); \
  } while (0)

#define ASSERT_NO_FAILURES(statement, ...)                                                 \
  do {                                                                                     \
    LIB_ZXTEST_ASSERT_ERROR(LIB_ZXTEST_ABORT_IF_ERROR, true,                               \
                            "Test registered fatal failures before " #statement ".");      \
    statement;                                                                             \
    LIB_ZXTEST_ASSERT_ERROR(LIB_ZXTEST_TEST_HAS_ERRORS, true,                              \
                            "Test registered failures in " #statement ".", ##__VA_ARGS__); \
  } while (0)

#define EXPECT_NO_FAILURES(statement, ...)                                                 \
  do {                                                                                     \
    LIB_ZXTEST_ASSERT_ERROR(LIB_ZXTEST_ABORT_IF_ERROR, true,                               \
                            "Test registered fatal failures before " #statement ".");      \
    statement;                                                                             \
    LIB_ZXTEST_ASSERT_ERROR(LIB_ZXTEST_TEST_HAS_ERRORS, false,                             \
                            "Test registered failures in " #statement ".", ##__VA_ARGS__); \
  } while (0)

#ifdef __Fuchsia__

// In cpp |statement| is allowed to be a lambda. To prevent the pre processor from tokenizing lambda
// captures or multiple argument declaration, wrap the lambda declaration in ().
//
// E.g.:
// int a, b;
// ASSERT_DEATH(([&a,&b] {
//     int c,d;
//     CrashNow(a,b, &c, &d);
// }, "Failed to crash now %d %d\n", a, b);
#define ASSERT_DEATH(statement, ...)                                       \
  LIB_ZXTEST_DEATH_STATEMENT(statement, LIB_ZXTEST_DEATH_STATUS_EXCEPTION, \
                             "Exception was never raised.", ##__VA_ARGS__)

// In cpp |statement| is allowed to be a lambda. To prevent the pre processor from tokenizing lambda
// captures or multiple argument declaration, wrap the lambda declaration in ().
//
// E.g.:
// int a, b;
// ASSERT_DEATH(([&a,&b] {
//     int c,d;
//     CrashNow(a,b, &c, &d);
// }, "Failed to crash now %d %d\n", a, b);
#define ASSERT_NO_DEATH(statement, ...)                                   \
  LIB_ZXTEST_DEATH_STATEMENT(statement, LIB_ZXTEST_DEATH_STATUS_COMPLETE, \
                             "Unexpected exception was raised.", ##__VA_ARGS__)
#endif

// Evaluates to true if the current test has any kind of EXPECT or ASSERT failures.
#define CURRENT_TEST_HAS_FAILURES() LIB_ZXTEST_TEST_HAS_ERRORS

// Evaluates to true if the current test has ASSERT failures only.
#define CURRENT_TEST_HAS_FATAL_FAILURE() LIB_ZXTEST_ABORT_IF_ERROR

#endif  // ZXTEST_ZXTEST_H_
