- add sources.
[platform/framework/web/crosswalk.git] / src / chrome / browser / ui / cocoa / run_loop_testing_unittest.mm
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
38 TEST(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
47 TEST(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 }