ceedling 0.28.2 → 0.28.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- 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
|
+
}
|