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,249 @@
|
|
|
1
|
+
require 'yaml'
|
|
2
|
+
require 'fileutils'
|
|
3
|
+
require UNITY_ROOT + '/auto/unity_test_summary'
|
|
4
|
+
require UNITY_ROOT + '/auto/generate_test_runner'
|
|
5
|
+
require UNITY_ROOT + '/auto/colour_reporter'
|
|
6
|
+
|
|
7
|
+
module RakefileHelpers
|
|
8
|
+
C_EXTENSION = '.c'.freeze
|
|
9
|
+
|
|
10
|
+
def load_configuration(config_file)
|
|
11
|
+
$cfg_file = config_file
|
|
12
|
+
$cfg = YAML.load(File.read($cfg_file))
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
def configure_clean
|
|
16
|
+
CLEAN.include($cfg['compiler']['build_path'] + '*.*') unless $cfg['compiler']['build_path'].nil?
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
def configure_toolchain(config_file = DEFAULT_CONFIG_FILE)
|
|
20
|
+
config_file += '.yml' unless config_file =~ /\.yml$/
|
|
21
|
+
load_configuration(config_file)
|
|
22
|
+
configure_clean
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
def unit_test_files
|
|
26
|
+
path = $cfg['compiler']['unit_tests_path'] + 'Test*' + C_EXTENSION
|
|
27
|
+
path.tr!('\\', '/')
|
|
28
|
+
FileList.new(path)
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
def local_include_dirs
|
|
32
|
+
include_dirs = $cfg['compiler']['includes']['items'].dup
|
|
33
|
+
include_dirs.delete_if { |dir| dir.is_a?(Array) }
|
|
34
|
+
include_dirs
|
|
35
|
+
end
|
|
36
|
+
|
|
37
|
+
def extract_headers(filename)
|
|
38
|
+
includes = []
|
|
39
|
+
lines = File.readlines(filename)
|
|
40
|
+
lines.each do |line|
|
|
41
|
+
m = line.match(/^\s*#include\s+\"\s*(.+\.[hH])\s*\"/)
|
|
42
|
+
includes << m[1] unless m.nil?
|
|
43
|
+
end
|
|
44
|
+
includes
|
|
45
|
+
end
|
|
46
|
+
|
|
47
|
+
def find_source_file(header, paths)
|
|
48
|
+
paths.each do |dir|
|
|
49
|
+
src_file = dir + header.ext(C_EXTENSION)
|
|
50
|
+
return src_file if File.exist?(src_file)
|
|
51
|
+
end
|
|
52
|
+
nil
|
|
53
|
+
end
|
|
54
|
+
|
|
55
|
+
def tackit(strings)
|
|
56
|
+
result = if strings.is_a?(Array)
|
|
57
|
+
"\"#{strings.join}\""
|
|
58
|
+
else
|
|
59
|
+
strings
|
|
60
|
+
end
|
|
61
|
+
result
|
|
62
|
+
end
|
|
63
|
+
|
|
64
|
+
def squash(prefix, items)
|
|
65
|
+
result = ''
|
|
66
|
+
items.each { |item| result += " #{prefix}#{tackit(item)}" }
|
|
67
|
+
result
|
|
68
|
+
end
|
|
69
|
+
|
|
70
|
+
def build_compiler_fields
|
|
71
|
+
command = tackit($cfg['compiler']['path'])
|
|
72
|
+
defines = if $cfg['compiler']['defines']['items'].nil?
|
|
73
|
+
''
|
|
74
|
+
else
|
|
75
|
+
squash($cfg['compiler']['defines']['prefix'], $cfg['compiler']['defines']['items'])
|
|
76
|
+
end
|
|
77
|
+
options = squash('', $cfg['compiler']['options'])
|
|
78
|
+
includes = squash($cfg['compiler']['includes']['prefix'], $cfg['compiler']['includes']['items'])
|
|
79
|
+
includes = includes.gsub(/\\ /, ' ').gsub(/\\\"/, '"').gsub(/\\$/, '') # Remove trailing slashes (for IAR)
|
|
80
|
+
|
|
81
|
+
{ command: command, defines: defines, options: options, includes: includes }
|
|
82
|
+
end
|
|
83
|
+
|
|
84
|
+
def compile(file, _defines = [])
|
|
85
|
+
compiler = build_compiler_fields
|
|
86
|
+
cmd_str = "#{compiler[:command]}#{compiler[:defines]}#{compiler[:options]}#{compiler[:includes]} #{file} " \
|
|
87
|
+
"#{$cfg['compiler']['object_files']['prefix']}#{$cfg['compiler']['object_files']['destination']}"
|
|
88
|
+
obj_file = "#{File.basename(file, C_EXTENSION)}#{$cfg['compiler']['object_files']['extension']}"
|
|
89
|
+
execute(cmd_str + obj_file)
|
|
90
|
+
obj_file
|
|
91
|
+
end
|
|
92
|
+
|
|
93
|
+
def build_linker_fields
|
|
94
|
+
command = tackit($cfg['linker']['path'])
|
|
95
|
+
options = if $cfg['linker']['options'].nil?
|
|
96
|
+
''
|
|
97
|
+
else
|
|
98
|
+
squash('', $cfg['linker']['options'])
|
|
99
|
+
end
|
|
100
|
+
includes = if $cfg['linker']['includes'].nil? || $cfg['linker']['includes']['items'].nil?
|
|
101
|
+
''
|
|
102
|
+
else
|
|
103
|
+
squash($cfg['linker']['includes']['prefix'], $cfg['linker']['includes']['items'])
|
|
104
|
+
end.gsub(/\\ /, ' ').gsub(/\\\"/, '"').gsub(/\\$/, '') # Remove trailing slashes (for IAR)
|
|
105
|
+
|
|
106
|
+
{ command: command, options: options, includes: includes }
|
|
107
|
+
end
|
|
108
|
+
|
|
109
|
+
def link_it(exe_name, obj_list)
|
|
110
|
+
linker = build_linker_fields
|
|
111
|
+
cmd_str = "#{linker[:command]}#{linker[:options]}#{linker[:includes]} " +
|
|
112
|
+
(obj_list.map { |obj| "#{$cfg['linker']['object_files']['path']}#{obj} " }).join +
|
|
113
|
+
$cfg['linker']['bin_files']['prefix'] + ' ' +
|
|
114
|
+
$cfg['linker']['bin_files']['destination'] +
|
|
115
|
+
exe_name + $cfg['linker']['bin_files']['extension']
|
|
116
|
+
execute(cmd_str)
|
|
117
|
+
end
|
|
118
|
+
|
|
119
|
+
def build_simulator_fields
|
|
120
|
+
return nil if $cfg['simulator'].nil?
|
|
121
|
+
command = if $cfg['simulator']['path'].nil?
|
|
122
|
+
''
|
|
123
|
+
else
|
|
124
|
+
(tackit($cfg['simulator']['path']) + ' ')
|
|
125
|
+
end
|
|
126
|
+
pre_support = if $cfg['simulator']['pre_support'].nil?
|
|
127
|
+
''
|
|
128
|
+
else
|
|
129
|
+
squash('', $cfg['simulator']['pre_support'])
|
|
130
|
+
end
|
|
131
|
+
post_support = if $cfg['simulator']['post_support'].nil?
|
|
132
|
+
''
|
|
133
|
+
else
|
|
134
|
+
squash('', $cfg['simulator']['post_support'])
|
|
135
|
+
end
|
|
136
|
+
|
|
137
|
+
{ command: command, pre_support: pre_support, post_support: post_support }
|
|
138
|
+
end
|
|
139
|
+
|
|
140
|
+
def execute(command_string, verbose = true, raise_on_fail = true)
|
|
141
|
+
report command_string
|
|
142
|
+
output = `#{command_string}`.chomp
|
|
143
|
+
report(output) if verbose && !output.nil? && !output.empty?
|
|
144
|
+
if !$?.exitstatus.zero? && raise_on_fail
|
|
145
|
+
raise "Command failed. (Returned #{$?.exitstatus})"
|
|
146
|
+
end
|
|
147
|
+
output
|
|
148
|
+
end
|
|
149
|
+
|
|
150
|
+
def report_summary
|
|
151
|
+
summary = UnityTestSummary.new
|
|
152
|
+
summary.root = HERE
|
|
153
|
+
results_glob = "#{$cfg['compiler']['build_path']}*.test*"
|
|
154
|
+
results_glob.tr!('\\', '/')
|
|
155
|
+
results = Dir[results_glob]
|
|
156
|
+
summary.targets = results
|
|
157
|
+
summary.run
|
|
158
|
+
fail_out 'FAIL: There were failures' if summary.failures > 0
|
|
159
|
+
end
|
|
160
|
+
|
|
161
|
+
def run_tests(test_files)
|
|
162
|
+
report 'Running system tests...'
|
|
163
|
+
|
|
164
|
+
# Tack on TEST define for compiling unit tests
|
|
165
|
+
load_configuration($cfg_file)
|
|
166
|
+
test_defines = ['TEST']
|
|
167
|
+
$cfg['compiler']['defines']['items'] = [] if $cfg['compiler']['defines']['items'].nil?
|
|
168
|
+
$cfg['compiler']['defines']['items'] << 'TEST'
|
|
169
|
+
|
|
170
|
+
include_dirs = local_include_dirs
|
|
171
|
+
|
|
172
|
+
# Build and execute each unit test
|
|
173
|
+
test_files.each do |test|
|
|
174
|
+
obj_list = []
|
|
175
|
+
|
|
176
|
+
# Detect dependencies and build required required modules
|
|
177
|
+
extract_headers(test).each do |header|
|
|
178
|
+
# Compile corresponding source file if it exists
|
|
179
|
+
src_file = find_source_file(header, include_dirs)
|
|
180
|
+
obj_list << compile(src_file, test_defines) unless src_file.nil?
|
|
181
|
+
end
|
|
182
|
+
|
|
183
|
+
# Build the test runner (generate if configured to do so)
|
|
184
|
+
test_base = File.basename(test, C_EXTENSION)
|
|
185
|
+
runner_name = test_base + '_Runner.c'
|
|
186
|
+
if $cfg['compiler']['runner_path'].nil?
|
|
187
|
+
runner_path = $cfg['compiler']['build_path'] + runner_name
|
|
188
|
+
test_gen = UnityTestRunnerGenerator.new($cfg_file)
|
|
189
|
+
test_gen.run(test, runner_path)
|
|
190
|
+
else
|
|
191
|
+
runner_path = $cfg['compiler']['runner_path'] + runner_name
|
|
192
|
+
end
|
|
193
|
+
|
|
194
|
+
obj_list << compile(runner_path, test_defines)
|
|
195
|
+
|
|
196
|
+
# Build the test module
|
|
197
|
+
obj_list << compile(test, test_defines)
|
|
198
|
+
|
|
199
|
+
# Link the test executable
|
|
200
|
+
link_it(test_base, obj_list)
|
|
201
|
+
|
|
202
|
+
# Execute unit test and generate results file
|
|
203
|
+
simulator = build_simulator_fields
|
|
204
|
+
executable = $cfg['linker']['bin_files']['destination'] + test_base + $cfg['linker']['bin_files']['extension']
|
|
205
|
+
cmd_str = if simulator.nil?
|
|
206
|
+
executable
|
|
207
|
+
else
|
|
208
|
+
"#{simulator[:command]} #{simulator[:pre_support]} #{executable} #{simulator[:post_support]}"
|
|
209
|
+
end
|
|
210
|
+
output = execute(cmd_str, true, false)
|
|
211
|
+
test_results = $cfg['compiler']['build_path'] + test_base
|
|
212
|
+
test_results += if output.match(/OK$/m).nil?
|
|
213
|
+
'.testfail'
|
|
214
|
+
else
|
|
215
|
+
'.testpass'
|
|
216
|
+
end
|
|
217
|
+
File.open(test_results, 'w') { |f| f.print output }
|
|
218
|
+
end
|
|
219
|
+
end
|
|
220
|
+
|
|
221
|
+
def build_application(main)
|
|
222
|
+
report 'Building application...'
|
|
223
|
+
|
|
224
|
+
obj_list = []
|
|
225
|
+
load_configuration($cfg_file)
|
|
226
|
+
main_path = $cfg['compiler']['source_path'] + main + C_EXTENSION
|
|
227
|
+
|
|
228
|
+
# Detect dependencies and build required required modules
|
|
229
|
+
include_dirs = get_local_include_dirs
|
|
230
|
+
extract_headers(main_path).each do |header|
|
|
231
|
+
src_file = find_source_file(header, include_dirs)
|
|
232
|
+
obj_list << compile(src_file) unless src_file.nil?
|
|
233
|
+
end
|
|
234
|
+
|
|
235
|
+
# Build the main source file
|
|
236
|
+
main_base = File.basename(main_path, C_EXTENSION)
|
|
237
|
+
obj_list << compile(main_path)
|
|
238
|
+
|
|
239
|
+
# Create the executable
|
|
240
|
+
link_it(main_base, obj_list)
|
|
241
|
+
end
|
|
242
|
+
|
|
243
|
+
def fail_out(msg)
|
|
244
|
+
puts msg
|
|
245
|
+
puts 'Not returning exit code so continuous integration can pass'
|
|
246
|
+
# exit(-1) # Only removed to pass example_3, which has failing tests on purpose.
|
|
247
|
+
# Still fail if the build fails for any other reason.
|
|
248
|
+
end
|
|
249
|
+
end
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
Example 3
|
|
2
|
+
=========
|
|
3
|
+
|
|
4
|
+
This example project gives an example of some passing, ignored, and failing tests.
|
|
5
|
+
It's simple and meant for you to look over and get an idea for what all of this stuff does.
|
|
6
|
+
|
|
7
|
+
You can build and test using rake. The rake version will let you test with gcc or a couple
|
|
8
|
+
versions of IAR. You can tweak the yaml files to get those versions running.
|
|
9
|
+
|
|
10
|
+
Ruby is required if you're using the rake version (obviously). This version shows off most of
|
|
11
|
+
Unity's advanced features (automatically creating test runners, fancy summaries, etc.)
|
|
12
|
+
Without ruby, you have to maintain your own test runners. Do that for a while and you'll learn
|
|
13
|
+
why you really want to start using the Ruby tools.
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
|
|
2
|
+
#include "ProductionCode.h"
|
|
3
|
+
|
|
4
|
+
int Counter = 0;
|
|
5
|
+
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.
|
|
6
|
+
|
|
7
|
+
// This function is supposed to search through NumbersToFind and find a particular number.
|
|
8
|
+
// If it finds it, the index is returned. Otherwise 0 is returned which sorta makes sense since
|
|
9
|
+
// NumbersToFind is indexed from 1. Unfortunately it's broken
|
|
10
|
+
// (and should therefore be caught by our tests)
|
|
11
|
+
int FindFunction_WhichIsBroken(int NumberToFind)
|
|
12
|
+
{
|
|
13
|
+
int i = 0;
|
|
14
|
+
while (i <= 8) //Notice I should have been in braces
|
|
15
|
+
i++;
|
|
16
|
+
if (NumbersToFind[i] == NumberToFind) //Yikes! I'm getting run after the loop finishes instead of during it!
|
|
17
|
+
return i;
|
|
18
|
+
return 0;
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
int FunctionWhichReturnsLocalVariable(void)
|
|
22
|
+
{
|
|
23
|
+
return Counter;
|
|
24
|
+
}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
|
|
2
|
+
#include "ProductionCode2.h"
|
|
3
|
+
|
|
4
|
+
char* ThisFunctionHasNotBeenTested(int Poor, char* LittleFunction)
|
|
5
|
+
{
|
|
6
|
+
(void)Poor;
|
|
7
|
+
(void)LittleFunction;
|
|
8
|
+
//Since There Are No Tests Yet, This Function Could Be Empty For All We Know.
|
|
9
|
+
// Which isn't terribly useful... but at least we put in a TEST_IGNORE so we won't forget
|
|
10
|
+
return (char*)0;
|
|
11
|
+
}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
# Copied from ~Unity/targets/gcc_32.yml
|
|
2
|
+
unity_root: &unity_root '../..'
|
|
3
|
+
compiler:
|
|
4
|
+
path: gcc
|
|
5
|
+
source_path: 'src/'
|
|
6
|
+
unit_tests_path: &unit_tests_path 'test/'
|
|
7
|
+
build_path: &build_path 'build/'
|
|
8
|
+
options:
|
|
9
|
+
- '-c'
|
|
10
|
+
- '-m32'
|
|
11
|
+
- '-Wall'
|
|
12
|
+
- '-Wno-address'
|
|
13
|
+
- '-std=c99'
|
|
14
|
+
- '-pedantic'
|
|
15
|
+
includes:
|
|
16
|
+
prefix: '-I'
|
|
17
|
+
items:
|
|
18
|
+
- 'src/'
|
|
19
|
+
- '../../src/'
|
|
20
|
+
- *unit_tests_path
|
|
21
|
+
defines:
|
|
22
|
+
prefix: '-D'
|
|
23
|
+
items:
|
|
24
|
+
- UNITY_INCLUDE_DOUBLE
|
|
25
|
+
- UNITY_SUPPORT_TEST_CASES
|
|
26
|
+
object_files:
|
|
27
|
+
prefix: '-o'
|
|
28
|
+
extension: '.o'
|
|
29
|
+
destination: *build_path
|
|
30
|
+
linker:
|
|
31
|
+
path: gcc
|
|
32
|
+
options:
|
|
33
|
+
- -lm
|
|
34
|
+
- '-m32'
|
|
35
|
+
includes:
|
|
36
|
+
prefix: '-I'
|
|
37
|
+
object_files:
|
|
38
|
+
path: *build_path
|
|
39
|
+
extension: '.o'
|
|
40
|
+
bin_files:
|
|
41
|
+
prefix: '-o'
|
|
42
|
+
extension: '.exe'
|
|
43
|
+
destination: *build_path
|
|
44
|
+
colour: true
|
|
45
|
+
:unity:
|
|
46
|
+
:plugins: []
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
|
|
2
|
+
#include "ProductionCode.h"
|
|
3
|
+
#include "unity.h"
|
|
4
|
+
|
|
5
|
+
//sometimes you may want to get at local data in a module.
|
|
6
|
+
//for example: If you plan to pass by reference, this could be useful
|
|
7
|
+
//however, it should often be avoided
|
|
8
|
+
extern int Counter;
|
|
9
|
+
|
|
10
|
+
void setUp(void)
|
|
11
|
+
{
|
|
12
|
+
//This is run before EACH TEST
|
|
13
|
+
Counter = 0x5a5a;
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
void tearDown(void)
|
|
17
|
+
{
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
void test_FindFunction_WhichIsBroken_ShouldReturnZeroIfItemIsNotInList_WhichWorksEvenInOurBrokenCode(void)
|
|
21
|
+
{
|
|
22
|
+
//All of these should pass
|
|
23
|
+
TEST_ASSERT_EQUAL(0, FindFunction_WhichIsBroken(78));
|
|
24
|
+
TEST_ASSERT_EQUAL(0, FindFunction_WhichIsBroken(1));
|
|
25
|
+
TEST_ASSERT_EQUAL(0, FindFunction_WhichIsBroken(33));
|
|
26
|
+
TEST_ASSERT_EQUAL(0, FindFunction_WhichIsBroken(999));
|
|
27
|
+
TEST_ASSERT_EQUAL(0, FindFunction_WhichIsBroken(-1));
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
void test_FindFunction_WhichIsBroken_ShouldReturnTheIndexForItemsInList_WhichWillFailBecauseOurFunctionUnderTestIsBroken(void)
|
|
31
|
+
{
|
|
32
|
+
// You should see this line fail in your test summary
|
|
33
|
+
TEST_ASSERT_EQUAL(1, FindFunction_WhichIsBroken(34));
|
|
34
|
+
|
|
35
|
+
// Notice the rest of these didn't get a chance to run because the line above failed.
|
|
36
|
+
// Unit tests abort each test function on the first sign of trouble.
|
|
37
|
+
// Then NEXT test function runs as normal.
|
|
38
|
+
TEST_ASSERT_EQUAL(8, FindFunction_WhichIsBroken(8888));
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
void test_FunctionWhichReturnsLocalVariable_ShouldReturnTheCurrentCounterValue(void)
|
|
42
|
+
{
|
|
43
|
+
//This should be true because setUp set this up for us before this test
|
|
44
|
+
TEST_ASSERT_EQUAL_HEX(0x5a5a, FunctionWhichReturnsLocalVariable());
|
|
45
|
+
|
|
46
|
+
//This should be true because we can still change our answer
|
|
47
|
+
Counter = 0x1234;
|
|
48
|
+
TEST_ASSERT_EQUAL_HEX(0x1234, FunctionWhichReturnsLocalVariable());
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
void test_FunctionWhichReturnsLocalVariable_ShouldReturnTheCurrentCounterValueAgain(void)
|
|
52
|
+
{
|
|
53
|
+
//This should be true again because setup was rerun before this test (and after we changed it to 0x1234)
|
|
54
|
+
TEST_ASSERT_EQUAL_HEX(0x5a5a, FunctionWhichReturnsLocalVariable());
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
void test_FunctionWhichReturnsLocalVariable_ShouldReturnCurrentCounter_ButFailsBecauseThisTestIsActuallyFlawed(void)
|
|
58
|
+
{
|
|
59
|
+
//Sometimes you get the test wrong. When that happens, you get a failure too... and a quick look should tell
|
|
60
|
+
// you what actually happened...which in this case was a failure to setup the initial condition.
|
|
61
|
+
TEST_ASSERT_EQUAL_HEX(0x1234, FunctionWhichReturnsLocalVariable());
|
|
62
|
+
}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
|
|
2
|
+
#include "ProductionCode2.h"
|
|
3
|
+
#include "unity.h"
|
|
4
|
+
|
|
5
|
+
/* These should be ignored because they are commented out in various ways:
|
|
6
|
+
#include "whatever.h"
|
|
7
|
+
*/
|
|
8
|
+
//#include "somethingelse.h"
|
|
9
|
+
|
|
10
|
+
void setUp(void)
|
|
11
|
+
{
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
void tearDown(void)
|
|
15
|
+
{
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
void test_IgnoredTest(void)
|
|
19
|
+
{
|
|
20
|
+
TEST_IGNORE_MESSAGE("This Test Was Ignored On Purpose");
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
void test_AnotherIgnoredTest(void)
|
|
24
|
+
{
|
|
25
|
+
TEST_IGNORE_MESSAGE("These Can Be Useful For Leaving Yourself Notes On What You Need To Do Yet");
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
void test_ThisFunctionHasNotBeenTested_NeedsToBeImplemented(void)
|
|
29
|
+
{
|
|
30
|
+
TEST_IGNORE(); //Like This
|
|
31
|
+
}
|