diff options
Diffstat (limited to 'FreeRTOS-Plus/Test/CMock/test/system/test_interactions/return_thru_ptr_and_expect_any_args.yml')
-rw-r--r-- | FreeRTOS-Plus/Test/CMock/test/system/test_interactions/return_thru_ptr_and_expect_any_args.yml | 235 |
1 files changed, 235 insertions, 0 deletions
diff --git a/FreeRTOS-Plus/Test/CMock/test/system/test_interactions/return_thru_ptr_and_expect_any_args.yml b/FreeRTOS-Plus/Test/CMock/test/system/test_interactions/return_thru_ptr_and_expect_any_args.yml new file mode 100644 index 000000000..40e0e7f62 --- /dev/null +++ b/FreeRTOS-Plus/Test/CMock/test/system/test_interactions/return_thru_ptr_and_expect_any_args.yml @@ -0,0 +1,235 @@ +--- +:cmock: + :mock_path: test/mocks + :mock_prefix: mock_ + :treat_as: + abs_struct: PTR + intptr: INT* + :when_ptr: :smart + :plugins: + - :array + - :ignore_arg + - :return_thru_ptr + +:systest: + :types: | + typedef int *intptr; + + struct a_struct + { + int i1; + int i2; + int i3; + }; + + struct _abs_struct + { + int abs_i1; + int abs_i2; + }; + + typedef struct _abs_struct abs_struct; + + :mockable: | + void ptr_ret_int(int *r); + void ptr_ret_ints(int *r, int *s); + void ptr_ret_array(char r[], int len); + void ptr_ret_typedef(intptr r); + void ptr_ret_struct(struct a_struct *r); + void ptr_ret_abstract(abs_struct *r); + void ptr_ret_abstract_array(abs_struct *r, int len); + void ptr_ret_const_int(int *r, const int *s); + void ptr_ret_string(char *s); + + :source: + :header: | + #include <string.h> + #define lengthof(x) (sizeof(x)/sizeof((x)[0])) + + :code: | + + :tests: + :common: | + void setUp(void) {} + void tearDown(void) {} + + :units: + - :pass: TRUE + :should: "handle a single int* argument" + :code: | + test() + { + int r = 1; + int res = 4; + + ptr_ret_int_Expect(&r); + ptr_ret_int_ReturnThruPtr_r(&res); + ptr_ret_int(&r); + TEST_ASSERT_EQUAL(4, r); + } + + - :pass: TRUE + :should: "handle multiple calls" + :code: | + test() + { + int r = 1; + int res1 = 4; + int res2 = 8; + int res3 = 16; + + ptr_ret_int_Expect(&r); + ptr_ret_int_ReturnThruPtr_r(&res1); + ptr_ret_int_Expect(&r); + ptr_ret_int_ReturnThruPtr_r(&res2); + ptr_ret_int_Expect(&r); + ptr_ret_int_ReturnThruPtr_r(&res3); + + ptr_ret_int(&r); + TEST_ASSERT_EQUAL(4, r); + ptr_ret_int(&r); + TEST_ASSERT_EQUAL(8, r); + ptr_ret_int(&r); + TEST_ASSERT_EQUAL(16, r); + + } + + - :pass: TRUE + :should: "ignore an argument" + :code: | + test() + { + int r = 1, s = 2; + int res = 4; + + ptr_ret_int_Expect(&r); + ptr_ret_int_IgnoreArg_r(); + ptr_ret_int_ReturnThruPtr_r(&res); + ptr_ret_int(&s); + TEST_ASSERT_EQUAL(4, s); + } + + - :pass: TRUE + :should: "ignore a null pointer argument" + :code: | + test() + { + int r = 1; + int res = 4; + + ptr_ret_int_Expect(NULL); + ptr_ret_int_IgnoreArg_r(); + ptr_ret_int_ReturnThruPtr_r(&res); + ptr_ret_int(&r); + TEST_ASSERT_EQUAL(4, r); + } + + - :pass: TRUE + :should: "handle multiple int* arguments" + :code: | + test() + { + int r, s = 0x0880AA55; + int r_res = 4; + int s_res = 6; + + ptr_ret_ints_Expect(&r, &s); + ptr_ret_ints_ReturnThruPtr_r(&r_res); + ptr_ret_ints_ReturnThruPtr_s(&s_res); + ptr_ret_ints(&r, &s); + TEST_ASSERT_EQUAL(4, r); + TEST_ASSERT_EQUAL(6, s); + } + + - :pass: TRUE + :should: "only return through pointer when asked to" + :code: | + test() + { + int r = 0x0880AA55; + int s = 0xAA55; + int r_res = 4; + + ptr_ret_ints_Expect(&r, &s); + ptr_ret_ints_ReturnThruPtr_r(&r_res); + ptr_ret_ints(&r, &s); + TEST_ASSERT_EQUAL(4, r); + TEST_ASSERT_EQUAL(0xAA55, s); + } + + - :pass: TRUE + :should: "return an array through a pointer correctly" + :code: | + test() + { + char r_a[] = "booboorooboo"; + char r_a_ret[] = "FEEFI"; + + ptr_ret_array_Expect(r_a, lengthof(r_a)); + ptr_ret_array_ReturnArrayThruPtr_r(r_a_ret, (int)strlen(r_a_ret)); + ptr_ret_array(r_a, lengthof(r_a)); + TEST_ASSERT_EQUAL_STRING("FEEFIorooboo", r_a); + } + + - :pass: TRUE + :should: "handle structs" + :code: | + test() + { + struct a_struct r_s = { .i1 = 2, .i2 = 3, .i3 = 4, }; + struct a_struct r_s_ret = { .i1 = 8, .i2 = 16, .i3 = 32, }; + + ptr_ret_struct_Expect(&r_s); + ptr_ret_struct_ReturnThruPtr_r(&r_s_ret); + ptr_ret_struct(&r_s); + TEST_ASSERT_EQUAL_MEMORY(&r_s_ret, &r_s, sizeof(struct a_struct)); + } + + - :pass: TRUE + :should: "handle typedefs" + :code: | + test() + { + abs_struct r_as = {.abs_i1 = 0x1234, .abs_i2 = 0x4567}; + abs_struct r_as_ret = {.abs_i1 = 0xFFAA55, .abs_i2 = 0xAAFFAA}; + ptr_ret_abstract_Expect(&r_as); + ptr_ret_abstract_ReturnMemThruPtr_r(&r_as_ret, sizeof(abs_struct)); + ptr_ret_abstract(&r_as); + TEST_ASSERT_EQUAL_MEMORY(&r_as_ret, &r_as, sizeof(abs_struct)); + } + + - :pass: TRUE + :should: "only generate ReturnThruPtr definitions for non-const arguments" + :code: | + test() + { + #if !defined(ptr_ret_const_int_ReturnThruPtr_r) + TEST_FAIL_MESSAGE("ReturnThruPtr not defined for a pointer argument."); + #endif + + #if defined(ptr_ret_const_int_ReturnThruPtr_s) + TEST_FAIL_MESSAGE("ReturnThruPtr defined for a const pointer argument."); + #endif + } + + - :pass: TRUE + :should: "generate ReturnThruPtr definitions for string arguments" + :code: | + test() + { + #if !defined(ptr_ret_string_ReturnThruPtr_s) + TEST_FAIL_MESSAGE("ReturnThruPtr not defined for a string argument."); + #endif + } + + - :pass: TRUE + :should: "generate IgnoreArg definitions" + :code: | + test() + { + #if !defined(ptr_ret_array_IgnoreArg_r) \ + || !defined(ptr_ret_array_IgnoreArg_len) \ + || !defined(ptr_ret_const_int_IgnoreArg_s) + TEST_FAIL_MESSAGE("IgnoreArg not defined for an argument."); + #endif + } |