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"