76 lines
1.7 KiB
C
Executable file
76 lines
1.7 KiB
C
Executable file
// SPDX-License-Identifier: GPL-2.0
|
|
/*
|
|
* Example KUnit test to show how to use KUnit.
|
|
*
|
|
* Copyright (C) 2018, Google LLC.
|
|
* Author: Brendan Higgins <brendanhiggins@google.com>
|
|
*/
|
|
|
|
#include <kunit/test.h>
|
|
#include <test/mock.h>
|
|
|
|
struct example {
|
|
int (*foo)(struct example *example, int num);
|
|
};
|
|
|
|
static int example_bar(struct example *example, int num)
|
|
{
|
|
return example->foo(example, num);
|
|
}
|
|
|
|
DECLARE_STRUCT_CLASS_MOCK_PREREQS(example);
|
|
|
|
DEFINE_STRUCT_CLASS_MOCK(METHOD(foo), CLASS(example),
|
|
RETURNS(int),
|
|
PARAMS(struct example *, int));
|
|
|
|
static int example_init(struct MOCK(example) *mock_example)
|
|
{
|
|
struct example *example = mock_get_trgt(mock_example);
|
|
|
|
example->foo = foo;
|
|
return 0;
|
|
}
|
|
|
|
DEFINE_STRUCT_CLASS_MOCK_INIT(example, example_init);
|
|
|
|
static void example_simple_test(struct KUNIT_T *test)
|
|
{
|
|
KUNIT_EXPECT_EQ(test, 1, 1);
|
|
}
|
|
|
|
static void example_mock_test(struct KUNIT_T *test)
|
|
{
|
|
struct MOCK(example) *mock_example = test->priv;
|
|
struct example *example = mock_get_trgt(mock_example);
|
|
struct mock_expectation *handle;
|
|
|
|
handle = EXPECT_CALL(foo(mock_get_ctrl(mock_example), int_eq(test, 5)));
|
|
handle->action = int_return(test, 2);
|
|
|
|
KUNIT_EXPECT_EQ(test, 2, example_bar(example, 5));
|
|
}
|
|
|
|
static int example_test_init(struct KUNIT_T *test)
|
|
{
|
|
kunit_info(test, "initializing");
|
|
|
|
test->priv = CONSTRUCT_MOCK(example, test);
|
|
if (!test->priv)
|
|
return -EINVAL;
|
|
|
|
return 0;
|
|
}
|
|
|
|
static struct KUNIT_CASE_T example_test_cases[] = {
|
|
KUNIT_CASE(example_simple_test),
|
|
KUNIT_CASE(example_mock_test),
|
|
{},
|
|
};
|
|
|
|
static struct KUNIT_SUITE_T example_test_module = {
|
|
.name = "example",
|
|
.init = example_test_init,
|
|
.test_cases = example_test_cases,
|
|
};
|
|
kunit_test_suites(&example_test_module);
|