vendor/cmock/lib/cmock_generator.rb in ceedling-0.30.0 vs vendor/cmock/lib/cmock_generator.rb in ceedling-0.31.0
- old
+ new
@@ -17,12 +17,14 @@
@weak = @config.weak
@include_inline = @config.treat_inlines
@ordered = @config.enforce_strict_ordering
@framework = @config.framework.to_s
@fail_on_unexpected_calls = @config.fail_on_unexpected_calls
+ @exclude_setjmp_h = @config.exclude_setjmp_h
@subdir = @config.subdir
+ @folder = nil
@includes_h_pre_orig_header = (@config.includes || @config.includes_h_pre_orig_header || []).map { |h| h =~ /</ ? h : "\"#{h}\"" }
@includes_h_post_orig_header = (@config.includes_h_post_orig_header || []).map { |h| h =~ /</ ? h : "\"#{h}\"" }
@includes_c_pre_header = (@config.includes_c_pre_header || []).map { |h| h =~ /</ ? h : "\"#{h}\"" }
@includes_c_post_header = (@config.includes_c_post_header || []).map { |h| h =~ /</ ? h : "\"#{h}\"" }
@@ -42,16 +44,28 @@
else
raise 'Failed to find an instance of Unity to pull in type_sanitizer module!'
end
end
- def create_mock(module_name, parsed_stuff, module_ext = nil)
+ def create_mock(module_name, parsed_stuff, module_ext = nil, folder = nil)
@module_name = module_name
@module_ext = module_ext || '.h'
@mock_name = @prefix + @module_name + @suffix
@clean_mock_name = TypeSanitizer.sanitize_c_identifier(@mock_name)
+
+ @folder = if folder && @subdir
+ File.join(@subdir, folder)
+ elsif @subdir
+ @subdir
+ else
+ folder
+ end
+ # adds a trailing slash to the folder output
+ @folder = File.join(@folder, '') if @folder
+
create_mock_subdir
+
create_mock_header_file(parsed_stuff)
create_mock_source_file(parsed_stuff)
end
def create_skeleton(module_name, parsed_stuff)
@@ -60,25 +74,25 @@
end
private if $ThisIsOnlyATest.nil? ##############################
def create_mock_subdir
- @file_writer.create_subdir(@subdir)
+ @file_writer.create_subdir(@folder)
end
def create_using_statement(file, function)
file << "using namespace #{function[:namespace].join('::')};\n" unless function[:namespace].empty?
end
def create_mock_header_file(parsed_stuff)
if @include_inline == :include
- @file_writer.create_file(@module_name + (@module_ext || '.h'), @subdir) do |file, _filename|
+ @file_writer.create_file(@module_name + (@module_ext || '.h'), @folder) do |file, _filename|
file << parsed_stuff[:normalized_source]
end
end
- @file_writer.create_file(@mock_name + (@module_ext || '.h'), @subdir) do |file, filename|
+ @file_writer.create_file(@mock_name + (@module_ext || '.h'), @folder) do |file, filename|
create_mock_header_header(file, filename)
create_mock_header_service_call_declarations(file)
create_typedefs(file, parsed_stuff[:typedefs])
parsed_stuff[:functions].each do |function|
create_using_statement(file, function)
@@ -87,11 +101,11 @@
create_mock_header_footer(file)
end
end
def create_mock_source_file(parsed_stuff)
- @file_writer.create_file(@mock_name + '.c', @subdir) do |file, filename|
+ @file_writer.create_file(@mock_name + '.c', @folder) do |file, filename|
create_source_header_section(file, filename, parsed_stuff[:functions])
create_instance_structure(file, parsed_stuff[:functions])
create_extern_declarations(file)
create_mock_verify_function(file, parsed_stuff[:functions])
create_mock_init_function(file)
@@ -114,11 +128,11 @@
end
end
def create_mock_header_header(file, _filename)
define_name = @clean_mock_name.upcase
- orig_filename = (@subdir ? @subdir + '/' : '') + @module_name + (@module_ext || '.h')
+ orig_filename = (@folder || '') + @module_name + (@module_ext || '.h')
file << "/* AUTOGENERATED FILE. DO NOT EDIT. */\n"
file << "#ifndef _#{define_name}_H\n"
file << "#define _#{define_name}_H\n\n"
file << "#include \"#{@framework}.h\"\n"
@includes_h_pre_orig_header.each { |inc| file << "#include #{inc}\n" }
@@ -163,15 +177,17 @@
header << "\n"
header << "#endif\n"
end
def create_source_header_section(file, filename, functions)
- header_file = (@subdir ? @subdir + '/' : '') + filename.gsub('.c', (@module_ext || '.h'))
+ header_file = (@folder || '') + filename.gsub('.c', (@module_ext || '.h'))
file << "/* AUTOGENERATED FILE. DO NOT EDIT. */\n" unless functions.empty?
file << "#include <string.h>\n"
file << "#include <stdlib.h>\n"
- file << "#include <setjmp.h>\n"
+ unless @exclude_setjmp_h
+ file << "#include <setjmp.h>\n"
+ end
file << "#include \"cmock.h\"\n"
@includes_c_pre_header.each { |inc| file << "#include #{inc}\n" }
file << "#include \"#{header_file}\"\n"
@includes_c_post_header.each { |inc| file << "#include #{inc}\n" }
file << "\n"
@@ -203,10 +219,12 @@
end
file << "} Mock;\n\n"
end
def create_extern_declarations(file)
- file << "extern jmp_buf AbortFrame;\n"
+ unless @exclude_setjmp_h
+ file << "extern jmp_buf AbortFrame;\n"
+ end
if @ordered
file << "extern int GlobalExpectCount;\n"
file << "extern int GlobalVerifyOrder;\n"
end
file << "\n"