ceedling 0.31.0 → 0.31.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/assets/example_file_call.c +6 -0
- data/assets/example_file_call.h +6 -0
- data/assets/test_example_file_with_mock.c +13 -0
- data/bin/ceedling +2 -2
- data/ceedling.gemspec +1 -1
- data/lib/ceedling/configurator.rb +7 -2
- data/lib/ceedling/configurator_plugins.rb +21 -1
- data/lib/ceedling/defaults.rb +1 -0
- data/lib/ceedling/preprocessinator_extractor.rb +2 -0
- data/lib/ceedling/preprocessinator_includes_handler.rb +24 -24
- data/lib/ceedling/version.rb +11 -7
- data/plugins/gcov/config/defaults_gcov.rb +118 -0
- data/plugins/gcov/lib/gcovr_reportinator.rb +1 -1
- data/plugins/gcov/lib/reportgenerator_reportinator.rb +1 -1
- data/plugins/junit_tests_report/lib/junit_tests_report.rb +6 -6
- data/plugins/module_generator/README.md +16 -2
- data/plugins/module_generator/lib/module_generator.rb +1 -0
- data/spec/gcov/gcov_deployment_spec.rb +1 -1
- data/spec/preprocessinator_includes_handler_spec.rb +38 -8
- data/spec/spec_system_helper.rb +19 -0
- data/spec/system/deployment_spec.rb +1 -0
- data/vendor/cmock/lib/cmock_file_writer.rb +2 -3
- data/vendor/cmock/lib/cmock_generator.rb +87 -70
- data/vendor/cmock/lib/cmock_header_parser.rb +29 -27
- data/vendor/cmock/src/cmock.h +1 -1
- data/vendor/cmock/test/unit/cmock_generator_main_test.rb +46 -41
- data/vendor/cmock/test/unit/cmock_header_parser_test.rb +46 -40
- data/vendor/cmock/vendor/c_exception/README.md +6 -4
- data/vendor/cmock/vendor/c_exception/docs/CException.md +2 -2
- data/vendor/cmock/vendor/c_exception/lib/CException.h +1 -1
- data/vendor/cmock/vendor/c_exception/lib/meson.build +2 -2
- data/vendor/cmock/vendor/c_exception/meson.build +36 -2
- data/vendor/cmock/vendor/unity/README.md +77 -71
- data/vendor/cmock/vendor/unity/auto/generate_test_runner.rb +1 -1
- data/vendor/cmock/vendor/unity/docs/ThrowTheSwitchCodingStandard.md +107 -126
- data/vendor/cmock/vendor/unity/docs/UnityAssertionsReference.md +149 -193
- data/vendor/cmock/vendor/unity/docs/UnityConfigurationGuide.md +236 -294
- data/vendor/cmock/vendor/unity/docs/UnityGettingStartedGuide.md +112 -121
- data/vendor/cmock/vendor/unity/docs/UnityHelperScriptsGuide.md +82 -115
- data/vendor/cmock/vendor/unity/extras/fixture/readme.md +16 -19
- data/vendor/cmock/vendor/unity/extras/memory/readme.md +27 -34
- data/vendor/cmock/vendor/unity/src/unity.c +1 -1
- data/vendor/cmock/vendor/unity/src/unity.h +1 -1
- data/vendor/cmock/vendor/unity/src/unity_internals.h +21 -7
- data/vendor/unity/README.md +77 -71
- data/vendor/unity/auto/generate_test_runner.rb +1 -1
- data/vendor/unity/docs/ThrowTheSwitchCodingStandard.md +107 -126
- data/vendor/unity/docs/UnityAssertionsReference.md +149 -193
- data/vendor/unity/docs/UnityConfigurationGuide.md +236 -294
- data/vendor/unity/docs/UnityGettingStartedGuide.md +112 -121
- data/vendor/unity/docs/UnityHelperScriptsGuide.md +82 -115
- data/vendor/unity/extras/fixture/readme.md +16 -19
- data/vendor/unity/extras/memory/readme.md +27 -34
- data/vendor/unity/src/unity.c +1 -1
- data/vendor/unity/src/unity.h +1 -1
- data/vendor/unity/src/unity_internals.h +21 -7
- metadata +14 -5
- data/plugins/gcov/config/defaults.yml +0 -55
@@ -72,8 +72,11 @@ by adding to the `:includes` array. For example:
|
|
72
72
|
```
|
73
73
|
:module_generator:
|
74
74
|
:includes:
|
75
|
-
|
76
|
-
|
75
|
+
:tst:
|
76
|
+
- defs.h
|
77
|
+
- board.h
|
78
|
+
:src:
|
79
|
+
- board.h
|
77
80
|
```
|
78
81
|
|
79
82
|
### Boilerplates
|
@@ -90,6 +93,16 @@ put that corporate copyright notice (or maybe a copyleft notice, if that's your
|
|
90
93
|
***************************/
|
91
94
|
```
|
92
95
|
|
96
|
+
### Test Defines
|
97
|
+
|
98
|
+
You can specify the "#ifdef TEST" at the top of the test files with a custom define.
|
99
|
+
This example will put a "#ifdef CEEDLING_TEST" at the top of the test files.
|
100
|
+
|
101
|
+
```
|
102
|
+
:module_generator:
|
103
|
+
:test_define: CEEDLING_TEST
|
104
|
+
```
|
105
|
+
|
93
106
|
### Naming Convention
|
94
107
|
|
95
108
|
Finally, you can force a particular naming convention. Even if someone calls the generator
|
@@ -103,3 +116,4 @@ Your options are as follows:
|
|
103
116
|
- `:snake` - snake_case_is_all_lower_and_uses_underscores
|
104
117
|
- `:caps` - CAPS_FEELS_LIKE_YOU_ARE_SCREAMING
|
105
118
|
|
119
|
+
|
@@ -46,6 +46,7 @@ class ModuleGenerator < Plugin
|
|
46
46
|
:naming => ((defined? MODULE_GENERATOR_NAMING ) ? MODULE_GENERATOR_NAMING : nil ),
|
47
47
|
:update_svn => ((defined? MODULE_GENERATOR_UPDATE_SVN ) ? MODULE_GENERATOR_UPDATE_SVN : false ),
|
48
48
|
:skeleton_path=> ((defined? MODULE_GENERATOR_SOURCE_ROOT ) ? MODULE_GENERATOR_SOURCE_ROOT.gsub('\\', '/').sub(/^\//, '').sub(/\/$/, '') : "src" ),
|
49
|
+
:test_define => ((defined? MODULE_GENERATOR_TEST_DEFINE ) ? MODULE_GENERATOR_TEST_DEFINE : "TEST" ),
|
49
50
|
}
|
50
51
|
|
51
52
|
# Read Boilerplate template file.
|
@@ -61,7 +61,7 @@ describe "Ceedling" do
|
|
61
61
|
|
62
62
|
@output = `bundle exec ruby -S ceedling utils:gcov`
|
63
63
|
expect(@output).to match(/For now, creating only an HtmlBasic report\./)
|
64
|
-
expect(@output).to match(/Creating gcov results report
|
64
|
+
expect(@output).to match(/Creating (?:a )?gcov (?:results)?(?:HTML)? report(?:\(s\))? in 'build\/artifacts\/gcov'\.\.\. Done/)
|
65
65
|
expect(File.exists?('build/artifacts/gcov/GcovCoverageResults.html')).to eq true
|
66
66
|
|
67
67
|
end
|
@@ -69,6 +69,7 @@ describe PreprocessinatorIncludesHandler do
|
|
69
69
|
# mocks/stubs/expected calls
|
70
70
|
expect(@configurator).to receive(:extension_header).and_return('.h')
|
71
71
|
expect(@configurator).to receive(:extension_source).and_return('.c')
|
72
|
+
expect(@configurator).to receive(:project_config_hash).and_return( {:cmock_mock_prefix => 'mock_'})
|
72
73
|
expect(@configurator).to receive(:tools_test_includes_preprocessor)
|
73
74
|
expect(@configurator).to receive(:project_config_hash).and_return({ })
|
74
75
|
expect(@file_path_utils).to receive(:form_temp_path).and_return("/_dummy_file.c")
|
@@ -106,6 +107,7 @@ describe PreprocessinatorIncludesHandler do
|
|
106
107
|
# mocks/stubs/expected calls
|
107
108
|
expect(@configurator).to receive(:extension_header).and_return('.h')
|
108
109
|
expect(@configurator).to receive(:extension_source).and_return('.c')
|
110
|
+
expect(@configurator).to receive(:project_config_hash).and_return( {:cmock_mock_prefix => 'mock_'})
|
109
111
|
expect(@configurator).to receive(:tools_test_includes_preprocessor)
|
110
112
|
expect(@configurator).to receive(:project_config_hash).and_return({ })
|
111
113
|
expect(@file_path_utils).to receive(:form_temp_path).and_return("/_dummy_file.c")
|
@@ -140,6 +142,7 @@ describe PreprocessinatorIncludesHandler do
|
|
140
142
|
# mocks/stubs/expected calls
|
141
143
|
expect(@configurator).to receive(:extension_header).and_return('.h')
|
142
144
|
expect(@configurator).to receive(:extension_source).and_return('.c')
|
145
|
+
expect(@configurator).to receive(:project_config_hash).and_return( {:cmock_mock_prefix => 'mock_'})
|
143
146
|
expect(@configurator).to receive(:tools_test_includes_preprocessor)
|
144
147
|
expect(@configurator).to receive(:project_config_hash).and_return({ })
|
145
148
|
expect(@file_path_utils).to receive(:form_temp_path).and_return("/_dummy_file.c")
|
@@ -166,6 +169,7 @@ describe PreprocessinatorIncludesHandler do
|
|
166
169
|
# mocks/stubs/expected calls
|
167
170
|
expect(@configurator).to receive(:extension_header).and_return('.h')
|
168
171
|
expect(@configurator).to receive(:extension_source).and_return('.c')
|
172
|
+
expect(@configurator).to receive(:project_config_hash).and_return( {:cmock_mock_prefix => 'mock_'})
|
169
173
|
expect(@configurator).to receive(:tools_test_includes_preprocessor)
|
170
174
|
expect(@configurator).to receive(:project_config_hash).and_return({ })
|
171
175
|
expect(@file_path_utils).to receive(:form_temp_path).and_return("/_dummy_file.c")
|
@@ -195,10 +199,43 @@ describe PreprocessinatorIncludesHandler do
|
|
195
199
|
]
|
196
200
|
end
|
197
201
|
|
202
|
+
it 'should return the list of direct dependencies for the given source file' do
|
203
|
+
# create test state/variables
|
204
|
+
# mocks/stubs/expected calls
|
205
|
+
expect(@configurator).to receive(:extension_header).and_return('.h')
|
206
|
+
expect(@configurator).to receive(:extension_source).and_return('.c')
|
207
|
+
expect(@configurator).to receive(:project_config_hash).and_return( {:cmock_mock_prefix => 'mock_'})
|
208
|
+
expect(@configurator).to receive(:tools_test_includes_preprocessor)
|
209
|
+
expect(@configurator).to receive(:project_config_hash).and_return({ })
|
210
|
+
expect(@file_path_utils).to receive(:form_temp_path).and_return("/_dummy_file.c")
|
211
|
+
expect(@file_wrapper).to receive(:read).and_return("")
|
212
|
+
expect(@file_wrapper).to receive(:write)
|
213
|
+
expect(@tool_executor).to receive(:build_command_line).and_return({:line => "", :options => ""})
|
214
|
+
expect(@tool_executor).to receive(:exec).and_return({ :output => %q{
|
215
|
+
_DUMMY.o: Build/temp/_DUMMY.c \
|
216
|
+
source/new_some_header1_DUMMY.h \
|
217
|
+
source/some_header1__DUMMY.h \
|
218
|
+
@@@@new_some_header1_DUMMY.h \
|
219
|
+
@@@@some_header1__DUMMY.h \
|
220
|
+
}})
|
221
|
+
# execute method
|
222
|
+
results = subject.extract_includes_helper("/dummy_file_5.c", [], [], [])
|
223
|
+
# validate results
|
224
|
+
expect(results).to eq [
|
225
|
+
[ 'source/new_some_header1_DUMMY.h',
|
226
|
+
'source/some_header1__DUMMY.h'],
|
227
|
+
[], []
|
228
|
+
]
|
229
|
+
end
|
230
|
+
end
|
231
|
+
|
232
|
+
context 'extract_includes' do
|
198
233
|
it 'should correctly filter auto link deep dependencies with mocks' do
|
199
234
|
# create test state/variables
|
200
235
|
# mocks/stubs/expected calls
|
201
|
-
expect(@configurator).to receive(:project_config_hash).and_return(:
|
236
|
+
expect(@configurator).to receive(:project_config_hash).and_return({:cmock_mock_prefix => 'mock_',
|
237
|
+
:project_auto_link_deep_dependencies => true,
|
238
|
+
:collection_paths_include => []}).at_least(:once)
|
202
239
|
expect(@configurator).to receive(:extension_header).and_return('.h').exactly(3).times
|
203
240
|
expect(@configurator).to receive(:extension_source).and_return('.c').exactly(3).times
|
204
241
|
expect(@configurator).to receive(:tools_test_includes_preprocessor).exactly(3).times
|
@@ -206,13 +243,6 @@ describe PreprocessinatorIncludesHandler do
|
|
206
243
|
expect(@file_wrapper).to receive(:write).exactly(3).times
|
207
244
|
expect(@file_finder).to receive(:find_compilation_input_file).and_return("assets\example_file.c")
|
208
245
|
expect(@tool_executor).to receive(:build_command_line).and_return({:line => "", :options => ""}).exactly(3).times
|
209
|
-
expect(@configurator).to receive(:project_config_hash).and_return(:project_auto_link_deep_dependencies => true).exactly(2).times
|
210
|
-
expect(@configurator).to receive(:project_config_hash).and_return({:cmock_mock_prefix => 'mock_'})
|
211
|
-
expect(@configurator).to receive(:project_config_hash).and_return(:project_auto_link_deep_dependencies => true).exactly(4).times
|
212
|
-
expect(@configurator).to receive(:project_config_hash).and_return({:cmock_mock_prefix => 'mock_'})
|
213
|
-
expect(@configurator).to receive(:project_config_hash).and_return(:project_auto_link_deep_dependencies => true).exactly(4).times
|
214
|
-
expect(@configurator).to receive(:project_config_hash).and_return({:cmock_mock_prefix => 'mock_'})
|
215
|
-
expect(@configurator).to receive(:project_config_hash).and_return(:project_auto_link_deep_dependencies => true).exactly(2).times
|
216
246
|
expect(@file_path_utils).to receive(:form_temp_path).and_return("_test_DUMMY.c")
|
217
247
|
expect(@file_path_utils).to receive(:form_temp_path).and_return("assets\_example_file.h")
|
218
248
|
expect(@file_path_utils).to receive(:form_temp_path).and_return("assets\_example_file.c")
|
data/spec/spec_system_helper.rb
CHANGED
@@ -426,6 +426,25 @@ module CeedlingTestCases
|
|
426
426
|
end
|
427
427
|
end
|
428
428
|
|
429
|
+
def can_test_projects_with_both_mock_and_real_header
|
430
|
+
@c.with_context do
|
431
|
+
Dir.chdir @proj_name do
|
432
|
+
FileUtils.cp test_asset_path("example_file.h"), 'src/'
|
433
|
+
FileUtils.cp test_asset_path("example_file.c"), 'src/'
|
434
|
+
FileUtils.cp test_asset_path("example_file_call.h"), 'src/'
|
435
|
+
FileUtils.cp test_asset_path("example_file_call.c"), 'src/'
|
436
|
+
FileUtils.cp test_asset_path("test_example_file_with_mock.c"), 'test/'
|
437
|
+
|
438
|
+
output = `bundle exec ruby -S ceedling 2>&1`
|
439
|
+
expect($?.exitstatus).to match(0) # Since a test either pass or are ignored, we return success here
|
440
|
+
expect(output).to match(/TESTED:\s+\d/)
|
441
|
+
expect(output).to match(/PASSED:\s+\d/)
|
442
|
+
expect(output).to match(/FAILED:\s+\d/)
|
443
|
+
expect(output).to match(/IGNORED:\s+\d/)
|
444
|
+
end
|
445
|
+
end
|
446
|
+
end
|
447
|
+
|
429
448
|
def uses_raw_output_report_plugin
|
430
449
|
@c.with_context do
|
431
450
|
Dir.chdir @proj_name do
|
@@ -37,6 +37,7 @@ describe "Ceedling" do
|
|
37
37
|
it { can_test_projects_with_fail_alias }
|
38
38
|
it { can_test_projects_with_fail_default }
|
39
39
|
it { can_test_projects_with_compile_error }
|
40
|
+
it { can_test_projects_with_both_mock_and_real_header }
|
40
41
|
it { uses_raw_output_report_plugin }
|
41
42
|
it { can_use_the_module_plugin }
|
42
43
|
it { can_use_the_module_plugin_path_extension }
|
@@ -20,9 +20,7 @@ class CMockGenerator
|
|
20
20
|
@framework = @config.framework.to_s
|
21
21
|
@fail_on_unexpected_calls = @config.fail_on_unexpected_calls
|
22
22
|
@exclude_setjmp_h = @config.exclude_setjmp_h
|
23
|
-
|
24
23
|
@subdir = @config.subdir
|
25
|
-
@folder = nil
|
26
24
|
|
27
25
|
@includes_h_pre_orig_header = (@config.includes || @config.includes_h_pre_orig_header || []).map { |h| h =~ /</ ? h : "\"#{h}\"" }
|
28
26
|
@includes_h_post_orig_header = (@config.includes_h_post_orig_header || []).map { |h| h =~ /</ ? h : "\"#{h}\"" }
|
@@ -47,54 +45,70 @@ class CMockGenerator
|
|
47
45
|
end
|
48
46
|
|
49
47
|
def create_mock(module_name, parsed_stuff, module_ext = nil, folder = nil)
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
end
|
62
|
-
# adds a trailing slash to the folder output
|
63
|
-
@folder = File.join(@folder, '') if @folder
|
48
|
+
# determine the name for our new mock
|
49
|
+
mock_name = @prefix + module_name + @suffix
|
50
|
+
|
51
|
+
# determine the folder our mock will reside
|
52
|
+
mock_folder = if folder && @subdir
|
53
|
+
File.join(@subdir, folder)
|
54
|
+
elsif @subdir
|
55
|
+
@subdir
|
56
|
+
else
|
57
|
+
folder
|
58
|
+
end
|
64
59
|
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
60
|
+
# adds a trailing slash to the folder output
|
61
|
+
mock_folder = File.join(mock_folder, '') if mock_folder
|
62
|
+
|
63
|
+
# create out mock project from incoming data
|
64
|
+
mock_project = {
|
65
|
+
:module_name => module_name,
|
66
|
+
:module_ext => (module_ext || '.h'),
|
67
|
+
:mock_name => mock_name,
|
68
|
+
:clean_name => TypeSanitizer.sanitize_c_identifier(mock_name),
|
69
|
+
:folder => mock_folder,
|
70
|
+
:parsed_stuff => parsed_stuff,
|
71
|
+
:skeleton => false
|
72
|
+
}
|
73
|
+
|
74
|
+
create_mock_subdir(mock_project)
|
75
|
+
create_mock_header_file(mock_project)
|
76
|
+
create_mock_source_file(mock_project)
|
69
77
|
end
|
70
78
|
|
71
79
|
def create_skeleton(module_name, parsed_stuff)
|
72
|
-
|
73
|
-
|
80
|
+
mock_project = {
|
81
|
+
:module_name => module_name,
|
82
|
+
:module_ext => '.h',
|
83
|
+
:parsed_stuff => parsed_stuff,
|
84
|
+
:skeleton => true
|
85
|
+
}
|
86
|
+
|
87
|
+
create_skeleton_source_file(mock_project)
|
74
88
|
end
|
75
89
|
|
76
90
|
private if $ThisIsOnlyATest.nil? ##############################
|
77
91
|
|
78
|
-
def create_mock_subdir
|
79
|
-
@file_writer.create_subdir(
|
92
|
+
def create_mock_subdir(mock_project)
|
93
|
+
@file_writer.create_subdir(mock_project[:folder])
|
80
94
|
end
|
81
95
|
|
82
96
|
def create_using_statement(file, function)
|
83
97
|
file << "using namespace #{function[:namespace].join('::')};\n" unless function[:namespace].empty?
|
84
98
|
end
|
85
99
|
|
86
|
-
def create_mock_header_file(
|
100
|
+
def create_mock_header_file(mock_project)
|
87
101
|
if @include_inline == :include
|
88
|
-
@file_writer.create_file(
|
89
|
-
file << parsed_stuff[:normalized_source]
|
102
|
+
@file_writer.create_file(mock_project[:module_name] + (mock_project[:module_ext]), mock_project[:folder]) do |file, _filename|
|
103
|
+
file << mock_project[:parsed_stuff][:normalized_source]
|
90
104
|
end
|
91
105
|
end
|
92
106
|
|
93
|
-
@file_writer.create_file(
|
94
|
-
create_mock_header_header(file, filename)
|
95
|
-
create_mock_header_service_call_declarations(file)
|
96
|
-
create_typedefs(file,
|
97
|
-
parsed_stuff[:functions].each do |function|
|
107
|
+
@file_writer.create_file(mock_project[:mock_name] + mock_project[:module_ext], mock_project[:folder]) do |file, filename|
|
108
|
+
create_mock_header_header(file, filename, mock_project)
|
109
|
+
create_mock_header_service_call_declarations(file, mock_project)
|
110
|
+
create_typedefs(file, mock_project)
|
111
|
+
mock_project[:parsed_stuff][:functions].each do |function|
|
98
112
|
create_using_statement(file, function)
|
99
113
|
file << @plugins.run(:mock_function_declarations, function)
|
100
114
|
end
|
@@ -102,35 +116,37 @@ class CMockGenerator
|
|
102
116
|
end
|
103
117
|
end
|
104
118
|
|
105
|
-
def create_mock_source_file(
|
106
|
-
@file_writer.create_file(
|
107
|
-
create_source_header_section(file, filename,
|
108
|
-
create_instance_structure(file,
|
119
|
+
def create_mock_source_file(mock_project)
|
120
|
+
@file_writer.create_file(mock_project[:mock_name] + '.c', mock_project[:folder]) do |file, filename|
|
121
|
+
create_source_header_section(file, filename, mock_project)
|
122
|
+
create_instance_structure(file, mock_project)
|
109
123
|
create_extern_declarations(file)
|
110
|
-
create_mock_verify_function(file,
|
111
|
-
create_mock_init_function(file)
|
112
|
-
create_mock_destroy_function(file,
|
113
|
-
parsed_stuff[:functions].each do |function|
|
124
|
+
create_mock_verify_function(file, mock_project)
|
125
|
+
create_mock_init_function(file, mock_project)
|
126
|
+
create_mock_destroy_function(file, mock_project)
|
127
|
+
mock_project[:parsed_stuff][:functions].each do |function|
|
114
128
|
create_mock_implementation(file, function)
|
115
129
|
create_mock_interfaces(file, function)
|
116
130
|
end
|
117
131
|
end
|
118
132
|
end
|
119
133
|
|
120
|
-
def create_skeleton_source_file(
|
121
|
-
filename = "#{@config.mock_path}/#{@subdir + '/' if @subdir}#{module_name}.c"
|
134
|
+
def create_skeleton_source_file(mock_project)
|
135
|
+
filename = "#{@config.mock_path}/#{@subdir + '/' if @subdir}#{mock_project[:module_name]}.c"
|
122
136
|
existing = File.exist?(filename) ? File.read(filename) : ''
|
123
|
-
@file_writer.append_file(
|
124
|
-
|
125
|
-
|
137
|
+
@file_writer.append_file(mock_project[:module_name] + '.c', @subdir) do |file, fullname|
|
138
|
+
blank_project = mock_project.clone
|
139
|
+
blank_project[:parsed_stuff] = { :functions => [] }
|
140
|
+
create_source_header_section(file, fullname, blank_project) if existing.empty?
|
141
|
+
mock_project[:parsed_stuff][:functions].each do |function|
|
126
142
|
create_function_skeleton(file, function, existing)
|
127
143
|
end
|
128
144
|
end
|
129
145
|
end
|
130
146
|
|
131
|
-
def create_mock_header_header(file, _filename)
|
132
|
-
define_name
|
133
|
-
orig_filename = (
|
147
|
+
def create_mock_header_header(file, _filename, mock_project)
|
148
|
+
define_name = mock_project[:clean_name].upcase
|
149
|
+
orig_filename = (mock_project[:folder] || '') + mock_project[:module_name] + mock_project[:module_ext]
|
134
150
|
file << "/* AUTOGENERATED FILE. DO NOT EDIT. */\n"
|
135
151
|
file << "#ifndef _#{define_name}_H\n"
|
136
152
|
file << "#define _#{define_name}_H\n\n"
|
@@ -155,16 +171,16 @@ class CMockGenerator
|
|
155
171
|
file << "\n"
|
156
172
|
end
|
157
173
|
|
158
|
-
def create_typedefs(file,
|
174
|
+
def create_typedefs(file, mock_project)
|
159
175
|
file << "\n"
|
160
|
-
typedefs.each { |typedef| file << "#{typedef}\n" }
|
176
|
+
mock_project[:parsed_stuff][:typedefs].each { |typedef| file << "#{typedef}\n" }
|
161
177
|
file << "\n\n"
|
162
178
|
end
|
163
179
|
|
164
|
-
def create_mock_header_service_call_declarations(file)
|
165
|
-
file << "void #{
|
166
|
-
file << "void #{
|
167
|
-
file << "void #{
|
180
|
+
def create_mock_header_service_call_declarations(file, mock_project)
|
181
|
+
file << "void #{mock_project[:clean_name]}_Init(void);\n"
|
182
|
+
file << "void #{mock_project[:clean_name]}_Destroy(void);\n"
|
183
|
+
file << "void #{mock_project[:clean_name]}_Verify(void);\n\n"
|
168
184
|
end
|
169
185
|
|
170
186
|
def create_mock_header_footer(header)
|
@@ -178,9 +194,9 @@ class CMockGenerator
|
|
178
194
|
header << "#endif\n"
|
179
195
|
end
|
180
196
|
|
181
|
-
def create_source_header_section(file, filename,
|
182
|
-
header_file = (
|
183
|
-
file << "/* AUTOGENERATED FILE. DO NOT EDIT. */\n" unless functions.empty?
|
197
|
+
def create_source_header_section(file, filename, mock_project)
|
198
|
+
header_file = (mock_project[:folder] || '') + filename.gsub('.c', mock_project[:module_ext])
|
199
|
+
file << "/* AUTOGENERATED FILE. DO NOT EDIT. */\n" unless mock_project[:parsed_stuff][:functions].empty?
|
184
200
|
file << "#include <string.h>\n"
|
185
201
|
file << "#include <stdlib.h>\n"
|
186
202
|
unless @exclude_setjmp_h
|
@@ -192,7 +208,7 @@ class CMockGenerator
|
|
192
208
|
@includes_c_post_header.each { |inc| file << "#include #{inc}\n" }
|
193
209
|
file << "\n"
|
194
210
|
strs = []
|
195
|
-
functions.each do |func|
|
211
|
+
mock_project[:parsed_stuff][:functions].each do |func|
|
196
212
|
strs << func[:name]
|
197
213
|
func[:args].each { |arg| strs << arg[:name] }
|
198
214
|
end
|
@@ -202,14 +218,15 @@ class CMockGenerator
|
|
202
218
|
file << "\n"
|
203
219
|
end
|
204
220
|
|
205
|
-
def create_instance_structure(file,
|
221
|
+
def create_instance_structure(file, mock_project)
|
222
|
+
functions = mock_project[:parsed_stuff][:functions]
|
206
223
|
functions.each do |function|
|
207
224
|
file << "typedef struct _CMOCK_#{function[:name]}_CALL_INSTANCE\n{\n"
|
208
225
|
file << " UNITY_LINE_TYPE LineNumber;\n"
|
209
226
|
file << @plugins.run(:instance_typedefs, function)
|
210
227
|
file << "\n} CMOCK_#{function[:name]}_CALL_INSTANCE;\n\n"
|
211
228
|
end
|
212
|
-
file << "static struct #{
|
229
|
+
file << "static struct #{mock_project[:clean_name]}Instance\n{\n"
|
213
230
|
if functions.empty?
|
214
231
|
file << " unsigned char placeHolder;\n"
|
215
232
|
end
|
@@ -231,9 +248,9 @@ class CMockGenerator
|
|
231
248
|
file << "\n"
|
232
249
|
end
|
233
250
|
|
234
|
-
def create_mock_verify_function(file,
|
235
|
-
file << "void #{
|
236
|
-
verifications = functions.collect do |function|
|
251
|
+
def create_mock_verify_function(file, mock_project)
|
252
|
+
file << "void #{mock_project[:clean_name]}_Verify(void)\n{\n"
|
253
|
+
verifications = mock_project[:parsed_stuff][:functions].collect do |function|
|
237
254
|
v = @plugins.run(:mock_verify, function)
|
238
255
|
v.empty? ? v : [" call_instance = Mock.#{function[:name]}_CallInstance;\n", v]
|
239
256
|
end.join
|
@@ -245,20 +262,20 @@ class CMockGenerator
|
|
245
262
|
file << "}\n\n"
|
246
263
|
end
|
247
264
|
|
248
|
-
def create_mock_init_function(file)
|
249
|
-
file << "void #{
|
250
|
-
file << " #{
|
265
|
+
def create_mock_init_function(file, mock_project)
|
266
|
+
file << "void #{mock_project[:clean_name]}_Init(void)\n{\n"
|
267
|
+
file << " #{mock_project[:clean_name]}_Destroy();\n"
|
251
268
|
file << "}\n\n"
|
252
269
|
end
|
253
270
|
|
254
|
-
def create_mock_destroy_function(file,
|
255
|
-
file << "void #{
|
271
|
+
def create_mock_destroy_function(file, mock_project)
|
272
|
+
file << "void #{mock_project[:clean_name]}_Destroy(void)\n{\n"
|
256
273
|
file << " CMock_Guts_MemFreeAll();\n"
|
257
274
|
file << " memset(&Mock, 0, sizeof(Mock));\n"
|
258
|
-
file << functions.collect { |function| @plugins.run(:mock_destroy, function) }.join
|
275
|
+
file << mock_project[:parsed_stuff][:functions].collect { |function| @plugins.run(:mock_destroy, function) }.join
|
259
276
|
|
260
277
|
unless @fail_on_unexpected_calls
|
261
|
-
file << functions.collect { |function| @plugins.run(:mock_ignore, function) }.join
|
278
|
+
file << mock_project[:parsed_stuff][:functions].collect { |function| @plugins.run(:mock_ignore, function) }.join
|
262
279
|
end
|
263
280
|
|
264
281
|
if @ordered
|