- added cmock.c file for handling generic parts

- switched to better memory management technique


git-svn-id: http://cmock.svn.sourceforge.net/svnroot/cmock/trunk@155 bf332499-1b4d-0410-844d-d2d48d5cc64c
This commit is contained in:
mvandervoord
2010-03-08 13:32:31 +00:00
parent f4c5f17b7b
commit e79a5f13d1
43 changed files with 1797 additions and 1508 deletions
+11 -56
View File
@@ -11,91 +11,46 @@ class CMockGeneratorPluginArray
@priority = 8
end
def instance_structure(function)
lines = ""
function[:args].each do |arg|
lines << INSTANCE_STRUCTURE_DEPTH_SNIPPET % "#{function[:name]}_Expected_#{arg[:name]}" if (arg[:ptr?])
def instance_typedefs(function)
function[:args].inject("") do |all, arg|
(arg[:ptr?]) ? all + " int Expected_#{arg[:name]}_Depth;\n" : all
end
lines
end
def mock_function_declarations(function)
return nil unless function[:contains_ptr?]
if (function[:args_string] == "void")
if (function[:return_type] == 'void')
if (function[:return][:void?])
return "void #{function[:name]}_ExpectWithArray(void);\n"
else
return "void #{function[:name]}_ExpectWithArrayAndReturn(#{function[:return_string]});\n"
return "void #{function[:name]}_ExpectWithArrayAndReturn(#{function[:return][:str]});\n"
end
else
args_string = function[:args].map{|m| m[:ptr?] ? "#{m[:type]} #{m[:name]}, int #{m[:name]}_Depth" : "#{m[:type]} #{m[:name]}"}.join(', ')
if (function[:return_type] == 'void')
if (function[:return][:void?])
return "void #{function[:name]}_ExpectWithArray(#{args_string});\n"
else
return "void #{function[:name]}_ExpectWithArrayAndReturn(#{args_string}, #{function[:return_string]});\n"
return "void #{function[:name]}_ExpectWithArrayAndReturn(#{args_string}, #{function[:return][:str]});\n"
end
end
end
def mock_interfaces(function)
return nil unless function[:contains_ptr?]
lines = []
func_name = function[:name]
args_string = function[:args].map{|m| m[:ptr?] ? "#{m[:type]} #{m[:name]}, int #{m[:name]}_Depth" : "#{m[:type]} #{m[:name]}"}.join(', ')
call_string = function[:args].map{|m| m[:ptr?] ? "#{m[:name]}, #{m[:name]}_Depth" : m[:name]}.join(', ')
# Parameter Helper Function
if (function[:args_string] != "void")
lines << "void ExpectParametersWithArray_#{func_name}(#{args_string})\n{\n"
function[:args].each do |arg|
lines << @utils.code_add_an_arg_expectation(function, arg, arg[:ptr?] ? "#{arg[:name]}_Depth" : "1")
end
lines << "}\n\n"
end
#Main Mock Interface
if (function[:return_type] == "void")
if (function[:return][:void?])
lines << "void #{func_name}_ExpectWithArray(#{args_string})\n"
else
lines << "void #{func_name}_ExpectWithArrayAndReturn(#{args_string}, #{function[:return_string]})\n"
lines << "void #{func_name}_ExpectWithArrayAndReturn(#{args_string}, #{function[:return][:str]})\n"
end
lines << "{\n"
lines << @utils.code_add_base_expectation(func_name)
lines << " ExpectParametersWithArray_#{func_name}(#{call_string});\n"
if (function[:return_type] != "void")
lines << @utils.code_insert_item_into_expect_array(function[:return_type], "Mock.#{func_name}_Return", 'cmock_to_return')
lines << " Mock.#{func_name}_Return = Mock.#{func_name}_Return_Head;\n"
lines << " Mock.#{func_name}_Return += Mock.#{func_name}_CallCount;\n"
end
lines << " CMockExpectParameters_#{func_name}(cmock_call_instance, #{call_string});\n"
lines << " cmock_call_instance->ReturnVal = cmock_to_return;\n" unless (function[:return][:void?])
lines << "}\n\n"
end
def mock_destroy(function)
lines = []
function[:args].each do |arg|
lines << DESTROY_DEPTH_SNIPPET % "#{function[:name]}_Expected_#{arg[:name]}" if arg[:ptr?]
end
lines.flatten
end
private #####################
INSTANCE_STRUCTURE_DEPTH_SNIPPET = %q[
int* %1$s_Depth;
int* %1$s_Depth_Head;
int* %1$s_Depth_Tail;
]
DESTROY_DEPTH_SNIPPET = %q[
if (Mock.%1$s_Depth_Head)
{
free(Mock.%1$s_Depth_Head);
}
Mock.%1$s_Depth=NULL;
Mock.%1$s_Depth_Head=NULL;
Mock.%1$s_Depth_Tail=NULL;
]
end