From 2f0a44d7ce1b44ca765e16ad2f3a7fe6cb8186a2 Mon Sep 17 00:00:00 2001 From: Mark VanderVoord Date: Sun, 5 Jun 2016 14:12:37 -0400 Subject: [PATCH] Attempting to be smarter about recognizing pointer placement in the return values (though we're not going to officially system test some of the illegal combinations) --- lib/cmock_header_parser.rb | 32 ++++- test/system/test_compilation/const.h | 15 ++ test/unit/cmock_header_parser_test.rb | 189 ++++++++++++++++---------- 3 files changed, 155 insertions(+), 81 deletions(-) diff --git a/lib/cmock_header_parser.rb b/lib/cmock_header_parser.rb index 47e23bb..9c2ce4a 100644 --- a/lib/cmock_header_parser.rb +++ b/lib/cmock_header_parser.rb @@ -141,10 +141,8 @@ class CMockHeaderParser arg_array = arg.split arg_elements = arg_array - @c_attributes # split up words and remove known attributes args << { :type => (arg_type = arg_elements[0..-2].join(' ')), - :name => arg_elements[-1], - :ptr? => divine_ptr(arg_type), - :const? => divine_const(arg) - } + :name => arg_elements[-1] + }.merge(divine_ptr_and_const(arg)) end return args end @@ -162,6 +160,28 @@ class CMockHeaderParser return true end + def divine_ptr_and_const(arg) + divination = { :ptr? => false, :const? => false, :const_ptr? => false } + + #first check if there is a pointer present and that it's not part of a C string or function definition + #divination[:ptr?] = (arg.split[0..-2].join.include?('*') && !arg.gsub(/(const|char|\*|\s)+/,'').empty?) + divination[:ptr?] = (arg.include?('*') && !arg.gsub(/(const|char|\*|\s)+/,'').empty?) + + #if there isn't a const that isn't part of a larger word, we're done + return divination if !(/(?:^|\s|\*)const(?:\*|\s|$)/ =~ arg) + divination[:const?] = true + + # check const comes after * indicating const ptr + if (/\*\s*const/ =~ arg) + divination[:const_ptr?] = true + + #check const comes before * indicating also const data + divination[:const?] = (/const(?:\w|\s)*\*/ =~ arg) ? true : false + end + + return divination + end + def clean_args(arg_list) if ((@local_as_void.include?(arg_list.strip)) or (arg_list.empty?)) return 'void' @@ -236,11 +256,9 @@ class CMockHeaderParser rettype = 'void' if (@local_as_void.include?(rettype.strip)) decl[:return] = { :type => rettype, :name => 'cmock_to_return', - :ptr? => divine_ptr(rettype), - :const? => divine_const(full_retval), :str => "#{rettype} cmock_to_return", :void? => (rettype == 'void') - } + }.merge(divine_ptr_and_const(full_retval)) #remove default argument statements from mock definitions args.gsub!(/=\s*[a-zA-Z0-9_\.]+\s*/, ' ') diff --git a/test/system/test_compilation/const.h b/test/system/test_compilation/const.h index 4616b1c..71426bc 100644 --- a/test/system/test_compilation/const.h +++ b/test/system/test_compilation/const.h @@ -20,3 +20,18 @@ void const_variants2( struct _DUMMY_T const * const param1, const unsigned long int const * const param2, const struct _DUMMY_T const * param3 ); + +const int * const_retval1(void); /* nicety version for pointer to constant int */ +int const * const_retval2(void); /* formal version for pointer to constant int */ +//int * const const_retval3(void); /* formal version for constant pointer to int */ +//int const * const const_retval4(void); /* formal version for constant pointer to constant int */ + +const int* const_retval5(void); /* sticky-left nicety version for pointer to constant int */ +int const* const_retval6(void); /* sticky-left formal version for pointer to constant int */ +//int* const const_retval7(void); /* sticky-left formal version for constant pointer to int */ +//int const* const const_retval8(void); /* sticky-left formal version for constant pointer to constant int */ + +const int *const_retval9(void); /* sticky-right nicety version for pointer to constant int */ +int const *const_retvalA(void); /* sticky-right formal version for pointer to constant int */ +//int *const const_retvalB(void); /* sticky-right formal version for constant pointer to int */ +//int const *const const_retvalC(void); /* sticky-right formal version for constant pointer to constant int */ diff --git a/test/unit/cmock_header_parser_test.rb b/test/unit/cmock_header_parser_test.rb index f9149e6..22b2ac5 100644 --- a/test/unit/cmock_header_parser_test.rb +++ b/test/unit/cmock_header_parser_test.rb @@ -478,12 +478,13 @@ describe CMockHeaderParser, "Verify CMockHeaderParser Module" do :name => 'cmock_to_return', :ptr? => false, :const? => false, + :const_ptr? => false, :str => "void cmock_to_return", :void? => true }, :modifier=>"", :contains_ptr? => false, - :args=>[{:type=>"int", :name=>"a", :ptr? => false, :const? => false}], + :args=>[{:type=>"int", :name=>"a", :ptr? => false, :const? => false, :const_ptr? => false}], :args_string=>"int a", :args_call=>"a"} assert_equal(expected, @parser.parse_declaration(source)) @@ -497,6 +498,7 @@ describe CMockHeaderParser, "Verify CMockHeaderParser Module" do :name => 'cmock_to_return', :ptr? => false, :const? => false, + :const_ptr? => false, :str => "int cmock_to_return", :void? => false }, @@ -516,12 +518,13 @@ describe CMockHeaderParser, "Verify CMockHeaderParser Module" do :name => 'cmock_to_return', :ptr? => false, :const? => false, + :const_ptr? => false, :str => "char cmock_to_return", :void? => false }, :modifier=>"", :contains_ptr? => true, - :args=>[{:type=>"MY_FUNKY_VOID*", :name=>"bluh", :ptr? => true, :const? => false}], + :args=>[{:type=>"MY_FUNKY_VOID*", :name=>"bluh", :ptr? => true, :const? => false, :const_ptr? => false}], :args_string=>"MY_FUNKY_VOID* bluh", :args_call=>"bluh" } assert_equal(expected, @parser.parse_declaration(source)) @@ -614,13 +617,14 @@ describe CMockHeaderParser, "Verify CMockHeaderParser Module" do :name => 'cmock_to_return', :ptr? => false, :const? => false, + :const_ptr? => false, :str => "int cmock_to_return", :void? => false }, :modifier=>"", :contains_ptr? => false, - :args=>[ {:type=>"int", :name=>"a", :ptr? => false, :const? => false}, - {:type=>"unsigned int", :name=>"b", :ptr? => false, :const? => false} + :args=>[ {:type=>"int", :name=>"a", :ptr? => false, :const? => false, :const_ptr? => false}, + {:type=>"unsigned int", :name=>"b", :ptr? => false, :const? => false, :const_ptr? => false} ], :args_string=>"int a, unsigned int b", :args_call=>"a, b" } @@ -635,15 +639,16 @@ describe CMockHeaderParser, "Verify CMockHeaderParser Module" do :name => 'cmock_to_return', :ptr? => false, :const? => false, + :const_ptr? => false, :str => "void cmock_to_return", :void? => true }, :name=>"FunkyChicken", :modifier=>"", :contains_ptr? => false, - :args=>[ {:type=>"uint", :name=>"la", :ptr? => false, :const? => false}, - {:type=>"int", :name=>"de", :ptr? => false, :const? => false}, - {:type=>"bool", :name=>"da", :ptr? => false, :const? => false} + :args=>[ {:type=>"uint", :name=>"la", :ptr? => false, :const? => false, :const_ptr? => false}, + {:type=>"int", :name=>"de", :ptr? => false, :const? => false, :const_ptr? => false}, + {:type=>"bool", :name=>"da", :ptr? => false, :const? => false, :const_ptr? => false} ], :args_string=>"uint la, int de, bool da", :args_call=>"la, de, da" } @@ -658,6 +663,7 @@ describe CMockHeaderParser, "Verify CMockHeaderParser Module" do :name => 'cmock_to_return', :ptr? => false, :const? => false, + :const_ptr? => false, :str => "void cmock_to_return", :void? => true }, @@ -678,14 +684,15 @@ describe CMockHeaderParser, "Verify CMockHeaderParser Module" do :name => 'cmock_to_return', :ptr? => false, :const? => true, + :const_ptr? => false, :str => "int cmock_to_return", :void? => false }, :name=>"TheMatrix", :modifier=>"const", :contains_ptr? => true, - :args=>[ {:type=>"int", :name=>"Trinity", :ptr? => false, :const? => false}, - {:type=>"unsigned int*", :name=>"Neo", :ptr? => true, :const? => false} + :args=>[ {:type=>"int", :name=>"Trinity", :ptr? => false, :const? => false, :const_ptr? => false}, + {:type=>"unsigned int*", :name=>"Neo", :ptr? => true, :const? => false, :const_ptr? => false} ], :args_string=>"int Trinity, unsigned int* Neo", :args_call=>"Trinity, Neo" } @@ -700,6 +707,7 @@ describe CMockHeaderParser, "Verify CMockHeaderParser Module" do :name => 'cmock_to_return', :ptr? => false, :const? => true, + :const_ptr? => false, :str => "int cmock_to_return", :void? => false }, @@ -707,8 +715,8 @@ describe CMockHeaderParser, "Verify CMockHeaderParser Module" do :modifier=>"const", :c_calling_convention=>"__stdcall", :contains_ptr? => true, - :args=>[ {:type=>"int", :name=>"Trinity", :ptr? => false, :const? => false}, - {:type=>"unsigned int*", :name=>"Neo", :ptr? => true, :const? => false} + :args=>[ {:type=>"int", :name=>"Trinity", :ptr? => false, :const? => false, :const_ptr? => false}, + {:type=>"unsigned int*", :name=>"Neo", :ptr? => true, :const? => false, :const_ptr? => false} ], :args_string=>"int Trinity, unsigned int* Neo", :args_call=>"Trinity, Neo" } @@ -725,14 +733,15 @@ describe CMockHeaderParser, "Verify CMockHeaderParser Module" do :name => 'cmock_to_return', :ptr? => false, :const? => true, + :const_ptr? => false, :str => "int cmock_to_return", :void? => false }, :name=>"TheMatrix", :modifier=>"const", :contains_ptr? => true, - :args=>[ {:type=>"int", :name=>"Trinity", :ptr? => false, :const? => false}, - {:type=>"unsigned int*", :name=>"Neo", :ptr? => true, :const? => false} + :args=>[ {:type=>"int", :name=>"Trinity", :ptr? => false, :const? => false, :const_ptr? => false}, + {:type=>"unsigned int*", :name=>"Neo", :ptr? => true, :const? => false, :const_ptr? => false} ], :args_string=>"int Trinity, unsigned int* Neo", :args_call=>"Trinity, Neo" }, @@ -741,14 +750,15 @@ describe CMockHeaderParser, "Verify CMockHeaderParser Module" do :name => 'cmock_to_return', :ptr? => false, :const? => false, + :const_ptr? => false, :str => "int cmock_to_return", :void? => false }, :name=>"Morpheus", :modifier=>"", :contains_ptr? => true, - :args=>[ {:type=>"int", :name=>"cmock_arg1", :ptr? => false, :const? => false}, - {:type=>"unsigned int*", :name=>"cmock_arg2", :ptr? => true, :const? => false} + :args=>[ {:type=>"int", :name=>"cmock_arg1", :ptr? => false, :const? => false, :const_ptr? => false}, + {:type=>"unsigned int*", :name=>"cmock_arg2", :ptr? => true, :const? => false, :const_ptr? => false} ], :args_string=>"int cmock_arg1, unsigned int* cmock_arg2", :args_call=>"cmock_arg1, cmock_arg2" @@ -767,13 +777,14 @@ describe CMockHeaderParser, "Verify CMockHeaderParser Module" do :name => 'cmock_to_return', :ptr? => false, :const? => true, + :const_ptr? => false, :str => "int cmock_to_return", :void? => false }, :modifier=>"const", :contains_ptr? => true, - :args=>[ {:type=>"int", :name=>"Trinity", :ptr? => false, :const? => false}, - {:type=>"unsigned int*", :name=>"Neo", :ptr? => true, :const? => false} + :args=>[ {:type=>"int", :name=>"Trinity", :ptr? => false, :const? => false, :const_ptr? => false}, + {:type=>"unsigned int*", :name=>"Neo", :ptr? => true, :const? => false, :const_ptr? => false} ], :args_string=>"int Trinity, unsigned int* Neo", :args_call=>"Trinity, Neo" @@ -781,7 +792,7 @@ describe CMockHeaderParser, "Verify CMockHeaderParser Module" do assert_equal(expected, @parser.parse("module", source)[:functions]) end - it "should properly handle const applied after asterisk in return type" do + it "should properly handle const applied after asterisk in return type (not legal C, but sometimes used)" do source = "int * const PorkRoast(void);\n" @@ -791,6 +802,7 @@ describe CMockHeaderParser, "Verify CMockHeaderParser Module" do :name => 'cmock_to_return', :ptr? => true, :const? => false, + :const_ptr? => true, :str => "int* cmock_to_return", :void? => false }, @@ -816,12 +828,13 @@ describe CMockHeaderParser, "Verify CMockHeaderParser Module" do :name => 'cmock_to_return', :ptr? => false, :const? => false, + :const_ptr? => false, :str => "void cmock_to_return", :void? => true }, :modifier=>"", :contains_ptr? => false, - :args=>[ {:type=>"int", :name=>"SingAlong", :ptr? => false, :const? => false} ], + :args=>[ {:type=>"int", :name=>"SingAlong", :ptr? => false, :const? => false, :const_ptr? => false} ], :args_string=>"int SingAlong", :args_call=>"SingAlong" }, @@ -830,6 +843,7 @@ describe CMockHeaderParser, "Verify CMockHeaderParser Module" do :name => 'cmock_to_return', :ptr? => false, :const? => false, + :const_ptr? => false, :str => "int cmock_to_return", :void? => false }, @@ -854,13 +868,14 @@ describe CMockHeaderParser, "Verify CMockHeaderParser Module" do :name => 'cmock_to_return', :ptr? => false, :const? => false, + :const_ptr? => false, :str => "int cmock_to_return", :void? => false }, :name=>"DrHorrible", :modifier=>"", :contains_ptr? => false, - :args=>[ {:type=>"struct SingAlong", :name=>"Blog", :ptr? => false, :const? => false} ], + :args=>[ {:type=>"struct SingAlong", :name=>"Blog", :ptr? => false, :const? => false, :const_ptr? => false} ], :args_string=>"struct SingAlong Blog", :args_call=>"Blog" }, @@ -869,13 +884,14 @@ describe CMockHeaderParser, "Verify CMockHeaderParser Module" do :name => 'cmock_to_return', :ptr? => false, :const? => false, + :const_ptr? => false, :str => "void cmock_to_return", :void? => true }, :name=>"Penny", :modifier=>"", :contains_ptr? => true, - :args=>[ {:type=>"struct _KeepYourHeadUp_*", :name=>"BillyBuddy", :ptr? => true, :const? => true} ], + :args=>[ {:type=>"struct _KeepYourHeadUp_*", :name=>"BillyBuddy", :ptr? => true, :const? => true, :const_ptr? => true} ], :args_string=>"struct const _KeepYourHeadUp_* const BillyBuddy", :args_call=>"BillyBuddy" }, @@ -884,6 +900,7 @@ describe CMockHeaderParser, "Verify CMockHeaderParser Module" do :name => 'cmock_to_return', :ptr? => false, :const? => false, + :const_ptr? => false, :str => "struct TheseArentTheHammer cmock_to_return", :void? => false }, @@ -904,14 +921,15 @@ describe CMockHeaderParser, "Verify CMockHeaderParser Module" do :name => 'cmock_to_return', :ptr? => false, :const? => false, + :const_ptr? => false, :str => "void cmock_to_return", :void? => true }, :name=>"OrangePeel", :modifier=>"", :contains_ptr? => true, - :args=>[ {:type=>"union STARS_AND_STRIPES*", :name=>"a", :ptr? => true, :const? => false}, - {:type=>"union AFL_CIO", :name=>"b", :ptr? => false, :const? => false} + :args=>[ {:type=>"union STARS_AND_STRIPES*", :name=>"a", :ptr? => true, :const? => false, :const_ptr? => false}, + {:type=>"union AFL_CIO", :name=>"b", :ptr? => false, :const? => false, :const_ptr? => false} ], :args_string=>"union STARS_AND_STRIPES* a, union AFL_CIO b", :args_call=>"a, b" }] @@ -926,17 +944,18 @@ describe CMockHeaderParser, "Verify CMockHeaderParser Module" do :name => 'cmock_to_return', :ptr? => false, :const? => false, + :const_ptr? => false, :str => "void cmock_to_return", :void? => true }, :name=>"ApplePeel", :modifier=>"", :contains_ptr? => true, - :args=>[ {:type=> "unsigned int", :name=>"const_param", :ptr? => false, :const? => true}, - {:type=>"int", :name=>"int_param", :ptr? => false, :const? => false}, - {:type=>"int", :name=>"integer", :ptr? => false, :const? => false}, - {:type=>"char", :name=>"character", :ptr? => false, :const? => false}, - {:type=>"int*", :name=>"constant", :ptr? => true, :const? => false} + :args=>[ {:type=> "unsigned int", :name=>"const_param", :ptr? => false, :const? => true, :const_ptr? => false}, + {:type=>"int", :name=>"int_param", :ptr? => false, :const? => false, :const_ptr? => false}, + {:type=>"int", :name=>"integer", :ptr? => false, :const? => false, :const_ptr? => false}, + {:type=>"char", :name=>"character", :ptr? => false, :const? => false, :const_ptr? => false}, + {:type=>"int*", :name=>"constant", :ptr? => true, :const? => false, :const_ptr? => true} ], :args_string=>"const unsigned int const_param, int int_param, int integer, char character, int* const constant", :args_call=>"const_param, int_param, integer, character, constant" }] @@ -951,17 +970,18 @@ describe CMockHeaderParser, "Verify CMockHeaderParser Module" do :name => 'cmock_to_return', :ptr? => false, :const? => false, + :const_ptr? => false, :str => "void cmock_to_return", :void? => true }, :name=>"LemonPeel", :modifier=>"", :contains_ptr? => true, - :args=>[ {:type=>"integer", :name=>"param", :ptr? => false, :const? => false}, - {:type=>"character", :name=>"thing", :ptr? => false, :const? => false}, - {:type=>"longint*", :name=>"junk", :ptr? => true, :const? => false}, - {:type=>"constant", :name=>"value", :ptr? => false, :const? => false}, - {:type=>"int32_t", :name=>"number", :ptr? => false, :const? => true} + :args=>[ {:type=>"integer", :name=>"param", :ptr? => false, :const? => false, :const_ptr? => false}, + {:type=>"character", :name=>"thing", :ptr? => false, :const? => false, :const_ptr? => false}, + {:type=>"longint*", :name=>"junk", :ptr? => true, :const? => false, :const_ptr? => false}, + {:type=>"constant", :name=>"value", :ptr? => false, :const? => false, :const_ptr? => false}, + {:type=>"int32_t", :name=>"number", :ptr? => false, :const? => true, :const_ptr? => false} ], :args_string=>"integer param, character thing, longint* junk, constant value, int32_t const number", :args_call=>"param, thing, junk, value, number" }] @@ -976,16 +996,17 @@ describe CMockHeaderParser, "Verify CMockHeaderParser Module" do :name => 'cmock_to_return', :ptr? => false, :const? => false, + :const_ptr? => false, :str => "void cmock_to_return", :void? => true }, :name=>"CoinOperated", :modifier=>"", :contains_ptr? => false, - :args=>[ {:type=>"signed char", :name=>"abc", :ptr? => false, :const? => false}, - {:type=>"unsigned long int", :name=>"xyz_123", :ptr? => false, :const? => true}, - {:type=>"unsigned int", :name=>"abc_123", :ptr? => false, :const? => true}, - {:type=>"long long", :name=>"arm_of_the_law", :ptr? => false, :const? => false} + :args=>[ {:type=>"signed char", :name=>"abc", :ptr? => false, :const? => false, :const_ptr? => false}, + {:type=>"unsigned long int", :name=>"xyz_123", :ptr? => false, :const? => true, :const_ptr? => false}, + {:type=>"unsigned int", :name=>"abc_123", :ptr? => false, :const? => true, :const_ptr? => false}, + {:type=>"long long", :name=>"arm_of_the_law", :ptr? => false, :const? => false, :const_ptr? => false} ], :args_string=>"signed char abc, const unsigned long int xyz_123, unsigned int const abc_123, long long arm_of_the_law", :args_call=>"abc, xyz_123, abc_123, arm_of_the_law" }] @@ -1000,16 +1021,17 @@ describe CMockHeaderParser, "Verify CMockHeaderParser Module" do :name => 'cmock_to_return', :ptr? => false, :const? => false, + :const_ptr? => false, :str => "void cmock_to_return", :void? => true }, :name=>"CardOperated", :modifier=>"", :contains_ptr? => true, - :args=>[ {:type=>"CUSTOM_TYPE", :name=>"abc", :ptr? => false, :const? => false}, - {:type=>"CUSTOM_TYPE*", :name=>"xyz_123", :ptr? => true, :const? => false}, - {:type=>"CUSTOM_TYPE", :name=>"abcxyz", :ptr? => false, :const? => true}, - {:type=>"struct CUSTOM_TYPE const*", :name=>"abc123", :ptr? => true, :const? => true} + :args=>[ {:type=>"CUSTOM_TYPE", :name=>"abc", :ptr? => false, :const? => false, :const_ptr? => false}, + {:type=>"CUSTOM_TYPE*", :name=>"xyz_123", :ptr? => true, :const? => false, :const_ptr? => false}, + {:type=>"CUSTOM_TYPE", :name=>"abcxyz", :ptr? => false, :const? => true, :const_ptr? => false}, + {:type=>"struct CUSTOM_TYPE const*", :name=>"abc123", :ptr? => true, :const? => true, :const_ptr? => true} ], :args_string=>"CUSTOM_TYPE abc, CUSTOM_TYPE* xyz_123, CUSTOM_TYPE const abcxyz, struct CUSTOM_TYPE const* const abc123", :args_call=>"abc, xyz_123, abcxyz, abc123" }] @@ -1024,16 +1046,17 @@ describe CMockHeaderParser, "Verify CMockHeaderParser Module" do :name => 'cmock_to_return', :ptr? => false, :const? => false, + :const_ptr? => false, :str => "void cmock_to_return", :void? => true }, :name=>"KeyOperated", :modifier=>"", :contains_ptr? => true, - :args=>[ {:type=>"CUSTOM_TYPE*", :name=>"thing1", :ptr? => true, :const? => false}, - {:type=>"int*", :name=>"thing2", :ptr? => true, :const? => false}, - {:type=>"char*", :name=>"thing3", :ptr? => false, :const? => false}, #THIS one will likely change in the future when we improve multidimensional array support - {:type=>"int**", :name=>"thing4", :ptr? => true, :const? => false} #THIS one will likely change in the future when we improve multidimensional array support + :args=>[ {:type=>"CUSTOM_TYPE*", :name=>"thing1", :ptr? => true, :const? => false, :const_ptr? => false}, + {:type=>"int*", :name=>"thing2", :ptr? => true, :const? => false, :const_ptr? => false}, + {:type=>"char*", :name=>"thing3", :ptr? => true, :const? => false, :const_ptr? => false}, #THIS one will likely change in the future when we improve multidimensional array support + {:type=>"int**", :name=>"thing4", :ptr? => true, :const? => false, :const_ptr? => false} #THIS one will likely change in the future when we improve multidimensional array support ], :args_string=>"CUSTOM_TYPE* thing1, int* thing2, char* thing3, int** thing4", :args_call=>"thing1, thing2, thing3, thing4" }] @@ -1048,15 +1071,16 @@ describe CMockHeaderParser, "Verify CMockHeaderParser Module" do :name => 'cmock_to_return', :ptr? => false, :const? => false, + :const_ptr? => false, :str => "void cmock_to_return", :void? => true }, :name=>"Cheese", :modifier=>"", :contains_ptr? => false, - :args=>[ {:type=>"unsigned CUSTOM_TYPE", :name=>"abc", :ptr? => false, :const? => false}, - {:type=>"unsigned", :name=>"xyz", :ptr? => false, :const? => false}, - {:type=>"CUSTOM_TYPE1 CUSTOM_TYPE2", :name=>"pdq", :ptr? => false, :const? => false} + :args=>[ {:type=>"unsigned CUSTOM_TYPE", :name=>"abc", :ptr? => false, :const? => false, :const_ptr? => false}, + {:type=>"unsigned", :name=>"xyz", :ptr? => false, :const? => false, :const_ptr? => false}, + {:type=>"CUSTOM_TYPE1 CUSTOM_TYPE2", :name=>"pdq", :ptr? => false, :const? => false, :const_ptr? => false} ], :args_string=>"unsigned CUSTOM_TYPE abc, unsigned xyz, CUSTOM_TYPE1 CUSTOM_TYPE2 pdq", :args_call=>"abc, xyz, pdq" }] @@ -1071,13 +1095,14 @@ describe CMockHeaderParser, "Verify CMockHeaderParser Module" do :name => 'cmock_to_return', :ptr? => false, :const? => false, + :const_ptr? => false, :str => "void cmock_to_return", :void? => true }, :name=>"FunkyTurkey", :modifier=>"", :contains_ptr? => false, - :args=>[ {:type=>"cmock_module_func_ptr1", :name=>"func_ptr", :ptr? => false, :const? => false} + :args=>[ {:type=>"cmock_module_func_ptr1", :name=>"func_ptr", :ptr? => false, :const? => false, :const_ptr? => false} ], :args_string=>"cmock_module_func_ptr1 func_ptr", :args_call=>"func_ptr" }] @@ -1094,13 +1119,14 @@ describe CMockHeaderParser, "Verify CMockHeaderParser Module" do :name => 'cmock_to_return', :ptr? => false, :const? => false, + :const_ptr? => false, :str => "void cmock_to_return", :void? => true }, :name=>"FunkyTurkey", :modifier=>"", :contains_ptr? => false, - :args=>[ {:type=>"cmock_module_func_ptr1", :name=>"func_ptr", :ptr? => false, :const? => false} + :args=>[ {:type=>"cmock_module_func_ptr1", :name=>"func_ptr", :ptr? => false, :const? => false, :const_ptr? => false} ], :args_string=>"cmock_module_func_ptr1 func_ptr", :args_call=>"func_ptr" }] @@ -1117,13 +1143,14 @@ describe CMockHeaderParser, "Verify CMockHeaderParser Module" do :name => 'cmock_to_return', :ptr? => false, :const? => false, + :const_ptr? => false, :str => "void cmock_to_return", :void? => true }, :name=>"FunkyTurkey", :modifier=>"", :contains_ptr? => false, - :args=>[ {:type=>"cmock_module_func_ptr1", :name=>"func_ptr", :ptr? => false, :const? => false} + :args=>[ {:type=>"cmock_module_func_ptr1", :name=>"func_ptr", :ptr? => false, :const? => false, :const_ptr? => false} ], :args_string=>"cmock_module_func_ptr1 func_ptr", :args_call=>"func_ptr" }] @@ -1140,13 +1167,14 @@ describe CMockHeaderParser, "Verify CMockHeaderParser Module" do :name => 'cmock_to_return', :ptr? => false, :const? => false, + :const_ptr? => false, :str => "void cmock_to_return", :void? => true }, :name=>"FunkyChicken", :modifier=>"", :contains_ptr? => false, - :args=>[ {:type=>"cmock_module_func_ptr1", :name=>"func_ptr", :ptr? => false, :const? => true} + :args=>[ {:type=>"cmock_module_func_ptr1", :name=>"func_ptr", :ptr? => false, :const? => true, :const_ptr? => false} ], :args_string=>"cmock_module_func_ptr1 const func_ptr", :args_call=>"func_ptr" }] @@ -1163,13 +1191,14 @@ describe CMockHeaderParser, "Verify CMockHeaderParser Module" do # :name => 'cmock_to_return', # :ptr? => false, # :const? => false, + # :const_ptr? => false, # :str => "void cmock_to_return", # :void? => true # }, # :name=>"FunkyParrot", # :modifier=>"", # :contains_ptr? => false, - # :args=>[ {:type=>"cmock_module_func_ptr1", :name=>"func_ptr", :ptr? => false, :const? => false} + # :args=>[ {:type=>"cmock_module_func_ptr1", :name=>"func_ptr", :ptr? => false, :const? => false, :const_ptr? => false} # ], # :args_string=>"cmock_module_func_ptr1 func_ptr", # :args_call=>"func_ptr" }] @@ -1186,14 +1215,15 @@ describe CMockHeaderParser, "Verify CMockHeaderParser Module" do :name => 'cmock_to_return', :ptr? => false, :const? => false, + :const_ptr? => false, :str => "void cmock_to_return", :void? => true }, :name=>"FunkyBudgie", :modifier=>"", :contains_ptr? => false, - :args=>[ {:type=>"cmock_module_func_ptr1", :name=>"func_ptr1", :ptr? => false, :const? => false}, - {:type=>"cmock_module_func_ptr2", :name=>"func_ptr2", :ptr? => false, :const? => false} + :args=>[ {:type=>"cmock_module_func_ptr1", :name=>"func_ptr1", :ptr? => false, :const? => false, :const_ptr? => false}, + {:type=>"cmock_module_func_ptr2", :name=>"func_ptr2", :ptr? => false, :const? => false, :const_ptr? => false} ], :args_string=>"cmock_module_func_ptr1 func_ptr1, cmock_module_func_ptr2 func_ptr2", :args_call=>"func_ptr1, func_ptr2" }] @@ -1210,15 +1240,16 @@ describe CMockHeaderParser, "Verify CMockHeaderParser Module" do :name => 'cmock_to_return', :ptr? => true, :const? => false, + :const_ptr? => false, :str => "struct mytype* cmock_to_return", :void? => false }, :name=>"FunkyRobin", :modifier=>"", :contains_ptr? => false, - :args=>[ {:type=>"uint16_t", :name=>"num1", :ptr? => false, :const? => false}, - {:type=>"uint16_t", :name=>"num2", :ptr? => false, :const? => false}, - {:type=>"cmock_module_func_ptr1", :name=>"func_ptr1", :ptr? => false, :const? => false} + :args=>[ {:type=>"uint16_t", :name=>"num1", :ptr? => false, :const? => false, :const_ptr? => false}, + {:type=>"uint16_t", :name=>"num2", :ptr? => false, :const? => false, :const_ptr? => false}, + {:type=>"cmock_module_func_ptr1", :name=>"func_ptr1", :ptr? => false, :const? => false, :const_ptr? => false} ], :args_string=>"uint16_t num1, uint16_t num2, cmock_module_func_ptr1 func_ptr1", :args_call=>"num1, num2, func_ptr1" }] @@ -1235,13 +1266,14 @@ describe CMockHeaderParser, "Verify CMockHeaderParser Module" do :name => 'cmock_to_return', :ptr? => false, :const? => false, + :const_ptr? => false, :str => "void cmock_to_return", :void? => true }, :name=>"FunkyFowl", :modifier=>"", :contains_ptr? => false, - :args=>[ {:type=>"cmock_module_func_ptr1", :name=>"cmock_arg1", :ptr? => false, :const? => true} + :args=>[ {:type=>"cmock_module_func_ptr1", :name=>"cmock_arg1", :ptr? => false, :const? => true, :const_ptr? => false} ], :args_string=>"cmock_module_func_ptr1 const cmock_arg1", :args_call=>"cmock_arg1" }] @@ -1258,13 +1290,14 @@ describe CMockHeaderParser, "Verify CMockHeaderParser Module" do :name => 'cmock_to_return', :ptr? => false, :const? => false, + :const_ptr? => false, :str => "cmock_module_func_ptr1 cmock_to_return", :void? => false }, :name=>"FunkyPidgeon", :modifier=>"", :contains_ptr? => false, - :args=>[ {:type=>"char", :name=>"op_code", :ptr? => false, :const? => true} + :args=>[ {:type=>"char", :name=>"op_code", :ptr? => false, :const? => true, :const_ptr? => false} ], :args_string=>"const char op_code", :args_call=>"op_code" }] @@ -1281,6 +1314,7 @@ describe CMockHeaderParser, "Verify CMockHeaderParser Module" do :name => 'cmock_to_return', :ptr? => false, :const? => false, + :const_ptr? => false, :str => "cmock_module_func_ptr1 cmock_to_return", :void? => false }, @@ -1303,6 +1337,7 @@ describe CMockHeaderParser, "Verify CMockHeaderParser Module" do :name => 'cmock_to_return', :ptr? => false, :const? => false, + :const_ptr? => false, :str => "cmock_module_func_ptr1 cmock_to_return", :void? => false }, @@ -1325,14 +1360,15 @@ describe CMockHeaderParser, "Verify CMockHeaderParser Module" do :name => 'cmock_to_return', :ptr? => false, :const? => false, + :const_ptr? => false, :str => "cmock_module_func_ptr1 cmock_to_return", :void? => false }, :name=>"FunkyMacaw", :modifier=>"", :contains_ptr? => true, - :args=>[ {:type=>"double*", :name=>"foo", :ptr? => true, :const? => false}, - {:type=>"THING*", :name=>"bar", :ptr? => true, :const? => false} + :args=>[ {:type=>"double*", :name=>"foo", :ptr? => true, :const? => false, :const_ptr? => false}, + {:type=>"THING*", :name=>"bar", :ptr? => true, :const? => false, :const_ptr? => false} ], :args_string=>"double* foo, THING* bar", :args_call=>"foo, bar" }] @@ -1349,17 +1385,18 @@ describe CMockHeaderParser, "Verify CMockHeaderParser Module" do :name => "cmock_to_return", :ptr? => false, :const? => false, + :const_ptr? => false, :str => "int cmock_to_return", :void? => false }, :name=>"sqlite3_bind_text", :modifier=>"SQLITE_API", :contains_ptr? => true, - :args=>[ {:type=>"sqlite3_stmt*", :name=>"cmock_arg2", :ptr? => true, :const? => false}, - {:type=>"int", :name=>"cmock_arg3", :ptr? => false, :const? => false}, - {:type=>"char*", :name=>"cmock_arg4", :ptr? => false, :const? => true}, - {:type=>"int", :name=>"n", :ptr? => false, :const? => false}, - {:type=>"cmock_module_func_ptr1", :name=>"cmock_arg1", :ptr? => false, :const? => false} + :args=>[ {:type=>"sqlite3_stmt*", :name=>"cmock_arg2", :ptr? => true, :const? => false, :const_ptr? => false}, + {:type=>"int", :name=>"cmock_arg3", :ptr? => false, :const? => false, :const_ptr? => false}, + {:type=>"char*", :name=>"cmock_arg4", :ptr? => true, :const? => true, :const_ptr? => false}, + {:type=>"int", :name=>"n", :ptr? => false, :const? => false, :const_ptr? => false}, + {:type=>"cmock_module_func_ptr1", :name=>"cmock_arg1", :ptr? => false, :const? => false, :const_ptr? => false} ], :args_string=>"sqlite3_stmt* cmock_arg2, int cmock_arg3, const char* cmock_arg4, int n, cmock_module_func_ptr1 cmock_arg1", :args_call=>"cmock_arg2, cmock_arg3, cmock_arg4, n, cmock_arg1" }] @@ -1376,14 +1413,15 @@ describe CMockHeaderParser, "Verify CMockHeaderParser Module" do :name => 'cmock_to_return', :ptr? => false, :const? => false, + :const_ptr? => false, :str => "int cmock_to_return", :void? => false }, :name=>"XFiles", :modifier=>"", :contains_ptr? => false, - :args=>[ {:type=>"int", :name=>"Scully", :ptr? => false, :const? => false}, - {:type=>"int", :name=>"Mulder", :ptr? => false, :const? => false} + :args=>[ {:type=>"int", :name=>"Scully", :ptr? => false, :const? => false, :const_ptr? => false}, + {:type=>"int", :name=>"Mulder", :ptr? => false, :const? => false, :const_ptr? => false} ], :args_string=>"int Scully, int Mulder", :args_call=>"Scully, Mulder" @@ -1398,13 +1436,14 @@ describe CMockHeaderParser, "Verify CMockHeaderParser Module" do :name => 'cmock_to_return', :ptr? => true, :const? => false, + :const_ptr? => false, :str => "void* cmock_to_return", :void? => false }, :name=>"MoreSillySongs", :modifier=>"", :contains_ptr? => true, - :args=>[ {:type=>"void*", :name=>"stuff", :ptr? => true, :const? => false} + :args=>[ {:type=>"void*", :name=>"stuff", :ptr? => true, :const? => false, :const_ptr? => false} ], :args_string=>"void* stuff", :args_call=>"stuff" @@ -1419,14 +1458,15 @@ describe CMockHeaderParser, "Verify CMockHeaderParser Module" do :name => 'cmock_to_return', :ptr? => false, :const? => false, + :const_ptr? => false, :str => "int cmock_to_return", :void? => false }, :name=>"LaverneAndShirley", :modifier=>"", :contains_ptr? => false, - :args=>[ {:type=>"int", :name=>"Lenny", :ptr? => false, :const? => false}, - {:type=>"int", :name=>"Squiggy", :ptr? => false, :const? => false} + :args=>[ {:type=>"int", :name=>"Lenny", :ptr? => false, :const? => false, :const_ptr? => false}, + {:type=>"int", :name=>"Squiggy", :ptr? => false, :const? => false, :const_ptr? => false} ], :args_string=>"int Lenny, int Squiggy", :args_call=>"Lenny, Squiggy" @@ -1441,14 +1481,15 @@ describe CMockHeaderParser, "Verify CMockHeaderParser Module" do :name => 'cmock_to_return', :ptr? => false, :const? => false, + :const_ptr? => false, :str => "int cmock_to_return", :void? => false }, :name=>"TheCosbyShow", :modifier=>"", :contains_ptr? => false, - :args=>[ {:type=>"int", :name=>"Cliff", :ptr? => false, :const? => false}, - {:type=>"int", :name=>"Claire", :ptr? => false, :const? => false} + :args=>[ {:type=>"int", :name=>"Cliff", :ptr? => false, :const? => false, :const_ptr? => false}, + {:type=>"int", :name=>"Claire", :ptr? => false, :const? => false, :const_ptr? => false} ], :args_string=>"int Cliff, int Claire", :args_call=>"Cliff, Claire"