Initial commit

This commit is contained in:
Mike Long
2010-12-12 20:11:35 +01:00
commit 5def7f1fd3
10 changed files with 1745 additions and 0 deletions

0
README Normal file
View File

123
src/.cproject Normal file
View File

@@ -0,0 +1,123 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<?fileVersion 4.0.0?>
<cproject storage_type_id="org.eclipse.cdt.core.XmlProjectDescriptionStorage">
<storageModule moduleId="org.eclipse.cdt.core.settings">
<cconfiguration id="cdt.managedbuild.toolchain.gnu.base.1238120309">
<storageModule buildSystemId="org.eclipse.cdt.managedbuilder.core.configurationDataProvider" id="cdt.managedbuild.toolchain.gnu.base.1238120309" moduleId="org.eclipse.cdt.core.settings" name="Default">
<externalSettings/>
<extensions>
<extension id="org.eclipse.cdt.core.ELF" point="org.eclipse.cdt.core.BinaryParser"/>
<extension id="org.eclipse.cdt.core.GmakeErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
<extension id="org.eclipse.cdt.core.CWDLocator" point="org.eclipse.cdt.core.ErrorParser"/>
<extension id="org.eclipse.cdt.core.GCCErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
<extension id="org.eclipse.cdt.core.GASErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
<extension id="org.eclipse.cdt.core.GLDErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
</extensions>
</storageModule>
<storageModule moduleId="cdtBuildSystem" version="4.0.0">
<configuration buildProperties="" id="cdt.managedbuild.toolchain.gnu.base.1238120309" name="Default" parent="org.eclipse.cdt.build.core.emptycfg">
<folderInfo id="cdt.managedbuild.toolchain.gnu.base.1238120309.1907625956" name="/" resourcePath="">
<toolChain id="cdt.managedbuild.toolchain.gnu.base.1159475659" name="cdt.managedbuild.toolchain.gnu.base" superClass="cdt.managedbuild.toolchain.gnu.base">
<targetPlatform archList="all" binaryParser="org.eclipse.cdt.core.ELF" id="cdt.managedbuild.target.gnu.platform.base.930806366" name="Debug Platform" osList="linux,hpux,aix,qnx" superClass="cdt.managedbuild.target.gnu.platform.base"/>
<builder id="cdt.managedbuild.target.gnu.builder.base.1668825616" managedBuildOn="false" name="Gnu Make Builder.Default" superClass="cdt.managedbuild.target.gnu.builder.base"/>
<tool id="cdt.managedbuild.tool.gnu.archiver.base.753105937" name="GCC Archiver" superClass="cdt.managedbuild.tool.gnu.archiver.base"/>
<tool id="cdt.managedbuild.tool.gnu.cpp.compiler.base.1202985208" name="GCC C++ Compiler" superClass="cdt.managedbuild.tool.gnu.cpp.compiler.base"/>
<tool id="cdt.managedbuild.tool.gnu.c.compiler.base.19785768" name="GCC C Compiler" superClass="cdt.managedbuild.tool.gnu.c.compiler.base"/>
<tool id="cdt.managedbuild.tool.gnu.c.linker.base.1428594416" name="GCC C Linker" superClass="cdt.managedbuild.tool.gnu.c.linker.base"/>
<tool id="cdt.managedbuild.tool.gnu.cpp.linker.base.2075660182" name="GCC C++ Linker" superClass="cdt.managedbuild.tool.gnu.cpp.linker.base"/>
<tool id="cdt.managedbuild.tool.gnu.assembler.base.702543168" name="GCC Assembler" superClass="cdt.managedbuild.tool.gnu.assembler.base"/>
</toolChain>
</folderInfo>
</configuration>
</storageModule>
<storageModule moduleId="scannerConfiguration">
<autodiscovery enabled="true" problemReportingEnabled="true" selectedProfileId=""/>
<profile id="org.eclipse.cdt.make.core.GCCStandardMakePerProjectProfile">
<buildOutputProvider>
<openAction enabled="true" filePath=""/>
<parser enabled="true"/>
</buildOutputProvider>
<scannerInfoProvider id="specsFile">
<runAction arguments="-E -P -v -dD ${plugin_state_location}/${specs_file}" command="gcc" useDefault="true"/>
<parser enabled="true"/>
</scannerInfoProvider>
</profile>
<profile id="org.eclipse.cdt.make.core.GCCStandardMakePerFileProfile">
<buildOutputProvider>
<openAction enabled="true" filePath=""/>
<parser enabled="true"/>
</buildOutputProvider>
<scannerInfoProvider id="makefileGenerator">
<runAction arguments="-E -P -v -dD" command="" useDefault="true"/>
<parser enabled="true"/>
</scannerInfoProvider>
</profile>
<profile id="org.eclipse.cdt.managedbuilder.core.GCCManagedMakePerProjectProfile">
<buildOutputProvider>
<openAction enabled="true" filePath=""/>
<parser enabled="true"/>
</buildOutputProvider>
<scannerInfoProvider id="specsFile">
<runAction arguments="-E -P -v -dD ${plugin_state_location}/${specs_file}" command="gcc" useDefault="true"/>
<parser enabled="true"/>
</scannerInfoProvider>
</profile>
<profile id="org.eclipse.cdt.managedbuilder.core.GCCManagedMakePerProjectProfileCPP">
<buildOutputProvider>
<openAction enabled="true" filePath=""/>
<parser enabled="true"/>
</buildOutputProvider>
<scannerInfoProvider id="specsFile">
<runAction arguments="-E -P -v -dD ${plugin_state_location}/specs.cpp" command="g++" useDefault="true"/>
<parser enabled="true"/>
</scannerInfoProvider>
</profile>
<profile id="org.eclipse.cdt.managedbuilder.core.GCCManagedMakePerProjectProfileC">
<buildOutputProvider>
<openAction enabled="true" filePath=""/>
<parser enabled="true"/>
</buildOutputProvider>
<scannerInfoProvider id="specsFile">
<runAction arguments="-E -P -v -dD ${plugin_state_location}/specs.c" command="gcc" useDefault="true"/>
<parser enabled="true"/>
</scannerInfoProvider>
</profile>
<profile id="org.eclipse.cdt.managedbuilder.core.GCCWinManagedMakePerProjectProfile">
<buildOutputProvider>
<openAction enabled="true" filePath=""/>
<parser enabled="true"/>
</buildOutputProvider>
<scannerInfoProvider id="specsFile">
<runAction arguments="-c 'gcc -E -P -v -dD &quot;${plugin_state_location}/${specs_file}&quot;'" command="sh" useDefault="true"/>
<parser enabled="true"/>
</scannerInfoProvider>
</profile>
<profile id="org.eclipse.cdt.managedbuilder.core.GCCWinManagedMakePerProjectProfileCPP">
<buildOutputProvider>
<openAction enabled="true" filePath=""/>
<parser enabled="true"/>
</buildOutputProvider>
<scannerInfoProvider id="specsFile">
<runAction arguments="-c 'g++ -E -P -v -dD &quot;${plugin_state_location}/specs.cpp&quot;'" command="sh" useDefault="true"/>
<parser enabled="true"/>
</scannerInfoProvider>
</profile>
<profile id="org.eclipse.cdt.managedbuilder.core.GCCWinManagedMakePerProjectProfileC">
<buildOutputProvider>
<openAction enabled="true" filePath=""/>
<parser enabled="true"/>
</buildOutputProvider>
<scannerInfoProvider id="specsFile">
<runAction arguments="-c 'gcc -E -P -v -dD &quot;${plugin_state_location}/specs.c&quot;'" command="sh" useDefault="true"/>
<parser enabled="true"/>
</scannerInfoProvider>
</profile>
</storageModule>
<storageModule moduleId="org.eclipse.cdt.core.externalSettings"/>
</cconfiguration>
</storageModule>
<storageModule moduleId="cdtBuildSystem" version="4.0.0">
<project id="src.null.156807570" name="src"/>
</storageModule>
</cproject>

79
src/.project Normal file
View File

@@ -0,0 +1,79 @@
<?xml version="1.0" encoding="UTF-8"?>
<projectDescription>
<name>src</name>
<comment></comment>
<projects>
</projects>
<buildSpec>
<buildCommand>
<name>org.eclipse.cdt.managedbuilder.core.genmakebuilder</name>
<triggers>clean,full,incremental,</triggers>
<arguments>
<dictionary>
<key>?name?</key>
<value></value>
</dictionary>
<dictionary>
<key>org.eclipse.cdt.make.core.append_environment</key>
<value>true</value>
</dictionary>
<dictionary>
<key>org.eclipse.cdt.make.core.autoBuildTarget</key>
<value>all</value>
</dictionary>
<dictionary>
<key>org.eclipse.cdt.make.core.buildArguments</key>
<value></value>
</dictionary>
<dictionary>
<key>org.eclipse.cdt.make.core.buildCommand</key>
<value>make</value>
</dictionary>
<dictionary>
<key>org.eclipse.cdt.make.core.cleanBuildTarget</key>
<value>clean</value>
</dictionary>
<dictionary>
<key>org.eclipse.cdt.make.core.contents</key>
<value>org.eclipse.cdt.make.core.activeConfigSettings</value>
</dictionary>
<dictionary>
<key>org.eclipse.cdt.make.core.enableAutoBuild</key>
<value>false</value>
</dictionary>
<dictionary>
<key>org.eclipse.cdt.make.core.enableCleanBuild</key>
<value>true</value>
</dictionary>
<dictionary>
<key>org.eclipse.cdt.make.core.enableFullBuild</key>
<value>true</value>
</dictionary>
<dictionary>
<key>org.eclipse.cdt.make.core.fullBuildTarget</key>
<value>all</value>
</dictionary>
<dictionary>
<key>org.eclipse.cdt.make.core.stopOnError</key>
<value>true</value>
</dictionary>
<dictionary>
<key>org.eclipse.cdt.make.core.useDefaultBuildCmd</key>
<value>true</value>
</dictionary>
</arguments>
</buildCommand>
<buildCommand>
<name>org.eclipse.cdt.managedbuilder.core.ScannerConfigBuilder</name>
<triggers>full,incremental,</triggers>
<arguments>
</arguments>
</buildCommand>
</buildSpec>
<natures>
<nature>org.eclipse.cdt.core.cnature</nature>
<nature>org.eclipse.cdt.core.ccnature</nature>
<nature>org.eclipse.cdt.managedbuilder.core.managedBuildNature</nature>
<nature>org.eclipse.cdt.managedbuilder.core.ScannerConfigNature</nature>
</natures>
</projectDescription>

