diff options
author | zhanyong.wan <zhanyong.wan@8415998a-534a-0410-bf83-d39667b30386> | 2009-03-03 06:44:08 +0000 |
---|---|---|
committer | zhanyong.wan <zhanyong.wan@8415998a-534a-0410-bf83-d39667b30386> | 2009-03-03 06:44:08 +0000 |
commit | 6f14769e86f17a9997809ee2a9c149b57fdc4b21 (patch) | |
tree | 493eb0995f1a9448641c2aaee87d464b6b601f5e /include | |
parent | 652540a278e56528e576f9ea77515f386698a326 (diff) | |
download | googletest-6f14769e86f17a9997809ee2a9c149b57fdc4b21.tar.gz googletest-6f14769e86f17a9997809ee2a9c149b57fdc4b21.tar.bz2 googletest-6f14769e86f17a9997809ee2a9c149b57fdc4b21.zip |
Allows a mock object to delete itself in an action. By Simon Bowden.
Diffstat (limited to 'include')
-rw-r--r-- | include/gmock/gmock-spec-builders.h | 16 |
1 files changed, 12 insertions, 4 deletions
diff --git a/include/gmock/gmock-spec-builders.h b/include/gmock/gmock-spec-builders.h index bd956f3d..77b50f80 100644 --- a/include/gmock/gmock-spec-builders.h +++ b/include/gmock/gmock-spec-builders.h @@ -1426,6 +1426,7 @@ class InvokeWithHelper { bool is_excessive = false; ::std::stringstream ss; ::std::stringstream why; + ::std::stringstream loc; Action<F> action; Expectation<F>* exp; @@ -1435,6 +1436,11 @@ class InvokeWithHelper { args, &exp, &action, &is_excessive, &ss, &why); ss << " Function call: " << mocker->Name(); UniversalPrinter<ArgumentTuple>::Print(args, &ss); + // In case the action deletes a piece of the expectation, we + // generate the message beforehand. + if (found && !is_excessive) { + exp->DescribeLocationTo(&loc); + } Result result = action.IsDoDefault() ? mocker->PerformDefaultAction(args, ss.str()) : action.Perform(args); @@ -1449,8 +1455,6 @@ class InvokeWithHelper { } else { // We had an expected call and the matching expectation is // described in ss. - ::std::stringstream loc; - exp->DescribeLocationTo(&loc); Log(INFO, loc.str() + ss.str(), 3); } } else { @@ -1494,6 +1498,7 @@ class InvokeWithHelper<void, F> { bool is_excessive = false; ::std::stringstream ss; ::std::stringstream why; + ::std::stringstream loc; Action<F> action; Expectation<F>* exp; @@ -1504,6 +1509,11 @@ class InvokeWithHelper<void, F> { ss << " Function call: " << mocker->Name(); UniversalPrinter<ArgumentTuple>::Print(args, &ss); ss << "\n" << why.str(); + // In case the action deletes a piece of the expectation, we + // generate the message beforehand. + if (found && !is_excessive) { + exp->DescribeLocationTo(&loc); + } if (action.IsDoDefault()) { mocker->PerformDefaultAction(args, ss.str()); } else { @@ -1518,8 +1528,6 @@ class InvokeWithHelper<void, F> { } else { // We had an expected call and the matching expectation is // described in ss. - ::std::stringstream loc; - exp->DescribeLocationTo(&loc); Log(INFO, loc.str() + ss.str(), 3); } } else { |