blob: 2eb0963087391239ce3e3ef5fefac848f30266f0 [file] [log] [blame]
// Copyright (c) 2012 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#import <Foundation/Foundation.h>
#import "ios/chrome/test/block_cleanup_test.h"
#include "base/logging.h"
#import "base/mac/foundation_util.h"
void BlockCleanupTest::SetUp() {
block_cleanup_pool_ = [[NSAutoreleasePool alloc] init];
}
void BlockCleanupTest::TearDown() {
// Block-copied items are released asynchronously; spin the loop to give them
// a chance to be cleaned up.
const NSTimeInterval kCleanupTime = 0.1;
SpinRunLoop(kCleanupTime);
// Drain the autorelease pool to finish cleaning up after blocks.
// TODO(rohitrao): Can this be an EXPECT, so as to not crash the whole suite?
DCHECK(block_cleanup_pool_);
[base::mac::ObjCCastStrict<NSAutoreleasePool>(block_cleanup_pool_) release];
block_cleanup_pool_ = nil;
PlatformTest::TearDown();
}
void BlockCleanupTest::SpinRunLoop(NSTimeInterval cleanup_time) {
NSDate* cleanup_start = [NSDate date];
while (fabs([cleanup_start timeIntervalSinceNow]) < cleanup_time) {
NSDate* beforeDate =
[[NSDate alloc] initWithTimeIntervalSinceNow:cleanup_time];
[[NSRunLoop currentRunLoop] runMode:NSDefaultRunLoopMode
beforeDate:beforeDate];
}
}