114
src/cmock.c Normal file
View File

@@ -0,0 +1,114 @@
/*
* cmock.c
*
* Created on: Dec 9, 2010
* Author: mlong
*/
#include "embedded.h"
#include "cmock.h"
#include <assert.h>
#include <stdio.h>
FAKE_VOID_FUNC0(DISPLAY_init);
FAKE_VOID_FUNC0(DISPLAY_clear);
FAKE_VOID_FUNC1(DISPLAY_output_message, const char*);
FAKE_VALUE_FUNC0(int, DISPLAY_get_line_capacity);
FAKE_VALUE_FUNC0(int, DISPLAY_get_line_insert_index);
void setup()
{
// Register resets
RESET_FAKE(DISPLAY_init);
RESET_FAKE(DISPLAY_clear);
RESET_FAKE(DISPLAY_output_message);
RESET_FAKE(DISPLAY_get_line_capacity);
RESET_FAKE(DISPLAY_get_line_insert_index);
// non default init
DISPLAY_get_line_capacity_return_val = 10;
}
#define TEST_F(IGNORE, NAME) void NAME()
TEST_F(GreeterTests, init_initialises_display)
{
UI_init();
assert(1 == DISPLAY_init_call_count);
}
TEST_F(GreeterTests, given_name_when_greet_called_outputs_name)
{
// given
char name[] = "mike";
// when
UI_greet(name);
// then
assert(1 == DISPLAY_output_message_call_count);
assert(name == DISPLAY_output_message_arg0_val);
}
TEST_F(GreeterTests, given_name_and_3_times_when_greetmultiple_called_outputs_name_3_times)
{
// given
char name[] = "mike";
// when
UI_greet_multiple_times(name, 3);
// then
assert(3 == DISPLAY_output_message_call_count);
assert(name == DISPLAY_output_message_arg0_val);
}
TEST_F(GreeterTests, given_non_full_screen_will_not_reset_display)
{
char name[] = "mike";
// given
DISPLAY_get_line_capacity_return_val = 10;
DISPLAY_get_line_insert_index_return_val = 0;
// when
UI_greet(name);
// then
assert(0 == DISPLAY_clear_call_count);
assert(1 == DISPLAY_output_message_call_count);
}
// Order assumption
TEST_F(GreeterTests, given_full_screen_single_will_reset_display_then_output)
{
char name[] = "mike";
// given
DISPLAY_get_line_capacity_return_val = 1;
DISPLAY_get_line_insert_index_return_val = 1;
// when
UI_greet(name);
// then
assert(1 == DISPLAY_clear_call_count);
assert(1 == DISPLAY_output_message_call_count);
}
// Order assumption
TEST_F(GreeterTests, given_full_screen_multiple_will_reset_display_then_output)
{
char name[] = "mike";
// given
DISPLAY_get_line_capacity_return_val = 4;
DISPLAY_get_line_insert_index_return_val = 4;
// when
UI_greet_multiple_times(name, 1);
// then
assert(1 == DISPLAY_clear_call_count);
assert(1 == DISPLAY_output_message_call_count);
}
#define RUN_TEST(TESTNAME) printf("Running %s\n", #TESTNAME); setup(); TESTNAME();
int main()
{
RUN_TEST(init_initialises_display);
RUN_TEST(given_name_when_greet_called_outputs_name);
RUN_TEST(given_name_when_greet_called_outputs_name);
RUN_TEST(given_name_and_3_times_when_greetmultiple_called_outputs_name_3_times);
RUN_TEST(given_full_screen_single_will_reset_display_then_output);
RUN_TEST(given_full_screen_multiple_will_reset_display_then_output);
return 0;
}

520
src/cmock.h Normal file
View File

