mirror of
https://github.com/ThrowTheSwitch/CMock.git
synced 2026-10-31 04:46:13 +00:00
Merge pull request #508 from rstahn/rstahn-patch-1
Add option 'create_error_stubs' (default is 'true')
This commit is contained in:
+4
-4
@@ -1,8 +1,8 @@
|
|||||||
[submodule "vendor/unity"]
|
|
||||||
path = vendor/unity
|
|
||||||
url = https://github.com/throwtheswitch/unity.git
|
|
||||||
branch = master
|
|
||||||
[submodule "vendor/c_exception"]
|
[submodule "vendor/c_exception"]
|
||||||
path = vendor/c_exception
|
path = vendor/c_exception
|
||||||
url = https://github.com/throwtheswitch/cexception.git
|
url = https://github.com/throwtheswitch/cexception.git
|
||||||
branch = master
|
branch = master
|
||||||
|
[submodule "vendor/unity"]
|
||||||
|
path = vendor/unity
|
||||||
|
url = https://github.com/throwtheswitch/unity.git
|
||||||
|
branch = master
|
||||||
|
|||||||
+24
-3
@@ -1,7 +1,7 @@
|
|||||||
CMock: A Summary
|
CMock: A Summary
|
||||||
================
|
================
|
||||||
|
|
||||||
*[ThrowTheSwitch.org](http://throwtheswitch.org)*
|
*[ThrowTheSwitch.org](http://throwtheswitch.org)*
|
||||||
|
|
||||||
*This documentation is released under a Creative Commons 3.0 Attribution Share-Alike License*
|
*This documentation is released under a Creative Commons 3.0 Attribution Share-Alike License*
|
||||||
|
|
||||||
@@ -138,7 +138,7 @@ that resembles a pointer or array, it breaks the argument into TWO arguments.
|
|||||||
The first is the original pointer. The second specify the number of elements
|
The first is the original pointer. The second specify the number of elements
|
||||||
it is to verify of that array. If you specify 1, it'll check one object. If 2,
|
it is to verify of that array. If you specify 1, it'll check one object. If 2,
|
||||||
it'll assume your pointer is pointing at the first of two elements in an array.
|
it'll assume your pointer is pointing at the first of two elements in an array.
|
||||||
If you specify zero elements and `UNITY_COMPARE_PTRS_ON_ZERO_ARRAY` is defined,
|
If you specify zero elements and `UNITY_COMPARE_PTRS_ON_ZERO_ARRAY` is defined,
|
||||||
then this assertion can also be used to directly compare the pointers to verify
|
then this assertion can also be used to directly compare the pointers to verify
|
||||||
that they are pointing to the same memory address.
|
that they are pointing to the same memory address.
|
||||||
|
|
||||||
@@ -420,6 +420,27 @@ from the defaults. We've tried to specify what the defaults are below.
|
|||||||
|
|
||||||
* default: *nil*
|
* default: *nil*
|
||||||
|
|
||||||
|
* `:create_error_stubs`:
|
||||||
|
New users of CMock sometimes struggle with the concept that CMock is
|
||||||
|
generating differently named interface functions for a mock depending
|
||||||
|
on whether a function to be mocked has a return value or not (see
|
||||||
|
description of the plugins `:Expect`, `:ExpectAnyArgs`, `:Array`, `:Ignore`,
|
||||||
|
`:IgnoreStateless` above). They are looking e.g. for a function `func_Expect()`
|
||||||
|
while CMock generated the function `func_ExpectAndReturn()` instead.
|
||||||
|
This has proven to be a significant hurdle, because it is not easy to
|
||||||
|
spot the slightly different named function within the generated mock.
|
||||||
|
Therefore CMock (v2.6.0 and newer) is generating *both* functions
|
||||||
|
per default, although one of them has only a "stub" functionality:
|
||||||
|
on call it will always fail the test emitting a helpful error message
|
||||||
|
pointing towards the correct function.
|
||||||
|
|
||||||
|
Experienced CMock users on the other hand might prefer the original
|
||||||
|
behavior, where no additional error stubs are generated - e.g. to
|
||||||
|
ensure code completion offers only "real" functionality of the mock.
|
||||||
|
In this case, the option `:create_error_stubs` can be set to false.
|
||||||
|
|
||||||
|
* default: true
|
||||||
|
|
||||||
* `:enforce_strict_ordering`:
|
* `:enforce_strict_ordering`:
|
||||||
CMock always enforces the order that you call a particular function,
|
CMock always enforces the order that you call a particular function,
|
||||||
so if you expect GrabNabber(int size) to be called three times, it
|
so if you expect GrabNabber(int size) to be called three times, it
|
||||||
@@ -637,7 +658,7 @@ from the defaults. We've tried to specify what the defaults are below.
|
|||||||
for the test code to also see the newly generated header ,and not
|
for the test code to also see the newly generated header ,and not
|
||||||
the old header with inline functions, the build system has to add
|
the old header with inline functions, the build system has to add
|
||||||
the mock folder to the include paths.
|
the mock folder to the include paths.
|
||||||
|
|
||||||
Furthermore, we need to keep the order of include paths in mind. We
|
Furthermore, we need to keep the order of include paths in mind. We
|
||||||
have to set the mock folder before the other includes to avoid the
|
have to set the mock folder before the other includes to avoid the
|
||||||
test code including the original header instead of the newly
|
test code including the original header instead of the newly
|
||||||
|
|||||||
@@ -43,6 +43,7 @@ class CMockConfig
|
|||||||
:array_size_name => 'size|len',
|
:array_size_name => 'size|len',
|
||||||
:skeleton => false,
|
:skeleton => false,
|
||||||
:exclude_setjmp_h => false,
|
:exclude_setjmp_h => false,
|
||||||
|
:create_error_stubs => true,
|
||||||
|
|
||||||
# Format to look for inline functions.
|
# Format to look for inline functions.
|
||||||
# This is a combination of "static" and "inline" keywords ("static inline", "inline static", "inline", "static")
|
# This is a combination of "static" and "inline" keywords ("static inline", "inline static", "inline", "static")
|
||||||
|
|||||||
@@ -13,6 +13,7 @@ class CMockGeneratorPluginArray
|
|||||||
@config = config
|
@config = config
|
||||||
@ptr_handling = @config.when_ptr
|
@ptr_handling = @config.when_ptr
|
||||||
@ordered = @config.enforce_strict_ordering
|
@ordered = @config.enforce_strict_ordering
|
||||||
|
@error_stubs = @config.create_error_stubs
|
||||||
@utils = utils
|
@utils = utils
|
||||||
@unity_helper = @utils.helpers[:unity_helper]
|
@unity_helper = @utils.helpers[:unity_helper]
|
||||||
@priority = 8
|
@priority = 8
|
||||||
@@ -33,15 +34,17 @@ class CMockGeneratorPluginArray
|
|||||||
type = @utils.arg_type_with_const(m)
|
type = @utils.arg_type_with_const(m)
|
||||||
m[:ptr?] ? "#{type} #{m[:name]}, int #{m[:name]}_Depth" : "#{type} #{m[:name]}"
|
m[:ptr?] ? "#{type} #{m[:name]}, int #{m[:name]}_Depth" : "#{type} #{m[:name]}"
|
||||||
end.join(', ')
|
end.join(', ')
|
||||||
|
lines = ''
|
||||||
if function[:return][:void?]
|
if function[:return][:void?]
|
||||||
"#define #{function[:name]}_ExpectWithArrayAndReturn(#{args_call_i}, cmock_retval) TEST_FAIL_MESSAGE(\"#{function[:name]} requires _ExpectWithArray (not AndReturn)\");\n" \
|
lines << "#define #{function[:name]}_ExpectWithArrayAndReturn(#{args_call_i}, cmock_retval) TEST_FAIL_MESSAGE(\"#{function[:name]} requires _ExpectWithArray (not AndReturn)\");\n" if @error_stubs
|
||||||
"#define #{function[:name]}_ExpectWithArray(#{args_call_i}) #{function[:name]}_CMockExpectWithArray(__LINE__, #{args_call_o})\n" \
|
lines << "#define #{function[:name]}_ExpectWithArray(#{args_call_i}) #{function[:name]}_CMockExpectWithArray(__LINE__, #{args_call_o})\n"
|
||||||
"void #{function[:name]}_CMockExpectWithArray(UNITY_LINE_TYPE cmock_line, #{args_string});\n"
|
lines << "void #{function[:name]}_CMockExpectWithArray(UNITY_LINE_TYPE cmock_line, #{args_string});\n"
|
||||||
else
|
else
|
||||||
"#define #{function[:name]}_ExpectWithArray(#{args_call_i}) TEST_FAIL_MESSAGE(\"#{function[:name]} requires _ExpectWithArrayAndReturn\");\n" \
|
lines << "#define #{function[:name]}_ExpectWithArray(#{args_call_i}) TEST_FAIL_MESSAGE(\"#{function[:name]} requires _ExpectWithArrayAndReturn\");\n" if @error_stubs
|
||||||
"#define #{function[:name]}_ExpectWithArrayAndReturn(#{args_call_i}, cmock_retval) #{function[:name]}_CMockExpectWithArrayAndReturn(__LINE__, #{args_call_o}, cmock_retval)\n" \
|
lines << "#define #{function[:name]}_ExpectWithArrayAndReturn(#{args_call_i}, cmock_retval) #{function[:name]}_CMockExpectWithArrayAndReturn(__LINE__, #{args_call_o}, cmock_retval)\n"
|
||||||
"void #{function[:name]}_CMockExpectWithArrayAndReturn(UNITY_LINE_TYPE cmock_line, #{args_string}, #{function[:return][:str]});\n"
|
lines << "void #{function[:name]}_CMockExpectWithArrayAndReturn(UNITY_LINE_TYPE cmock_line, #{args_string}, #{function[:return][:str]});\n"
|
||||||
end
|
end
|
||||||
|
lines
|
||||||
end
|
end
|
||||||
|
|
||||||
def mock_interfaces(function)
|
def mock_interfaces(function)
|
||||||
|
|||||||
@@ -13,6 +13,7 @@ class CMockGeneratorPluginExpect
|
|||||||
@config = config
|
@config = config
|
||||||
@ptr_handling = @config.when_ptr
|
@ptr_handling = @config.when_ptr
|
||||||
@ordered = @config.enforce_strict_ordering
|
@ordered = @config.enforce_strict_ordering
|
||||||
|
@error_stubs = @config.create_error_stubs
|
||||||
@utils = utils
|
@utils = utils
|
||||||
@unity_helper = @utils.helpers[:unity_helper]
|
@unity_helper = @utils.helpers[:unity_helper]
|
||||||
@priority = 5
|
@priority = 5
|
||||||
@@ -35,25 +36,27 @@ class CMockGeneratorPluginExpect
|
|||||||
end
|
end
|
||||||
|
|
||||||
def mock_function_declarations(function)
|
def mock_function_declarations(function)
|
||||||
|
lines = ''
|
||||||
if function[:args].empty?
|
if function[:args].empty?
|
||||||
if function[:return][:void?]
|
if function[:return][:void?]
|
||||||
"#define #{function[:name]}_ExpectAndReturn(cmock_retval) TEST_FAIL_MESSAGE(\"#{function[:name]} requires _Expect (not AndReturn)\");\n" \
|
lines << "#define #{function[:name]}_ExpectAndReturn(cmock_retval) TEST_FAIL_MESSAGE(\"#{function[:name]} requires _Expect (not AndReturn)\");\n" if @error_stubs
|
||||||
"#define #{function[:name]}_Expect() #{function[:name]}_CMockExpect(__LINE__)\n" \
|
lines << "#define #{function[:name]}_Expect() #{function[:name]}_CMockExpect(__LINE__)\n"
|
||||||
"void #{function[:name]}_CMockExpect(UNITY_LINE_TYPE cmock_line);\n"
|
lines << "void #{function[:name]}_CMockExpect(UNITY_LINE_TYPE cmock_line);\n"
|
||||||
else
|
else
|
||||||
"#define #{function[:name]}_Expect() TEST_FAIL_MESSAGE(\"#{function[:name]} requires _ExpectAndReturn\");\n" \
|
lines << "#define #{function[:name]}_Expect() TEST_FAIL_MESSAGE(\"#{function[:name]} requires _ExpectAndReturn\");\n" if @error_stubs
|
||||||
"#define #{function[:name]}_ExpectAndReturn(cmock_retval) #{function[:name]}_CMockExpectAndReturn(__LINE__, cmock_retval)\n" \
|
lines << "#define #{function[:name]}_ExpectAndReturn(cmock_retval) #{function[:name]}_CMockExpectAndReturn(__LINE__, cmock_retval)\n"
|
||||||
"void #{function[:name]}_CMockExpectAndReturn(UNITY_LINE_TYPE cmock_line, #{function[:return][:str]});\n"
|
lines << "void #{function[:name]}_CMockExpectAndReturn(UNITY_LINE_TYPE cmock_line, #{function[:return][:str]});\n"
|
||||||
end
|
end
|
||||||
elsif function[:return][:void?]
|
elsif function[:return][:void?]
|
||||||
"#define #{function[:name]}_ExpectAndReturn(#{function[:args_call]}, cmock_retval) TEST_FAIL_MESSAGE(\"#{function[:name]} requires _Expect (not AndReturn)\");\n" \
|
lines << "#define #{function[:name]}_ExpectAndReturn(#{function[:args_call]}, cmock_retval) TEST_FAIL_MESSAGE(\"#{function[:name]} requires _Expect (not AndReturn)\");\n" if @error_stubs
|
||||||
"#define #{function[:name]}_Expect(#{function[:args_call]}) #{function[:name]}_CMockExpect(__LINE__, #{function[:args_call]})\n" \
|
lines << "#define #{function[:name]}_Expect(#{function[:args_call]}) #{function[:name]}_CMockExpect(__LINE__, #{function[:args_call]})\n"
|
||||||
"void #{function[:name]}_CMockExpect(UNITY_LINE_TYPE cmock_line, #{function[:args_string]});\n"
|
lines << "void #{function[:name]}_CMockExpect(UNITY_LINE_TYPE cmock_line, #{function[:args_string]});\n"
|
||||||
else
|
else
|
||||||
"#define #{function[:name]}_Expect(#{function[:args_call]}) TEST_FAIL_MESSAGE(\"#{function[:name]} requires _ExpectAndReturn\");\n" \
|
lines << "#define #{function[:name]}_Expect(#{function[:args_call]}) TEST_FAIL_MESSAGE(\"#{function[:name]} requires _ExpectAndReturn\");\n" if @error_stubs
|
||||||
"#define #{function[:name]}_ExpectAndReturn(#{function[:args_call]}, cmock_retval) #{function[:name]}_CMockExpectAndReturn(__LINE__, #{function[:args_call]}, cmock_retval)\n" \
|
lines << "#define #{function[:name]}_ExpectAndReturn(#{function[:args_call]}, cmock_retval) #{function[:name]}_CMockExpectAndReturn(__LINE__, #{function[:args_call]}, cmock_retval)\n"
|
||||||
"void #{function[:name]}_CMockExpectAndReturn(UNITY_LINE_TYPE cmock_line, #{function[:args_string]}, #{function[:return][:str]});\n"
|
lines << "void #{function[:name]}_CMockExpectAndReturn(UNITY_LINE_TYPE cmock_line, #{function[:args_string]}, #{function[:return][:str]});\n"
|
||||||
end
|
end
|
||||||
|
lines
|
||||||
end
|
end
|
||||||
|
|
||||||
def mock_implementation_always_check_args(function)
|
def mock_implementation_always_check_args(function)
|
||||||
|
|||||||
@@ -10,6 +10,7 @@ class CMockGeneratorPluginExpectAnyArgs
|
|||||||
|
|
||||||
def initialize(config, utils)
|
def initialize(config, utils)
|
||||||
@config = config
|
@config = config
|
||||||
|
@error_stubs = @config.create_error_stubs
|
||||||
@utils = utils
|
@utils = utils
|
||||||
@priority = 3
|
@priority = 3
|
||||||
end
|
end
|
||||||
@@ -19,17 +20,19 @@ class CMockGeneratorPluginExpectAnyArgs
|
|||||||
end
|
end
|
||||||
|
|
||||||
def mock_function_declarations(function)
|
def mock_function_declarations(function)
|
||||||
|
lines = ''
|
||||||
if function[:args].empty?
|
if function[:args].empty?
|
||||||
''
|
lines << ''
|
||||||
elsif function[:return][:void?]
|
elsif function[:return][:void?]
|
||||||
"#define #{function[:name]}_ExpectAnyArgsAndReturn(cmock_retval) TEST_FAIL_MESSAGE(\"#{function[:name]} requires _ExpectAnyArgs (not AndReturn)\");\n" \
|
lines << "#define #{function[:name]}_ExpectAnyArgsAndReturn(cmock_retval) TEST_FAIL_MESSAGE(\"#{function[:name]} requires _ExpectAnyArgs (not AndReturn)\");\n" if @error_stubs
|
||||||
"#define #{function[:name]}_ExpectAnyArgs() #{function[:name]}_CMockExpectAnyArgs(__LINE__)\n" \
|
lines << "#define #{function[:name]}_ExpectAnyArgs() #{function[:name]}_CMockExpectAnyArgs(__LINE__)\n"
|
||||||
"void #{function[:name]}_CMockExpectAnyArgs(UNITY_LINE_TYPE cmock_line);\n"
|
lines << "void #{function[:name]}_CMockExpectAnyArgs(UNITY_LINE_TYPE cmock_line);\n"
|
||||||
else
|
else
|
||||||
"#define #{function[:name]}_ExpectAnyArgs() TEST_FAIL_MESSAGE(\"#{function[:name]} requires _ExpectAnyArgsAndReturn\");\n" \
|
lines << "#define #{function[:name]}_ExpectAnyArgs() TEST_FAIL_MESSAGE(\"#{function[:name]} requires _ExpectAnyArgsAndReturn\");\n" if @error_stubs
|
||||||
"#define #{function[:name]}_ExpectAnyArgsAndReturn(cmock_retval) #{function[:name]}_CMockExpectAnyArgsAndReturn(__LINE__, cmock_retval)\n" \
|
lines << "#define #{function[:name]}_ExpectAnyArgsAndReturn(cmock_retval) #{function[:name]}_CMockExpectAnyArgsAndReturn(__LINE__, cmock_retval)\n"
|
||||||
"void #{function[:name]}_CMockExpectAnyArgsAndReturn(UNITY_LINE_TYPE cmock_line, #{function[:return][:str]});\n"
|
lines << "void #{function[:name]}_CMockExpectAnyArgsAndReturn(UNITY_LINE_TYPE cmock_line, #{function[:return][:str]});\n"
|
||||||
end
|
end
|
||||||
|
lines
|
||||||
end
|
end
|
||||||
|
|
||||||
def mock_interfaces(function)
|
def mock_interfaces(function)
|
||||||
|
|||||||
@@ -10,6 +10,7 @@ class CMockGeneratorPluginIgnore
|
|||||||
|
|
||||||
def initialize(config, utils)
|
def initialize(config, utils)
|
||||||
@config = config
|
@config = config
|
||||||
|
@error_stubs = @config.create_error_stubs
|
||||||
@utils = utils
|
@utils = utils
|
||||||
@priority = 2
|
@priority = 2
|
||||||
end
|
end
|
||||||
@@ -23,15 +24,16 @@ class CMockGeneratorPluginIgnore
|
|||||||
end
|
end
|
||||||
|
|
||||||
def mock_function_declarations(function)
|
def mock_function_declarations(function)
|
||||||
lines = if function[:return][:void?]
|
lines = ''
|
||||||
"#define #{function[:name]}_IgnoreAndReturn(cmock_retval) TEST_FAIL_MESSAGE(\"#{function[:name]} requires _Ignore (not AndReturn)\");\n" \
|
if function[:return][:void?]
|
||||||
"#define #{function[:name]}_Ignore() #{function[:name]}_CMockIgnore()\n" \
|
lines << "#define #{function[:name]}_IgnoreAndReturn(cmock_retval) TEST_FAIL_MESSAGE(\"#{function[:name]} requires _Ignore (not AndReturn)\");\n" if @error_stubs
|
||||||
"void #{function[:name]}_CMockIgnore(void);\n"
|
lines << "#define #{function[:name]}_Ignore() #{function[:name]}_CMockIgnore()\n"
|
||||||
else
|
lines << "void #{function[:name]}_CMockIgnore(void);\n"
|
||||||
"#define #{function[:name]}_Ignore() TEST_FAIL_MESSAGE(\"#{function[:name]} requires _IgnoreAndReturn\");\n" \
|
else
|
||||||
"#define #{function[:name]}_IgnoreAndReturn(cmock_retval) #{function[:name]}_CMockIgnoreAndReturn(__LINE__, cmock_retval)\n" \
|
lines << "#define #{function[:name]}_Ignore() TEST_FAIL_MESSAGE(\"#{function[:name]} requires _IgnoreAndReturn\");\n" if @error_stubs
|
||||||
"void #{function[:name]}_CMockIgnoreAndReturn(UNITY_LINE_TYPE cmock_line, #{function[:return][:str]});\n"
|
lines << "#define #{function[:name]}_IgnoreAndReturn(cmock_retval) #{function[:name]}_CMockIgnoreAndReturn(__LINE__, cmock_retval)\n"
|
||||||
end
|
lines << "void #{function[:name]}_CMockIgnoreAndReturn(UNITY_LINE_TYPE cmock_line, #{function[:return][:str]});\n"
|
||||||
|
end
|
||||||
|
|
||||||
# Add stop ignore function. it does not matter if there are any args
|
# Add stop ignore function. it does not matter if there are any args
|
||||||
lines << "#define #{function[:name]}_StopIgnore() #{function[:name]}_CMockStopIgnore()\n" \
|
lines << "#define #{function[:name]}_StopIgnore() #{function[:name]}_CMockStopIgnore()\n" \
|
||||||
|
|||||||
@@ -10,6 +10,7 @@ class CMockGeneratorPluginIgnoreStateless
|
|||||||
|
|
||||||
def initialize(config, utils)
|
def initialize(config, utils)
|
||||||
@config = config
|
@config = config
|
||||||
|
@error_stubs = @config.create_error_stubs
|
||||||
@utils = utils
|
@utils = utils
|
||||||
@priority = 2
|
@priority = 2
|
||||||
end
|
end
|
||||||
@@ -23,15 +24,16 @@ class CMockGeneratorPluginIgnoreStateless
|
|||||||
end
|
end
|
||||||
|
|
||||||
def mock_function_declarations(function)
|
def mock_function_declarations(function)
|
||||||
lines = if function[:return][:void?]
|
lines = ''
|
||||||
"#define #{function[:name]}_IgnoreAndReturn(cmock_retval) TEST_FAIL_MESSAGE(\"#{function[:name]} requires _Ignore (not AndReturn)\");\n" \
|
if function[:return][:void?]
|
||||||
"#define #{function[:name]}_Ignore() #{function[:name]}_CMockIgnore()\n" \
|
lines << "#define #{function[:name]}_IgnoreAndReturn(cmock_retval) TEST_FAIL_MESSAGE(\"#{function[:name]} requires _Ignore (not AndReturn)\");\n" if @error_stubs
|
||||||
"void #{function[:name]}_CMockIgnore(void);\n"
|
lines << "#define #{function[:name]}_Ignore() #{function[:name]}_CMockIgnore()\n"
|
||||||
else
|
lines << "void #{function[:name]}_CMockIgnore(void);\n"
|
||||||
"#define #{function[:name]}_Ignore() TEST_FAIL_MESSAGE(\"#{function[:name]} requires _IgnoreAndReturn\");\n" \
|
else
|
||||||
"#define #{function[:name]}_IgnoreAndReturn(cmock_retval) #{function[:name]}_CMockIgnoreAndReturn(cmock_retval)\n" \
|
lines << "#define #{function[:name]}_Ignore() TEST_FAIL_MESSAGE(\"#{function[:name]} requires _IgnoreAndReturn\");\n" if @error_stubs
|
||||||
"void #{function[:name]}_CMockIgnoreAndReturn(#{function[:return][:str]});\n"
|
lines << "#define #{function[:name]}_IgnoreAndReturn(cmock_retval) #{function[:name]}_CMockIgnoreAndReturn(cmock_retval)\n"
|
||||||
end
|
lines << "void #{function[:name]}_CMockIgnoreAndReturn(#{function[:return][:str]});\n"
|
||||||
|
end
|
||||||
|
|
||||||
# Add stop ignore function. it does not matter if there are any args
|
# Add stop ignore function. it does not matter if there are any args
|
||||||
lines << "#define #{function[:name]}_StopIgnore() #{function[:name]}_CMockStopIgnore()\n" \
|
lines << "#define #{function[:name]}_StopIgnore() #{function[:name]}_CMockStopIgnore()\n" \
|
||||||
|
|||||||
@@ -0,0 +1,87 @@
|
|||||||
|
# =========================================================================
|
||||||
|
# CMock - Automatic Mock Generation for C
|
||||||
|
# ThrowTheSwitch.org
|
||||||
|
# Copyright (c) 2007-25 Mike Karlesky, Mark VanderVoord, & Greg Williams
|
||||||
|
# SPDX-License-Identifier: MIT
|
||||||
|
# =========================================================================
|
||||||
|
|
||||||
|
require File.expand_path(File.dirname(__FILE__)) + "/../test_helper"
|
||||||
|
require File.expand_path(File.dirname(__FILE__)) + '/../../lib/cmock_generator_plugin_array'
|
||||||
|
require File.expand_path(File.dirname(__FILE__)) + '/../../lib/cmock_generator_utils'
|
||||||
|
|
||||||
|
class UtilsStub
|
||||||
|
def helpers
|
||||||
|
{}
|
||||||
|
end
|
||||||
|
def arg_type_with_const(arg)
|
||||||
|
CMockGeneratorUtils.arg_type_with_const(arg)
|
||||||
|
end
|
||||||
|
def code_add_base_expectation(func)
|
||||||
|
"mock_retval_0"
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
describe CMockGeneratorPluginArray, "Verify Generation Of Mock Function Declarations Without Error Stubs By CMockPGeneratorluginArray Module" do
|
||||||
|
before do
|
||||||
|
#no strict ordering
|
||||||
|
@config = create_stub(
|
||||||
|
:when_ptr => :compare_data,
|
||||||
|
:enforce_strict_ordering => false,
|
||||||
|
:respond_to? => true,
|
||||||
|
:create_error_stubs => false)
|
||||||
|
|
||||||
|
@utils = UtilsStub.new
|
||||||
|
|
||||||
|
@cmock_generator_plugin_array = CMockGeneratorPluginArray.new(@config, @utils)
|
||||||
|
end
|
||||||
|
|
||||||
|
after do
|
||||||
|
end
|
||||||
|
|
||||||
|
it "add another mock function declaration for functions of style 'void func(int* tofu)'" do
|
||||||
|
function = {:name => "Pine",
|
||||||
|
:args => [{ :type => "int*",
|
||||||
|
:name => "tofu",
|
||||||
|
:ptr? => true,
|
||||||
|
}],
|
||||||
|
:return => test_return[:void],
|
||||||
|
:contains_ptr? => true }
|
||||||
|
|
||||||
|
expected = "#define #{function[:name]}_ExpectWithArray(tofu, tofu_Depth) #{function[:name]}_CMockExpectWithArray(__LINE__, tofu, (tofu_Depth))\n" +
|
||||||
|
"void #{function[:name]}_CMockExpectWithArray(UNITY_LINE_TYPE cmock_line, int* tofu, int tofu_Depth);\n"
|
||||||
|
returned = @cmock_generator_plugin_array.mock_function_declarations(function)
|
||||||
|
assert_equal(expected, returned)
|
||||||
|
end
|
||||||
|
|
||||||
|
it "add another mock function declaration for functions of style 'const char* func(int* tofu)'" do
|
||||||
|
function = {:name => "Pine",
|
||||||
|
:args => [{ :type => "int*",
|
||||||
|
:name => "tofu",
|
||||||
|
:ptr? => true,
|
||||||
|
}],
|
||||||
|
:return => test_return[:string],
|
||||||
|
:contains_ptr? => true }
|
||||||
|
|
||||||
|
expected = "#define #{function[:name]}_ExpectWithArrayAndReturn(tofu, tofu_Depth, cmock_retval) #{function[:name]}_CMockExpectWithArrayAndReturn(__LINE__, tofu, (tofu_Depth), cmock_retval)\n" +
|
||||||
|
"void #{function[:name]}_CMockExpectWithArrayAndReturn(UNITY_LINE_TYPE cmock_line, int* tofu, int tofu_Depth, const char* cmock_to_return);\n"
|
||||||
|
returned = @cmock_generator_plugin_array.mock_function_declarations(function)
|
||||||
|
assert_equal(expected, returned)
|
||||||
|
end
|
||||||
|
|
||||||
|
it "add another mock function declaration for functions of style 'const char* func(const int* tofu)'" do
|
||||||
|
function = {:name => "Pine",
|
||||||
|
:args => [{ :type => "const int*",
|
||||||
|
:name => "tofu",
|
||||||
|
:ptr? => true,
|
||||||
|
:const? => true,
|
||||||
|
}],
|
||||||
|
:return => test_return[:string],
|
||||||
|
:contains_ptr? => true }
|
||||||
|
|
||||||
|
expected = "#define #{function[:name]}_ExpectWithArrayAndReturn(tofu, tofu_Depth, cmock_retval) #{function[:name]}_CMockExpectWithArrayAndReturn(__LINE__, tofu, (tofu_Depth), cmock_retval)\n" +
|
||||||
|
"void #{function[:name]}_CMockExpectWithArrayAndReturn(UNITY_LINE_TYPE cmock_line, const int* tofu, int tofu_Depth, const char* cmock_to_return);\n"
|
||||||
|
returned = @cmock_generator_plugin_array.mock_function_declarations(function)
|
||||||
|
assert_equal(expected, returned)
|
||||||
|
end
|
||||||
|
|
||||||
|
end
|
||||||
@@ -0,0 +1,38 @@
|
|||||||
|
# =========================================================================
|
||||||
|
# CMock - Automatic Mock Generation for C
|
||||||
|
# ThrowTheSwitch.org
|
||||||
|
# Copyright (c) 2007-25 Mike Karlesky, Mark VanderVoord, & Greg Williams
|
||||||
|
# SPDX-License-Identifier: MIT
|
||||||
|
# =========================================================================
|
||||||
|
|
||||||
|
require File.expand_path(File.dirname(__FILE__)) + "/../test_helper"
|
||||||
|
require File.expand_path(File.dirname(__FILE__)) + '/../../lib/cmock_generator_plugin_expect_any_args.rb'
|
||||||
|
|
||||||
|
describe CMockGeneratorPluginExpectAnyArgs, "Verify Generation Of Mock Function Declarations Without Error Stubs By CMockGeneratorPluginExpectAnyArgs Module" do
|
||||||
|
|
||||||
|
before do
|
||||||
|
create_mocks :config, :utils
|
||||||
|
@config = create_stub(:respond_to? => true, :create_error_stubs => false)
|
||||||
|
@cmock_generator_plugin_expect_any_args = CMockGeneratorPluginExpectAnyArgs.new(@config, @utils)
|
||||||
|
end
|
||||||
|
|
||||||
|
after do
|
||||||
|
end
|
||||||
|
|
||||||
|
it "handle function declarations for functions without return values" do
|
||||||
|
function = {:name => "Mold", :args_string => "int meh", :args => [ :stuff ], :return => test_return[:void]}
|
||||||
|
expected = "#define Mold_ExpectAnyArgs() Mold_CMockExpectAnyArgs(__LINE__)\n"+
|
||||||
|
"void Mold_CMockExpectAnyArgs(UNITY_LINE_TYPE cmock_line);\n"
|
||||||
|
returned = @cmock_generator_plugin_expect_any_args.mock_function_declarations(function)
|
||||||
|
assert_equal(expected, returned)
|
||||||
|
end
|
||||||
|
|
||||||
|
it "handle function declarations for functions that returns something" do
|
||||||
|
function = {:name => "Fungus", :args_string => "int meh", :args => [ :stuff ], :return => test_return[:string]}
|
||||||
|
expected = "#define Fungus_ExpectAnyArgsAndReturn(cmock_retval) Fungus_CMockExpectAnyArgsAndReturn(__LINE__, cmock_retval)\n"+
|
||||||
|
"void Fungus_CMockExpectAnyArgsAndReturn(UNITY_LINE_TYPE cmock_line, const char* cmock_to_return);\n"
|
||||||
|
returned = @cmock_generator_plugin_expect_any_args.mock_function_declarations(function)
|
||||||
|
assert_equal(expected, returned)
|
||||||
|
end
|
||||||
|
|
||||||
|
end
|
||||||
@@ -0,0 +1,54 @@
|
|||||||
|
# =========================================================================
|
||||||
|
# CMock - Automatic Mock Generation for C
|
||||||
|
# ThrowTheSwitch.org
|
||||||
|
# Copyright (c) 2007-25 Mike Karlesky, Mark VanderVoord, & Greg Williams
|
||||||
|
# SPDX-License-Identifier: MIT
|
||||||
|
# =========================================================================
|
||||||
|
|
||||||
|
require File.expand_path(File.dirname(__FILE__)) + "/../test_helper"
|
||||||
|
require File.expand_path(File.dirname(__FILE__)) + '/../../lib/cmock_generator_plugin_expect'
|
||||||
|
|
||||||
|
describe CMockGeneratorPluginExpect, "Verify Generation Of Mock Function Declarations Without Error Stubs By CMockGeneratorPluginExpect Module" do
|
||||||
|
|
||||||
|
before do
|
||||||
|
create_mocks :config, :utils
|
||||||
|
|
||||||
|
@config = create_stub(
|
||||||
|
:when_ptr => :compare_data,
|
||||||
|
:enforce_strict_ordering => false,
|
||||||
|
:respond_to? => true,
|
||||||
|
:create_error_stubs => false,
|
||||||
|
:plugins => [ :expect ] )
|
||||||
|
|
||||||
|
@utils.expect :helpers, {}
|
||||||
|
@cmock_generator_plugin_expect = CMockGeneratorPluginExpect.new(@config, @utils)
|
||||||
|
end
|
||||||
|
|
||||||
|
after do
|
||||||
|
end
|
||||||
|
|
||||||
|
it "add mock function declarations for functions of style 'void func(void)'" do
|
||||||
|
function = {:name => "Maple", :args => [], :return => test_return[:void]}
|
||||||
|
expected = "#define Maple_Expect() Maple_CMockExpect(__LINE__)\n" +
|
||||||
|
"void Maple_CMockExpect(UNITY_LINE_TYPE cmock_line);\n"
|
||||||
|
returned = @cmock_generator_plugin_expect.mock_function_declarations(function)
|
||||||
|
assert_equal(expected, returned)
|
||||||
|
end
|
||||||
|
|
||||||
|
it "add mock function declarations for functions of style 'int func(void)'" do
|
||||||
|
function = {:name => "Spruce", :args => [], :return => test_return[:int]}
|
||||||
|
expected = "#define Spruce_ExpectAndReturn(cmock_retval) Spruce_CMockExpectAndReturn(__LINE__, cmock_retval)\n" +
|
||||||
|
"void Spruce_CMockExpectAndReturn(UNITY_LINE_TYPE cmock_line, int cmock_to_return);\n"
|
||||||
|
returned = @cmock_generator_plugin_expect.mock_function_declarations(function)
|
||||||
|
assert_equal(expected, returned)
|
||||||
|
end
|
||||||
|
|
||||||
|
it "add mock function declarations for functions of style 'const char* func(int tofu)'" do
|
||||||
|
function = {:name => "Pine", :args => ["int tofu"], :args_string => "int tofu", :args_call => 'tofu', :return => test_return[:string]}
|
||||||
|
expected = "#define Pine_ExpectAndReturn(tofu, cmock_retval) Pine_CMockExpectAndReturn(__LINE__, tofu, cmock_retval)\n" +
|
||||||
|
"void Pine_CMockExpectAndReturn(UNITY_LINE_TYPE cmock_line, int tofu, const char* cmock_to_return);\n"
|
||||||
|
returned = @cmock_generator_plugin_expect.mock_function_declarations(function)
|
||||||
|
assert_equal(expected, returned)
|
||||||
|
end
|
||||||
|
|
||||||
|
end
|
||||||
@@ -0,0 +1,42 @@
|
|||||||
|
# =========================================================================
|
||||||
|
# CMock - Automatic Mock Generation for C
|
||||||
|
# ThrowTheSwitch.org
|
||||||
|
# Copyright (c) 2007-25 Mike Karlesky, Mark VanderVoord, & Greg Williams
|
||||||
|
# SPDX-License-Identifier: MIT
|
||||||
|
# =========================================================================
|
||||||
|
|
||||||
|
require File.expand_path(File.dirname(__FILE__)) + "/../test_helper"
|
||||||
|
require File.expand_path(File.dirname(__FILE__)) + '/../../lib/cmock_generator_plugin_ignore_stateless'
|
||||||
|
|
||||||
|
describe CMockGeneratorPluginIgnoreStateless, "Verify Generation Of Mock Function Declarations Without Error Stubs By CMockGeneratorPluginIgnoreStateless Module" do
|
||||||
|
|
||||||
|
before do
|
||||||
|
create_mocks :config, :utils
|
||||||
|
@config = create_stub(:respond_to? => true, :create_error_stubs => false)
|
||||||
|
@cmock_generator_plugin_ignore_stateless = CMockGeneratorPluginIgnoreStateless.new(@config, @utils)
|
||||||
|
end
|
||||||
|
|
||||||
|
after do
|
||||||
|
end
|
||||||
|
|
||||||
|
it "handle function declarations for functions without return values" do
|
||||||
|
function = {:name => "Mold", :args_string => "void", :return => test_return[:void]}
|
||||||
|
expected = "#define Mold_Ignore() Mold_CMockIgnore()\n" +
|
||||||
|
"void Mold_CMockIgnore(void);\n" +
|
||||||
|
"#define Mold_StopIgnore() Mold_CMockStopIgnore()\n" +
|
||||||
|
"void Mold_CMockStopIgnore(void);\n"
|
||||||
|
returned = @cmock_generator_plugin_ignore_stateless.mock_function_declarations(function)
|
||||||
|
assert_equal(expected, returned)
|
||||||
|
end
|
||||||
|
|
||||||
|
it "handle function declarations for functions that returns something" do
|
||||||
|
function = {:name => "Fungus", :args_string => "void", :return => test_return[:string]}
|
||||||
|
expected = "#define Fungus_IgnoreAndReturn(cmock_retval) Fungus_CMockIgnoreAndReturn(cmock_retval)\n"+
|
||||||
|
"void Fungus_CMockIgnoreAndReturn(const char* cmock_to_return);\n" +
|
||||||
|
"#define Fungus_StopIgnore() Fungus_CMockStopIgnore()\n"+
|
||||||
|
"void Fungus_CMockStopIgnore(void);\n"
|
||||||
|
returned = @cmock_generator_plugin_ignore_stateless.mock_function_declarations(function)
|
||||||
|
assert_equal(expected, returned)
|
||||||
|
end
|
||||||
|
|
||||||
|
end
|
||||||
@@ -0,0 +1,42 @@
|
|||||||
|
# =========================================================================
|
||||||
|
# CMock - Automatic Mock Generation for C
|
||||||
|
# ThrowTheSwitch.org
|
||||||
|
# Copyright (c) 2007-25 Mike Karlesky, Mark VanderVoord, & Greg Williams
|
||||||
|
# SPDX-License-Identifier: MIT
|
||||||
|
# =========================================================================
|
||||||
|
|
||||||
|
require File.expand_path(File.dirname(__FILE__)) + "/../test_helper"
|
||||||
|
require File.expand_path(File.dirname(__FILE__)) + '/../../lib/cmock_generator_plugin_ignore'
|
||||||
|
|
||||||
|
describe CMockGeneratorPluginIgnore, "Verify Generation Of Mock Function Declarations Without Error Stubs By CMockGeneratorPluginIgnore Module" do
|
||||||
|
|
||||||
|
before do
|
||||||
|
create_mocks :config, :utils
|
||||||
|
@config = create_stub(:respond_to? => true, :create_error_stubs => false)
|
||||||
|
@cmock_generator_plugin_ignore = CMockGeneratorPluginIgnore.new(@config, @utils)
|
||||||
|
end
|
||||||
|
|
||||||
|
after do
|
||||||
|
end
|
||||||
|
|
||||||
|
it "handle function declarations for functions without return values" do
|
||||||
|
function = {:name => "Mold", :args_string => "void", :return => test_return[:void]}
|
||||||
|
expected = "#define Mold_Ignore() Mold_CMockIgnore()\n" +
|
||||||
|
"void Mold_CMockIgnore(void);\n" +
|
||||||
|
"#define Mold_StopIgnore() Mold_CMockStopIgnore()\n" +
|
||||||
|
"void Mold_CMockStopIgnore(void);\n"
|
||||||
|
returned = @cmock_generator_plugin_ignore.mock_function_declarations(function)
|
||||||
|
assert_equal(expected, returned)
|
||||||
|
end
|
||||||
|
|
||||||
|
it "handle function declarations for functions that returns something" do
|
||||||
|
function = {:name => "Fungus", :args_string => "void", :return => test_return[:string]}
|
||||||
|
expected = "#define Fungus_IgnoreAndReturn(cmock_retval) Fungus_CMockIgnoreAndReturn(__LINE__, cmock_retval)\n"+
|
||||||
|
"void Fungus_CMockIgnoreAndReturn(UNITY_LINE_TYPE cmock_line, const char* cmock_to_return);\n" +
|
||||||
|
"#define Fungus_StopIgnore() Fungus_CMockStopIgnore()\n"+
|
||||||
|
"void Fungus_CMockStopIgnore(void);\n"
|
||||||
|
returned = @cmock_generator_plugin_ignore.mock_function_declarations(function)
|
||||||
|
assert_equal(expected, returned)
|
||||||
|
end
|
||||||
|
|
||||||
|
end
|
||||||
@@ -27,7 +27,8 @@ describe CMockGeneratorPluginArray, "Verify CMockPGeneratorluginArray Module" do
|
|||||||
@config = create_stub(
|
@config = create_stub(
|
||||||
:when_ptr => :compare_data,
|
:when_ptr => :compare_data,
|
||||||
:enforce_strict_ordering => false,
|
:enforce_strict_ordering => false,
|
||||||
:respond_to? => true )
|
:respond_to? => true,
|
||||||
|
:create_error_stubs => true)
|
||||||
|
|
||||||
@utils = UtilsStub.new
|
@utils = UtilsStub.new
|
||||||
|
|
||||||
|
|||||||
@@ -17,6 +17,7 @@ describe CMockGeneratorPluginExpect, "Verify CMockGeneratorPluginExpect Module W
|
|||||||
:when_ptr => :compare_data,
|
:when_ptr => :compare_data,
|
||||||
:enforce_strict_ordering => false,
|
:enforce_strict_ordering => false,
|
||||||
:respond_to? => true,
|
:respond_to? => true,
|
||||||
|
:create_error_stubs => true,
|
||||||
:plugins => [ :expect ] )
|
:plugins => [ :expect ] )
|
||||||
|
|
||||||
@utils.expect :helpers, {}
|
@utils.expect :helpers, {}
|
||||||
|
|||||||
@@ -12,7 +12,7 @@ describe CMockGeneratorPluginExpectAnyArgs, "Verify CMockGeneratorPluginExpectAn
|
|||||||
|
|
||||||
before do
|
before do
|
||||||
create_mocks :config, :utils
|
create_mocks :config, :utils
|
||||||
@config = create_stub(:respond_to? => true)
|
@config = create_stub(:respond_to? => true, :create_error_stubs => true)
|
||||||
@cmock_generator_plugin_expect_any_args = CMockGeneratorPluginExpectAnyArgs.new(@config, @utils)
|
@cmock_generator_plugin_expect_any_args = CMockGeneratorPluginExpectAnyArgs.new(@config, @utils)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|||||||
@@ -17,6 +17,7 @@ describe CMockGeneratorPluginExpect, "Verify CMockGeneratorPluginExpect Module w
|
|||||||
:when_ptr => :compare_data,
|
:when_ptr => :compare_data,
|
||||||
:enforce_strict_ordering => true,
|
:enforce_strict_ordering => true,
|
||||||
:respond_to? => true,
|
:respond_to? => true,
|
||||||
|
:create_error_stubs => true,
|
||||||
:plugins => [ :expect, :expect_any_args ] )
|
:plugins => [ :expect, :expect_any_args ] )
|
||||||
|
|
||||||
@utils.expect :helpers, {}
|
@utils.expect :helpers, {}
|
||||||
|
|||||||
@@ -12,7 +12,7 @@ describe CMockGeneratorPluginIgnoreStateless, "Verify CMockGeneratorPluginIgnore
|
|||||||
|
|
||||||
before do
|
before do
|
||||||
create_mocks :config, :utils
|
create_mocks :config, :utils
|
||||||
@config = create_stub(:respond_to? => true)
|
@config = create_stub(:respond_to? => true, :create_error_stubs => true)
|
||||||
@cmock_generator_plugin_ignore_stateless = CMockGeneratorPluginIgnoreStateless.new(@config, @utils)
|
@cmock_generator_plugin_ignore_stateless = CMockGeneratorPluginIgnoreStateless.new(@config, @utils)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|||||||
@@ -12,7 +12,7 @@ describe CMockGeneratorPluginIgnore, "Verify CMockGeneratorPluginIgnore Module"
|
|||||||
|
|
||||||
before do
|
before do
|
||||||
create_mocks :config, :utils
|
create_mocks :config, :utils
|
||||||
@config = create_stub(:respond_to? => true)
|
@config = create_stub(:respond_to? => true, :create_error_stubs => true)
|
||||||
@cmock_generator_plugin_ignore = CMockGeneratorPluginIgnore.new(@config, @utils)
|
@cmock_generator_plugin_ignore = CMockGeneratorPluginIgnore.new(@config, @utils)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|||||||
@@ -20,7 +20,8 @@ describe CMockPluginManager, "Verify CMockPluginManager Module" do
|
|||||||
:when_ptr => :compare_data,
|
:when_ptr => :compare_data,
|
||||||
:enforce_strict_ordering => false,
|
:enforce_strict_ordering => false,
|
||||||
:ignore => :args_and_calls,
|
:ignore => :args_and_calls,
|
||||||
:exclude_setjmp_h => false
|
:exclude_setjmp_h => false,
|
||||||
|
:create_error_stubs => true
|
||||||
)
|
)
|
||||||
|
|
||||||
def @config.plugins
|
def @config.plugins
|
||||||
|
|||||||
Reference in New Issue
Block a user