// Copyright 2017 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.

#pragma once

#include <unittest/unittest.h>

#include "crash-list.h"

__BEGIN_CDECLS

typedef enum {
    // The test function returned true and did not have any unregistered crashes.
    TEST_PASSED,
    // The test function returned false and did not have any unregistered crashes.
    TEST_FAILED,
    // The test function crashed before completion and was registered to crash.
    TEST_CRASHED
    // TODO(jocelyndang): add TEST_CRASHED_UNEXPECTEDLY for unregistered crashes -
    // this should be returned rather than exiting the test process.
} test_result_t;

/**
 * Runs the test in a separate thread, catching any crashes.
 *
 * A crash is expected if the process or thread handle is present in the
 * crash_list. crash_list_register can be used to register expected crashes, or
 * via the unittest helper macro REGISTER_CRASH.
 *
 * If an unexpected crash occurs, the test will be terminated immediately.
 *
 * Returns ZX_OK if setup succeeded, otherwise a negative error value is
 * returned. If the return value is ZX_OK, test_result will also be populated.
 */
zx_status_t run_test_with_crash_handler(crash_list_t crash_list,
                                        bool (*test_to_run)(void),
                                        test_result_t* test_result);

/**
 * Runs the function in a separate thread, passing in the given argument.
 * This will block until the function either crashes or returns.
 *
 * Returns ZX_OK if setup succeeded, otherwise a negative error value is
 * returned. If the return value is ZX_OK, test_result will also be populated.
 */
zx_status_t run_fn_with_crash_handler(void (*fn_to_run)(void*), void* arg,
                                      test_result_t* test_result);

__END_CDECLS