@@ -0,0 +1,520 @@
#ifndef FAKE_FUNCTIONS
#define FAKE_FUNCTIONS
/* Defining a void function with 0 parameters*/
#define FAKE_VOID_FUNC0(FUNCNAME) \
static int FUNCNAME##_call_count = 0; \
void FUNCNAME(){ \
FUNCNAME##_call_count++; \
} \
void FUNCNAME##_reset(){ \
FUNCNAME##_call_count = 0; \
} \
/* Defining a void function with 1 parameters*/
#define FAKE_VOID_FUNC1(FUNCNAME, ARG0_TYPE) \
static ARG0_TYPE FUNCNAME##_arg0_val; \
static int FUNCNAME##_call_count = 0; \
void FUNCNAME(ARG0_TYPE arg0){ \
FUNCNAME##_arg0_val = arg0; \
FUNCNAME##_call_count++; \
} \
void FUNCNAME##_reset(){ \
FUNCNAME##_arg0_val = (ARG0_TYPE) 0; \
FUNCNAME##_call_count = 0; \
} \
/* Defining a void function with 2 parameters*/
#define FAKE_VOID_FUNC2(FUNCNAME, ARG0_TYPE, ARG1_TYPE) \
static ARG0_TYPE FUNCNAME##_arg0_val; \
static ARG1_TYPE FUNCNAME##_arg1_val; \
static int FUNCNAME##_call_count = 0; \
void FUNCNAME(ARG0_TYPE arg0ARG1_TYPE arg1){ \
FUNCNAME##_arg0_val = arg0; \
FUNCNAME##_arg1_val = arg1; \
FUNCNAME##_call_count++; \
} \
void FUNCNAME##_reset(){ \
FUNCNAME##_arg0_val = (ARG0_TYPE) 0; \
FUNCNAME##_arg1_val = (ARG1_TYPE) 0; \
FUNCNAME##_call_count = 0; \
} \
/* Defining a void function with 3 parameters*/
#define FAKE_VOID_FUNC3(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE) \
static ARG0_TYPE FUNCNAME##_arg0_val; \
static ARG1_TYPE FUNCNAME##_arg1_val; \
static ARG2_TYPE FUNCNAME##_arg2_val; \
static int FUNCNAME##_call_count = 0; \
void FUNCNAME(ARG0_TYPE arg0ARG1_TYPE arg1ARG2_TYPE arg2){ \
FUNCNAME##_arg0_val = arg0; \
FUNCNAME##_arg1_val = arg1; \
FUNCNAME##_arg2_val = arg2; \
FUNCNAME##_call_count++; \
} \
void FUNCNAME##_reset(){ \
FUNCNAME##_arg0_val = (ARG0_TYPE) 0; \
FUNCNAME##_arg1_val = (ARG1_TYPE) 0; \
FUNCNAME##_arg2_val = (ARG2_TYPE) 0; \
FUNCNAME##_call_count = 0; \
} \
/* Defining a void function with 4 parameters*/
#define FAKE_VOID_FUNC4(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE) \
static ARG0_TYPE FUNCNAME##_arg0_val; \
static ARG1_TYPE FUNCNAME##_arg1_val; \
static ARG2_TYPE FUNCNAME##_arg2_val; \
static ARG3_TYPE FUNCNAME##_arg3_val; \
static int FUNCNAME##_call_count = 0; \
void FUNCNAME(ARG0_TYPE arg0ARG1_TYPE arg1ARG2_TYPE arg2ARG3_TYPE arg3){ \
FUNCNAME##_arg0_val = arg0; \
FUNCNAME##_arg1_val = arg1; \
FUNCNAME##_arg2_val = arg2; \
FUNCNAME##_arg3_val = arg3; \
FUNCNAME##_call_count++; \
} \
void FUNCNAME##_reset(){ \
FUNCNAME##_arg0_val = (ARG0_TYPE) 0; \
FUNCNAME##_arg1_val = (ARG1_TYPE) 0; \
FUNCNAME##_arg2_val = (ARG2_TYPE) 0; \
FUNCNAME##_arg3_val = (ARG3_TYPE) 0; \
FUNCNAME##_call_count = 0; \
} \
/* Defining a void function with 5 parameters*/
#define FAKE_VOID_FUNC5(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE) \
static ARG0_TYPE FUNCNAME##_arg0_val; \
static ARG1_TYPE FUNCNAME##_arg1_val; \
static ARG2_TYPE FUNCNAME##_arg2_val; \
static ARG3_TYPE FUNCNAME##_arg3_val; \
static ARG4_TYPE FUNCNAME##_arg4_val; \
static int FUNCNAME##_call_count = 0; \
void FUNCNAME(ARG0_TYPE arg0ARG1_TYPE arg1ARG2_TYPE arg2ARG3_TYPE arg3ARG4_TYPE arg4){ \
FUNCNAME##_arg0_val = arg0; \
FUNCNAME##_arg1_val = arg1; \
FUNCNAME##_arg2_val = arg2; \
FUNCNAME##_arg3_val = arg3; \
FUNCNAME##_arg4_val = arg4; \
FUNCNAME##_call_count++; \
} \
void FUNCNAME##_reset(){ \
FUNCNAME##_arg0_val = (ARG0_TYPE) 0; \
FUNCNAME##_arg1_val = (ARG1_TYPE) 0; \
FUNCNAME##_arg2_val = (ARG2_TYPE) 0; \
FUNCNAME##_arg3_val = (ARG3_TYPE) 0; \
FUNCNAME##_arg4_val = (ARG4_TYPE) 0; \
FUNCNAME##_call_count = 0; \
} \
/* Defining a void function with 6 parameters*/
#define FAKE_VOID_FUNC6(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE) \
static ARG0_TYPE FUNCNAME##_arg0_val; \
static ARG1_TYPE FUNCNAME##_arg1_val; \
static ARG2_TYPE FUNCNAME##_arg2_val; \
static ARG3_TYPE FUNCNAME##_arg3_val; \
static ARG4_TYPE FUNCNAME##_arg4_val; \
static ARG5_TYPE FUNCNAME##_arg5_val; \
static int FUNCNAME##_call_count = 0; \
void FUNCNAME(ARG0_TYPE arg0ARG1_TYPE arg1ARG2_TYPE arg2ARG3_TYPE arg3ARG4_TYPE arg4ARG5_TYPE arg5){ \
FUNCNAME##_arg0_val = arg0; \
FUNCNAME##_arg1_val = arg1; \
FUNCNAME##_arg2_val = arg2; \
FUNCNAME##_arg3_val = arg3; \
FUNCNAME##_arg4_val = arg4; \
FUNCNAME##_arg5_val = arg5; \
FUNCNAME##_call_count++; \
} \
void FUNCNAME##_reset(){ \
FUNCNAME##_arg0_val = (ARG0_TYPE) 0; \
FUNCNAME##_arg1_val = (ARG1_TYPE) 0; \
FUNCNAME##_arg2_val = (ARG2_TYPE) 0; \
FUNCNAME##_arg3_val = (ARG3_TYPE) 0; \
FUNCNAME##_arg4_val = (ARG4_TYPE) 0; \
FUNCNAME##_arg5_val = (ARG5_TYPE) 0; \
FUNCNAME##_call_count = 0; \
} \
/* Defining a void function with 7 parameters*/
#define FAKE_VOID_FUNC7(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE) \
static ARG0_TYPE FUNCNAME##_arg0_val; \
static ARG1_TYPE FUNCNAME##_arg1_val; \
static ARG2_TYPE FUNCNAME##_arg2_val; \
static ARG3_TYPE FUNCNAME##_arg3_val; \
static ARG4_TYPE FUNCNAME##_arg4_val; \
static ARG5_TYPE FUNCNAME##_arg5_val; \
static ARG6_TYPE FUNCNAME##_arg6_val; \
static int FUNCNAME##_call_count = 0; \
void FUNCNAME(ARG0_TYPE arg0ARG1_TYPE arg1ARG2_TYPE arg2ARG3_TYPE arg3ARG4_TYPE arg4ARG5_TYPE arg5ARG6_TYPE arg6){ \
FUNCNAME##_arg0_val = arg0; \
FUNCNAME##_arg1_val = arg1; \
FUNCNAME##_arg2_val = arg2; \
FUNCNAME##_arg3_val = arg3; \
FUNCNAME##_arg4_val = arg4; \
FUNCNAME##_arg5_val = arg5; \
FUNCNAME##_arg6_val = arg6; \
FUNCNAME##_call_count++; \
} \
void FUNCNAME##_reset(){ \
FUNCNAME##_arg0_val = (ARG0_TYPE) 0; \
FUNCNAME##_arg1_val = (ARG1_TYPE) 0; \
FUNCNAME##_arg2_val = (ARG2_TYPE) 0; \
FUNCNAME##_arg3_val = (ARG3_TYPE) 0; \
FUNCNAME##_arg4_val = (ARG4_TYPE) 0; \
FUNCNAME##_arg5_val = (ARG5_TYPE) 0; \
FUNCNAME##_arg6_val = (ARG6_TYPE) 0; \
FUNCNAME##_call_count = 0; \
} \
/* Defining a void function with 8 parameters*/
#define FAKE_VOID_FUNC8(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE) \
static ARG0_TYPE FUNCNAME##_arg0_val; \
static ARG1_TYPE FUNCNAME##_arg1_val; \
static ARG2_TYPE FUNCNAME##_arg2_val; \
static ARG3_TYPE FUNCNAME##_arg3_val; \
static ARG4_TYPE FUNCNAME##_arg4_val; \
static ARG5_TYPE FUNCNAME##_arg5_val; \
static ARG6_TYPE FUNCNAME##_arg6_val; \
static ARG7_TYPE FUNCNAME##_arg7_val; \
static int FUNCNAME##_call_count = 0; \
void FUNCNAME(ARG0_TYPE arg0ARG1_TYPE arg1ARG2_TYPE arg2ARG3_TYPE arg3ARG4_TYPE arg4ARG5_TYPE arg5ARG6_TYPE arg6ARG7_TYPE arg7){ \
FUNCNAME##_arg0_val = arg0; \
FUNCNAME##_arg1_val = arg1; \
FUNCNAME##_arg2_val = arg2; \
FUNCNAME##_arg3_val = arg3; \
FUNCNAME##_arg4_val = arg4; \
FUNCNAME##_arg5_val = arg5; \
FUNCNAME##_arg6_val = arg6; \
FUNCNAME##_arg7_val = arg7; \
FUNCNAME##_call_count++; \
} \
void FUNCNAME##_reset(){ \
FUNCNAME##_arg0_val = (ARG0_TYPE) 0; \
FUNCNAME##_arg1_val = (ARG1_TYPE) 0; \
FUNCNAME##_arg2_val = (ARG2_TYPE) 0; \
FUNCNAME##_arg3_val = (ARG3_TYPE) 0; \
FUNCNAME##_arg4_val = (ARG4_TYPE) 0; \
FUNCNAME##_arg5_val = (ARG5_TYPE) 0; \
FUNCNAME##_arg6_val = (ARG6_TYPE) 0; \
FUNCNAME##_arg7_val = (ARG7_TYPE) 0; \
FUNCNAME##_call_count = 0; \
} \
/* Defining a void function with 9 parameters*/
#define FAKE_VOID_FUNC9(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE) \
static ARG0_TYPE FUNCNAME##_arg0_val; \
static ARG1_TYPE FUNCNAME##_arg1_val; \
static ARG2_TYPE FUNCNAME##_arg2_val; \
static ARG3_TYPE FUNCNAME##_arg3_val; \
static ARG4_TYPE FUNCNAME##_arg4_val; \
static ARG5_TYPE FUNCNAME##_arg5_val; \
static ARG6_TYPE FUNCNAME##_arg6_val; \
static ARG7_TYPE FUNCNAME##_arg7_val; \
static ARG8_TYPE FUNCNAME##_arg8_val; \
static int FUNCNAME##_call_count = 0; \
void FUNCNAME(ARG0_TYPE arg0ARG1_TYPE arg1ARG2_TYPE arg2ARG3_TYPE arg3ARG4_TYPE arg4ARG5_TYPE arg5ARG6_TYPE arg6ARG7_TYPE arg7ARG8_TYPE arg8){ \
FUNCNAME##_arg0_val = arg0; \
FUNCNAME##_arg1_val = arg1; \
FUNCNAME##_arg2_val = arg2; \
FUNCNAME##_arg3_val = arg3; \
FUNCNAME##_arg4_val = arg4; \
FUNCNAME##_arg5_val = arg5; \
FUNCNAME##_arg6_val = arg6; \
FUNCNAME##_arg7_val = arg7; \
FUNCNAME##_arg8_val = arg8; \
FUNCNAME##_call_count++; \
} \
void FUNCNAME##_reset(){ \
FUNCNAME##_arg0_val = (ARG0_TYPE) 0; \
FUNCNAME##_arg1_val = (ARG1_TYPE) 0; \
FUNCNAME##_arg2_val = (ARG2_TYPE) 0; \
FUNCNAME##_arg3_val = (ARG3_TYPE) 0; \
FUNCNAME##_arg4_val = (ARG4_TYPE) 0; \
FUNCNAME##_arg5_val = (ARG5_TYPE) 0; \
FUNCNAME##_arg6_val = (ARG6_TYPE) 0; \
FUNCNAME##_arg7_val = (ARG7_TYPE) 0; \
FUNCNAME##_arg8_val = (ARG8_TYPE) 0; \
FUNCNAME##_call_count = 0; \
} \
/* Defining a function returning a value with 0 parameters*/
#define FAKE_VALUE_FUNC0(RETURN_TYPE, FUNCNAME) \
static RETURN_TYPE FUNCNAME##_return_val; \
static int FUNCNAME##_call_count = 0; \
RETURN_TYPE FUNCNAME(){ \
FUNCNAME##_call_count++; \
return FUNCNAME##_return_val; \
} \
void FUNCNAME##_reset(){ \
FUNCNAME##_call_count = 0; \
} \
/* Defining a function returning a value with 1 parameters*/
#define FAKE_VALUE_FUNC1(RETURN_TYPE, FUNCNAME, ARG0_TYPE) \
static ARG0_TYPE FUNCNAME##_arg0_val; \
static RETURN_TYPE FUNCNAME##_return_val; \
static int FUNCNAME##_call_count = 0; \
RETURN_TYPE FUNCNAME(ARG0_TYPE arg0){ \
FUNCNAME##_arg0_val = arg0; \
FUNCNAME##_call_count++; \
return FUNCNAME##_return_val; \
} \
void FUNCNAME##_reset(){ \
FUNCNAME##_arg0_val = (ARG0_TYPE) 0; \
FUNCNAME##_call_count = 0; \
} \
/* Defining a function returning a value with 2 parameters*/
#define FAKE_VALUE_FUNC2(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE) \
static ARG0_TYPE FUNCNAME##_arg0_val; \
static ARG1_TYPE FUNCNAME##_arg1_val; \
static RETURN_TYPE FUNCNAME##_return_val; \
static int FUNCNAME##_call_count = 0; \
RETURN_TYPE FUNCNAME(ARG0_TYPE arg0ARG1_TYPE arg1){ \
FUNCNAME##_arg0_val = arg0; \
FUNCNAME##_arg1_val = arg1; \
FUNCNAME##_call_count++; \
return FUNCNAME##_return_val; \
} \
void FUNCNAME##_reset(){ \
FUNCNAME##_arg0_val = (ARG0_TYPE) 0; \
FUNCNAME##_arg1_val = (ARG1_TYPE) 0; \
FUNCNAME##_call_count = 0; \
} \
/* Defining a function returning a value with 3 parameters*/
#define FAKE_VALUE_FUNC3(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE) \
static ARG0_TYPE FUNCNAME##_arg0_val; \
static ARG1_TYPE FUNCNAME##_arg1_val; \
static ARG2_TYPE FUNCNAME##_arg2_val; \
static RETURN_TYPE FUNCNAME##_return_val; \
static int FUNCNAME##_call_count = 0; \
RETURN_TYPE FUNCNAME(ARG0_TYPE arg0ARG1_TYPE arg1ARG2_TYPE arg2){ \
FUNCNAME##_arg0_val = arg0; \
FUNCNAME##_arg1_val = arg1; \
FUNCNAME##_arg2_val = arg2; \
FUNCNAME##_call_count++; \
return FUNCNAME##_return_val; \
} \
void FUNCNAME##_reset(){ \
FUNCNAME##_arg0_val = (ARG0_TYPE) 0; \
FUNCNAME##_arg1_val = (ARG1_TYPE) 0; \
FUNCNAME##_arg2_val = (ARG2_TYPE) 0; \
FUNCNAME##_call_count = 0; \
} \
/* Defining a function returning a value with 4 parameters*/
#define FAKE_VALUE_FUNC4(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE) \
static ARG0_TYPE FUNCNAME##_arg0_val; \
static ARG1_TYPE FUNCNAME##_arg1_val; \
static ARG2_TYPE FUNCNAME##_arg2_val; \
static ARG3_TYPE FUNCNAME##_arg3_val; \
static RETURN_TYPE FUNCNAME##_return_val; \
static int FUNCNAME##_call_count = 0; \
RETURN_TYPE FUNCNAME(ARG0_TYPE arg0ARG1_TYPE arg1ARG2_TYPE arg2ARG3_TYPE arg3){ \
FUNCNAME##_arg0_val = arg0; \
FUNCNAME##_arg1_val = arg1; \
FUNCNAME##_arg2_val = arg2; \
FUNCNAME##_arg3_val = arg3; \
FUNCNAME##_call_count++; \
return FUNCNAME##_return_val; \
} \
void FUNCNAME##_reset(){ \
FUNCNAME##_arg0_val = (ARG0_TYPE) 0; \
FUNCNAME##_arg1_val = (ARG1_TYPE) 0; \
FUNCNAME##_arg2_val = (ARG2_TYPE) 0; \
FUNCNAME##_arg3_val = (ARG3_TYPE) 0; \
FUNCNAME##_call_count = 0; \
} \
/* Defining a function returning a value with 5 parameters*/
#define FAKE_VALUE_FUNC5(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE) \
static ARG0_TYPE FUNCNAME##_arg0_val; \
static ARG1_TYPE FUNCNAME##_arg1_val; \
static ARG2_TYPE FUNCNAME##_arg2_val; \
static ARG3_TYPE FUNCNAME##_arg3_val; \
static ARG4_TYPE FUNCNAME##_arg4_val; \
static RETURN_TYPE FUNCNAME##_return_val; \
static int FUNCNAME##_call_count = 0; \
RETURN_TYPE FUNCNAME(ARG0_TYPE arg0ARG1_TYPE arg1ARG2_TYPE arg2ARG3_TYPE arg3ARG4_TYPE arg4){ \
FUNCNAME##_arg0_val = arg0; \
FUNCNAME##_arg1_val = arg1; \
FUNCNAME##_arg2_val = arg2; \
FUNCNAME##_arg3_val = arg3; \
FUNCNAME##_arg4_val = arg4; \
FUNCNAME##_call_count++; \
return FUNCNAME##_return_val; \
} \
void FUNCNAME##_reset(){ \
FUNCNAME##_arg0_val = (ARG0_TYPE) 0; \
FUNCNAME##_arg1_val = (ARG1_TYPE) 0; \
FUNCNAME##_arg2_val = (ARG2_TYPE) 0; \
FUNCNAME##_arg3_val = (ARG3_TYPE) 0; \
FUNCNAME##_arg4_val = (ARG4_TYPE) 0; \
FUNCNAME##_call_count = 0; \
} \
/* Defining a function returning a value with 6 parameters*/
#define FAKE_VALUE_FUNC6(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE) \
static ARG0_TYPE FUNCNAME##_arg0_val; \
static ARG1_TYPE FUNCNAME##_arg1_val; \
static ARG2_TYPE FUNCNAME##_arg2_val; \
static ARG3_TYPE FUNCNAME##_arg3_val; \
static ARG4_TYPE FUNCNAME##_arg4_val; \
static ARG5_TYPE FUNCNAME##_arg5_val; \
static RETURN_TYPE FUNCNAME##_return_val; \
static int FUNCNAME##_call_count = 0; \
RETURN_TYPE FUNCNAME(ARG0_TYPE arg0ARG1_TYPE arg1ARG2_TYPE arg2ARG3_TYPE arg3ARG4_TYPE arg4ARG5_TYPE arg5){ \
FUNCNAME##_arg0_val = arg0; \
FUNCNAME##_arg1_val = arg1; \
FUNCNAME##_arg2_val = arg2; \
FUNCNAME##_arg3_val = arg3; \
FUNCNAME##_arg4_val = arg4; \
FUNCNAME##_arg5_val = arg5; \
FUNCNAME##_call_count++; \
return FUNCNAME##_return_val; \
} \
void FUNCNAME##_reset(){ \
FUNCNAME##_arg0_val = (ARG0_TYPE) 0; \
FUNCNAME##_arg1_val = (ARG1_TYPE) 0; \
FUNCNAME##_arg2_val = (ARG2_TYPE) 0; \
FUNCNAME##_arg3_val = (ARG3_TYPE) 0; \
FUNCNAME##_arg4_val = (ARG4_TYPE) 0; \
FUNCNAME##_arg5_val = (ARG5_TYPE) 0; \
FUNCNAME##_call_count = 0; \
} \
/* Defining a function returning a value with 7 parameters*/
#define FAKE_VALUE_FUNC7(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE) \
static ARG0_TYPE FUNCNAME##_arg0_val; \
static ARG1_TYPE FUNCNAME##_arg1_val; \
static ARG2_TYPE FUNCNAME##_arg2_val; \
static ARG3_TYPE FUNCNAME##_arg3_val; \
static ARG4_TYPE FUNCNAME##_arg4_val; \
static ARG5_TYPE FUNCNAME##_arg5_val; \
static ARG6_TYPE FUNCNAME##_arg6_val; \
static RETURN_TYPE FUNCNAME##_return_val; \
static int FUNCNAME##_call_count = 0; \
RETURN_TYPE FUNCNAME(ARG0_TYPE arg0ARG1_TYPE arg1ARG2_TYPE arg2ARG3_TYPE arg3ARG4_TYPE arg4ARG5_TYPE arg5ARG6_TYPE arg6){ \
FUNCNAME##_arg0_val = arg0; \
FUNCNAME##_arg1_val = arg1; \
FUNCNAME##_arg2_val = arg2; \
FUNCNAME##_arg3_val = arg3; \
FUNCNAME##_arg4_val = arg4; \
FUNCNAME##_arg5_val = arg5; \
FUNCNAME##_arg6_val = arg6; \
FUNCNAME##_call_count++; \
return FUNCNAME##_return_val; \
} \
void FUNCNAME##_reset(){ \
FUNCNAME##_arg0_val = (ARG0_TYPE) 0; \
FUNCNAME##_arg1_val = (ARG1_TYPE) 0; \
FUNCNAME##_arg2_val = (ARG2_TYPE) 0; \
FUNCNAME##_arg3_val = (ARG3_TYPE) 0; \
FUNCNAME##_arg4_val = (ARG4_TYPE) 0; \
FUNCNAME##_arg5_val = (ARG5_TYPE) 0; \
FUNCNAME##_arg6_val = (ARG6_TYPE) 0; \
FUNCNAME##_call_count = 0; \
} \
/* Defining a function returning a value with 8 parameters*/
#define FAKE_VALUE_FUNC8(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE) \
static ARG0_TYPE FUNCNAME##_arg0_val; \
static ARG1_TYPE FUNCNAME##_arg1_val; \
static ARG2_TYPE FUNCNAME##_arg2_val; \
static ARG3_TYPE FUNCNAME##_arg3_val; \
static ARG4_TYPE FUNCNAME##_arg4_val; \
static ARG5_TYPE FUNCNAME##_arg5_val; \
static ARG6_TYPE FUNCNAME##_arg6_val; \
static ARG7_TYPE FUNCNAME##_arg7_val; \
static RETURN_TYPE FUNCNAME##_return_val; \
static int FUNCNAME##_call_count = 0; \
RETURN_TYPE FUNCNAME(ARG0_TYPE arg0ARG1_TYPE arg1ARG2_TYPE arg2ARG3_TYPE arg3ARG4_TYPE arg4ARG5_TYPE arg5ARG6_TYPE arg6ARG7_TYPE arg7){ \
FUNCNAME##_arg0_val = arg0; \
FUNCNAME##_arg1_val = arg1; \
FUNCNAME##_arg2_val = arg2; \
FUNCNAME##_arg3_val = arg3; \
FUNCNAME##_arg4_val = arg4; \
FUNCNAME##_arg5_val = arg5; \
FUNCNAME##_arg6_val = arg6; \
FUNCNAME##_arg7_val = arg7; \
FUNCNAME##_call_count++; \
return FUNCNAME##_return_val; \
} \
void FUNCNAME##_reset(){ \
FUNCNAME##_arg0_val = (ARG0_TYPE) 0; \
FUNCNAME##_arg1_val = (ARG1_TYPE) 0; \
FUNCNAME##_arg2_val = (ARG2_TYPE) 0; \
FUNCNAME##_arg3_val = (ARG3_TYPE) 0; \
FUNCNAME##_arg4_val = (ARG4_TYPE) 0; \
FUNCNAME##_arg5_val = (ARG5_TYPE) 0; \
FUNCNAME##_arg6_val = (ARG6_TYPE) 0; \
FUNCNAME##_arg7_val = (ARG7_TYPE) 0; \
FUNCNAME##_call_count = 0; \
} \
/* Defining a function returning a value with 9 parameters*/
#define FAKE_VALUE_FUNC9(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE) \
static ARG0_TYPE FUNCNAME##_arg0_val; \
static ARG1_TYPE FUNCNAME##_arg1_val; \
static ARG2_TYPE FUNCNAME##_arg2_val; \
static ARG3_TYPE FUNCNAME##_arg3_val; \
static ARG4_TYPE FUNCNAME##_arg4_val; \
static ARG5_TYPE FUNCNAME##_arg5_val; \
static ARG6_TYPE FUNCNAME##_arg6_val; \
static ARG7_TYPE FUNCNAME##_arg7_val; \
static ARG8_TYPE FUNCNAME##_arg8_val; \
static RETURN_TYPE FUNCNAME##_return_val; \
static int FUNCNAME##_call_count = 0; \
RETURN_TYPE FUNCNAME(ARG0_TYPE arg0ARG1_TYPE arg1ARG2_TYPE arg2ARG3_TYPE arg3ARG4_TYPE arg4ARG5_TYPE arg5ARG6_TYPE arg6ARG7_TYPE arg7ARG8_TYPE arg8){ \
FUNCNAME##_arg0_val = arg0; \
FUNCNAME##_arg1_val = arg1; \
FUNCNAME##_arg2_val = arg2; \
FUNCNAME##_arg3_val = arg3; \
FUNCNAME##_arg4_val = arg4; \
FUNCNAME##_arg5_val = arg5; \
FUNCNAME##_arg6_val = arg6; \
FUNCNAME##_arg7_val = arg7; \
FUNCNAME##_arg8_val = arg8; \
FUNCNAME##_call_count++; \
return FUNCNAME##_return_val; \
} \
void FUNCNAME##_reset(){ \
FUNCNAME##_arg0_val = (ARG0_TYPE) 0; \
FUNCNAME##_arg1_val = (ARG1_TYPE) 0; \
FUNCNAME##_arg2_val = (ARG2_TYPE) 0; \
FUNCNAME##_arg3_val = (ARG3_TYPE) 0; \
FUNCNAME##_arg4_val = (ARG4_TYPE) 0; \
FUNCNAME##_arg5_val = (ARG5_TYPE) 0; \
FUNCNAME##_arg6_val = (ARG6_TYPE) 0; \
FUNCNAME##_arg7_val = (ARG7_TYPE) 0; \
FUNCNAME##_arg8_val = (ARG8_TYPE) 0; \
FUNCNAME##_call_count = 0; \
} \
/* Defining a function to reset a fake function */
#define RESET_FAKE(FUNCNAME) { \
FUNCNAME##_reset(); \
} \
#endif // FAKE_FUNCTIONS

