aboutsummaryrefslogtreecommitdiffstats
path: root/include/gmock/gmock-spec-builders.h
diff options
context:
space:
mode:
Diffstat (limited to 'include/gmock/gmock-spec-builders.h')
-rw-r--r--include/gmock/gmock-spec-builders.h30
1 files changed, 18 insertions, 12 deletions
diff --git a/include/gmock/gmock-spec-builders.h b/include/gmock/gmock-spec-builders.h
index 84e0b513..0364b570 100644
--- a/include/gmock/gmock-spec-builders.h
+++ b/include/gmock/gmock-spec-builders.h
@@ -1061,15 +1061,21 @@ class FunctionMockerBase : public UntypedFunctionMockerBase {
return NULL;
}
- // Performs the default action of this mock function on the given
- // arguments and returns the result. This method doesn't depend on
- // the mutable state of this object, and thus can be called
- // concurrently without locking.
+ // Performs the default action of this mock function on the given arguments
+ // and returns the result. Asserts with a helpful call descrption if there is
+ // no valid return value. This method doesn't depend on the mutable state of
+ // this object, and thus can be called concurrently without locking.
// L = *
- Result PerformDefaultAction(const ArgumentTuple& args) const {
+ Result PerformDefaultAction(const ArgumentTuple& args,
+ const string& call_description) const {
const DefaultActionSpec<F>* const spec = FindDefaultActionSpec(args);
- return (spec != NULL) ? spec->GetAction().Perform(args)
- : DefaultValue<Result>::Get();
+ if (spec != NULL) {
+ return spec->GetAction().Perform(args);
+ }
+ Assert(DefaultValue<Result>::Exists(), "", -1,
+ call_description + "\n The mock function has no default action "
+ "set, and its return type has no default value set.");
+ return DefaultValue<Result>::Get();
}
// Registers this function mocker and the mock object owning it;
@@ -1407,7 +1413,7 @@ class InvokeWithHelper {
Mock::GetReactionOnUninterestingCalls(mocker->MockObject());
// Calculates the function result.
- Result result = mocker->PerformDefaultAction(args);
+ Result result = mocker->PerformDefaultAction(args, ss.str());
// Prints the function result.
ss << "\n Returns: ";
@@ -1429,8 +1435,8 @@ class InvokeWithHelper {
args, &exp, &action, &is_excessive, &ss, &why);
ss << " Function call: " << mocker->Name();
UniversalPrinter<ArgumentTuple>::Print(args, &ss);
- Result result =
- action.IsDoDefault() ? mocker->PerformDefaultAction(args)
+ Result result = action.IsDoDefault() ?
+ mocker->PerformDefaultAction(args, ss.str())
: action.Perform(args);
ss << "\n Returns: ";
UniversalPrinter<Result>::Print(result, &ss);
@@ -1480,7 +1486,7 @@ class InvokeWithHelper<void, F> {
const CallReaction reaction =
Mock::GetReactionOnUninterestingCalls(mocker->MockObject());
- mocker->PerformDefaultAction(args);
+ mocker->PerformDefaultAction(args, ss.str());
ReportUninterestingCall(reaction, ss.str());
return;
}
@@ -1499,7 +1505,7 @@ class InvokeWithHelper<void, F> {
UniversalPrinter<ArgumentTuple>::Print(args, &ss);
ss << "\n" << why.str();
if (action.IsDoDefault()) {
- mocker->PerformDefaultAction(args);
+ mocker->PerformDefaultAction(args, ss.str());
} else {
action.Perform(args);
}