ceedling 0.28.2 → 0.28.3
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/assets/ceedling +3 -0
- data/assets/ceedling.cmd +1 -0
- data/assets/default_gitignore +5 -0
- data/assets/project_with_guts.yml +1 -0
- data/assets/project_with_guts_gcov.yml +3 -0
- data/assets/test_example_file_verbose.c +12 -0
- data/bin/ceedling +30 -6
- data/docs/CeedlingPacket.md +135 -23
- data/docs/CeedlingPacket.odt +0 -0
- data/examples/blinky/rakefile.rb +2 -1
- data/lib/ceedling/configurator.rb +7 -5
- data/lib/ceedling/configurator_builder.rb +10 -7
- data/lib/ceedling/configurator_plugins.rb +29 -24
- data/lib/ceedling/configurator_setup.rb +0 -1
- data/lib/ceedling/defaults.rb +7 -2
- data/lib/ceedling/dependinator.rb +10 -2
- data/lib/ceedling/file_finder.rb +57 -49
- data/lib/ceedling/file_path_utils.rb +12 -4
- data/lib/ceedling/file_wrapper.rb +4 -0
- data/lib/ceedling/generator.rb +4 -3
- data/lib/ceedling/generator_test_results.rb +15 -13
- data/lib/ceedling/plugin_manager.rb +18 -18
- data/lib/ceedling/plugin_reportinator.rb +3 -2
- data/lib/ceedling/plugin_reportinator_helper.rb +2 -3
- data/lib/ceedling/preprocessinator_extractor.rb +2 -2
- data/lib/ceedling/preprocessinator_includes_handler.rb +5 -0
- data/lib/ceedling/rakefile.rb +1 -0
- data/lib/ceedling/release_invoker_helper.rb +5 -2
- data/lib/ceedling/rules_release.rake +2 -1
- data/lib/ceedling/rules_tests.rake +18 -9
- data/lib/ceedling/rules_tests_deep_dependencies.rake +2 -2
- data/lib/ceedling/task_invoker.rb +15 -3
- data/lib/ceedling/tasks_vendor.rake +3 -3
- data/lib/ceedling/test_invoker.rb +39 -12
- data/lib/ceedling/test_invoker_helper.rb +5 -1
- data/lib/ceedling/tool_executor.rb +8 -4
- data/lib/ceedling/version.rb +1 -1
- data/out.fail +21 -0
- data/plugins/beep/README.md +22 -0
- data/plugins/beep/lib/beep.rb +40 -0
- data/plugins/bullseye/bullseye.rake +43 -36
- data/plugins/bullseye/config/defaults.yml +4 -0
- data/plugins/bullseye/lib/bullseye.rb +27 -5
- data/plugins/command_hooks/lib/command_hooks.rb +3 -0
- data/plugins/gcov/README.md +34 -1
- data/plugins/gcov/config/defaults.yml +3 -3
- data/plugins/gcov/gcov.rake +7 -5
- data/plugins/gcov/lib/gcov.rb +3 -1
- data/plugins/gcov/lib/gcov_constants.rb +2 -0
- data/plugins/junit_tests_report/lib/junit_tests_report.rb +12 -9
- data/plugins/module_generator/lib/module_generator.rb +14 -1
- data/plugins/module_generator/module_generator.rake +21 -4
- data/plugins/raw_output_report/lib/raw_output_report.rb +41 -0
- data/spec/gcov/gcov_deployment_spec.rb +1 -1
- data/spec/gcov/gcov_test_cases_spec.rb +2 -2
- data/spec/generator_test_results_spec.rb +5 -0
- data/spec/preprocessinator_includes_handler_spec.rb +1 -0
- data/spec/spec_system_helper.rb +178 -4
- data/spec/support/test_example.fail +1 -0
- data/spec/support/test_example.pass +1 -0
- data/spec/support/test_example_empty.pass +1 -0
- data/spec/support/test_example_ignore.pass +1 -0
- data/spec/support/test_example_mangled.pass +1 -0
- data/spec/support/test_example_with_time.pass +22 -0
- data/spec/system/deployment_spec.rb +33 -0
- data/vendor/cmock/README.md +4 -3
- data/vendor/cmock/docs/CMock_Summary.md +1 -1
- data/vendor/cmock/lib/cmock_config.rb +4 -0
- data/vendor/cmock/lib/cmock_generator.rb +5 -2
- data/vendor/cmock/lib/cmock_generator_plugin_array.rb +4 -4
- data/vendor/cmock/lib/cmock_generator_plugin_callback.rb +9 -11
- data/vendor/cmock/lib/cmock_generator_plugin_cexception.rb +0 -1
- data/vendor/cmock/lib/cmock_generator_plugin_ignore.rb +2 -3
- data/vendor/cmock/lib/cmock_generator_plugin_ignore_arg.rb +2 -4
- data/vendor/cmock/lib/cmock_generator_plugin_return_thru_ptr.rb +0 -2
- data/vendor/cmock/lib/cmock_generator_utils.rb +16 -3
- data/vendor/cmock/lib/cmock_header_parser.rb +59 -34
- data/vendor/cmock/release/build.info +1 -1
- data/vendor/cmock/release/version.info +1 -1
- data/vendor/cmock/scripts/create_makefile.rb +17 -2
- data/vendor/cmock/src/cmock.c +13 -7
- data/vendor/cmock/test/test_helper.rb +11 -10
- data/vendor/cmock/test/unit/cmock_config_test.rb +4 -2
- data/vendor/cmock/test/unit/cmock_generator_main_test.rb +10 -4
- data/vendor/cmock/test/unit/cmock_generator_plugin_array_test.rb +20 -12
- data/vendor/cmock/test/unit/cmock_generator_plugin_expect_a_test.rb +2 -2
- data/vendor/cmock/test/unit/cmock_generator_plugin_expect_b_test.rb +2 -2
- data/vendor/cmock/test/unit/cmock_generator_plugin_ignore_arg_test.rb +3 -3
- data/vendor/cmock/test/unit/cmock_generator_plugin_return_thru_ptr_test.rb +8 -6
- data/vendor/cmock/test/unit/cmock_generator_utils_test.rb +27 -10
- data/vendor/cmock/test/unit/cmock_header_parser_test.rb +108 -20
- data/vendor/cmock/vendor/c_exception/Gemfile +4 -0
- data/vendor/cmock/vendor/c_exception/Gemfile.lock +12 -0
- data/vendor/cmock/vendor/c_exception/LICENSE.txt +30 -0
- data/vendor/cmock/vendor/c_exception/README.md +162 -0
- data/vendor/cmock/vendor/c_exception/Rakefile +42 -0
- data/vendor/cmock/vendor/c_exception/docs/CException.md +292 -0
- data/vendor/cmock/vendor/c_exception/docs/ThrowTheSwitchCodingStandard.md +207 -0
- data/vendor/cmock/vendor/c_exception/lib/CException.c +46 -0
- data/vendor/cmock/vendor/c_exception/lib/CException.h +110 -0
- data/vendor/cmock/vendor/c_exception/makefile +24 -0
- data/vendor/cmock/vendor/c_exception/release/build.info +2 -0
- data/vendor/cmock/vendor/c_exception/release/version.info +2 -0
- data/vendor/cmock/vendor/c_exception/test/CExceptionConfig.h +46 -0
- data/vendor/cmock/vendor/c_exception/test/TestException.c +391 -0
- data/vendor/cmock/vendor/c_exception/test/TestException_Runner.c +67 -0
- data/vendor/cmock/vendor/unity/README.md +231 -0
- data/vendor/cmock/vendor/unity/auto/colour_prompt.rb +118 -0
- data/vendor/cmock/vendor/unity/auto/colour_reporter.rb +39 -0
- data/vendor/cmock/vendor/unity/auto/generate_config.yml +36 -0
- data/vendor/cmock/vendor/unity/auto/generate_module.rb +308 -0
- data/vendor/cmock/vendor/unity/auto/generate_test_runner.rb +457 -0
- data/vendor/cmock/vendor/unity/auto/parse_output.rb +323 -0
- data/vendor/cmock/vendor/unity/auto/stylize_as_junit.rb +252 -0
- data/vendor/cmock/vendor/unity/auto/test_file_filter.rb +25 -0
- data/vendor/cmock/vendor/unity/auto/type_sanitizer.rb +6 -0
- data/vendor/cmock/vendor/unity/auto/unity_test_summary.py +139 -0
- data/vendor/cmock/vendor/unity/auto/unity_test_summary.rb +136 -0
- data/vendor/cmock/vendor/unity/auto/unity_to_junit.py +146 -0
- data/vendor/cmock/vendor/unity/docs/ThrowTheSwitchCodingStandard.md +206 -0
- data/vendor/cmock/vendor/unity/docs/UnityAssertionsCheatSheetSuitableforPrintingandPossiblyFraming.pdf +0 -0
- data/vendor/cmock/vendor/unity/docs/UnityAssertionsReference.md +779 -0
- data/vendor/cmock/vendor/unity/docs/UnityConfigurationGuide.md +433 -0
- data/vendor/cmock/vendor/unity/docs/UnityGettingStartedGuide.md +192 -0
- data/vendor/cmock/vendor/unity/docs/UnityHelperScriptsGuide.md +260 -0
- data/vendor/cmock/vendor/unity/docs/license.txt +21 -0
- data/vendor/cmock/vendor/unity/examples/example_1/makefile +71 -0
- data/vendor/cmock/vendor/unity/examples/example_1/readme.txt +5 -0
- data/vendor/cmock/vendor/unity/examples/example_1/src/ProductionCode.c +24 -0
- data/vendor/cmock/vendor/unity/examples/example_1/src/ProductionCode.h +3 -0
- data/vendor/cmock/vendor/unity/examples/example_1/src/ProductionCode2.c +11 -0
- data/vendor/cmock/vendor/unity/examples/example_1/src/ProductionCode2.h +2 -0
- data/vendor/cmock/vendor/unity/examples/example_1/test/TestProductionCode.c +62 -0
- data/vendor/cmock/vendor/unity/examples/example_1/test/TestProductionCode2.c +31 -0
- data/vendor/cmock/vendor/unity/examples/example_1/test/test_runners/TestProductionCode2_Runner.c +53 -0
- data/vendor/cmock/vendor/unity/examples/example_1/test/test_runners/TestProductionCode_Runner.c +57 -0
- data/vendor/cmock/vendor/unity/examples/example_2/makefile +70 -0
- data/vendor/cmock/vendor/unity/examples/example_2/readme.txt +5 -0
- data/vendor/cmock/vendor/unity/examples/example_2/src/ProductionCode.c +24 -0
- data/vendor/cmock/vendor/unity/examples/example_2/src/ProductionCode.h +3 -0
- data/vendor/cmock/vendor/unity/examples/example_2/src/ProductionCode2.c +11 -0
- data/vendor/cmock/vendor/unity/examples/example_2/src/ProductionCode2.h +2 -0
- data/vendor/cmock/vendor/unity/examples/example_2/test/TestProductionCode.c +64 -0
- data/vendor/cmock/vendor/unity/examples/example_2/test/TestProductionCode2.c +33 -0
- data/vendor/cmock/vendor/unity/examples/example_2/test/test_runners/TestProductionCode2_Runner.c +9 -0
- data/vendor/cmock/vendor/unity/examples/example_2/test/test_runners/TestProductionCode_Runner.c +11 -0
- data/vendor/cmock/vendor/unity/examples/example_2/test/test_runners/all_tests.c +12 -0
- data/vendor/cmock/vendor/unity/examples/example_3/helper/UnityHelper.c +10 -0
- data/vendor/cmock/vendor/unity/examples/example_3/helper/UnityHelper.h +12 -0
- data/vendor/cmock/vendor/unity/examples/example_3/rakefile.rb +43 -0
- data/vendor/cmock/vendor/unity/examples/example_3/rakefile_helper.rb +249 -0
- data/vendor/cmock/vendor/unity/examples/example_3/readme.txt +13 -0
- data/vendor/cmock/vendor/unity/examples/example_3/src/ProductionCode.c +24 -0
- data/vendor/cmock/vendor/unity/examples/example_3/src/ProductionCode.h +3 -0
- data/vendor/cmock/vendor/unity/examples/example_3/src/ProductionCode2.c +11 -0
- data/vendor/cmock/vendor/unity/examples/example_3/src/ProductionCode2.h +2 -0
- data/vendor/cmock/vendor/unity/examples/example_3/target_gcc_32.yml +46 -0
- data/vendor/cmock/vendor/unity/examples/example_3/test/TestProductionCode.c +62 -0
- data/vendor/cmock/vendor/unity/examples/example_3/test/TestProductionCode2.c +31 -0
- data/vendor/cmock/vendor/unity/examples/unity_config.h +247 -0
- data/vendor/cmock/vendor/unity/extras/eclipse/error_parsers.txt +26 -0
- data/vendor/cmock/vendor/unity/extras/fixture/rakefile.rb +48 -0
- data/vendor/cmock/vendor/unity/extras/fixture/rakefile_helper.rb +178 -0
- data/vendor/cmock/vendor/unity/extras/fixture/readme.txt +9 -0
- data/vendor/cmock/vendor/unity/extras/fixture/src/unity_fixture.c +436 -0
- data/vendor/cmock/vendor/unity/extras/fixture/src/unity_fixture.h +83 -0
- data/vendor/cmock/vendor/unity/extras/fixture/src/unity_fixture_internals.h +51 -0
- data/vendor/cmock/vendor/unity/extras/fixture/src/unity_fixture_malloc_overrides.h +47 -0
- data/vendor/cmock/vendor/unity/extras/fixture/test/Makefile +75 -0
- data/vendor/cmock/vendor/unity/extras/fixture/test/main/AllTests.c +22 -0
- data/vendor/cmock/vendor/unity/extras/fixture/test/template_fixture_tests.c +39 -0
- data/vendor/cmock/vendor/unity/extras/fixture/test/unity_fixture_Test.c +543 -0
- data/vendor/cmock/vendor/unity/extras/fixture/test/unity_fixture_TestRunner.c +57 -0
- data/vendor/cmock/vendor/unity/extras/fixture/test/unity_output_Spy.c +57 -0
- data/vendor/cmock/vendor/unity/extras/fixture/test/unity_output_Spy.h +17 -0
- data/vendor/cmock/vendor/unity/release/build.info +2 -0
- data/vendor/cmock/vendor/unity/release/version.info +2 -0
- data/vendor/cmock/vendor/unity/src/unity.c +1572 -0
- data/vendor/cmock/vendor/unity/src/unity.h +503 -0
- data/vendor/cmock/vendor/unity/src/unity_internals.h +924 -0
- data/vendor/cmock/vendor/unity/test/Makefile +68 -0
- data/vendor/cmock/vendor/unity/test/expectdata/testsample_cmd.c +61 -0
- data/vendor/cmock/vendor/unity/test/expectdata/testsample_def.c +57 -0
- data/vendor/cmock/vendor/unity/test/expectdata/testsample_head1.c +55 -0
- data/vendor/cmock/vendor/unity/test/expectdata/testsample_head1.h +15 -0
- data/vendor/cmock/vendor/unity/test/expectdata/testsample_mock_cmd.c +80 -0
- data/vendor/cmock/vendor/unity/test/expectdata/testsample_mock_def.c +76 -0
- data/vendor/cmock/vendor/unity/test/expectdata/testsample_mock_head1.c +75 -0
- data/vendor/cmock/vendor/unity/test/expectdata/testsample_mock_head1.h +13 -0
- data/vendor/cmock/vendor/unity/test/expectdata/testsample_mock_new1.c +89 -0
- data/vendor/cmock/vendor/unity/test/expectdata/testsample_mock_new2.c +89 -0
- data/vendor/cmock/vendor/unity/test/expectdata/testsample_mock_param.c +77 -0
- data/vendor/cmock/vendor/unity/test/expectdata/testsample_mock_run1.c +89 -0
- data/vendor/cmock/vendor/unity/test/expectdata/testsample_mock_run2.c +89 -0
- data/vendor/cmock/vendor/unity/test/expectdata/testsample_mock_yaml.c +90 -0
- data/vendor/cmock/vendor/unity/test/expectdata/testsample_new1.c +67 -0
- data/vendor/cmock/vendor/unity/test/expectdata/testsample_new2.c +70 -0
- data/vendor/cmock/vendor/unity/test/expectdata/testsample_param.c +58 -0
- data/vendor/cmock/vendor/unity/test/expectdata/testsample_run1.c +67 -0
- data/vendor/cmock/vendor/unity/test/expectdata/testsample_run2.c +70 -0
- data/vendor/cmock/vendor/unity/test/expectdata/testsample_yaml.c +71 -0
- data/vendor/cmock/vendor/unity/test/rakefile +125 -0
- data/vendor/cmock/vendor/unity/test/rakefile_helper.rb +260 -0
- data/vendor/cmock/vendor/unity/test/spec/generate_module_existing_file_spec.rb +158 -0
- data/vendor/cmock/vendor/unity/test/targets/clang_file.yml +78 -0
- data/vendor/cmock/vendor/unity/test/targets/clang_strict.yml +78 -0
- data/vendor/cmock/vendor/unity/test/targets/gcc_32.yml +49 -0
- data/vendor/cmock/vendor/unity/test/targets/gcc_64.yml +50 -0
- data/vendor/cmock/vendor/unity/test/targets/gcc_auto_limits.yml +47 -0
- data/vendor/cmock/vendor/unity/test/targets/gcc_auto_stdint.yml +59 -0
- data/vendor/cmock/vendor/unity/test/targets/gcc_manual_math.yml +47 -0
- data/vendor/cmock/vendor/unity/test/targets/hitech_picc18.yml +101 -0
- data/vendor/cmock/vendor/unity/test/targets/iar_arm_v4.yml +90 -0
- data/vendor/cmock/vendor/unity/test/targets/iar_arm_v5.yml +80 -0
- data/vendor/cmock/vendor/unity/test/targets/iar_arm_v5_3.yml +80 -0
- data/vendor/cmock/vendor/unity/test/targets/iar_armcortex_LM3S9B92_v5_4.yml +94 -0
- data/vendor/cmock/vendor/unity/test/targets/iar_cortexm3_v5.yml +84 -0
- data/vendor/cmock/vendor/unity/test/targets/iar_msp430.yml +95 -0
- data/vendor/cmock/vendor/unity/test/targets/iar_sh2a_v6.yml +86 -0
- data/vendor/cmock/vendor/unity/test/testdata/CException.h +11 -0
- data/vendor/cmock/vendor/unity/test/testdata/Defs.h +8 -0
- data/vendor/cmock/vendor/unity/test/testdata/cmock.h +14 -0
- data/vendor/cmock/vendor/unity/test/testdata/mockMock.h +13 -0
- data/vendor/cmock/vendor/unity/test/testdata/testRunnerGenerator.c +186 -0
- data/vendor/cmock/vendor/unity/test/testdata/testRunnerGeneratorSmall.c +70 -0
- data/vendor/cmock/vendor/unity/test/testdata/testRunnerGeneratorWithMocks.c +195 -0
- data/vendor/cmock/vendor/unity/test/tests/test_generate_test_runner.rb +1252 -0
- data/vendor/cmock/vendor/unity/test/tests/testparameterized.c +113 -0
- data/vendor/cmock/vendor/unity/test/tests/testunity.c +5371 -0
- data/vendor/unity/auto/generate_test_runner.rb +30 -10
- data/vendor/unity/auto/parse_output.rb +212 -109
- data/vendor/unity/docs/ThrowTheSwitchCodingStandard.md +9 -10
- data/vendor/unity/docs/UnityAssertionsReference.md +11 -2
- data/vendor/unity/docs/UnityConfigurationGuide.md +90 -55
- data/vendor/unity/docs/UnityGettingStartedGuide.md +6 -5
- data/vendor/unity/docs/UnityHelperScriptsGuide.md +23 -5
- data/vendor/unity/examples/unity_config.h +8 -0
- data/vendor/unity/extras/fixture/src/unity_fixture.c +4 -0
- data/vendor/unity/extras/fixture/src/unity_fixture.h +1 -1
- data/vendor/unity/extras/fixture/src/unity_fixture_internals.h +2 -2
- data/vendor/unity/release/build.info +1 -1
- data/vendor/unity/release/version.info +1 -1
- data/vendor/unity/src/unity.c +64 -57
- data/vendor/unity/src/unity.h +111 -7
- data/vendor/unity/src/unity_internals.h +173 -73
- data/vendor/unity/test/Makefile +5 -1
- data/vendor/unity/test/testdata/testRunnerGenerator.c +4 -1
- data/vendor/unity/test/testdata/testRunnerGeneratorSmall.c +4 -1
- data/vendor/unity/test/testdata/testRunnerGeneratorWithMocks.c +4 -1
- data/vendor/unity/test/tests/testparameterized.c +5 -2
- data/vendor/unity/test/tests/testunity.c +34 -0
- metadata +150 -2
@@ -0,0 +1,51 @@
|
|
1
|
+
/* Copyright (c) 2010 James Grenning and Contributed to Unity Project
|
2
|
+
* ==========================================
|
3
|
+
* Unity Project - A Test Framework for C
|
4
|
+
* Copyright (c) 2007 Mike Karlesky, Mark VanderVoord, Greg Williams
|
5
|
+
* [Released under MIT License. Please refer to license.txt for details]
|
6
|
+
* ========================================== */
|
7
|
+
|
8
|
+
#ifndef UNITY_FIXTURE_INTERNALS_H_
|
9
|
+
#define UNITY_FIXTURE_INTERNALS_H_
|
10
|
+
|
11
|
+
#ifdef __cplusplus
|
12
|
+
extern "C"
|
13
|
+
{
|
14
|
+
#endif
|
15
|
+
|
16
|
+
struct UNITY_FIXTURE_T
|
17
|
+
{
|
18
|
+
int Verbose;
|
19
|
+
unsigned int RepeatCount;
|
20
|
+
const char* NameFilter;
|
21
|
+
const char* GroupFilter;
|
22
|
+
};
|
23
|
+
extern struct UNITY_FIXTURE_T UnityFixture;
|
24
|
+
|
25
|
+
typedef void unityfunction(void);
|
26
|
+
void UnityTestRunner(unityfunction* setup,
|
27
|
+
unityfunction* testBody,
|
28
|
+
unityfunction* teardown,
|
29
|
+
const char* printableName,
|
30
|
+
const char* group,
|
31
|
+
const char* name,
|
32
|
+
const char* file, unsigned int line);
|
33
|
+
|
34
|
+
void UnityIgnoreTest(const char* printableName, const char* group, const char* name);
|
35
|
+
void UnityMalloc_StartTest(void);
|
36
|
+
void UnityMalloc_EndTest(void);
|
37
|
+
int UnityGetCommandLineOptions(int argc, const char* argv[]);
|
38
|
+
void UnityConcludeFixtureTest(void);
|
39
|
+
|
40
|
+
void UnityPointer_Set(void** pointer, void* newValue, UNITY_LINE_TYPE line);
|
41
|
+
void UnityPointer_UndoAllSets(void);
|
42
|
+
void UnityPointer_Init(void);
|
43
|
+
#ifndef UNITY_MAX_POINTERS
|
44
|
+
#define UNITY_MAX_POINTERS 5
|
45
|
+
#endif
|
46
|
+
|
47
|
+
#ifdef __cplusplus
|
48
|
+
}
|
49
|
+
#endif
|
50
|
+
|
51
|
+
#endif /* UNITY_FIXTURE_INTERNALS_H_ */
|
@@ -0,0 +1,47 @@
|
|
1
|
+
/* Copyright (c) 2010 James Grenning and Contributed to Unity Project
|
2
|
+
* ==========================================
|
3
|
+
* Unity Project - A Test Framework for C
|
4
|
+
* Copyright (c) 2007 Mike Karlesky, Mark VanderVoord, Greg Williams
|
5
|
+
* [Released under MIT License. Please refer to license.txt for details]
|
6
|
+
* ========================================== */
|
7
|
+
|
8
|
+
#ifndef UNITY_FIXTURE_MALLOC_OVERRIDES_H_
|
9
|
+
#define UNITY_FIXTURE_MALLOC_OVERRIDES_H_
|
10
|
+
|
11
|
+
#include <stddef.h>
|
12
|
+
|
13
|
+
#ifdef UNITY_EXCLUDE_STDLIB_MALLOC
|
14
|
+
/* Define this macro to remove the use of stdlib.h, malloc, and free.
|
15
|
+
* Many embedded systems do not have a heap or malloc/free by default.
|
16
|
+
* This internal unity_malloc() provides allocated memory deterministically from
|
17
|
+
* the end of an array only, unity_free() only releases from end-of-array,
|
18
|
+
* blocks are not coalesced, and memory not freed in LIFO order is stranded. */
|
19
|
+
#ifndef UNITY_INTERNAL_HEAP_SIZE_BYTES
|
20
|
+
#define UNITY_INTERNAL_HEAP_SIZE_BYTES 256
|
21
|
+
#endif
|
22
|
+
#endif
|
23
|
+
|
24
|
+
/* These functions are used by the Unity Fixture to allocate and release memory
|
25
|
+
* on the heap and can be overridden with platform-specific implementations.
|
26
|
+
* For example, when using FreeRTOS UNITY_FIXTURE_MALLOC becomes pvPortMalloc()
|
27
|
+
* and UNITY_FIXTURE_FREE becomes vPortFree(). */
|
28
|
+
#if !defined(UNITY_FIXTURE_MALLOC) || !defined(UNITY_FIXTURE_FREE)
|
29
|
+
#include <stdlib.h>
|
30
|
+
#define UNITY_FIXTURE_MALLOC(size) malloc(size)
|
31
|
+
#define UNITY_FIXTURE_FREE(ptr) free(ptr)
|
32
|
+
#else
|
33
|
+
extern void* UNITY_FIXTURE_MALLOC(size_t size);
|
34
|
+
extern void UNITY_FIXTURE_FREE(void* ptr);
|
35
|
+
#endif
|
36
|
+
|
37
|
+
#define malloc unity_malloc
|
38
|
+
#define calloc unity_calloc
|
39
|
+
#define realloc unity_realloc
|
40
|
+
#define free unity_free
|
41
|
+
|
42
|
+
void* unity_malloc(size_t size);
|
43
|
+
void* unity_calloc(size_t num, size_t size);
|
44
|
+
void* unity_realloc(void * oldMem, size_t size);
|
45
|
+
void unity_free(void * mem);
|
46
|
+
|
47
|
+
#endif /* UNITY_FIXTURE_MALLOC_OVERRIDES_H_ */
|
@@ -0,0 +1,75 @@
|
|
1
|
+
CC = gcc
|
2
|
+
ifeq ($(shell uname -s), Darwin)
|
3
|
+
CC = clang
|
4
|
+
endif
|
5
|
+
#DEBUG = -O0 -g
|
6
|
+
CFLAGS += -std=c99 -pedantic -Wall -Wextra -Werror
|
7
|
+
CFLAGS += $(DEBUG)
|
8
|
+
DEFINES = -D UNITY_OUTPUT_CHAR=UnityOutputCharSpy_OutputChar
|
9
|
+
DEFINES += -D UNITY_OUTPUT_CHAR_HEADER_DECLARATION=UnityOutputCharSpy_OutputChar\(int\)
|
10
|
+
SRC = ../src/unity_fixture.c \
|
11
|
+
../../../src/unity.c \
|
12
|
+
unity_fixture_Test.c \
|
13
|
+
unity_fixture_TestRunner.c \
|
14
|
+
unity_output_Spy.c \
|
15
|
+
main/AllTests.c
|
16
|
+
|
17
|
+
INC_DIR = -I../src -I../../../src/
|
18
|
+
BUILD_DIR = ../build
|
19
|
+
TARGET = ../build/fixture_tests.exe
|
20
|
+
|
21
|
+
all: default noStdlibMalloc 32bits
|
22
|
+
|
23
|
+
default: $(BUILD_DIR)
|
24
|
+
$(CC) $(CFLAGS) $(DEFINES) $(SRC) $(INC_DIR) -o $(TARGET) -D UNITY_SUPPORT_64
|
25
|
+
@ echo "default build"
|
26
|
+
./$(TARGET)
|
27
|
+
|
28
|
+
32bits: $(BUILD_DIR)
|
29
|
+
$(CC) $(CFLAGS) $(DEFINES) $(SRC) $(INC_DIR) -o $(TARGET) -m32
|
30
|
+
@ echo "32bits build"
|
31
|
+
./$(TARGET)
|
32
|
+
|
33
|
+
noStdlibMalloc: $(BUILD_DIR)
|
34
|
+
$(CC) $(CFLAGS) $(DEFINES) $(SRC) $(INC_DIR) -o $(TARGET) -D UNITY_EXCLUDE_STDLIB_MALLOC
|
35
|
+
@ echo "build with noStdlibMalloc"
|
36
|
+
./$(TARGET)
|
37
|
+
|
38
|
+
C89: CFLAGS += -D UNITY_EXCLUDE_STDINT_H # C89 did not have type 'long long', <stdint.h>
|
39
|
+
C89: $(BUILD_DIR)
|
40
|
+
$(CC) $(CFLAGS) $(DEFINES) $(SRC) $(INC_DIR) -o $(TARGET) -std=c89 && ./$(TARGET)
|
41
|
+
$(CC) $(CFLAGS) $(DEFINES) $(SRC) $(INC_DIR) -o $(TARGET) -D UNITY_EXCLUDE_STDLIB_MALLOC -std=c89
|
42
|
+
./$(TARGET)
|
43
|
+
|
44
|
+
$(BUILD_DIR):
|
45
|
+
mkdir -p $(BUILD_DIR)
|
46
|
+
|
47
|
+
clean:
|
48
|
+
rm -f $(TARGET) $(BUILD_DIR)/*.gc*
|
49
|
+
|
50
|
+
cov: $(BUILD_DIR)
|
51
|
+
cd $(BUILD_DIR) && \
|
52
|
+
$(CC) $(DEFINES) $(foreach i, $(SRC), ../test/$(i)) $(INC_DIR) -o $(TARGET) -fprofile-arcs -ftest-coverage
|
53
|
+
rm -f $(BUILD_DIR)/*.gcda
|
54
|
+
./$(TARGET) > /dev/null ; ./$(TARGET) -v > /dev/null
|
55
|
+
cd $(BUILD_DIR) && \
|
56
|
+
gcov unity_fixture.c | head -3
|
57
|
+
grep '###' $(BUILD_DIR)/unity_fixture.c.gcov -C2 || true # Show uncovered lines
|
58
|
+
|
59
|
+
# These extended flags DO get included before any target build runs
|
60
|
+
CFLAGS += -Wbad-function-cast
|
61
|
+
CFLAGS += -Wcast-qual
|
62
|
+
CFLAGS += -Wconversion
|
63
|
+
CFLAGS += -Wformat=2
|
64
|
+
CFLAGS += -Wmissing-prototypes
|
65
|
+
CFLAGS += -Wold-style-definition
|
66
|
+
CFLAGS += -Wpointer-arith
|
67
|
+
CFLAGS += -Wshadow
|
68
|
+
CFLAGS += -Wstrict-overflow=5
|
69
|
+
CFLAGS += -Wstrict-prototypes
|
70
|
+
CFLAGS += -Wswitch-default
|
71
|
+
CFLAGS += -Wundef
|
72
|
+
CFLAGS += -Wno-error=undef # Warning only, this should not stop the build
|
73
|
+
CFLAGS += -Wunreachable-code
|
74
|
+
CFLAGS += -Wunused
|
75
|
+
CFLAGS += -fstrict-aliasing
|
@@ -0,0 +1,22 @@
|
|
1
|
+
/* Copyright (c) 2010 James Grenning and Contributed to Unity Project
|
2
|
+
* ==========================================
|
3
|
+
* Unity Project - A Test Framework for C
|
4
|
+
* Copyright (c) 2007 Mike Karlesky, Mark VanderVoord, Greg Williams
|
5
|
+
* [Released under MIT License. Please refer to license.txt for details]
|
6
|
+
* ========================================== */
|
7
|
+
|
8
|
+
#include "unity_fixture.h"
|
9
|
+
|
10
|
+
static void runAllTests(void)
|
11
|
+
{
|
12
|
+
RUN_TEST_GROUP(UnityFixture);
|
13
|
+
RUN_TEST_GROUP(UnityCommandOptions);
|
14
|
+
RUN_TEST_GROUP(LeakDetection);
|
15
|
+
RUN_TEST_GROUP(InternalMalloc);
|
16
|
+
}
|
17
|
+
|
18
|
+
int main(int argc, const char* argv[])
|
19
|
+
{
|
20
|
+
return UnityMain(argc, argv, runAllTests);
|
21
|
+
}
|
22
|
+
|
@@ -0,0 +1,39 @@
|
|
1
|
+
/* Copyright (c) 2010 James Grenning and Contributed to Unity Project
|
2
|
+
* ==========================================
|
3
|
+
* Unity Project - A Test Framework for C
|
4
|
+
* Copyright (c) 2007 Mike Karlesky, Mark VanderVoord, Greg Williams
|
5
|
+
* [Released under MIT License. Please refer to license.txt for details]
|
6
|
+
* ========================================== */
|
7
|
+
|
8
|
+
#include "unity_fixture.h"
|
9
|
+
|
10
|
+
static int data = -1;
|
11
|
+
|
12
|
+
TEST_GROUP(mygroup);
|
13
|
+
|
14
|
+
TEST_SETUP(mygroup)
|
15
|
+
{
|
16
|
+
data = 0;
|
17
|
+
}
|
18
|
+
|
19
|
+
TEST_TEAR_DOWN(mygroup)
|
20
|
+
{
|
21
|
+
data = -1;
|
22
|
+
}
|
23
|
+
|
24
|
+
TEST(mygroup, test1)
|
25
|
+
{
|
26
|
+
TEST_ASSERT_EQUAL_INT(0, data);
|
27
|
+
}
|
28
|
+
|
29
|
+
TEST(mygroup, test2)
|
30
|
+
{
|
31
|
+
TEST_ASSERT_EQUAL_INT(0, data);
|
32
|
+
data = 5;
|
33
|
+
}
|
34
|
+
|
35
|
+
TEST(mygroup, test3)
|
36
|
+
{
|
37
|
+
data = 7;
|
38
|
+
TEST_ASSERT_EQUAL_INT(7, data);
|
39
|
+
}
|
@@ -0,0 +1,543 @@
|
|
1
|
+
/* Copyright (c) 2010 James Grenning and Contributed to Unity Project
|
2
|
+
* ==========================================
|
3
|
+
* Unity Project - A Test Framework for C
|
4
|
+
* Copyright (c) 2007 Mike Karlesky, Mark VanderVoord, Greg Williams
|
5
|
+
* [Released under MIT License. Please refer to license.txt for details]
|
6
|
+
* ========================================== */
|
7
|
+
|
8
|
+
#include "unity_fixture.h"
|
9
|
+
#include "unity_output_Spy.h"
|
10
|
+
#include <stdlib.h>
|
11
|
+
#include <string.h>
|
12
|
+
|
13
|
+
TEST_GROUP(UnityFixture);
|
14
|
+
|
15
|
+
TEST_SETUP(UnityFixture)
|
16
|
+
{
|
17
|
+
}
|
18
|
+
|
19
|
+
TEST_TEAR_DOWN(UnityFixture)
|
20
|
+
{
|
21
|
+
}
|
22
|
+
|
23
|
+
static int* pointer1 = 0;
|
24
|
+
static int* pointer2 = (int*)2;
|
25
|
+
static int* pointer3 = (int*)3;
|
26
|
+
static int int1;
|
27
|
+
static int int2;
|
28
|
+
static int int3;
|
29
|
+
static int int4;
|
30
|
+
|
31
|
+
TEST(UnityFixture, PointerSetting)
|
32
|
+
{
|
33
|
+
TEST_ASSERT_POINTERS_EQUAL(pointer1, 0);
|
34
|
+
UT_PTR_SET(pointer1, &int1);
|
35
|
+
UT_PTR_SET(pointer2, &int2);
|
36
|
+
UT_PTR_SET(pointer3, &int3);
|
37
|
+
TEST_ASSERT_POINTERS_EQUAL(pointer1, &int1);
|
38
|
+
TEST_ASSERT_POINTERS_EQUAL(pointer2, &int2);
|
39
|
+
TEST_ASSERT_POINTERS_EQUAL(pointer3, &int3);
|
40
|
+
UT_PTR_SET(pointer1, &int4);
|
41
|
+
UnityPointer_UndoAllSets();
|
42
|
+
TEST_ASSERT_POINTERS_EQUAL(pointer1, 0);
|
43
|
+
TEST_ASSERT_POINTERS_EQUAL(pointer2, (int*)2);
|
44
|
+
TEST_ASSERT_POINTERS_EQUAL(pointer3, (int*)3);
|
45
|
+
}
|
46
|
+
|
47
|
+
TEST(UnityFixture, ForceMallocFail)
|
48
|
+
{
|
49
|
+
void* m;
|
50
|
+
void* mfails;
|
51
|
+
UnityMalloc_MakeMallocFailAfterCount(1);
|
52
|
+
m = malloc(10);
|
53
|
+
CHECK(m);
|
54
|
+
mfails = malloc(10);
|
55
|
+
TEST_ASSERT_POINTERS_EQUAL(0, mfails);
|
56
|
+
free(m);
|
57
|
+
}
|
58
|
+
|
59
|
+
TEST(UnityFixture, ReallocSmallerIsUnchanged)
|
60
|
+
{
|
61
|
+
void* m1 = malloc(10);
|
62
|
+
void* m2 = realloc(m1, 5);
|
63
|
+
TEST_ASSERT_POINTERS_EQUAL(m1, m2);
|
64
|
+
free(m2);
|
65
|
+
}
|
66
|
+
|
67
|
+
TEST(UnityFixture, ReallocSameIsUnchanged)
|
68
|
+
{
|
69
|
+
void* m1 = malloc(10);
|
70
|
+
void* m2 = realloc(m1, 10);
|
71
|
+
TEST_ASSERT_POINTERS_EQUAL(m1, m2);
|
72
|
+
free(m2);
|
73
|
+
}
|
74
|
+
|
75
|
+
TEST(UnityFixture, ReallocLargerNeeded)
|
76
|
+
{
|
77
|
+
void* m1 = malloc(10);
|
78
|
+
void* m2;
|
79
|
+
CHECK(m1);
|
80
|
+
strcpy((char*)m1, "123456789");
|
81
|
+
m2 = realloc(m1, 15);
|
82
|
+
/* CHECK(m1 != m2); //Depends on implementation */
|
83
|
+
STRCMP_EQUAL("123456789", m2);
|
84
|
+
free(m2);
|
85
|
+
}
|
86
|
+
|
87
|
+
TEST(UnityFixture, ReallocNullPointerIsLikeMalloc)
|
88
|
+
{
|
89
|
+
void* m = realloc(0, 15);
|
90
|
+
CHECK(m != 0);
|
91
|
+
free(m);
|
92
|
+
}
|
93
|
+
|
94
|
+
TEST(UnityFixture, ReallocSizeZeroFreesMemAndReturnsNullPointer)
|
95
|
+
{
|
96
|
+
void* m1 = malloc(10);
|
97
|
+
void* m2 = realloc(m1, 0);
|
98
|
+
TEST_ASSERT_POINTERS_EQUAL(0, m2);
|
99
|
+
}
|
100
|
+
|
101
|
+
TEST(UnityFixture, CallocFillsWithZero)
|
102
|
+
{
|
103
|
+
void* m = calloc(3, sizeof(char));
|
104
|
+
char* s = (char*)m;
|
105
|
+
CHECK(m);
|
106
|
+
TEST_ASSERT_BYTES_EQUAL(0, s[0]);
|
107
|
+
TEST_ASSERT_BYTES_EQUAL(0, s[1]);
|
108
|
+
TEST_ASSERT_BYTES_EQUAL(0, s[2]);
|
109
|
+
free(m);
|
110
|
+
}
|
111
|
+
|
112
|
+
static char *p1;
|
113
|
+
static char *p2;
|
114
|
+
|
115
|
+
TEST(UnityFixture, PointerSet)
|
116
|
+
{
|
117
|
+
char c1;
|
118
|
+
char c2;
|
119
|
+
char newC1;
|
120
|
+
char newC2;
|
121
|
+
p1 = &c1;
|
122
|
+
p2 = &c2;
|
123
|
+
|
124
|
+
UnityPointer_Init();
|
125
|
+
UT_PTR_SET(p1, &newC1);
|
126
|
+
UT_PTR_SET(p2, &newC2);
|
127
|
+
TEST_ASSERT_POINTERS_EQUAL(&newC1, p1);
|
128
|
+
TEST_ASSERT_POINTERS_EQUAL(&newC2, p2);
|
129
|
+
UnityPointer_UndoAllSets();
|
130
|
+
TEST_ASSERT_POINTERS_EQUAL(&c1, p1);
|
131
|
+
TEST_ASSERT_POINTERS_EQUAL(&c2, p2);
|
132
|
+
}
|
133
|
+
|
134
|
+
TEST(UnityFixture, FreeNULLSafety)
|
135
|
+
{
|
136
|
+
free(NULL);
|
137
|
+
}
|
138
|
+
|
139
|
+
TEST(UnityFixture, ConcludeTestIncrementsFailCount)
|
140
|
+
{
|
141
|
+
UNITY_UINT savedFails = Unity.TestFailures;
|
142
|
+
UNITY_UINT savedIgnores = Unity.TestIgnores;
|
143
|
+
UnityOutputCharSpy_Enable(1);
|
144
|
+
Unity.CurrentTestFailed = 1;
|
145
|
+
UnityConcludeFixtureTest(); /* Resets TestFailed for this test to pass */
|
146
|
+
Unity.CurrentTestIgnored = 1;
|
147
|
+
UnityConcludeFixtureTest(); /* Resets TestIgnored */
|
148
|
+
UnityOutputCharSpy_Enable(0);
|
149
|
+
TEST_ASSERT_EQUAL(savedFails + 1, Unity.TestFailures);
|
150
|
+
TEST_ASSERT_EQUAL(savedIgnores + 1, Unity.TestIgnores);
|
151
|
+
Unity.TestFailures = savedFails;
|
152
|
+
Unity.TestIgnores = savedIgnores;
|
153
|
+
}
|
154
|
+
|
155
|
+
/*------------------------------------------------------------ */
|
156
|
+
|
157
|
+
TEST_GROUP(UnityCommandOptions);
|
158
|
+
|
159
|
+
static int savedVerbose;
|
160
|
+
static unsigned int savedRepeat;
|
161
|
+
static const char* savedName;
|
162
|
+
static const char* savedGroup;
|
163
|
+
|
164
|
+
TEST_SETUP(UnityCommandOptions)
|
165
|
+
{
|
166
|
+
savedVerbose = UnityFixture.Verbose;
|
167
|
+
savedRepeat = UnityFixture.RepeatCount;
|
168
|
+
savedName = UnityFixture.NameFilter;
|
169
|
+
savedGroup = UnityFixture.GroupFilter;
|
170
|
+
}
|
171
|
+
|
172
|
+
TEST_TEAR_DOWN(UnityCommandOptions)
|
173
|
+
{
|
174
|
+
UnityFixture.Verbose = savedVerbose;
|
175
|
+
UnityFixture.RepeatCount= savedRepeat;
|
176
|
+
UnityFixture.NameFilter = savedName;
|
177
|
+
UnityFixture.GroupFilter = savedGroup;
|
178
|
+
}
|
179
|
+
|
180
|
+
|
181
|
+
static const char* noOptions[] = {
|
182
|
+
"testrunner.exe"
|
183
|
+
};
|
184
|
+
|
185
|
+
TEST(UnityCommandOptions, DefaultOptions)
|
186
|
+
{
|
187
|
+
UnityGetCommandLineOptions(1, noOptions);
|
188
|
+
TEST_ASSERT_EQUAL(0, UnityFixture.Verbose);
|
189
|
+
TEST_ASSERT_POINTERS_EQUAL(0, UnityFixture.GroupFilter);
|
190
|
+
TEST_ASSERT_POINTERS_EQUAL(0, UnityFixture.NameFilter);
|
191
|
+
TEST_ASSERT_EQUAL(1, UnityFixture.RepeatCount);
|
192
|
+
}
|
193
|
+
|
194
|
+
static const char* verbose[] = {
|
195
|
+
"testrunner.exe",
|
196
|
+
"-v"
|
197
|
+
};
|
198
|
+
|
199
|
+
TEST(UnityCommandOptions, OptionVerbose)
|
200
|
+
{
|
201
|
+
TEST_ASSERT_EQUAL(0, UnityGetCommandLineOptions(2, verbose));
|
202
|
+
TEST_ASSERT_EQUAL(1, UnityFixture.Verbose);
|
203
|
+
}
|
204
|
+
|
205
|
+
static const char* group[] = {
|
206
|
+
"testrunner.exe",
|
207
|
+
"-g", "groupname"
|
208
|
+
};
|
209
|
+
|
210
|
+
TEST(UnityCommandOptions, OptionSelectTestByGroup)
|
211
|
+
{
|
212
|
+
TEST_ASSERT_EQUAL(0, UnityGetCommandLineOptions(3, group));
|
213
|
+
STRCMP_EQUAL("groupname", UnityFixture.GroupFilter);
|
214
|
+
}
|
215
|
+
|
216
|
+
static const char* name[] = {
|
217
|
+
"testrunner.exe",
|
218
|
+
"-n", "testname"
|
219
|
+
};
|
220
|
+
|
221
|
+
TEST(UnityCommandOptions, OptionSelectTestByName)
|
222
|
+
{
|
223
|
+
TEST_ASSERT_EQUAL(0, UnityGetCommandLineOptions(3, name));
|
224
|
+
STRCMP_EQUAL("testname", UnityFixture.NameFilter);
|
225
|
+
}
|
226
|
+
|
227
|
+
static const char* repeat[] = {
|
228
|
+
"testrunner.exe",
|
229
|
+
"-r", "99"
|
230
|
+
};
|
231
|
+
|
232
|
+
TEST(UnityCommandOptions, OptionSelectRepeatTestsDefaultCount)
|
233
|
+
{
|
234
|
+
TEST_ASSERT_EQUAL(0, UnityGetCommandLineOptions(2, repeat));
|
235
|
+
TEST_ASSERT_EQUAL(2, UnityFixture.RepeatCount);
|
236
|
+
}
|
237
|
+
|
238
|
+
TEST(UnityCommandOptions, OptionSelectRepeatTestsSpecificCount)
|
239
|
+
{
|
240
|
+
TEST_ASSERT_EQUAL(0, UnityGetCommandLineOptions(3, repeat));
|
241
|
+
TEST_ASSERT_EQUAL(99, UnityFixture.RepeatCount);
|
242
|
+
}
|
243
|
+
|
244
|
+
static const char* multiple[] = {
|
245
|
+
"testrunner.exe",
|
246
|
+
"-v",
|
247
|
+
"-g", "groupname",
|
248
|
+
"-n", "testname",
|
249
|
+
"-r", "98"
|
250
|
+
};
|
251
|
+
|
252
|
+
TEST(UnityCommandOptions, MultipleOptions)
|
253
|
+
{
|
254
|
+
TEST_ASSERT_EQUAL(0, UnityGetCommandLineOptions(8, multiple));
|
255
|
+
TEST_ASSERT_EQUAL(1, UnityFixture.Verbose);
|
256
|
+
STRCMP_EQUAL("groupname", UnityFixture.GroupFilter);
|
257
|
+
STRCMP_EQUAL("testname", UnityFixture.NameFilter);
|
258
|
+
TEST_ASSERT_EQUAL(98, UnityFixture.RepeatCount);
|
259
|
+
}
|
260
|
+
|
261
|
+
static const char* dashRNotLast[] = {
|
262
|
+
"testrunner.exe",
|
263
|
+
"-v",
|
264
|
+
"-g", "gggg",
|
265
|
+
"-r",
|
266
|
+
"-n", "tttt",
|
267
|
+
};
|
268
|
+
|
269
|
+
TEST(UnityCommandOptions, MultipleOptionsDashRNotLastAndNoValueSpecified)
|
270
|
+
{
|
271
|
+
TEST_ASSERT_EQUAL(0, UnityGetCommandLineOptions(7, dashRNotLast));
|
272
|
+
TEST_ASSERT_EQUAL(1, UnityFixture.Verbose);
|
273
|
+
STRCMP_EQUAL("gggg", UnityFixture.GroupFilter);
|
274
|
+
STRCMP_EQUAL("tttt", UnityFixture.NameFilter);
|
275
|
+
TEST_ASSERT_EQUAL(2, UnityFixture.RepeatCount);
|
276
|
+
}
|
277
|
+
|
278
|
+
static const char* unknownCommand[] = {
|
279
|
+
"testrunner.exe",
|
280
|
+
"-v",
|
281
|
+
"-g", "groupname",
|
282
|
+
"-n", "testname",
|
283
|
+
"-r", "98",
|
284
|
+
"-z"
|
285
|
+
};
|
286
|
+
TEST(UnityCommandOptions, UnknownCommandIsIgnored)
|
287
|
+
{
|
288
|
+
TEST_ASSERT_EQUAL(0, UnityGetCommandLineOptions(9, unknownCommand));
|
289
|
+
TEST_ASSERT_EQUAL(1, UnityFixture.Verbose);
|
290
|
+
STRCMP_EQUAL("groupname", UnityFixture.GroupFilter);
|
291
|
+
STRCMP_EQUAL("testname", UnityFixture.NameFilter);
|
292
|
+
TEST_ASSERT_EQUAL(98, UnityFixture.RepeatCount);
|
293
|
+
}
|
294
|
+
|
295
|
+
TEST(UnityCommandOptions, GroupOrNameFilterWithoutStringFails)
|
296
|
+
{
|
297
|
+
TEST_ASSERT_EQUAL(1, UnityGetCommandLineOptions(3, unknownCommand));
|
298
|
+
TEST_ASSERT_EQUAL(1, UnityGetCommandLineOptions(5, unknownCommand));
|
299
|
+
TEST_ASSERT_EQUAL(1, UnityMain(3, unknownCommand, NULL));
|
300
|
+
}
|
301
|
+
|
302
|
+
TEST(UnityCommandOptions, GroupFilterReallyFilters)
|
303
|
+
{
|
304
|
+
UNITY_UINT saved = Unity.NumberOfTests;
|
305
|
+
TEST_ASSERT_EQUAL(0, UnityGetCommandLineOptions(4, unknownCommand));
|
306
|
+
UnityIgnoreTest(NULL, "non-matching", NULL);
|
307
|
+
TEST_ASSERT_EQUAL(saved, Unity.NumberOfTests);
|
308
|
+
}
|
309
|
+
|
310
|
+
IGNORE_TEST(UnityCommandOptions, TestShouldBeIgnored)
|
311
|
+
{
|
312
|
+
TEST_FAIL_MESSAGE("This test should not run!");
|
313
|
+
}
|
314
|
+
|
315
|
+
/*------------------------------------------------------------ */
|
316
|
+
|
317
|
+
TEST_GROUP(LeakDetection);
|
318
|
+
|
319
|
+
TEST_SETUP(LeakDetection)
|
320
|
+
{
|
321
|
+
#ifdef UNITY_EXCLUDE_STDLIB_MALLOC
|
322
|
+
UnityOutputCharSpy_Create(200);
|
323
|
+
#else
|
324
|
+
UnityOutputCharSpy_Create(1000);
|
325
|
+
#endif
|
326
|
+
}
|
327
|
+
|
328
|
+
TEST_TEAR_DOWN(LeakDetection)
|
329
|
+
{
|
330
|
+
UnityOutputCharSpy_Destroy();
|
331
|
+
}
|
332
|
+
|
333
|
+
#define EXPECT_ABORT_BEGIN \
|
334
|
+
{ \
|
335
|
+
jmp_buf TestAbortFrame; \
|
336
|
+
memcpy(TestAbortFrame, Unity.AbortFrame, sizeof(jmp_buf)); \
|
337
|
+
if (TEST_PROTECT()) \
|
338
|
+
{
|
339
|
+
|
340
|
+
#define EXPECT_ABORT_END \
|
341
|
+
} \
|
342
|
+
memcpy(Unity.AbortFrame, TestAbortFrame, sizeof(jmp_buf)); \
|
343
|
+
}
|
344
|
+
|
345
|
+
/* This tricky set of defines lets us see if we are using the Spy, returns 1 if true */
|
346
|
+
#ifdef __STDC_VERSION__
|
347
|
+
|
348
|
+
#if __STDC_VERSION__ >= 199901L
|
349
|
+
#define USING_SPY_AS(a) EXPAND_AND_USE_2ND(ASSIGN_VALUE(a), 0)
|
350
|
+
#define ASSIGN_VALUE(a) VAL_##a
|
351
|
+
#define VAL_UnityOutputCharSpy_OutputChar 0, 1
|
352
|
+
#define EXPAND_AND_USE_2ND(a, b) SECOND_PARAM(a, b, throwaway)
|
353
|
+
#define SECOND_PARAM(a, b, ...) b
|
354
|
+
#if USING_SPY_AS(UNITY_OUTPUT_CHAR)
|
355
|
+
#define USING_OUTPUT_SPY /* UNITY_OUTPUT_CHAR = UnityOutputCharSpy_OutputChar */
|
356
|
+
#endif
|
357
|
+
#endif /* >= 199901 */
|
358
|
+
|
359
|
+
#else /* __STDC_VERSION__ else */
|
360
|
+
#define UnityOutputCharSpy_OutputChar 42
|
361
|
+
#if UNITY_OUTPUT_CHAR == UnityOutputCharSpy_OutputChar /* Works if no -Wundef -Werror */
|
362
|
+
#define USING_OUTPUT_SPY
|
363
|
+
#endif
|
364
|
+
#undef UnityOutputCharSpy_OutputChar
|
365
|
+
#endif /* __STDC_VERSION__ */
|
366
|
+
|
367
|
+
TEST(LeakDetection, DetectsLeak)
|
368
|
+
{
|
369
|
+
#ifndef USING_OUTPUT_SPY
|
370
|
+
TEST_IGNORE_MESSAGE("Build with '-D UNITY_OUTPUT_CHAR=UnityOutputCharSpy_OutputChar' to enable tests");
|
371
|
+
#else
|
372
|
+
void* m = malloc(10);
|
373
|
+
TEST_ASSERT_NOT_NULL(m);
|
374
|
+
UnityOutputCharSpy_Enable(1);
|
375
|
+
EXPECT_ABORT_BEGIN
|
376
|
+
UnityMalloc_EndTest();
|
377
|
+
EXPECT_ABORT_END
|
378
|
+
UnityOutputCharSpy_Enable(0);
|
379
|
+
Unity.CurrentTestFailed = 0;
|
380
|
+
CHECK(strstr(UnityOutputCharSpy_Get(), "This test leaks!"));
|
381
|
+
free(m);
|
382
|
+
#endif
|
383
|
+
}
|
384
|
+
|
385
|
+
TEST(LeakDetection, BufferOverrunFoundDuringFree)
|
386
|
+
{
|
387
|
+
#ifndef USING_OUTPUT_SPY
|
388
|
+
TEST_IGNORE();
|
389
|
+
#else
|
390
|
+
void* m = malloc(10);
|
391
|
+
char* s = (char*)m;
|
392
|
+
TEST_ASSERT_NOT_NULL(m);
|
393
|
+
s[10] = (char)0xFF;
|
394
|
+
UnityOutputCharSpy_Enable(1);
|
395
|
+
EXPECT_ABORT_BEGIN
|
396
|
+
free(m);
|
397
|
+
EXPECT_ABORT_END
|
398
|
+
UnityOutputCharSpy_Enable(0);
|
399
|
+
Unity.CurrentTestFailed = 0;
|
400
|
+
CHECK(strstr(UnityOutputCharSpy_Get(), "Buffer overrun detected during free()"));
|
401
|
+
#endif
|
402
|
+
}
|
403
|
+
|
404
|
+
TEST(LeakDetection, BufferOverrunFoundDuringRealloc)
|
405
|
+
{
|
406
|
+
#ifndef USING_OUTPUT_SPY
|
407
|
+
TEST_IGNORE();
|
408
|
+
#else
|
409
|
+
void* m = malloc(10);
|
410
|
+
char* s = (char*)m;
|
411
|
+
TEST_ASSERT_NOT_NULL(m);
|
412
|
+
s[10] = (char)0xFF;
|
413
|
+
UnityOutputCharSpy_Enable(1);
|
414
|
+
EXPECT_ABORT_BEGIN
|
415
|
+
m = realloc(m, 100);
|
416
|
+
EXPECT_ABORT_END
|
417
|
+
UnityOutputCharSpy_Enable(0);
|
418
|
+
Unity.CurrentTestFailed = 0;
|
419
|
+
CHECK(strstr(UnityOutputCharSpy_Get(), "Buffer overrun detected during realloc()"));
|
420
|
+
#endif
|
421
|
+
}
|
422
|
+
|
423
|
+
TEST(LeakDetection, BufferGuardWriteFoundDuringFree)
|
424
|
+
{
|
425
|
+
#ifndef USING_OUTPUT_SPY
|
426
|
+
TEST_IGNORE();
|
427
|
+
#else
|
428
|
+
void* m = malloc(10);
|
429
|
+
char* s = (char*)m;
|
430
|
+
TEST_ASSERT_NOT_NULL(m);
|
431
|
+
s[-1] = (char)0x00; /* Will not detect 0 */
|
432
|
+
s[-2] = (char)0x01;
|
433
|
+
UnityOutputCharSpy_Enable(1);
|
434
|
+
EXPECT_ABORT_BEGIN
|
435
|
+
free(m);
|
436
|
+
EXPECT_ABORT_END
|
437
|
+
UnityOutputCharSpy_Enable(0);
|
438
|
+
Unity.CurrentTestFailed = 0;
|
439
|
+
CHECK(strstr(UnityOutputCharSpy_Get(), "Buffer overrun detected during free()"));
|
440
|
+
#endif
|
441
|
+
}
|
442
|
+
|
443
|
+
TEST(LeakDetection, BufferGuardWriteFoundDuringRealloc)
|
444
|
+
{
|
445
|
+
#ifndef USING_OUTPUT_SPY
|
446
|
+
TEST_IGNORE();
|
447
|
+
#else
|
448
|
+
void* m = malloc(10);
|
449
|
+
char* s = (char*)m;
|
450
|
+
TEST_ASSERT_NOT_NULL(m);
|
451
|
+
s[-1] = (char)0x0A;
|
452
|
+
UnityOutputCharSpy_Enable(1);
|
453
|
+
EXPECT_ABORT_BEGIN
|
454
|
+
m = realloc(m, 100);
|
455
|
+
EXPECT_ABORT_END
|
456
|
+
UnityOutputCharSpy_Enable(0);
|
457
|
+
Unity.CurrentTestFailed = 0;
|
458
|
+
CHECK(strstr(UnityOutputCharSpy_Get(), "Buffer overrun detected during realloc()"));
|
459
|
+
#endif
|
460
|
+
}
|
461
|
+
|
462
|
+
TEST(LeakDetection, PointerSettingMax)
|
463
|
+
{
|
464
|
+
#ifndef USING_OUTPUT_SPY
|
465
|
+
TEST_IGNORE();
|
466
|
+
#else
|
467
|
+
int i;
|
468
|
+
for (i = 0; i < UNITY_MAX_POINTERS; i++) UT_PTR_SET(pointer1, &int1);
|
469
|
+
UnityOutputCharSpy_Enable(1);
|
470
|
+
EXPECT_ABORT_BEGIN
|
471
|
+
UT_PTR_SET(pointer1, &int1);
|
472
|
+
EXPECT_ABORT_END
|
473
|
+
UnityOutputCharSpy_Enable(0);
|
474
|
+
Unity.CurrentTestFailed = 0;
|
475
|
+
CHECK(strstr(UnityOutputCharSpy_Get(), "Too many pointers set"));
|
476
|
+
#endif
|
477
|
+
}
|
478
|
+
|
479
|
+
/*------------------------------------------------------------ */
|
480
|
+
|
481
|
+
TEST_GROUP(InternalMalloc);
|
482
|
+
#define TEST_ASSERT_MEMORY_ALL_FREE_LIFO_ORDER(first_mem_ptr, ptr) \
|
483
|
+
ptr = malloc(10); free(ptr); \
|
484
|
+
TEST_ASSERT_EQUAL_PTR_MESSAGE(first_mem_ptr, ptr, "Memory was stranded, free in LIFO order");
|
485
|
+
|
486
|
+
|
487
|
+
TEST_SETUP(InternalMalloc) { }
|
488
|
+
TEST_TEAR_DOWN(InternalMalloc) { }
|
489
|
+
|
490
|
+
TEST(InternalMalloc, MallocPastBufferFails)
|
491
|
+
{
|
492
|
+
#ifdef UNITY_EXCLUDE_STDLIB_MALLOC
|
493
|
+
void* m = malloc(UNITY_INTERNAL_HEAP_SIZE_BYTES/2 + 1);
|
494
|
+
void* n = malloc(UNITY_INTERNAL_HEAP_SIZE_BYTES/2);
|
495
|
+
free(m);
|
496
|
+
TEST_ASSERT_NOT_NULL(m);
|
497
|
+
TEST_ASSERT_NULL(n);
|
498
|
+
TEST_ASSERT_MEMORY_ALL_FREE_LIFO_ORDER(m, n);
|
499
|
+
#endif
|
500
|
+
}
|
501
|
+
|
502
|
+
TEST(InternalMalloc, CallocPastBufferFails)
|
503
|
+
{
|
504
|
+
#ifdef UNITY_EXCLUDE_STDLIB_MALLOC
|
505
|
+
void* m = calloc(1, UNITY_INTERNAL_HEAP_SIZE_BYTES/2 + 1);
|
506
|
+
void* n = calloc(1, UNITY_INTERNAL_HEAP_SIZE_BYTES/2);
|
507
|
+
free(m);
|
508
|
+
TEST_ASSERT_NOT_NULL(m);
|
509
|
+
TEST_ASSERT_NULL(n);
|
510
|
+
TEST_ASSERT_MEMORY_ALL_FREE_LIFO_ORDER(m, n);
|
511
|
+
#endif
|
512
|
+
}
|
513
|
+
|
514
|
+
TEST(InternalMalloc, MallocThenReallocGrowsMemoryInPlace)
|
515
|
+
{
|
516
|
+
#ifdef UNITY_EXCLUDE_STDLIB_MALLOC
|
517
|
+
void* m = malloc(UNITY_INTERNAL_HEAP_SIZE_BYTES/2 + 1);
|
518
|
+
void* n = realloc(m, UNITY_INTERNAL_HEAP_SIZE_BYTES/2 + 9);
|
519
|
+
free(n);
|
520
|
+
TEST_ASSERT_NOT_NULL(m);
|
521
|
+
TEST_ASSERT_EQUAL(m, n);
|
522
|
+
TEST_ASSERT_MEMORY_ALL_FREE_LIFO_ORDER(m, n);
|
523
|
+
#endif
|
524
|
+
}
|
525
|
+
|
526
|
+
TEST(InternalMalloc, ReallocFailDoesNotFreeMem)
|
527
|
+
{
|
528
|
+
#ifdef UNITY_EXCLUDE_STDLIB_MALLOC
|
529
|
+
void* m = malloc(UNITY_INTERNAL_HEAP_SIZE_BYTES/2);
|
530
|
+
void* n1 = malloc(10);
|
531
|
+
void* out_of_mem = realloc(n1, UNITY_INTERNAL_HEAP_SIZE_BYTES/2 + 1);
|
532
|
+
void* n2 = malloc(10);
|
533
|
+
|
534
|
+
free(n2);
|
535
|
+
if (out_of_mem == NULL) free(n1);
|
536
|
+
free(m);
|
537
|
+
|
538
|
+
TEST_ASSERT_NOT_NULL(m); /* Got a real memory location */
|
539
|
+
TEST_ASSERT_NULL(out_of_mem); /* The realloc should have failed */
|
540
|
+
TEST_ASSERT_NOT_EQUAL(n2, n1); /* If n1 != n2 then realloc did not free n1 */
|
541
|
+
TEST_ASSERT_MEMORY_ALL_FREE_LIFO_ORDER(m, n2);
|
542
|
+
#endif
|
543
|
+
}
|