106
src/cppmock.cpp Normal file
View File

@@ -0,0 +1,106 @@
//============================================================================
// Name : cmock.cpp
// Author : Mike Long
// Version :
// Copyright : Don't steal
// Description : Hello World in C++, Ansi-style
//============================================================================
#include "cppmock.hpp"
extern "C"{
#include "embedded.h"
}
#include <gtest/gtest.h>
FAKE_VOID_FUNC0(DISPLAY_init);
FAKE_VOID_FUNC0(DISPLAY_clear);
FAKE_VOID_FUNC1(DISPLAY_output_message, const char*);
FAKE_VALUE_FUNC0(int, DISPLAY_get_line_capacity);
FAKE_VALUE_FUNC0(int, DISPLAY_get_line_insert_index);
class GreeterTests : public testing::Test
{
public:
void SetUp()
{
// Register resets
RESET_FAKES();
// non default init
DISPLAY_get_line_capacity_return_val = 10;
}
};
TEST_F(GreeterTests, init_initialises_display)
{
UI_init();
ASSERT_EQ(1, DISPLAY_init_call_count);
}
TEST_F(GreeterTests, given_name_when_greet_called_outputs_name)
{
// given
char name[] = "mike";
// when
UI_greet(name);
// then
ASSERT_EQ(1, DISPLAY_output_message_call_count);
ASSERT_EQ(name, DISPLAY_output_message_arg0_val);
}
TEST_F(GreeterTests, given_name_and_3_times_when_greetmultiple_called_outputs_name_3_times)
{
// given
char name[] = "mike";
// when
UI_greet_multiple_times(name, 3);
// then
ASSERT_EQ(3, DISPLAY_output_message_call_count);
ASSERT_EQ(name, DISPLAY_output_message_arg0_val);
}
TEST_F(GreeterTests, given_non_full_screen_will_not_reset_display)
{
char name[] = "mike";
// given
DISPLAY_get_line_capacity_return_val = 10;
DISPLAY_get_line_insert_index_return_val = 0;
// when
UI_greet(name);
// then
ASSERT_EQ(0, DISPLAY_clear_call_count);
ASSERT_EQ(1, DISPLAY_output_message_call_count);
}
// Order assumption
TEST_F(GreeterTests, given_full_screen_single_will_reset_display_then_output)
{
char name[] = "mike";
// given
DISPLAY_get_line_capacity_return_val = 1;
DISPLAY_get_line_insert_index_return_val = 1;
// when
UI_greet(name);
// then
ASSERT_EQ(1, DISPLAY_clear_call_count);
ASSERT_EQ(1, DISPLAY_output_message_call_count);
}
// Order assumption
TEST_F(GreeterTests, given_full_screen_multiple_will_reset_display_then_output)
{
char name[] = "mike";
// given
DISPLAY_get_line_capacity_return_val = 4;
DISPLAY_get_line_insert_index_return_val = 4;
// when
UI_greet_multiple_times(name, 1);
// then
ASSERT_EQ(1, DISPLAY_clear_call_count);
ASSERT_EQ(1, DISPLAY_output_message_call_count);
}

