Final assignment for the course "Real Time and Embedded Systems" of THMMY in AUTH university.
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

239 lines
6.3 KiB

---
:cmock:
:plugins:
- 'expect_any_args'
:systest:
:types: |
:mockable: |
int foo(int a);
void bar(int b);
:source:
:header: |
int function(int a, int b, int c);
void func_b(int a);
:code: |
int function(int a, int b, int c)
{
bar(b);
return foo(a) + foo(b) + foo(c);
}
void func_b(int a)
{
bar(a);
}
:tests:
:common: |
void setUp(void) {}
void tearDown(void) {}
:units:
- :pass: TRUE
:should: 'successfully exercise simple ExpectAndReturn mock calls'
:code: |
test()
{
bar_Expect(2);
foo_ExpectAndReturn(1, 10);
foo_ExpectAndReturn(2, 20);
foo_ExpectAndReturn(3, 30);
TEST_ASSERT_EQUAL(60, function(1, 2, 3));
}
- :pass: TRUE
:should: 'ignore foo() call details'
:code: |
test()
{
bar_Expect(4);
foo_ExpectAnyArgsAndReturn(10);
foo_ExpectAnyArgsAndReturn(40);
foo_ExpectAnyArgsAndReturn(80);
TEST_ASSERT_EQUAL(130, function(3, 4, 3));
}
- :pass: FALSE
:should: 'ignore foo() call details and notice if we called foo() more times than expected'
:code: |
test()
{
bar_Expect(4);
foo_ExpectAnyArgsAndReturn(20);
foo_ExpectAnyArgsAndReturn(30);
TEST_ASSERT_EQUAL(50, function(3, 4, 9));
}
- :pass: FALSE
:should: 'ignore foo() call details and notice if we called foo() fewer times than expected'
:code: |
test()
{
bar_Expect(4);
foo_ExpectAnyArgsAndReturn(20);
foo_ExpectAnyArgsAndReturn(10);
foo_ExpectAnyArgsAndReturn(50);
foo_ExpectAnyArgsAndReturn(60);
TEST_ASSERT_EQUAL(70, function(3, 4, 9));
}
- :pass: TRUE
:should: 'ignore bar() and foo() call details'
:code: |
test()
{
bar_ExpectAnyArgs();
foo_ExpectAnyArgsAndReturn(50);
foo_ExpectAnyArgsAndReturn(50);
foo_ExpectAnyArgsAndReturn(50);
TEST_ASSERT_EQUAL(150, function(0, 0, 0));
}
- :pass: TRUE
:should: 'be able to handle an expect after ignore calls since we are ignoring args only'
:code: |
test()
{
bar_ExpectAnyArgs();
foo_ExpectAnyArgsAndReturn(50);
foo_ExpectAnyArgsAndReturn(50);
foo_ExpectAndReturn(3, 50);
TEST_ASSERT_EQUAL(150, function(1, 2, 3));
}
- :pass: TRUE
:should: 'be able to handle an ignore after an expect call since we are ignoring args only'
:code: |
test()
{
bar_ExpectAnyArgs();
foo_ExpectAndReturn(1, 50);
foo_ExpectAnyArgsAndReturn(50);
foo_ExpectAnyArgsAndReturn(50);
TEST_ASSERT_EQUAL(150, function(1, 2, 3));
}
- :pass: TRUE
:should: 'be able to handle an ignore within expect calls since we are ignoring args only'
:code: |
test()
{
bar_ExpectAnyArgs();
foo_ExpectAndReturn(1, 50);
foo_ExpectAnyArgsAndReturn(50);
foo_ExpectAndReturn(3, 50);
TEST_ASSERT_EQUAL(150, function(1, 2, 3));
}
- :pass: FALSE
:should: 'be able to detect problems with an expect even when using ignores'
:code: |
test()
{
bar_ExpectAnyArgs();
foo_ExpectAndReturn(1, 50);
foo_ExpectAnyArgsAndReturn(50);
foo_ExpectAndReturn(4, 50);
TEST_ASSERT_EQUAL(150, function(1, 2, 3));
}
- :pass: TRUE
:should: 'be able to handle a lone ExpectAnyArg call'
:code: |
test()
{
bar_ExpectAnyArgs();
func_b(1);
}
- :pass: FALSE
:should: 'be able to handle a lone ExpectAnyArg call that does not get called'
:code: |
test()
{
bar_ExpectAnyArgs();
}
- :pass: FALSE
:should: 'be able to handle a missing ExpectAnyArg call'
:code: |
test()
{
func_b(1);
}
- :pass: TRUE
:should: 'ignore foo() calls over multiple mock calls'
:code: |
test()
{
bar_ExpectAnyArgs();
foo_ExpectAnyArgsAndReturn(50);
foo_ExpectAnyArgsAndReturn(60);
foo_ExpectAnyArgsAndReturn(70);
TEST_ASSERT_EQUAL(180, function(0, 0, 0));
bar_ExpectAnyArgs();
foo_ExpectAnyArgsAndReturn(30);
foo_ExpectAnyArgsAndReturn(80);
foo_ExpectAnyArgsAndReturn(10);
TEST_ASSERT_EQUAL(120, function(0, 0, 0));
bar_ExpectAnyArgs();
foo_ExpectAnyArgsAndReturn(70);
foo_ExpectAnyArgsAndReturn(20);
foo_ExpectAnyArgsAndReturn(20);
TEST_ASSERT_EQUAL(110, function(0, 0, 0));
}
- :pass: TRUE
:should: 'have multiple cycles of expects still pass when this plugin enabled'
:code: |
test()
{
bar_Expect(2);
foo_ExpectAndReturn(1, 50);
foo_ExpectAndReturn(2, 60);
foo_ExpectAndReturn(3, 70);
TEST_ASSERT_EQUAL(180, function(1, 2, 3));
bar_Expect(5);
foo_ExpectAndReturn(4, 30);
foo_ExpectAndReturn(5, 80);
foo_ExpectAndReturn(6, 10);
TEST_ASSERT_EQUAL(120, function(4, 5, 6));
bar_Expect(8);
foo_ExpectAndReturn(7, 70);
foo_ExpectAndReturn(8, 20);
foo_ExpectAndReturn(9, 20);
TEST_ASSERT_EQUAL(110, function(7, 8, 9));
}
- :pass: FALSE
:should: 'have multiple cycles of expects still fail when this plugin enabled'
:code: |
test()
{
bar_Expect(2);
foo_ExpectAndReturn(1, 50);
foo_ExpectAndReturn(2, 60);
foo_ExpectAndReturn(3, 70);
TEST_ASSERT_EQUAL(180, function(1, 2, 3));
bar_Expect(5);
foo_ExpectAndReturn(4, 30);
foo_ExpectAndReturn(5, 80);
foo_ExpectAndReturn(6, 10);
TEST_ASSERT_EQUAL(120, function(4, 5, 6));
bar_Expect(8);
foo_ExpectAndReturn(7, 70);
foo_ExpectAndReturn(8, 20);
foo_ExpectAndReturn(9, 20);
TEST_ASSERT_EQUAL(110, function(0, 8, 9));
}
...