mirror of
https://github.com/ThrowTheSwitch/Unity.git
synced 2026-01-23 08:25:58 +01:00
Added example 4 in examples directory.
This commit is contained in:
17
examples/example_4/meson.build
Normal file
17
examples/example_4/meson.build
Normal file
@@ -0,0 +1,17 @@
|
|||||||
|
###################################################################################
|
||||||
|
# #
|
||||||
|
# NAME: examples/example_4/meson.build #
|
||||||
|
# #
|
||||||
|
# AUTHOR: Mike Karlesky, Mark VanderVoord, Greg Williams. #
|
||||||
|
# WRITTEN BY: Michael Brockus. #
|
||||||
|
# #
|
||||||
|
# License: MIT #
|
||||||
|
# #
|
||||||
|
###################################################################################
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
example_dir = include_directories('.', join_paths('.', 'src'))
|
||||||
|
|
||||||
|
subdir('src')
|
||||||
|
subdir('test')
|
||||||
5
examples/example_4/readme.txt
Normal file
5
examples/example_4/readme.txt
Normal file
@@ -0,0 +1,5 @@
|
|||||||
|
Example 1
|
||||||
|
=========
|
||||||
|
|
||||||
|
Close to the simplest possible example of Unity, using only basic features.
|
||||||
|
Run make to build & run the example tests.
|
||||||
24
examples/example_4/src/ProductionCode.c
Normal file
24
examples/example_4/src/ProductionCode.c
Normal file
@@ -0,0 +1,24 @@
|
|||||||
|
|
||||||
|
#include "ProductionCode.h"
|
||||||
|
|
||||||
|
int Counter = 0;
|
||||||
|
int NumbersToFind[9] = { 0, 34, 55, 66, 32, 11, 1, 77, 888 }; /* some obnoxious array to search that is 1-based indexing instead of 0. */
|
||||||
|
|
||||||
|
/* This function is supposed to search through NumbersToFind and find a particular number.
|
||||||
|
* If it finds it, the index is returned. Otherwise 0 is returned which sorta makes sense since
|
||||||
|
* NumbersToFind is indexed from 1. Unfortunately it's broken
|
||||||
|
* (and should therefore be caught by our tests) */
|
||||||
|
int FindFunction_WhichIsBroken(int NumberToFind)
|
||||||
|
{
|
||||||
|
int i = 0;
|
||||||
|
while (i < 8) /* Notice I should have been in braces */
|
||||||
|
i++;
|
||||||
|
if (NumbersToFind[i] == NumberToFind) /* Yikes! I'm getting run after the loop finishes instead of during it! */
|
||||||
|
return i;
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
int FunctionWhichReturnsLocalVariable(void)
|
||||||
|
{
|
||||||
|
return Counter;
|
||||||
|
}
|
||||||
3
examples/example_4/src/ProductionCode.h
Normal file
3
examples/example_4/src/ProductionCode.h
Normal file
@@ -0,0 +1,3 @@
|
|||||||
|
|
||||||
|
int FindFunction_WhichIsBroken(int NumberToFind);
|
||||||
|
int FunctionWhichReturnsLocalVariable(void);
|
||||||
11
examples/example_4/src/ProductionCode2.c
Normal file
11
examples/example_4/src/ProductionCode2.c
Normal file
@@ -0,0 +1,11 @@
|
|||||||
|
|
||||||
|
#include "ProductionCode2.h"
|
||||||
|
|
||||||
|
char* ThisFunctionHasNotBeenTested(int Poor, char* LittleFunction)
|
||||||
|
{
|
||||||
|
(void)Poor;
|
||||||
|
(void)LittleFunction;
|
||||||
|
/* Since There Are No Tests Yet, This Function Could Be Empty For All We Know.
|
||||||
|
* Which isn't terribly useful... but at least we put in a TEST_IGNORE so we won't forget */
|
||||||
|
return (char*)0;
|
||||||
|
}
|
||||||
2
examples/example_4/src/ProductionCode2.h
Normal file
2
examples/example_4/src/ProductionCode2.h
Normal file
@@ -0,0 +1,2 @@
|
|||||||
|
|
||||||
|
char* ThisFunctionHasNotBeenTested(int Poor, char* LittleFunction);
|
||||||
23
examples/example_4/src/meson.build
Normal file
23
examples/example_4/src/meson.build
Normal file
@@ -0,0 +1,23 @@
|
|||||||
|
###################################################################################
|
||||||
|
# #
|
||||||
|
# NAME: examples/example_4/src/meson.build #
|
||||||
|
# #
|
||||||
|
# AUTHOR: Mike Karlesky, Mark VanderVoord, Greg Williams. #
|
||||||
|
# WRITTEN BY: Michael Brockus. #
|
||||||
|
# #
|
||||||
|
# License: MIT #
|
||||||
|
# #
|
||||||
|
###################################################################################
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
example_src = files('ProductionCode.c', 'ProductionCode2.c')
|
||||||
|
|
||||||
|
example_lib = library(meson.project_name(),
|
||||||
|
sources: example_src,
|
||||||
|
include_directories: example_dir)
|
||||||
|
|
||||||
|
example_dep = declare_dependency(
|
||||||
|
version: meson.project_version(),
|
||||||
|
link_with: example_lib,
|
||||||
|
include_directories: example_dir)
|
||||||
62
examples/example_4/test/TestProductionCode.c
Normal file
62
examples/example_4/test/TestProductionCode.c
Normal file
@@ -0,0 +1,62 @@
|
|||||||
|
|
||||||
|
#include "ProductionCode.h"
|
||||||
|
#include "unity.h"
|
||||||
|
|
||||||
|
/* sometimes you may want to get at local data in a module.
|
||||||
|
* for example: If you plan to pass by reference, this could be useful
|
||||||
|
* however, it should often be avoided */
|
||||||
|
extern int Counter;
|
||||||
|
|
||||||
|
void setUp(void)
|
||||||
|
{
|
||||||
|
/* This is run before EACH TEST */
|
||||||
|
Counter = 0x5a5a;
|
||||||
|
}
|
||||||
|
|
||||||
|
void tearDown(void)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
void test_FindFunction_WhichIsBroken_ShouldReturnZeroIfItemIsNotInList_WhichWorksEvenInOurBrokenCode(void)
|
||||||
|
{
|
||||||
|
/* All of these should pass */
|
||||||
|
TEST_ASSERT_EQUAL(0, FindFunction_WhichIsBroken(78));
|
||||||
|
TEST_ASSERT_EQUAL(0, FindFunction_WhichIsBroken(2));
|
||||||
|
TEST_ASSERT_EQUAL(0, FindFunction_WhichIsBroken(33));
|
||||||
|
TEST_ASSERT_EQUAL(0, FindFunction_WhichIsBroken(999));
|
||||||
|
TEST_ASSERT_EQUAL(0, FindFunction_WhichIsBroken(-1));
|
||||||
|
}
|
||||||
|
|
||||||
|
void test_FindFunction_WhichIsBroken_ShouldReturnTheIndexForItemsInList_WhichWillFailBecauseOurFunctionUnderTestIsBroken(void)
|
||||||
|
{
|
||||||
|
/* You should see this line fail in your test summary */
|
||||||
|
TEST_ASSERT_EQUAL(1, FindFunction_WhichIsBroken(34));
|
||||||
|
|
||||||
|
/* Notice the rest of these didn't get a chance to run because the line above failed.
|
||||||
|
* Unit tests abort each test function on the first sign of trouble.
|
||||||
|
* Then NEXT test function runs as normal. */
|
||||||
|
TEST_ASSERT_EQUAL(8, FindFunction_WhichIsBroken(8888));
|
||||||
|
}
|
||||||
|
|
||||||
|
void test_FunctionWhichReturnsLocalVariable_ShouldReturnTheCurrentCounterValue(void)
|
||||||
|
{
|
||||||
|
/* This should be true because setUp set this up for us before this test */
|
||||||
|
TEST_ASSERT_EQUAL_HEX(0x5a5a, FunctionWhichReturnsLocalVariable());
|
||||||
|
|
||||||
|
/* This should be true because we can still change our answer */
|
||||||
|
Counter = 0x1234;
|
||||||
|
TEST_ASSERT_EQUAL_HEX(0x1234, FunctionWhichReturnsLocalVariable());
|
||||||
|
}
|
||||||
|
|
||||||
|
void test_FunctionWhichReturnsLocalVariable_ShouldReturnTheCurrentCounterValueAgain(void)
|
||||||
|
{
|
||||||
|
/* This should be true again because setup was rerun before this test (and after we changed it to 0x1234) */
|
||||||
|
TEST_ASSERT_EQUAL_HEX(0x5a5a, FunctionWhichReturnsLocalVariable());
|
||||||
|
}
|
||||||
|
|
||||||
|
void test_FunctionWhichReturnsLocalVariable_ShouldReturnCurrentCounter_ButFailsBecauseThisTestIsActuallyFlawed(void)
|
||||||
|
{
|
||||||
|
/* Sometimes you get the test wrong. When that happens, you get a failure too... and a quick look should tell
|
||||||
|
* you what actually happened...which in this case was a failure to setup the initial condition. */
|
||||||
|
TEST_ASSERT_EQUAL_HEX(0x1234, FunctionWhichReturnsLocalVariable());
|
||||||
|
}
|
||||||
31
examples/example_4/test/TestProductionCode2.c
Normal file
31
examples/example_4/test/TestProductionCode2.c
Normal file
@@ -0,0 +1,31 @@
|
|||||||
|
|
||||||
|
#include "ProductionCode2.h"
|
||||||
|
#include "unity.h"
|
||||||
|
|
||||||
|
/* These should be ignored because they are commented out in various ways:
|
||||||
|
#include "whatever.h"
|
||||||
|
#include "somethingelse.h"
|
||||||
|
*/
|
||||||
|
|
||||||
|
void setUp(void)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
void tearDown(void)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
void test_IgnoredTest(void)
|
||||||
|
{
|
||||||
|
TEST_IGNORE_MESSAGE("This Test Was Ignored On Purpose");
|
||||||
|
}
|
||||||
|
|
||||||
|
void test_AnotherIgnoredTest(void)
|
||||||
|
{
|
||||||
|
TEST_IGNORE_MESSAGE("These Can Be Useful For Leaving Yourself Notes On What You Need To Do Yet");
|
||||||
|
}
|
||||||
|
|
||||||
|
void test_ThisFunctionHasNotBeenTested_NeedsToBeImplemented(void)
|
||||||
|
{
|
||||||
|
TEST_IGNORE(); /* Like This */
|
||||||
|
}
|
||||||
14
examples/example_4/test/meson.build
Normal file
14
examples/example_4/test/meson.build
Normal file
@@ -0,0 +1,14 @@
|
|||||||
|
###################################################################################
|
||||||
|
# #
|
||||||
|
# NAME: examples/example_4/test/meson.build #
|
||||||
|
# #
|
||||||
|
# AUTHOR: Mike Karlesky, Mark VanderVoord, Greg Williams. #
|
||||||
|
# WRITTEN BY: Michael Brockus. #
|
||||||
|
# #
|
||||||
|
# License: MIT #
|
||||||
|
# #
|
||||||
|
###################################################################################
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
subdir('test_runners')
|
||||||
@@ -0,0 +1,53 @@
|
|||||||
|
/* AUTOGENERATED FILE. DO NOT EDIT. */
|
||||||
|
|
||||||
|
/*=======Test Runner Used To Run Each Test Below=====*/
|
||||||
|
#define RUN_TEST(TestFunc, TestLineNum) \
|
||||||
|
{ \
|
||||||
|
Unity.CurrentTestName = #TestFunc; \
|
||||||
|
Unity.CurrentTestLineNumber = TestLineNum; \
|
||||||
|
Unity.NumberOfTests++; \
|
||||||
|
if (TEST_PROTECT()) \
|
||||||
|
{ \
|
||||||
|
setUp(); \
|
||||||
|
TestFunc(); \
|
||||||
|
} \
|
||||||
|
if (TEST_PROTECT()) \
|
||||||
|
{ \
|
||||||
|
tearDown(); \
|
||||||
|
} \
|
||||||
|
UnityConcludeTest(); \
|
||||||
|
}
|
||||||
|
|
||||||
|
/*=======Automagically Detected Files To Include=====*/
|
||||||
|
#include "unity.h"
|
||||||
|
#include <setjmp.h>
|
||||||
|
#include <stdio.h>
|
||||||
|
#include "ProductionCode2.h"
|
||||||
|
|
||||||
|
/*=======External Functions This Runner Calls=====*/
|
||||||
|
extern void setUp(void);
|
||||||
|
extern void tearDown(void);
|
||||||
|
extern void test_IgnoredTest(void);
|
||||||
|
extern void test_AnotherIgnoredTest(void);
|
||||||
|
extern void test_ThisFunctionHasNotBeenTested_NeedsToBeImplemented(void);
|
||||||
|
|
||||||
|
|
||||||
|
/*=======Test Reset Option=====*/
|
||||||
|
void resetTest(void);
|
||||||
|
void resetTest(void)
|
||||||
|
{
|
||||||
|
tearDown();
|
||||||
|
setUp();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/*=======MAIN=====*/
|
||||||
|
int main(void)
|
||||||
|
{
|
||||||
|
UnityBegin("test/TestProductionCode2.c");
|
||||||
|
RUN_TEST(test_IgnoredTest, 18);
|
||||||
|
RUN_TEST(test_AnotherIgnoredTest, 23);
|
||||||
|
RUN_TEST(test_ThisFunctionHasNotBeenTested_NeedsToBeImplemented, 28);
|
||||||
|
|
||||||
|
return (UnityEnd());
|
||||||
|
}
|
||||||
@@ -0,0 +1,57 @@
|
|||||||
|
/* AUTOGENERATED FILE. DO NOT EDIT. */
|
||||||
|
|
||||||
|
/*=======Test Runner Used To Run Each Test Below=====*/
|
||||||
|
#define RUN_TEST(TestFunc, TestLineNum) \
|
||||||
|
{ \
|
||||||
|
Unity.CurrentTestName = #TestFunc; \
|
||||||
|
Unity.CurrentTestLineNumber = TestLineNum; \
|
||||||
|
Unity.NumberOfTests++; \
|
||||||
|
if (TEST_PROTECT()) \
|
||||||
|
{ \
|
||||||
|
setUp(); \
|
||||||
|
TestFunc(); \
|
||||||
|
} \
|
||||||
|
if (TEST_PROTECT()) \
|
||||||
|
{ \
|
||||||
|
tearDown(); \
|
||||||
|
} \
|
||||||
|
UnityConcludeTest(); \
|
||||||
|
}
|
||||||
|
|
||||||
|
/*=======Automagically Detected Files To Include=====*/
|
||||||
|
#include "unity.h"
|
||||||
|
#include <setjmp.h>
|
||||||
|
#include <stdio.h>
|
||||||
|
#include "ProductionCode.h"
|
||||||
|
|
||||||
|
/*=======External Functions This Runner Calls=====*/
|
||||||
|
extern void setUp(void);
|
||||||
|
extern void tearDown(void);
|
||||||
|
extern void test_FindFunction_WhichIsBroken_ShouldReturnZeroIfItemIsNotInList_WhichWorksEvenInOurBrokenCode(void);
|
||||||
|
extern void test_FindFunction_WhichIsBroken_ShouldReturnTheIndexForItemsInList_WhichWillFailBecauseOurFunctionUnderTestIsBroken(void);
|
||||||
|
extern void test_FunctionWhichReturnsLocalVariable_ShouldReturnTheCurrentCounterValue(void);
|
||||||
|
extern void test_FunctionWhichReturnsLocalVariable_ShouldReturnTheCurrentCounterValueAgain(void);
|
||||||
|
extern void test_FunctionWhichReturnsLocalVariable_ShouldReturnCurrentCounter_ButFailsBecauseThisTestIsActuallyFlawed(void);
|
||||||
|
|
||||||
|
|
||||||
|
/*=======Test Reset Option=====*/
|
||||||
|
void resetTest(void);
|
||||||
|
void resetTest(void)
|
||||||
|
{
|
||||||
|
tearDown();
|
||||||
|
setUp();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/*=======MAIN=====*/
|
||||||
|
int main(void)
|
||||||
|
{
|
||||||
|
UnityBegin("test/TestProductionCode.c");
|
||||||
|
RUN_TEST(test_FindFunction_WhichIsBroken_ShouldReturnZeroIfItemIsNotInList_WhichWorksEvenInOurBrokenCode, 20);
|
||||||
|
RUN_TEST(test_FindFunction_WhichIsBroken_ShouldReturnTheIndexForItemsInList_WhichWillFailBecauseOurFunctionUnderTestIsBroken, 30);
|
||||||
|
RUN_TEST(test_FunctionWhichReturnsLocalVariable_ShouldReturnTheCurrentCounterValue, 41);
|
||||||
|
RUN_TEST(test_FunctionWhichReturnsLocalVariable_ShouldReturnTheCurrentCounterValueAgain, 51);
|
||||||
|
RUN_TEST(test_FunctionWhichReturnsLocalVariable_ShouldReturnCurrentCounter_ButFailsBecauseThisTestIsActuallyFlawed, 57);
|
||||||
|
|
||||||
|
return (UnityEnd());
|
||||||
|
}
|
||||||
24
examples/example_4/test/test_runners/meson.build
Normal file
24
examples/example_4/test/test_runners/meson.build
Normal file
@@ -0,0 +1,24 @@
|
|||||||
|
###################################################################################
|
||||||
|
# #
|
||||||
|
# NAME: examples/example_4/test/test_runners/meson.build #
|
||||||
|
# #
|
||||||
|
# AUTHOR: Mike Karlesky, Mark VanderVoord, Greg Williams. #
|
||||||
|
# WRITTEN BY: Michael Brockus. #
|
||||||
|
# #
|
||||||
|
# License: MIT #
|
||||||
|
# #
|
||||||
|
###################################################################################
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
test_src_1 = [
|
||||||
|
'TestProductionCode_Runner.c',
|
||||||
|
join_paths('..' ,'TestProductionCode.c')
|
||||||
|
]
|
||||||
|
test_src_2 = [
|
||||||
|
'TestProductionCode2_Runner.c',
|
||||||
|
join_paths('..' ,'TestProductionCode2.c')
|
||||||
|
]
|
||||||
|
|
||||||
|
test('Test production code one', executable('test-1', test_src_1, dependencies: [ example_dep, unity_dep ]))
|
||||||
|
test('Test production code two', executable('test-2', test_src_2, dependencies: [ example_dep, unity_dep ]))
|
||||||
14
examples/meson.build
Normal file
14
examples/meson.build
Normal file
@@ -0,0 +1,14 @@
|
|||||||
|
###################################################################################
|
||||||
|
# #
|
||||||
|
# NAME: examples/meson.build #
|
||||||
|
# #
|
||||||
|
# AUTHOR: Mike Karlesky, Mark VanderVoord, Greg Williams. #
|
||||||
|
# WRITTEN BY: Michael Brockus. #
|
||||||
|
# #
|
||||||
|
# License: MIT #
|
||||||
|
# #
|
||||||
|
###################################################################################
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
subdir('example_4')
|
||||||
17
meson_options.txt
Executable file
17
meson_options.txt
Executable file
@@ -0,0 +1,17 @@
|
|||||||
|
###################################################################################
|
||||||
|
# #
|
||||||
|
# NAME: meson_options.txt #
|
||||||
|
# #
|
||||||
|
# AUTHOR: Mike Karlesky, Mark VanderVoord, Greg Williams. #
|
||||||
|
# WRITTEN BY: Michael Brockus. #
|
||||||
|
# #
|
||||||
|
# License: MIT #
|
||||||
|
# #
|
||||||
|
###################################################################################
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
option('with_examples',
|
||||||
|
type: 'feature', value : 'disabled',
|
||||||
|
description: 'Enable Unity for unit testing.'
|
||||||
|
)
|
||||||
Reference in New Issue
Block a user