From 7a32429bd223c3305c1e145e14de5e67d35fb3e5 Mon Sep 17 00:00:00 2001 From: laurensmiers Date: Mon, 25 Sep 2017 23:39:09 +0200 Subject: [PATCH] Add handling of treat_inline - treat_externs only has effect on "extern", not "inline" anymore - when treat_inline = :include, we remove the "inline" so that the inline functions become 'normal' functions - they are handled as as usual and will be mocked - Add tests to check inline functions are not deleted when treat_inline=:include (and thus mocked) --- lib/cmock_header_parser.rb | 17 +++++++++--- test/unit/cmock_header_parser_test.rb | 39 +++++++++++++++++++++++++++ 2 files changed, 52 insertions(+), 4 deletions(-) diff --git a/lib/cmock_header_parser.rb b/lib/cmock_header_parser.rb index 800f52e..1e53956 100644 --- a/lib/cmock_header_parser.rb +++ b/lib/cmock_header_parser.rb @@ -126,11 +126,20 @@ class CMockHeaderParser src_lines = source.split(/\s*;\s*/).uniq src_lines.delete_if {|line| line.strip.length == 0} # remove blank lines src_lines.delete_if {|line| !(line =~ /[\w\s\*]+\(+\s*\*[\*\s]*[\w\s]+(?:\[[\w\s]*\]\s*)+\)+\s*\((?:[\w\s\*]*,?)*\s*\)/).nil?} #remove function pointer arrays - if (@treat_externs == :include) - src_lines.delete_if {|line| !(line =~ /(?:^|\s+)(?:inline)\s+/).nil?} # remove inline functions - else - src_lines.delete_if {|line| !(line =~ /(?:^|\s+)(?:extern|inline)\s+/).nil?} # remove inline and extern functions + + unless (@treat_externs == :include) + src_lines.delete_if {|line| !(line =~ /(?:^|\s+)(?:extern)\s+/).nil?} # remove extern functions end + + if (@treat_inline == :include) + src_lines.each { + |src_line| + src_line.gsub!(/^inline/, "") + } + else + src_lines.delete_if {|line| !(line =~ /(?:^|\s+)(?:inline)\s+/).nil?} # remove inline functions + end + src_lines.delete_if {|line| line.empty? } #drop empty lines end diff --git a/test/unit/cmock_header_parser_test.rb b/test/unit/cmock_header_parser_test.rb index b1b0c22..fa36762 100644 --- a/test/unit/cmock_header_parser_test.rb +++ b/test/unit/cmock_header_parser_test.rb @@ -454,6 +454,45 @@ describe CMockHeaderParser, "Verify CMockHeaderParser Module" do assert_equal(expected, @parser.import_source(source).map!{|s|s.strip}) end + it "leave inline functions if inline to be included" do + source = + "extern uint32 foobar(unsigned int);\n" + + "uint32 extern_name_func(unsigned int);\n" + + "uint32 funcinline(unsigned int);\n" + + "inline void inlineBar(unsigned int);\n" + + "static inline void bar(unsigned int);\n" + + expected = + [ "uint32 extern_name_func(unsigned int)", + "uint32 funcinline(unsigned int)", + "void inlineBar(unsigned int)", + "void bar(unsigned int)" + ] + + @parser.treat_inline = :include + assert_equal(expected, @parser.import_source(source).map!{|s|s.strip}) + end + + it "leave inline and extern functions if inline and extern to be included" do + source = + "extern uint32 foobar(unsigned int);\n" + + "uint32 extern_name_func(unsigned int);\n" + + "uint32 funcinline(unsigned int);\n" + + "inline void inlineBar(unsigned int);\n" + + "static inline void bar(unsigned int);\n" + + expected = + [ "extern uint32 foobar(unsigned int)", + "uint32 extern_name_func(unsigned int)", + "uint32 funcinline(unsigned int)", + "void inlineBar(unsigned int)", + "void bar(unsigned int)" + ] + + @parser.treat_externs = :include + @parser.treat_inline = :include + assert_equal(expected, @parser.import_source(source).map!{|s|s.strip}) + end it "remove defines" do source =