604
src/cppmock.hpp Normal file
View File

@@ -0,0 +1,604 @@
#ifndef FAKE_FUNCTIONS
#define FAKE_FUNCTIONS
#include <vector>
typedef void (*void_fptr)();
std::vector<void_fptr> reset_functions;
void RESET_FAKES()
{
std::vector<void_fptr>::iterator it = reset_functions.begin();
for( ; it != reset_functions.end(); ++it)
{
void_fptr ptr = *it;
ptr();
}
}
#define STATIC_INIT(FUNCNAME) \
class StaticInitializer_##FUNCNAME \
{ \
public: \
StaticInitializer_##FUNCNAME() \
{ \
reset_functions.push_back(FUNCNAME##_reset); \
} \
}; \
static StaticInitializer_##FUNCNAME staticInitializer_##FUNCNAME; \
/* Defining a void function with 0 parameters*/
#define FAKE_VOID_FUNC0(FUNCNAME) \
extern "C"{ \
static int FUNCNAME##_call_count = 0; \
void FUNCNAME(){ \
FUNCNAME##_call_count++; \
} \
void FUNCNAME##_reset(){ \
FUNCNAME##_call_count = 0; \
} \
} \
STATIC_INIT(FUNCNAME) \
/* Defining a void function with 1 parameters*/
#define FAKE_VOID_FUNC1(FUNCNAME, ARG0_TYPE) \
extern "C"{ \
static ARG0_TYPE FUNCNAME##_arg0_val; \
static int FUNCNAME##_call_count = 0; \
void FUNCNAME(ARG0_TYPE arg0){ \
FUNCNAME##_arg0_val = arg0; \
FUNCNAME##_call_count++; \
} \
void FUNCNAME##_reset(){ \
FUNCNAME##_arg0_val = (ARG0_TYPE) 0; \
FUNCNAME##_call_count = 0; \
} \
} \
STATIC_INIT(FUNCNAME) \
/* Defining a void function with 2 parameters*/
#define FAKE_VOID_FUNC2(FUNCNAME, ARG0_TYPE, ARG1_TYPE) \
extern "C"{ \
static ARG0_TYPE FUNCNAME##_arg0_val; \
static ARG1_TYPE FUNCNAME##_arg1_val; \
static int FUNCNAME##_call_count = 0; \
void FUNCNAME(ARG0_TYPE arg0ARG1_TYPE arg1){ \
FUNCNAME##_arg0_val = arg0; \
FUNCNAME##_arg1_val = arg1; \
FUNCNAME##_call_count++; \
} \
void FUNCNAME##_reset(){ \
FUNCNAME##_arg0_val = (ARG0_TYPE) 0; \
FUNCNAME##_arg1_val = (ARG1_TYPE) 0; \
FUNCNAME##_call_count = 0; \
} \
} \
STATIC_INIT(FUNCNAME) \
/* Defining a void function with 3 parameters*/
#define FAKE_VOID_FUNC3(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE) \
extern "C"{ \
static ARG0_TYPE FUNCNAME##_arg0_val; \
static ARG1_TYPE FUNCNAME##_arg1_val; \
static ARG2_TYPE FUNCNAME##_arg2_val; \
static int FUNCNAME##_call_count = 0; \
void FUNCNAME(ARG0_TYPE arg0ARG1_TYPE arg1ARG2_TYPE arg2){ \
FUNCNAME##_arg0_val = arg0; \
FUNCNAME##_arg1_val = arg1; \
FUNCNAME##_arg2_val = arg2; \
FUNCNAME##_call_count++; \
} \
void FUNCNAME##_reset(){ \
FUNCNAME##_arg0_val = (ARG0_TYPE) 0; \
FUNCNAME##_arg1_val = (ARG1_TYPE) 0; \
FUNCNAME##_arg2_val = (ARG2_TYPE) 0; \
FUNCNAME##_call_count = 0; \
} \
} \
STATIC_INIT(FUNCNAME) \
/* Defining a void function with 4 parameters*/
#define FAKE_VOID_FUNC4(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE) \
extern "C"{ \
static ARG0_TYPE FUNCNAME##_arg0_val; \
static ARG1_TYPE FUNCNAME##_arg1_val; \
static ARG2_TYPE FUNCNAME##_arg2_val; \
static ARG3_TYPE FUNCNAME##_arg3_val; \
static int FUNCNAME##_call_count = 0; \
void FUNCNAME(ARG0_TYPE arg0ARG1_TYPE arg1ARG2_TYPE arg2ARG3_TYPE arg3){ \
FUNCNAME##_arg0_val = arg0; \
FUNCNAME##_arg1_val = arg1; \
FUNCNAME##_arg2_val = arg2; \
FUNCNAME##_arg3_val = arg3; \
FUNCNAME##_call_count++; \
} \
void FUNCNAME##_reset(){ \
FUNCNAME##_arg0_val = (ARG0_TYPE) 0; \
FUNCNAME##_arg1_val = (ARG1_TYPE) 0; \
FUNCNAME##_arg2_val = (ARG2_TYPE) 0; \
FUNCNAME##_arg3_val = (ARG3_TYPE) 0; \
FUNCNAME##_call_count = 0; \
} \
} \
STATIC_INIT(FUNCNAME) \
/* Defining a void function with 5 parameters*/
#define FAKE_VOID_FUNC5(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE) \
extern "C"{ \
static ARG0_TYPE FUNCNAME##_arg0_val; \
static ARG1_TYPE FUNCNAME##_arg1_val; \
static ARG2_TYPE FUNCNAME##_arg2_val; \
static ARG3_TYPE FUNCNAME##_arg3_val; \
static ARG4_TYPE FUNCNAME##_arg4_val; \
static int FUNCNAME##_call_count = 0; \
void FUNCNAME(ARG0_TYPE arg0ARG1_TYPE arg1ARG2_TYPE arg2ARG3_TYPE arg3ARG4_TYPE arg4){ \
FUNCNAME##_arg0_val = arg0; \
FUNCNAME##_arg1_val = arg1; \
FUNCNAME##_arg2_val = arg2; \
FUNCNAME##_arg3_val = arg3; \
FUNCNAME##_arg4_val = arg4; \
FUNCNAME##_call_count++; \
} \
void FUNCNAME##_reset(){ \
FUNCNAME##_arg0_val = (ARG0_TYPE) 0; \
FUNCNAME##_arg1_val = (ARG1_TYPE) 0; \
FUNCNAME##_arg2_val = (ARG2_TYPE) 0; \
FUNCNAME##_arg3_val = (ARG3_TYPE) 0; \
FUNCNAME##_arg4_val = (ARG4_TYPE) 0; \
FUNCNAME##_call_count = 0; \
} \
} \
STATIC_INIT(FUNCNAME) \
/* Defining a void function with 6 parameters*/
#define FAKE_VOID_FUNC6(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE) \
extern "C"{ \
static ARG0_TYPE FUNCNAME##_arg0_val; \
static ARG1_TYPE FUNCNAME##_arg1_val; \
static ARG2_TYPE FUNCNAME##_arg2_val; \
static ARG3_TYPE FUNCNAME##_arg3_val; \
static ARG4_TYPE FUNCNAME##_arg4_val; \
static ARG5_TYPE FUNCNAME##_arg5_val; \
static int FUNCNAME##_call_count = 0; \
void FUNCNAME(ARG0_TYPE arg0ARG1_TYPE arg1ARG2_TYPE arg2ARG3_TYPE arg3ARG4_TYPE arg4ARG5_TYPE arg5){ \
FUNCNAME##_arg0_val = arg0; \
FUNCNAME##_arg1_val = arg1; \
FUNCNAME##_arg2_val = arg2; \
FUNCNAME##_arg3_val = arg3; \
FUNCNAME##_arg4_val = arg4; \
FUNCNAME##_arg5_val = arg5; \
FUNCNAME##_call_count++; \
} \
void FUNCNAME##_reset(){ \
FUNCNAME##_arg0_val = (ARG0_TYPE) 0; \
FUNCNAME##_arg1_val = (ARG1_TYPE) 0; \
FUNCNAME##_arg2_val = (ARG2_TYPE) 0; \
FUNCNAME##_arg3_val = (ARG3_TYPE) 0; \
FUNCNAME##_arg4_val = (ARG4_TYPE) 0; \
FUNCNAME##_arg5_val = (ARG5_TYPE) 0; \
FUNCNAME##_call_count = 0; \
} \
} \
STATIC_INIT(FUNCNAME) \
/* Defining a void function with 7 parameters*/
#define FAKE_VOID_FUNC7(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE) \
extern "C"{ \
static ARG0_TYPE FUNCNAME##_arg0_val; \
static ARG1_TYPE FUNCNAME##_arg1_val; \
static ARG2_TYPE FUNCNAME##_arg2_val; \
static ARG3_TYPE FUNCNAME##_arg3_val; \
static ARG4_TYPE FUNCNAME##_arg4_val; \
static ARG5_TYPE FUNCNAME##_arg5_val; \
static ARG6_TYPE FUNCNAME##_arg6_val; \
static int FUNCNAME##_call_count = 0; \
void FUNCNAME(ARG0_TYPE arg0ARG1_TYPE arg1ARG2_TYPE arg2ARG3_TYPE arg3ARG4_TYPE arg4ARG5_TYPE arg5ARG6_TYPE arg6){ \
FUNCNAME##_arg0_val = arg0; \
FUNCNAME##_arg1_val = arg1; \
FUNCNAME##_arg2_val = arg2; \
FUNCNAME##_arg3_val = arg3; \
FUNCNAME##_arg4_val = arg4; \
FUNCNAME##_arg5_val = arg5; \
FUNCNAME##_arg6_val = arg6; \
FUNCNAME##_call_count++; \
} \
void FUNCNAME##_reset(){ \
FUNCNAME##_arg0_val = (ARG0_TYPE) 0; \
FUNCNAME##_arg1_val = (ARG1_TYPE) 0; \
FUNCNAME##_arg2_val = (ARG2_TYPE) 0; \
FUNCNAME##_arg3_val = (ARG3_TYPE) 0; \
FUNCNAME##_arg4_val = (ARG4_TYPE) 0; \
FUNCNAME##_arg5_val = (ARG5_TYPE) 0; \
FUNCNAME##_arg6_val = (ARG6_TYPE) 0; \
FUNCNAME##_call_count = 0; \
} \
} \
STATIC_INIT(FUNCNAME) \
/* Defining a void function with 8 parameters*/
#define FAKE_VOID_FUNC8(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE) \
extern "C"{ \
static ARG0_TYPE FUNCNAME##_arg0_val; \
static ARG1_TYPE FUNCNAME##_arg1_val; \
static ARG2_TYPE FUNCNAME##_arg2_val; \
static ARG3_TYPE FUNCNAME##_arg3_val; \
static ARG4_TYPE FUNCNAME##_arg4_val; \
static ARG5_TYPE FUNCNAME##_arg5_val; \
static ARG6_TYPE FUNCNAME##_arg6_val; \
static ARG7_TYPE FUNCNAME##_arg7_val; \
static int FUNCNAME##_call_count = 0; \
void FUNCNAME(ARG0_TYPE arg0ARG1_TYPE arg1ARG2_TYPE arg2ARG3_TYPE arg3ARG4_TYPE arg4ARG5_TYPE arg5ARG6_TYPE arg6ARG7_TYPE arg7){ \
FUNCNAME##_arg0_val = arg0; \
FUNCNAME##_arg1_val = arg1; \
FUNCNAME##_arg2_val = arg2; \
FUNCNAME##_arg3_val = arg3; \
FUNCNAME##_arg4_val = arg4; \
FUNCNAME##_arg5_val = arg5; \
FUNCNAME##_arg6_val = arg6; \
FUNCNAME##_arg7_val = arg7; \
FUNCNAME##_call_count++; \
} \
void FUNCNAME##_reset(){ \
FUNCNAME##_arg0_val = (ARG0_TYPE) 0; \
FUNCNAME##_arg1_val = (ARG1_TYPE) 0; \
FUNCNAME##_arg2_val = (ARG2_TYPE) 0; \
FUNCNAME##_arg3_val = (ARG3_TYPE) 0; \
FUNCNAME##_arg4_val = (ARG4_TYPE) 0; \
FUNCNAME##_arg5_val = (ARG5_TYPE) 0; \
FUNCNAME##_arg6_val = (ARG6_TYPE) 0; \
FUNCNAME##_arg7_val = (ARG7_TYPE) 0; \
FUNCNAME##_call_count = 0; \
} \
} \
STATIC_INIT(FUNCNAME) \
/* Defining a void function with 9 parameters*/
#define FAKE_VOID_FUNC9(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE) \
extern "C"{ \
static ARG0_TYPE FUNCNAME##_arg0_val; \
static ARG1_TYPE FUNCNAME##_arg1_val; \
static ARG2_TYPE FUNCNAME##_arg2_val; \
static ARG3_TYPE FUNCNAME##_arg3_val; \
static ARG4_TYPE FUNCNAME##_arg4_val; \
static ARG5_TYPE FUNCNAME##_arg5_val; \
static ARG6_TYPE FUNCNAME##_arg6_val; \
static ARG7_TYPE FUNCNAME##_arg7_val; \
static ARG8_TYPE FUNCNAME##_arg8_val; \
static int FUNCNAME##_call_count = 0; \
void FUNCNAME(ARG0_TYPE arg0ARG1_TYPE arg1ARG2_TYPE arg2ARG3_TYPE arg3ARG4_TYPE arg4ARG5_TYPE arg5ARG6_TYPE arg6ARG7_TYPE arg7ARG8_TYPE arg8){ \
FUNCNAME##_arg0_val = arg0; \
FUNCNAME##_arg1_val = arg1; \
FUNCNAME##_arg2_val = arg2; \
FUNCNAME##_arg3_val = arg3; \
FUNCNAME##_arg4_val = arg4; \
FUNCNAME##_arg5_val = arg5; \
FUNCNAME##_arg6_val = arg6; \
FUNCNAME##_arg7_val = arg7; \
FUNCNAME##_arg8_val = arg8; \
FUNCNAME##_call_count++; \
} \
void FUNCNAME##_reset(){ \
FUNCNAME##_arg0_val = (ARG0_TYPE) 0; \
FUNCNAME##_arg1_val = (ARG1_TYPE) 0; \
FUNCNAME##_arg2_val = (ARG2_TYPE) 0; \
FUNCNAME##_arg3_val = (ARG3_TYPE) 0; \
FUNCNAME##_arg4_val = (ARG4_TYPE) 0; \
FUNCNAME##_arg5_val = (ARG5_TYPE) 0; \
FUNCNAME##_arg6_val = (ARG6_TYPE) 0; \
FUNCNAME##_arg7_val = (ARG7_TYPE) 0; \
FUNCNAME##_arg8_val = (ARG8_TYPE) 0; \
FUNCNAME##_call_count = 0; \
} \
} \
STATIC_INIT(FUNCNAME) \
/* Defining a function returning a value with 0 parameters*/
#define FAKE_VALUE_FUNC0(RETURN_TYPE, FUNCNAME) \
extern "C"{ \
static RETURN_TYPE FUNCNAME##_return_val; \
static int FUNCNAME##_call_count = 0; \
RETURN_TYPE FUNCNAME(){ \
FUNCNAME##_call_count++; \
return FUNCNAME##_return_val; \
} \
void FUNCNAME##_reset(){ \
FUNCNAME##_call_count = 0; \
} \
} \
STATIC_INIT(FUNCNAME) \
/* Defining a function returning a value with 1 parameters*/
#define FAKE_VALUE_FUNC1(RETURN_TYPE, FUNCNAME, ARG0_TYPE) \
extern "C"{ \
static ARG0_TYPE FUNCNAME##_arg0_val; \
static RETURN_TYPE FUNCNAME##_return_val; \
static int FUNCNAME##_call_count = 0; \
RETURN_TYPE FUNCNAME(ARG0_TYPE arg0){ \
FUNCNAME##_arg0_val = arg0; \
FUNCNAME##_call_count++; \
return FUNCNAME##_return_val; \
} \
void FUNCNAME##_reset(){ \
FUNCNAME##_arg0_val = (ARG0_TYPE) 0; \
FUNCNAME##_call_count = 0; \
} \
} \
STATIC_INIT(FUNCNAME) \
/* Defining a function returning a value with 2 parameters*/
#define FAKE_VALUE_FUNC2(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE) \
extern "C"{ \
static ARG0_TYPE FUNCNAME##_arg0_val; \
static ARG1_TYPE FUNCNAME##_arg1_val; \
static RETURN_TYPE FUNCNAME##_return_val; \
static int FUNCNAME##_call_count = 0; \
RETURN_TYPE FUNCNAME(ARG0_TYPE arg0ARG1_TYPE arg1){ \
FUNCNAME##_arg0_val = arg0; \
FUNCNAME##_arg1_val = arg1; \
FUNCNAME##_call_count++; \
return FUNCNAME##_return_val; \
} \
void FUNCNAME##_reset(){ \
FUNCNAME##_arg0_val = (ARG0_TYPE) 0; \
FUNCNAME##_arg1_val = (ARG1_TYPE) 0; \
FUNCNAME##_call_count = 0; \
} \
} \
STATIC_INIT(FUNCNAME) \
/* Defining a function returning a value with 3 parameters*/
#define FAKE_VALUE_FUNC3(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE) \
extern "C"{ \
static ARG0_TYPE FUNCNAME##_arg0_val; \
static ARG1_TYPE FUNCNAME##_arg1_val; \
static ARG2_TYPE FUNCNAME##_arg2_val; \
static RETURN_TYPE FUNCNAME##_return_val; \
static int FUNCNAME##_call_count = 0; \
RETURN_TYPE FUNCNAME(ARG0_TYPE arg0ARG1_TYPE arg1ARG2_TYPE arg2){ \
FUNCNAME##_arg0_val = arg0; \
FUNCNAME##_arg1_val = arg1; \
FUNCNAME##_arg2_val = arg2; \
FUNCNAME##_call_count++; \
return FUNCNAME##_return_val; \
} \
void FUNCNAME##_reset(){ \
FUNCNAME##_arg0_val = (ARG0_TYPE) 0; \
FUNCNAME##_arg1_val = (ARG1_TYPE) 0; \
FUNCNAME##_arg2_val = (ARG2_TYPE) 0; \
FUNCNAME##_call_count = 0; \
} \
} \
STATIC_INIT(FUNCNAME) \
/* Defining a function returning a value with 4 parameters*/
#define FAKE_VALUE_FUNC4(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE) \
extern "C"{ \
static ARG0_TYPE FUNCNAME##_arg0_val; \
static ARG1_TYPE FUNCNAME##_arg1_val; \
static ARG2_TYPE FUNCNAME##_arg2_val; \
static ARG3_TYPE FUNCNAME##_arg3_val; \
static RETURN_TYPE FUNCNAME##_return_val; \
static int FUNCNAME##_call_count = 0; \
RETURN_TYPE FUNCNAME(ARG0_TYPE arg0ARG1_TYPE arg1ARG2_TYPE arg2ARG3_TYPE arg3){ \
FUNCNAME##_arg0_val = arg0; \
FUNCNAME##_arg1_val = arg1; \
FUNCNAME##_arg2_val = arg2; \
FUNCNAME##_arg3_val = arg3; \
FUNCNAME##_call_count++; \
return FUNCNAME##_return_val; \
} \
void FUNCNAME##_reset(){ \
FUNCNAME##_arg0_val = (ARG0_TYPE) 0; \
FUNCNAME##_arg1_val = (ARG1_TYPE) 0; \
FUNCNAME##_arg2_val = (ARG2_TYPE) 0; \
FUNCNAME##_arg3_val = (ARG3_TYPE) 0; \
FUNCNAME##_call_count = 0; \
} \
} \
STATIC_INIT(FUNCNAME) \
/* Defining a function returning a value with 5 parameters*/
#define FAKE_VALUE_FUNC5(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE) \
extern "C"{ \
static ARG0_TYPE FUNCNAME##_arg0_val; \
static ARG1_TYPE FUNCNAME##_arg1_val; \
static ARG2_TYPE FUNCNAME##_arg2_val; \
static ARG3_TYPE FUNCNAME##_arg3_val; \
static ARG4_TYPE FUNCNAME##_arg4_val; \
static RETURN_TYPE FUNCNAME##_return_val; \
static int FUNCNAME##_call_count = 0; \
RETURN_TYPE FUNCNAME(ARG0_TYPE arg0ARG1_TYPE arg1ARG2_TYPE arg2ARG3_TYPE arg3ARG4_TYPE arg4){ \
FUNCNAME##_arg0_val = arg0; \
FUNCNAME##_arg1_val = arg1; \
FUNCNAME##_arg2_val = arg2; \
FUNCNAME##_arg3_val = arg3; \
FUNCNAME##_arg4_val = arg4; \
FUNCNAME##_call_count++; \
return FUNCNAME##_return_val; \
} \
void FUNCNAME##_reset(){ \
FUNCNAME##_arg0_val = (ARG0_TYPE) 0; \
FUNCNAME##_arg1_val = (ARG1_TYPE) 0; \
FUNCNAME##_arg2_val = (ARG2_TYPE) 0; \
FUNCNAME##_arg3_val = (ARG3_TYPE) 0; \
FUNCNAME##_arg4_val = (ARG4_TYPE) 0; \
FUNCNAME##_call_count = 0; \
} \
} \
STATIC_INIT(FUNCNAME) \
/* Defining a function returning a value with 6 parameters*/
#define FAKE_VALUE_FUNC6(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE) \
extern "C"{ \
static ARG0_TYPE FUNCNAME##_arg0_val; \
static ARG1_TYPE FUNCNAME##_arg1_val; \
static ARG2_TYPE FUNCNAME##_arg2_val; \
static ARG3_TYPE FUNCNAME##_arg3_val; \
static ARG4_TYPE FUNCNAME##_arg4_val; \
static ARG5_TYPE FUNCNAME##_arg5_val; \
static RETURN_TYPE FUNCNAME##_return_val; \
static int FUNCNAME##_call_count = 0; \
RETURN_TYPE FUNCNAME(ARG0_TYPE arg0ARG1_TYPE arg1ARG2_TYPE arg2ARG3_TYPE arg3ARG4_TYPE arg4ARG5_TYPE arg5){ \
FUNCNAME##_arg0_val = arg0; \
FUNCNAME##_arg1_val = arg1; \
FUNCNAME##_arg2_val = arg2; \
FUNCNAME##_arg3_val = arg3; \
FUNCNAME##_arg4_val = arg4; \
FUNCNAME##_arg5_val = arg5; \
FUNCNAME##_call_count++; \
return FUNCNAME##_return_val; \
} \
void FUNCNAME##_reset(){ \
FUNCNAME##_arg0_val = (ARG0_TYPE) 0; \
FUNCNAME##_arg1_val = (ARG1_TYPE) 0; \
FUNCNAME##_arg2_val = (ARG2_TYPE) 0; \
FUNCNAME##_arg3_val = (ARG3_TYPE) 0; \
FUNCNAME##_arg4_val = (ARG4_TYPE) 0; \
FUNCNAME##_arg5_val = (ARG5_TYPE) 0; \
FUNCNAME##_call_count = 0; \
} \
} \
STATIC_INIT(FUNCNAME) \
/* Defining a function returning a value with 7 parameters*/
#define FAKE_VALUE_FUNC7(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE) \
extern "C"{ \
static ARG0_TYPE FUNCNAME##_arg0_val; \
static ARG1_TYPE FUNCNAME##_arg1_val; \
static ARG2_TYPE FUNCNAME##_arg2_val; \
static ARG3_TYPE FUNCNAME##_arg3_val; \
static ARG4_TYPE FUNCNAME##_arg4_val; \
static ARG5_TYPE FUNCNAME##_arg5_val; \
static ARG6_TYPE FUNCNAME##_arg6_val; \
static RETURN_TYPE FUNCNAME##_return_val; \
static int FUNCNAME##_call_count = 0; \
RETURN_TYPE FUNCNAME(ARG0_TYPE arg0ARG1_TYPE arg1ARG2_TYPE arg2ARG3_TYPE arg3ARG4_TYPE arg4ARG5_TYPE arg5ARG6_TYPE arg6){ \
FUNCNAME##_arg0_val = arg0; \
FUNCNAME##_arg1_val = arg1; \
FUNCNAME##_arg2_val = arg2; \
FUNCNAME##_arg3_val = arg3; \
FUNCNAME##_arg4_val = arg4; \
FUNCNAME##_arg5_val = arg5; \
FUNCNAME##_arg6_val = arg6; \
FUNCNAME##_call_count++; \
return FUNCNAME##_return_val; \
} \
void FUNCNAME##_reset(){ \
FUNCNAME##_arg0_val = (ARG0_TYPE) 0; \
FUNCNAME##_arg1_val = (ARG1_TYPE) 0; \
FUNCNAME##_arg2_val = (ARG2_TYPE) 0; \
FUNCNAME##_arg3_val = (ARG3_TYPE) 0; \
FUNCNAME##_arg4_val = (ARG4_TYPE) 0; \
FUNCNAME##_arg5_val = (ARG5_TYPE) 0; \
FUNCNAME##_arg6_val = (ARG6_TYPE) 0; \
FUNCNAME##_call_count = 0; \
} \
} \
STATIC_INIT(FUNCNAME) \
/* Defining a function returning a value with 8 parameters*/
#define FAKE_VALUE_FUNC8(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE) \
extern "C"{ \
static ARG0_TYPE FUNCNAME##_arg0_val; \
static ARG1_TYPE FUNCNAME##_arg1_val; \
static ARG2_TYPE FUNCNAME##_arg2_val; \
static ARG3_TYPE FUNCNAME##_arg3_val; \
static ARG4_TYPE FUNCNAME##_arg4_val; \
static ARG5_TYPE FUNCNAME##_arg5_val; \
static ARG6_TYPE FUNCNAME##_arg6_val; \
static ARG7_TYPE FUNCNAME##_arg7_val; \
static RETURN_TYPE FUNCNAME##_return_val; \
static int FUNCNAME##_call_count = 0; \
RETURN_TYPE FUNCNAME(ARG0_TYPE arg0ARG1_TYPE arg1ARG2_TYPE arg2ARG3_TYPE arg3ARG4_TYPE arg4ARG5_TYPE arg5ARG6_TYPE arg6ARG7_TYPE arg7){ \
FUNCNAME##_arg0_val = arg0; \
FUNCNAME##_arg1_val = arg1; \
FUNCNAME##_arg2_val = arg2; \
FUNCNAME##_arg3_val = arg3; \
FUNCNAME##_arg4_val = arg4; \
FUNCNAME##_arg5_val = arg5; \
FUNCNAME##_arg6_val = arg6; \
FUNCNAME##_arg7_val = arg7; \
FUNCNAME##_call_count++; \
return FUNCNAME##_return_val; \
} \
void FUNCNAME##_reset(){ \
FUNCNAME##_arg0_val = (ARG0_TYPE) 0; \
FUNCNAME##_arg1_val = (ARG1_TYPE) 0; \
FUNCNAME##_arg2_val = (ARG2_TYPE) 0; \
FUNCNAME##_arg3_val = (ARG3_TYPE) 0; \
FUNCNAME##_arg4_val = (ARG4_TYPE) 0; \
FUNCNAME##_arg5_val = (ARG5_TYPE) 0; \
FUNCNAME##_arg6_val = (ARG6_TYPE) 0; \
FUNCNAME##_arg7_val = (ARG7_TYPE) 0; \
FUNCNAME##_call_count = 0; \
} \
} \
STATIC_INIT(FUNCNAME) \
/* Defining a function returning a value with 9 parameters*/
#define FAKE_VALUE_FUNC9(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE) \
extern "C"{ \
static ARG0_TYPE FUNCNAME##_arg0_val; \
static ARG1_TYPE FUNCNAME##_arg1_val; \
static ARG2_TYPE FUNCNAME##_arg2_val; \
static ARG3_TYPE FUNCNAME##_arg3_val; \
static ARG4_TYPE FUNCNAME##_arg4_val; \
static ARG5_TYPE FUNCNAME##_arg5_val; \
static ARG6_TYPE FUNCNAME##_arg6_val; \
static ARG7_TYPE FUNCNAME##_arg7_val; \
static ARG8_TYPE FUNCNAME##_arg8_val; \
static RETURN_TYPE FUNCNAME##_return_val; \
static int FUNCNAME##_call_count = 0; \
RETURN_TYPE FUNCNAME(ARG0_TYPE arg0ARG1_TYPE arg1ARG2_TYPE arg2ARG3_TYPE arg3ARG4_TYPE arg4ARG5_TYPE arg5ARG6_TYPE arg6ARG7_TYPE arg7ARG8_TYPE arg8){ \
FUNCNAME##_arg0_val = arg0; \
FUNCNAME##_arg1_val = arg1; \
FUNCNAME##_arg2_val = arg2; \
FUNCNAME##_arg3_val = arg3; \
FUNCNAME##_arg4_val = arg4; \
FUNCNAME##_arg5_val = arg5; \
FUNCNAME##_arg6_val = arg6; \
FUNCNAME##_arg7_val = arg7; \
FUNCNAME##_arg8_val = arg8; \
FUNCNAME##_call_count++; \
return FUNCNAME##_return_val; \
} \
void FUNCNAME##_reset(){ \
FUNCNAME##_arg0_val = (ARG0_TYPE) 0; \
FUNCNAME##_arg1_val = (ARG1_TYPE) 0; \
FUNCNAME##_arg2_val = (ARG2_TYPE) 0; \
FUNCNAME##_arg3_val = (ARG3_TYPE) 0; \
FUNCNAME##_arg4_val = (ARG4_TYPE) 0; \
FUNCNAME##_arg5_val = (ARG5_TYPE) 0; \
FUNCNAME##_arg6_val = (ARG6_TYPE) 0; \
FUNCNAME##_arg7_val = (ARG7_TYPE) 0; \
FUNCNAME##_arg8_val = (ARG8_TYPE) 0; \
FUNCNAME##_call_count = 0; \
} \
} \
STATIC_INIT(FUNCNAME) \
/* Defining a function to reset a fake function */
#define RESET_FAKE(FUNCNAME) { \
FUNCNAME##_reset(); \
} \
#endif // FAKE_FUNCTIONS

