summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--chrome/browser/cocoa/bookmark_folder_target_unittest.mm33
-rw-r--r--chrome/test/data/valgrind/unit_tests.gtest_mac.txt3
2 files changed, 32 insertions, 4 deletions
diff --git a/chrome/browser/cocoa/bookmark_folder_target_unittest.mm b/chrome/browser/cocoa/bookmark_folder_target_unittest.mm
index c72a401..4fd01ef 100644
--- a/chrome/browser/cocoa/bookmark_folder_target_unittest.mm
+++ b/chrome/browser/cocoa/bookmark_folder_target_unittest.mm
@@ -12,6 +12,21 @@
#include "testing/platform_test.h"
#import "third_party/ocmock/OCMock/OCMock.h"
+@interface OCMockObject(PreventRetainCycle)
+- (void)clearRecordersAndExpectations;
+@end
+
+@implementation OCMockObject(PreventRetainCycle)
+
+// We need a mechanism to clear the invocation handlers to break a
+// retain cycle (see below; search for "retain cycle").
+- (void)clearRecordersAndExpectations {
+ [recorders removeAllObjects];
+ [expectations removeAllObjects];
+}
+
+@end
+
class BookmarkFolderTargetTest : public CocoaTest {
public:
@@ -20,9 +35,14 @@ class BookmarkFolderTargetTest : public CocoaTest {
BookmarkModel* model = helper_.profile()->GetBookmarkModel();
bmbNode_ = model->GetBookmarkBarNode();
}
+ virtual void TearDown() {
+ pool_.Recycle();
+ CocoaTest::TearDown();
+ }
BrowserTestHelper helper_;
const BookmarkNode* bmbNode_;
+ base::ScopedNSAutoreleasePool pool_;
};
TEST_F(BookmarkFolderTargetTest, StartWithNothing) {
@@ -54,7 +74,9 @@ TEST_F(BookmarkFolderTargetTest, ReopenSameFolder) {
// Fake controller
id controller = [OCMockObject mockForClass:[BookmarkBarFolderController
class]];
- // YES a current folder. Self-mock that as well, so "same" will be true.
+ // YES a current folder. Self-mock that as well, so "same" will be
+ // true. Note this creates a retain cycle in OCMockObject; we
+ // accomodate at the end of this function.
[[[controller stub] andReturn:controller] folderController];
[[[controller stub] andReturn:sender] parentButton];
@@ -67,6 +89,12 @@ TEST_F(BookmarkFolderTargetTest, ReopenSameFolder) {
[target openBookmarkFolderFromButton:sender];
[controller verify];
+
+ // Our use of OCMockObject means an object can return itself. This
+ // creates a retain cycle, since OCMock retains all objects used in
+ // mock creation. Clear out the invocation handlers of all
+ // OCMockRecorders we used to break the cycles.
+ [controller clearRecordersAndExpectations];
}
TEST_F(BookmarkFolderTargetTest, ReopenNotSame) {
@@ -90,4 +118,7 @@ TEST_F(BookmarkFolderTargetTest, ReopenNotSame) {
[target openBookmarkFolderFromButton:sender];
[controller verify];
+
+ // Break retain cycles.
+ [controller clearRecordersAndExpectations];
}
diff --git a/chrome/test/data/valgrind/unit_tests.gtest_mac.txt b/chrome/test/data/valgrind/unit_tests.gtest_mac.txt
index 4a3f5cd..a013c37 100644
--- a/chrome/test/data/valgrind/unit_tests.gtest_mac.txt
+++ b/chrome/test/data/valgrind/unit_tests.gtest_mac.txt
@@ -36,6 +36,3 @@ RenderViewTest.Print*
TabStripControllerTest.AddRemoveTabs
# See http://crbug.com/30398.
TaskManagerWindowControllerTest.*
-
-# Already has suppressions, but new variants keep popping up. crbug.com/39282
-BookmarkFolderTargetTest.*