aboutsummaryrefslogtreecommitdiffstats
path: root/googlemock/include/gmock/gmock-function-mocker.h
diff options
context:
space:
mode:
authorAbseil Team <absl-team@google.com>2018-11-16 13:03:03 -0500
committerGennadiy Civil <misterg@google.com>2018-11-20 13:29:40 -0500
commit5dab7be70d628ad8079f915ab5bd3753dea1af2b (patch)
tree9ca927326d6357c7f5b9e9494bdf6d5ec29298c8 /googlemock/include/gmock/gmock-function-mocker.h
parent45d66d81bec9edd1256b6edb7e519602b1d0d6de (diff)
downloadgoogletest-5dab7be70d628ad8079f915ab5bd3753dea1af2b.tar.gz
googletest-5dab7be70d628ad8079f915ab5bd3753dea1af2b.tar.bz2
googletest-5dab7be70d628ad8079f915ab5bd3753dea1af2b.zip
Googletest export
Validate spec modifiers. PiperOrigin-RevId: 221810235
Diffstat (limited to 'googlemock/include/gmock/gmock-function-mocker.h')
-rw-r--r--googlemock/include/gmock/gmock-function-mocker.h23
1 files changed, 18 insertions, 5 deletions
diff --git a/googlemock/include/gmock/gmock-function-mocker.h b/googlemock/include/gmock/gmock-function-mocker.h
index 953d7465..3d142049 100644
--- a/googlemock/include/gmock/gmock-function-mocker.h
+++ b/googlemock/include/gmock/gmock-function-mocker.h
@@ -45,9 +45,10 @@
"enclosed in parentheses. If _Ret is a type with unprotected commas, " \
"it must also be enclosed in parentheses.")
-#define GMOCK_INTERNAL_ASSERT_PARENTHESIS(_Tuple) \
- static_assert(GMOCK_PP_IS_ENCLOSED_PARENS(_Tuple), \
- "_Tuple should be enclosed in parentheses")
+#define GMOCK_INTERNAL_ASSERT_PARENTHESIS(_Tuple) \
+ static_assert( \
+ GMOCK_PP_IS_ENCLOSED_PARENS(_Tuple), \
+ GMOCK_PP_STRINGIZE(_Tuple) " should be enclosed in parentheses.")
#define GMOCK_INTERNAL_ASSERT_VALID_SIGNATURE(_N, ...) \
static_assert( \
@@ -60,8 +61,8 @@
"This method does not take " GMOCK_PP_STRINGIZE( \
_N) " arguments. Parenthesize all types with unproctected commas.")
-// TODO(iserna): Verify each element in spec is one of the allowed.
-#define GMOCK_INTERNAL_ASSERT_VALID_SPEC(_Spec) static_assert(true, "");
+#define GMOCK_INTERNAL_ASSERT_VALID_SPEC(_Spec) \
+ GMOCK_PP_FOR_EACH(GMOCK_INTERNAL_ASSERT_VALID_SPEC_ELEMENT, ~, _Spec)
#define GMOCK_INTERNAL_MOCK_METHOD_IMPL(_N, _MethodName, _Constness, \
_Override, _Final, _Noexcept, \
@@ -100,6 +101,7 @@
#define GMOCK_INTERNAL_EXPAND(...) __VA_ARGS__
+// Five Valid modifiers.
#define GMOCK_INTERNAL_HAS_CONST(_Tuple) \
GMOCK_PP_HAS_COMMA(GMOCK_PP_FOR_EACH(GMOCK_INTERNAL_DETECT_CONST, ~, _Tuple))
@@ -117,6 +119,17 @@
#define GMOCK_INTERNAL_GET_CALLTYPE(_Tuple) \
GMOCK_PP_FOR_EACH(GMOCK_INTERNAL_GET_CALLTYPE_IMPL, ~, _Tuple)
+#define GMOCK_INTERNAL_ASSERT_VALID_SPEC_ELEMENT(_i, _, _elem) \
+ static_assert( \
+ (GMOCK_PP_HAS_COMMA(GMOCK_INTERNAL_DETECT_CONST(_i, _, _elem)) + \
+ GMOCK_PP_HAS_COMMA(GMOCK_INTERNAL_DETECT_OVERRIDE(_i, _, _elem)) + \
+ GMOCK_PP_HAS_COMMA(GMOCK_INTERNAL_DETECT_FINAL(_i, _, _elem)) + \
+ GMOCK_PP_HAS_COMMA(GMOCK_INTERNAL_DETECT_NOEXCEPT(_i, _, _elem)) + \
+ GMOCK_INTERNAL_IS_CALLTYPE(_elem)) == 1, \
+ GMOCK_PP_STRINGIZE( \
+ _elem) " cannot be recognized as a valid specification modifier.");
+
+// Modifiers implementation.
#define GMOCK_INTERNAL_DETECT_CONST(_i, _, _elem) \
GMOCK_PP_CAT(GMOCK_INTERNAL_DETECT_CONST_I_, _elem)