| OLD | NEW |
| 1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #import <Cocoa/Cocoa.h> | 5 #import <Cocoa/Cocoa.h> |
| 6 #include <dlfcn.h> | 6 #include <dlfcn.h> |
| 7 | 7 |
| 8 #include "base/logging.h" | 8 #include "base/logging.h" |
| 9 #import "base/memory/scoped_nsobject.h" | 9 #import "base/memory/scoped_nsobject.h" |
| 10 #import "chrome/common/mac/objc_zombie.h" | 10 #import "chrome/common/mac/objc_zombie.h" |
| (...skipping 89 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 100 ObjcEvilDoers::ZombieDisable(); | 100 ObjcEvilDoers::ZombieDisable(); |
| 101 EXPECT_EQ(1u, [anObject retainCount]); | 101 EXPECT_EQ(1u, [anObject retainCount]); |
| 102 } | 102 } |
| 103 | 103 |
| 104 // Verify that the associated objects are released when the object is | 104 // Verify that the associated objects are released when the object is |
| 105 // released. | 105 // released. |
| 106 // NOTE(shess): To test the negative, hardcode |g_objectDestruct| to | 106 // NOTE(shess): To test the negative, hardcode |g_objectDestruct| to |
| 107 // the 10.5 version in |ZombieInit()|, and run this test on 10.6. | 107 // the 10.5 version in |ZombieInit()|, and run this test on 10.6. |
| 108 TEST(ObjcZombieTest, AssociatedObjectsReleased) { | 108 TEST(ObjcZombieTest, AssociatedObjectsReleased) { |
| 109 if (![ZombieAssociatedObjectTest supportsAssociatedObjects]) { | 109 if (![ZombieAssociatedObjectTest supportsAssociatedObjects]) { |
| 110 LOG(ERROR) | 110 DLOG(ERROR) |
| 111 << "ObjcZombieTest.AssociatedObjectsReleased not supported on 10.5"; | 111 << "ObjcZombieTest.AssociatedObjectsReleased not supported on 10.5"; |
| 112 return; | 112 return; |
| 113 } | 113 } |
| 114 | 114 |
| 115 scoped_nsobject<id> anObject([[NSObject alloc] init]); | 115 scoped_nsobject<id> anObject([[NSObject alloc] init]); |
| 116 EXPECT_EQ(1u, [anObject retainCount]); | 116 EXPECT_EQ(1u, [anObject retainCount]); |
| 117 | 117 |
| 118 ASSERT_TRUE(ObjcEvilDoers::ZombieEnable(YES, 100)); | 118 ASSERT_TRUE(ObjcEvilDoers::ZombieEnable(YES, 100)); |
| 119 | 119 |
| 120 scoped_nsobject<ZombieAssociatedObjectTest> soonInfected( | 120 scoped_nsobject<ZombieAssociatedObjectTest> soonInfected( |
| 121 [[ZombieAssociatedObjectTest alloc] initWithAssociatedObject:anObject]); | 121 [[ZombieAssociatedObjectTest alloc] initWithAssociatedObject:anObject]); |
| 122 EXPECT_EQ(2u, [anObject retainCount]); | 122 EXPECT_EQ(2u, [anObject retainCount]); |
| 123 | 123 |
| 124 // When |soonInfected| becomes a zombie, the associated object | 124 // When |soonInfected| becomes a zombie, the associated object |
| 125 // should be released. | 125 // should be released. |
| 126 soonInfected.reset(); | 126 soonInfected.reset(); |
| 127 EXPECT_EQ(1u, [anObject retainCount]); | 127 EXPECT_EQ(1u, [anObject retainCount]); |
| 128 | 128 |
| 129 // The local reference should remain (associated objects not re-released). | 129 // The local reference should remain (associated objects not re-released). |
| 130 ObjcEvilDoers::ZombieDisable(); | 130 ObjcEvilDoers::ZombieDisable(); |
| 131 EXPECT_EQ(1u, [anObject retainCount]); | 131 EXPECT_EQ(1u, [anObject retainCount]); |
| 132 } | 132 } |
| 133 | 133 |
| 134 } // namespace | 134 } // namespace |
| OLD | NEW |