Attempt to fix (once and for all) the way CMock handles const in arguments and return values.

This commit is contained in:
Mark VanderVoord
2016-05-06 21:26:25 -04:00
parent f341e3f650
commit 5de74001eb
2 changed files with 27 additions and 3 deletions
+5 -3
View File
@@ -156,8 +156,9 @@ class CMockHeaderParser
end
def divine_const(arg)
return false if /const[ *]/.match(arg).nil? # check for const
return false if /\*/.match(arg) and /const[^*]*\*/.match(arg).nil? # check const comes before * indicating const data
return false if !(/(?:^|\s|\*)const(?:\*|\s|$)/ =~ arg) # check for const as part of a larger word
return true if (/const(?:\w|\s)*\*/ =~ arg) # check const comes before * indicating const data
return false if (/\*\s*const/ =~ arg) # check const comes after * indicating const ptr
return true
end
@@ -220,6 +221,7 @@ class CMockHeaderParser
#build attribute and return type strings
decl[:modifier] = []
rettype = []
full_retval = descriptors[0..-2].join(' ')
descriptors[0..-2].each do |word|
if @c_attributes.include?(word)
decl[:modifier] << word
@@ -235,7 +237,7 @@ class CMockHeaderParser
decl[:return] = { :type => rettype,
:name => 'cmock_to_return',
:ptr? => divine_ptr(rettype),
:const? => decl[:modifier].split(/\s/).include?('const'),
:const? => divine_const(full_retval),
:str => "#{rettype} cmock_to_return",
:void? => (rettype == 'void')
}
+22
View File
@@ -781,6 +781,28 @@ describe CMockHeaderParser, "Verify CMockHeaderParser Module" do
assert_equal(expected, @parser.parse("module", source)[:functions])
end
it "should properly handle const applied after asterisk in return type" do
source = "int * const PorkRoast(void);\n"
expected = [{ :var_arg=>nil,
:name=>"PorkRoast",
:return=> { :type => "int*",
:name => 'cmock_to_return',
:ptr? => true,
:const? => false,
:str => "int* cmock_to_return",
:void? => false
},
:modifier=>"const",
:contains_ptr? => false,
:args=>[],
:args_string=>"void",
:args_call=>""
}]
assert_equal(expected, @parser.parse("module", source)[:functions])
end
it "properly detect typedef'd variants of void and use those" do
source = "typedef (void) FUNKY_VOID_T;\n" +