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 3// found in the LICENSE file. 4 5#include "chrome/browser/ui/cocoa/run_loop_testing.h" 6 7#import <Foundation/Foundation.h> 8 9#include "base/mac/scoped_nsobject.h" 10#include "testing/gtest/include/gtest/gtest.h" 11 12@interface TestDelayed : NSObject { 13 @private 14 BOOL didWork_; 15 TestDelayed* next_; 16} 17@property(readonly, nonatomic) BOOL didWork; 18@property(assign, nonatomic) TestDelayed* next; 19@end 20 21@implementation TestDelayed 22@synthesize didWork = didWork_; 23@synthesize next = next_; 24 25- (id)init { 26 if ((self = [super init])) { 27 [self performSelector:@selector(doWork) withObject:nil afterDelay:0]; 28 } 29 return self; 30} 31 32- (void)doWork { 33 didWork_ = YES; 34 [next_ performSelector:@selector(doWork) withObject:nil afterDelay:0]; 35} 36@end 37 38TEST(RunLoopTesting, RunAllPending) { 39 base::scoped_nsobject<TestDelayed> tester([[TestDelayed alloc] init]); 40 EXPECT_FALSE([tester didWork]); 41 42 chrome::testing::NSRunLoopRunAllPending(); 43 44 EXPECT_TRUE([tester didWork]); 45} 46 47TEST(RunLoopTesting, NestedWork) { 48 base::scoped_nsobject<TestDelayed> tester([[TestDelayed alloc] init]); 49 base::scoped_nsobject<TestDelayed> nested([[TestDelayed alloc] init]); 50 [tester setNext:nested]; 51 52 EXPECT_FALSE([tester didWork]); 53 EXPECT_FALSE([nested didWork]); 54 55 chrome::testing::NSRunLoopRunAllPending(); 56 57 EXPECT_TRUE([tester didWork]); 58 EXPECT_TRUE([nested didWork]); 59} 60