From 741b1067a3bf5dee758b1779aef36e03024397fe Mon Sep 17 00:00:00 2001 From: Mark VanderVoord Date: Wed, 23 Oct 2019 15:51:22 -0400 Subject: [PATCH] ExpectAnyArgs should not be generated for functions with no arguments (#201) --- docs/CMock_Summary.md | 6 +-- lib/cmock_generator_plugin_expect_any_args.rb | 37 +++++++++++-------- ...k_generator_plugin_expect_any_args_test.rb | 13 +++++-- 3 files changed, 34 insertions(+), 22 deletions(-) diff --git a/docs/CMock_Summary.md b/docs/CMock_Summary.md index e226551..1110be9 100644 --- a/docs/CMock_Summary.md +++ b/docs/CMock_Summary.md @@ -117,11 +117,11 @@ ExpectAnyArgs: This behaves just like the Expects calls, except that it doesn't really care what the arguments are that the mock gets called with. It still counts the number of times the mock is called and it still handles return values -if there are some. +if there are some. Note that an ExpectAnyArgs call is not generated for +functions that have no arguments, because it would act exactly like the existing +Expect and ExpectAndReturn calls. -* `void func(void)` => `void func_ExpectAnyArgs(void)` * `void func(params)` => `void func_ExpectAnyArgs(void)` -* `retval func(void)` => `void func_ExpectAnyArgsAndReturn(retval_to_return)` * `retval func(params)` => `void func_ExpectAnyArgsAndReturn(retval_to_return)` diff --git a/lib/cmock_generator_plugin_expect_any_args.rb b/lib/cmock_generator_plugin_expect_any_args.rb index f061307..fcab9d6 100644 --- a/lib/cmock_generator_plugin_expect_any_args.rb +++ b/lib/cmock_generator_plugin_expect_any_args.rb @@ -20,27 +20,32 @@ class CMockGeneratorPluginExpectAnyArgs end def mock_function_declarations(function) - if (function[:return][:void?]) - return "#define #{function[:name]}_ExpectAnyArgs() #{function[:name]}_CMockExpectAnyArgs(__LINE__)\n" + - "void #{function[:name]}_CMockExpectAnyArgs(UNITY_LINE_TYPE cmock_line);\n" - else - return "#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" + unless (function[:args].empty?) + if (function[:return][:void?]) + return "#define #{function[:name]}_ExpectAnyArgs() #{function[:name]}_CMockExpectAnyArgs(__LINE__)\n" + + "void #{function[:name]}_CMockExpectAnyArgs(UNITY_LINE_TYPE cmock_line);\n" + else + return "#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" + end end end def mock_interfaces(function) lines = "" - if (function[:return][:void?]) - lines << "void #{function[:name]}_CMockExpectAnyArgs(UNITY_LINE_TYPE cmock_line)\n{\n" - else - lines << "void #{function[:name]}_CMockExpectAnyArgsAndReturn(UNITY_LINE_TYPE cmock_line, #{function[:return][:str]})\n{\n" + unless (function[:args].empty?) + if (function[:return][:void?]) + lines << "void #{function[:name]}_CMockExpectAnyArgs(UNITY_LINE_TYPE cmock_line)\n{\n" + else + lines << "void #{function[:name]}_CMockExpectAnyArgsAndReturn(UNITY_LINE_TYPE cmock_line, #{function[:return][:str]})\n{\n" + end + lines << @utils.code_add_base_expectation(function[:name], true) + unless (function[:return][:void?]) + lines << " cmock_call_instance->ReturnVal = cmock_to_return;\n" + end + lines << " cmock_call_instance->ExpectAnyArgsBool = (int)1;\n" + lines << "}\n\n" end - lines << @utils.code_add_base_expectation(function[:name], true) - unless (function[:return][:void?]) - lines << " cmock_call_instance->ReturnVal = cmock_to_return;\n" - end - lines << " cmock_call_instance->ExpectAnyArgsBool = (int)1;\n" - lines << "}\n\n" + return lines end end diff --git a/test/unit/cmock_generator_plugin_expect_any_args_test.rb b/test/unit/cmock_generator_plugin_expect_any_args_test.rb index b7a15ed..fd0b7c7 100644 --- a/test/unit/cmock_generator_plugin_expect_any_args_test.rb +++ b/test/unit/cmock_generator_plugin_expect_any_args_test.rb @@ -26,15 +26,22 @@ describe CMockGeneratorPluginExpectAnyArgs, "Verify CMockGeneratorPluginExpectAn assert(!@cmock_generator_plugin_expect_any_args.respond_to?(:include_files)) end + it "ignore functions without arguments" do + function = {:name => "Mold", :args_string => "void", :args => [], :return => test_return[:void]} + expected = "" + returned = @cmock_generator_plugin_expect_any_args.mock_function_declarations(function) + assert_equal(expected, returned) + end + it "handle function declarations for functions without return values" do - function = {:name => "Mold", :args_string => "void", :return => test_return[:void]} + function = {:name => "Mold", :args_string => "int meh", :args => [ :stuff ], :return => test_return[:void]} expected = "#define Mold_ExpectAnyArgs() Mold_CMockExpectAnyArgs(__LINE__)\nvoid 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 => "void", :return => test_return[:string]} + 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) @@ -46,7 +53,7 @@ describe CMockGeneratorPluginExpectAnyArgs, "Verify CMockGeneratorPluginExpectAn end it "add a new mock interface for ignoring when function had no return value" do - function = {:name => "Slime", :args => [], :args_string => "void", :return => test_return[:void]} + function = {:name => "Slime", :args_string => "int meh", :args => [ :stuff ], :return => test_return[:void]} expected = ["void Slime_CMockExpectAnyArgs(UNITY_LINE_TYPE cmock_line)\n", "{\n", "mock_return_1",