mirror of
https://github.com/ThrowTheSwitch/Unity.git
synced 2026-01-25 01:11:36 +01:00
Merge pull request #429 from squidfarts/master
Meson support for Unity unit testing framework.
This commit is contained in:
@@ -1,11 +1,13 @@
|
||||
#####################################################
|
||||
# FILE NAME CMakeLists.txt #
|
||||
# #
|
||||
# WRITTEN BY Michael Brockus. #
|
||||
# #
|
||||
# PURPOSE contains CMake statements. #
|
||||
# #
|
||||
#####################################################
|
||||
###################################################################################
|
||||
# #
|
||||
# NAME: CMakeLsits.txt #
|
||||
# #
|
||||
# AUTHOR: Mike Karlesky, Mark VanderVoord, Greg Williams. #
|
||||
# WRITTEN BY: Michael Brockus. #
|
||||
# #
|
||||
# License: MIT #
|
||||
# #
|
||||
###################################################################################
|
||||
cmake_minimum_required(VERSION 3.13.2.0 FATAL_ERROR)
|
||||
|
||||
|
||||
@@ -58,12 +60,9 @@ install(TARGETS "unity" EXPORT "unityConfig"
|
||||
ARCHIVE DESTINATION "${CMAKE_CURRENT_SOURCE_DIR}/${CMAKE_INSTALL_LIBDIR}"
|
||||
LIBRARY DESTINATION "${CMAKE_CURRENT_SOURCE_DIR}/${CMAKE_INSTALL_LIBDIR}"
|
||||
RUNTIME DESTINATION "${CMAKE_CURRENT_SOURCE_DIR}/${CMAKE_INSTALL_BINDIR}"
|
||||
|
||||
INCLUDES DESTINATION "${CMAKE_INSTALL_LIBDIR}"
|
||||
)
|
||||
INCLUDES DESTINATION "${CMAKE_INSTALL_LIBDIR}")
|
||||
|
||||
install(DIRECTORY src/ DESTINATION src)
|
||||
|
||||
install(EXPORT unityConfig DESTINATION share/unityConfig/cmake)
|
||||
|
||||
# This makes the project importable from the build directory
|
||||
|
||||
20
examples/example_4/meson.build
Normal file
20
examples/example_4/meson.build
Normal file
@@ -0,0 +1,20 @@
|
||||
###################################################################################
|
||||
# #
|
||||
# NAME: examples/example_4/meson.build #
|
||||
# #
|
||||
# AUTHOR: Mike Karlesky, Mark VanderVoord, Greg Williams. #
|
||||
# WRITTEN BY: Michael Brockus. #
|
||||
# #
|
||||
# License: MIT #
|
||||
# #
|
||||
###################################################################################
|
||||
|
||||
|
||||
project('example-4')
|
||||
|
||||
unity_dep = dependency('unity', fallback : ['unity', 'unity_dep'])
|
||||
|
||||
example_dir = include_directories('.', join_paths('.', 'src'))
|
||||
|
||||
subdir('src')
|
||||
subdir('test')
|
||||
15
examples/example_4/readme.txt
Normal file
15
examples/example_4/readme.txt
Normal file
@@ -0,0 +1,15 @@
|
||||
Example 4
|
||||
=========
|
||||
|
||||
Close to the simplest possible example of Unity, using only basic features.
|
||||
to build this example run "meson setup <build dir name>".
|
||||
|
||||
Meson uses the Ninja build system to actually build the code. To start the
|
||||
build, simply type the following command.
|
||||
|
||||
"ninja -C <build dir name>"
|
||||
|
||||
Meson provides native support for running tests. The command to do that is simple.
|
||||
|
||||
"meson test -C <build dir name>".
|
||||
|
||||
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);
|
||||
31
examples/example_4/src/meson.build
Normal file
31
examples/example_4/src/meson.build
Normal file
@@ -0,0 +1,31 @@
|
||||
###################################################################################
|
||||
# #
|
||||
# NAME: examples/example_4/src/meson.build #
|
||||
# #
|
||||
# AUTHOR: Mike Karlesky, Mark VanderVoord, Greg Williams. #
|
||||
# WRITTEN BY: Michael Brockus. #
|
||||
# #
|
||||
# License: MIT #
|
||||
# #
|
||||
###################################################################################
|
||||
|
||||
|
||||
|
||||
a_lib = library(
|
||||
'production-code-1',
|
||||
'ProductionCode.c',
|
||||
include_directories: example_dir)
|
||||
|
||||
b_lib = library(
|
||||
'production-code-2',
|
||||
'ProductionCode2.c',
|
||||
include_directories: example_dir)
|
||||
|
||||
|
||||
a_dep = declare_dependency(
|
||||
link_with: a_lib,
|
||||
include_directories: example_dir)
|
||||
|
||||
b_dep = declare_dependency(
|
||||
link_with: b_lib,
|
||||
include_directories: example_dir)
|
||||
4
examples/example_4/subprojects/unity.wrap
Executable file
4
examples/example_4/subprojects/unity.wrap
Executable file
@@ -0,0 +1,4 @@
|
||||
[wrap-git]
|
||||
directory = unity
|
||||
url = https://github.com/squidfarts/Unity.git
|
||||
revision = head
|
||||
63
examples/example_4/test/TestProductionCode.c
Normal file
63
examples/example_4/test/TestProductionCode.c
Normal file
@@ -0,0 +1,63 @@
|
||||
|
||||
#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());
|
||||
}
|
||||
35
examples/example_4/test/TestProductionCode2.c
Normal file
35
examples/example_4/test/TestProductionCode2.c
Normal file
@@ -0,0 +1,35 @@
|
||||
|
||||
#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);
|
||||
void test_AnotherIgnoredTest(void);
|
||||
void test_ThisFunctionHasNotBeenTested_NeedsToBeImplemented(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: [ a_dep, unity_dep ]))
|
||||
test('Test production code two', executable('test-2', test_src_2, dependencies: [ b_dep, unity_dep ]))
|
||||
80
meson.build
Normal file
80
meson.build
Normal file
@@ -0,0 +1,80 @@
|
||||
###################################################################################
|
||||
# #
|
||||
# NAME: meson.build #
|
||||
# #
|
||||
# AUTHOR: Mike Karlesky, Mark VanderVoord, Greg Williams. #
|
||||
# WRITTEN BY: Michael Brockus. #
|
||||
# #
|
||||
# License: MIT #
|
||||
# #
|
||||
###################################################################################
|
||||
|
||||
|
||||
|
||||
project('unity', 'c',
|
||||
version : '2.4.3',
|
||||
license : 'MIT',
|
||||
meson_version : '>=0.50.0',
|
||||
default_options :
|
||||
[
|
||||
'werror=true',
|
||||
'optimization=3',
|
||||
'warning_level=3',
|
||||
'b_sanitize=address,undefined',
|
||||
'b_lto=true',
|
||||
'b_lundef=true'
|
||||
])
|
||||
cc = meson.get_compiler('c')
|
||||
args_for_langs = 'c'
|
||||
|
||||
if cc.get_id() == 'clang'
|
||||
add_project_arguments(
|
||||
'-Wweak-vtables',
|
||||
'-Wexit-time-destructors',
|
||||
'-Wglobal-constructors',
|
||||
'-Wmissing-noreturn', language: args_for_langs)
|
||||
endif
|
||||
|
||||
if cc.get_argument_syntax() == 'gcc'
|
||||
add_project_arguments(
|
||||
'-Wall',
|
||||
'-Wextra',
|
||||
'-Wunreachable-code',
|
||||
'-Wmissing-declarations',
|
||||
'-Wmissing-prototypes',
|
||||
'-Wredundant-decls',
|
||||
'-Wundef',
|
||||
'-Wwrite-strings',
|
||||
'-Wformat',
|
||||
'-Wformat-nonliteral',
|
||||
'-Wformat-security',
|
||||
'-Wold-style-definition',
|
||||
'-Winit-self',
|
||||
'-Wmissing-include-dirs',
|
||||
'-Waddress',
|
||||
'-Waggregate-return',
|
||||
'-Wno-multichar',
|
||||
'-Wdeclaration-after-statement',
|
||||
'-Wvla',
|
||||
'-Wpointer-arith',language: args_for_langs)
|
||||
endif
|
||||
|
||||
if cc.get_id() == 'msvc'
|
||||
add_project_arguments(
|
||||
'/W4',
|
||||
'/w44265',
|
||||
'/w44061',
|
||||
'/w44062',
|
||||
'/wd4018', # implicit signed/unsigned conversion
|
||||
'/wd4146', # unary minus on unsigned (beware INT_MIN)
|
||||
'/wd4244', # lossy type conversion (e.g. double -> int)
|
||||
'/wd4305', # truncating type conversion (e.g. double -> float)
|
||||
mesno.get_supported_arguments(['/utf-8']), language: args_for_langs)
|
||||
endif
|
||||
|
||||
subdir('src')
|
||||
|
||||
unity_dep = declare_dependency(
|
||||
version: meson.project_version(),
|
||||
link_with: unity_lib,
|
||||
include_directories: unity_dir)
|
||||
20
src/meson.build
Normal file
20
src/meson.build
Normal file
@@ -0,0 +1,20 @@
|
||||
###################################################################################
|
||||
# #
|
||||
# NAME: src/meson.build #
|
||||
# #
|
||||
# AUTHOR: Mike Karlesky, Mark VanderVoord, Greg Williams. #
|
||||
# WRITTEN BY: Michael Brockus. #
|
||||
# #
|
||||
# License: MIT #
|
||||
# #
|
||||
###################################################################################
|
||||
|
||||
|
||||
|
||||
unity_src = files('unity.c')
|
||||
|
||||
unity_dir = include_directories('.')
|
||||
|
||||
unity_lib = library(meson.project_name(),
|
||||
sources: unity_src,
|
||||
include_directories: unity_dir)
|
||||
Reference in New Issue
Block a user