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",