aboutsummaryrefslogtreecommitdiffstats
path: root/test
diff options
context:
space:
mode:
authorzhanyong.wan <zhanyong.wan@8415998a-534a-0410-bf83-d39667b30386>2009-03-03 06:44:08 +0000
committerzhanyong.wan <zhanyong.wan@8415998a-534a-0410-bf83-d39667b30386>2009-03-03 06:44:08 +0000
commit6f14769e86f17a9997809ee2a9c149b57fdc4b21 (patch)
tree493eb0995f1a9448641c2aaee87d464b6b601f5e /test
parent652540a278e56528e576f9ea77515f386698a326 (diff)
downloadgoogletest-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 'test')
-rw-r--r--test/gmock-spec-builders_test.cc21
1 files changed, 19 insertions, 2 deletions
diff --git a/test/gmock-spec-builders_test.cc b/test/gmock-spec-builders_test.cc
index 4e330f0b..287a63e2 100644
--- a/test/gmock-spec-builders_test.cc
+++ b/test/gmock-spec-builders_test.cc
@@ -1304,7 +1304,24 @@ TEST(DeletingMockEarlyTest, Success2) {
delete b2;
}
-// Tests that calls that violates the original spec yield failures.
+// Tests that it's OK to delete a mock object itself in its action.
+
+ACTION_P(Delete, ptr) { delete ptr; }
+
+TEST(DeletingMockEarlyTest, CanDeleteSelfInActionReturningVoid) {
+ MockA* const a = new MockA;
+ EXPECT_CALL(*a, DoA(_)).WillOnce(Delete(a));
+ a->DoA(42); // This will cause a to be deleted.
+}
+
+TEST(DeletingMockEarlyTest, CanDeleteSelfInActionReturningValue) {
+ MockA* const a = new MockA;
+ EXPECT_CALL(*a, ReturnResult(_))
+ .WillOnce(DoAll(Delete(a), Return(Result())));
+ a->ReturnResult(42); // This will cause a to be deleted.
+}
+
+// Tests that calls that violate the original spec yield failures.
TEST(DeletingMockEarlyTest, Failure1) {
MockB* const b1 = new MockB;
MockA* const a = new MockA;
@@ -1330,7 +1347,7 @@ TEST(DeletingMockEarlyTest, Failure1) {
delete b2;
}
-// Tests that calls that violates the original spec yield failures.
+// Tests that calls that violate the original spec yield failures.
TEST(DeletingMockEarlyTest, Failure2) {
MockB* const b1 = new MockB;
MockA* const a = new MockA;