diff --git a/include/mimick.h b/include/mimick.h index 1b0f994..d1e4f84 100644 --- a/include/mimick.h +++ b/include/mimick.h @@ -131,7 +131,7 @@ void mmk_stub_destroy(struct mmk_stub *stub); /** * Convenience wrapper to get an addressable temporary object from a lvalue. */ -# define mmk_val(Type, ...) &(mmk_literal(Type, {( __VA_ARGS__ )})) +# define mmk_val(Type, ...) &(mmk_literal(Type, {(__VA_ARGS__)})) /** * Defines a mock blueprint and typedef the Id to a function pointer type diff --git a/include/mimick/literal.h b/include/mimick/literal.h index e70bfb3..b0bea2c 100644 --- a/include/mimick/literal.h +++ b/include/mimick/literal.h @@ -44,7 +44,7 @@ T mmk_literal::storage{0}; template T & mmk_assign(T & dst, T src) { - return dst = std::move(dst); + return dst = std::move(src); } template @@ -72,7 +72,9 @@ va_list & mmk_assign(va_list & dst, va_list src) { mmk_struct_initialize((mmk_literal::storage), __VA_ARGS__) # define mmk_literal(type, value) \ - (mmk_assign(mmk_literal::storage, value)) + (mmk_assign(mmk_literal::storage, (type) value)) + +# define mmk_default_value(type) type{0} # else /* !defined __cplusplus */ @@ -82,6 +84,8 @@ va_list & mmk_assign(va_list & dst, va_list src) { # define mmk_struct_literal(type, ...) ((type) { __VA_ARGS__ }) +# define mmk_default_value(type) {0} + # endif #endif /* !MMK_LITERAL_H_ */ diff --git a/include/mimick/matcher.h b/include/mimick/matcher.h index bfb6b0e..211090a 100644 --- a/include/mimick/matcher.h +++ b/include/mimick/matcher.h @@ -68,7 +68,7 @@ struct mmk_matcher { # define mmk_matcher_val_(Kind, Type, Val) (mmk_matcher_add(Kind, __COUNTER__), mmk_literal(Type, Val)) # undef mmk_any -# define mmk_any(Type) mmk_matcher_val_(MMK_MATCHER_ANY, Type, { 0 }) +# define mmk_any(Type) mmk_matcher_val_(MMK_MATCHER_ANY, Type, mmk_default_value(Type)) # undef mmk_eq # define mmk_eq(Type, Val) mmk_matcher_val_(MMK_MATCHER_EQ, Type, Val) # undef mmk_ne @@ -82,7 +82,7 @@ struct mmk_matcher { # undef mmk_ge # define mmk_ge(Type, Val) mmk_matcher_val_(MMK_MATCHER_GEQ, Type, Val) # undef mmk_that -# define mmk_that(Type, Predicate) (mmk_matcher_add_fn(MMK_MATCHER_THAT, __COUNTER__, (void(*)(void))(Predicate)), mmk_literal(Type, { 0 })) +# define mmk_that(Type, Predicate) (mmk_matcher_add_fn(MMK_MATCHER_THAT, __COUNTER__, (void(*)(void))(Predicate)), mmk_literal(Type, mmk_default_value(Type))) void mmk_matcher_init(int kind); void mmk_matcher_add(enum mmk_matcher_kind kind, int counter); diff --git a/sample/strdup/test.c b/sample/strdup/test.c index c2211c0..20e2f15 100644 --- a/sample/strdup/test.c +++ b/sample/strdup/test.c @@ -35,7 +35,7 @@ void test_error_case(void) mmk_assert((mmk_fn) mock != MMK_MOCK_INVALID); mmk_when(mock(mmk_any(size_t)), - .then_return = &(void *) { NULL }, + .then_return = mmk_val(void *, NULL), .then_errno = ENOMEM); char *dup = my_strdup("foo");