34
src/embedded.c Normal file
View File

@@ -0,0 +1,34 @@
void DISPLAY_init();
void DISPLAY_clear();
int DISPLAY_get_line_capacity();
int DISPLAY_get_line_insert_index();
void DISPLAY_output_message(char * message);
void UI_init()
{
DISPLAY_init();
}
void UI_greet(char * name)
{
if(DISPLAY_get_line_capacity() == DISPLAY_get_line_insert_index())
{
DISPLAY_clear();
}
DISPLAY_output_message(name);
}
void UI_greet_multiple_times(char * name, int times)
{
int i;
for(i = 0; i < times; i++)
{
UI_greet(name);
}
}

10
src/embedded.h Normal file
View File

@@ -0,0 +1,10 @@
#ifndef EMBEDDED_CODE
#define EMBEDDED_CODE
void UI_init();
void UI_greet(char * name);
void UI_greet_multiple_times(char * name, int times);
#endif /* EMBEDDED_CODE */

155
src/fakegen.rb Normal file
View File

@@ -0,0 +1,155 @@
# fakegen.rb
# A simple code generator to create some C macros for defining test fake functions
$cpp_output = true
def output_macro(args, is_value_function)
macro_name_preamble = is_value_function ? "FAKE_VALUE_FUNC" : "FAKE_VOID_FUNC";
macro_name = "#{macro_name_preamble}#{args}"
return_type = is_value_function ? "RETURN_TYPE" : ""
output_macro_header(macro_name, args, return_type)
extern_c { # define argument capture variables
output_variables(args, is_value_function)
output_function_signature(args, is_value_function)
puts "{ \\"
output_function_body(args, is_value_function)
puts " } \\"
output_reset_function(args)
}
puts "STATIC_INIT(FUNCNAME) \\"
puts ""
end
def output_reset_code
puts <<-REGISTRATION
#include <vector>
typedef void (*void_fptr)();
std::vector<void_fptr> reset_functions;
void RESET_FAKES()
{
std::vector<void_fptr>::iterator it = reset_functions.begin();
for( ; it != reset_functions.end(); ++it)
{
void_fptr ptr = *it;
ptr();
}
}
REGISTRATION
end
def output_static_initializer
puts <<-MY_STATIC_INITIALIZER
#define STATIC_INIT(FUNCNAME) \\
class StaticInitializer_##FUNCNAME \\
{ \\
public: \\
StaticInitializer_##FUNCNAME() \\
{ \\
reset_functions.push_back(FUNCNAME##_reset); \\
} \\
}; \\
static StaticInitializer_##FUNCNAME staticInitializer_##FUNCNAME; \\
MY_STATIC_INITIALIZER
end
def output_macro_header(macro_name, args, return_type)
puts ""
output_macro_name(macro_name, args, return_type)
end
def output_macro_name(macro_name, args, return_type)
parameter_list = return_type
if return_type == ""
puts "/* Defining a void function with #{args} parameters*/"
else
puts "/* Defining a function returning a value with #{args} parameters*/"
parameter_list += ", "
end
parameter_list += "FUNCNAME"
print "#define #{macro_name}(" + parameter_list
args.times { |i| print ", ARG#{i}_TYPE" }
puts ") \\"
end
def output_variables(args, is_value_function)
args.times { |i| puts " static ARG#{i}_TYPE FUNCNAME##_arg#{i}_val; \\" }
puts " static RETURN_TYPE FUNCNAME##_return_val; \\" unless not is_value_function
puts " static int FUNCNAME##_call_count = 0; \\"
end
def output_function_signature(args, is_value_function)
if is_value_function
print " RETURN_TYPE FUNCNAME("
else
print " void FUNCNAME("
end
args.times { |i| print "ARG#{i}_TYPE arg#{i}" }
print ")"
end
def output_function_body(args, is_value_function)
# capture arguments
args.times { |i| puts " FUNCNAME##_arg#{i}_val = arg#{i}; \\" }
# update call count
puts " FUNCNAME##_call_count++; \\"
# return something if value function
puts " return FUNCNAME##_return_val; \\" unless not is_value_function
end
def output_reset_function(args)
puts " void FUNCNAME##_reset(){ \\"
args.times { |i|
puts " FUNCNAME##_arg#{i}_val = (ARG#{i}_TYPE) 0; \\"
}
puts " FUNCNAME##_call_count = 0; \\"
puts " } \\"
end
def define_reset_fake
puts ""
puts "/* Defining a function to reset a fake function */"
puts "#define RESET_FAKE(FUNCNAME) { \\"
puts " FUNCNAME##_reset(); \\"
puts "} \\"
end
def include_guard
puts "#ifndef FAKE_FUNCTIONS"
puts "#define FAKE_FUNCTIONS"
puts ""
yield
puts ""
puts "#endif // FAKE_FUNCTIONS"
end
def extern_c
puts "extern \"C\"{ \\" unless !$cpp_output
yield
puts "} \\" unless !$cpp_output
end
# lets generate!!
include_guard {
output_reset_code if $cpp_output
output_static_initializer if $cpp_output
10.times {|arg_count| output_macro(arg_count, false)}
10.times {|arg_count| output_macro(arg_count, true)}
define_reset_fake
}