summaryrefslogtreecommitdiffstats
path: root/chrome/browser/cocoa/tab_strip_controller_unittest.mm
blob: 0a70a98dbd2c2ad164c2bb3949d96f6e733383ec (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
// Copyright (c) 2009 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 <Cocoa/Cocoa.h>

#include "chrome/browser/cocoa/browser_test_helper.h"
#import "chrome/browser/cocoa/cocoa_test_helper.h"
#import "chrome/browser/cocoa/tab_strip_controller.h"
#include "chrome/browser/tab_contents/web_contents.h"
#include "testing/gtest/include/gtest/gtest.h"

namespace {

// Stub model delegate
class TestTabStripDelegate : public TabStripModelDelegate {
 public:
  virtual TabContents* AddBlankTab(bool foreground) {
    return NULL;
  }
  virtual TabContents* AddBlankTabAt(int index, bool foreground) {
    return NULL;
  }
  virtual Browser* CreateNewStripWithContents(TabContents* contents,
                                              const gfx::Rect& window_bounds,
                                              const DockInfo& dock_info) {
    return NULL;
  }
  virtual int GetDragActions() const {
    return 0;
  }
  virtual TabContents* CreateTabContentsForURL(
      const GURL& url,
      const GURL& referrer,
      Profile* profile,
      PageTransition::Type transition,
      bool defer_load,
      SiteInstance* instance) const {
    return NULL;
  }
  virtual bool CanDuplicateContentsAt(int index) { return true; }
  virtual void DuplicateContentsAt(int index) { }
  virtual void CloseFrameAfterDragSession() { }
  virtual void CreateHistoricalTab(TabContents* contents) { }
  virtual bool RunUnloadListenerBeforeClosing(TabContents* contents) {
    return true;
  }
  virtual bool CanRestoreTab() {
    return true;
  }
  virtual void RestoreTab() { }
};

class TabStripControllerTest : public testing::Test {
 public:
  TabStripControllerTest() {
    NSView* parent = cocoa_helper_.contentView();
    NSRect content_frame = [parent frame];

    // Create the "switch view" (view that gets changed out when a tab
    // switches).
    NSRect switch_frame = NSMakeRect(0, 0, content_frame.size.width, 500);
    scoped_nsobject<NSView> switch_view([[NSView alloc]
                                          initWithFrame:switch_frame]);
    [parent addSubview:switch_view.get()];

    // Create the tab strip view. It's expected to have a child button in it
    // already as the "new tab" button so create that too.
    NSRect strip_frame = NSMakeRect(0, NSMaxY(switch_frame),
                                    content_frame.size.width, 30);
    tab_strip_.reset([[NSView alloc] initWithFrame:strip_frame]);
    [parent addSubview:tab_strip_.get()];
    NSRect button_frame = NSMakeRect(0, 0, 15, 15);
    scoped_nsobject<NSButton> close_button([[NSButton alloc]
                                             initWithFrame:button_frame]);
    [tab_strip_ addSubview:close_button.get()];

    // Create the controller using that view and a model we create that has
    // no other Browser ties.
    delegate_.reset(new TestTabStripDelegate());
    model_.reset(new TabStripModel(delegate_.get(),
                                   browser_helper_.profile()));
    controller_.reset([[TabStripController alloc]
                        initWithView:(TabStripView*)tab_strip_.get()
                          switchView:switch_view.get()
                               model:model_.get()]);
  }

  CocoaTestHelper cocoa_helper_;
  BrowserTestHelper browser_helper_;
  scoped_ptr<TestTabStripDelegate> delegate_;
  scoped_ptr<TabStripModel> model_;
  scoped_nsobject<TabStripController> controller_;
  scoped_nsobject<NSView> tab_strip_;
};

TEST_F(TabStripControllerTest, GrowBox) {
  // TODO(pinkerton): Creating a WebContents crashes an unrelated test, even
  // if you don't do anything with it. http://crbug.com/10899
}

// Test adding and removing tabs and making sure that views get added to
// the tab strip.
TEST_F(TabStripControllerTest, AddRemoveTabs) {
  EXPECT_TRUE(model_->empty());
#if 0
  // TODO(pinkerton): Creating a WebContents crashes an unrelated test, even
  // if you don't do anything with it. http://crbug.com/10899
  SiteInstance* instance =
      SiteInstance::CreateSiteInstance(browser_helper_.profile());
  WebContents* tab_contents =
      new WebContents(browser_helper_.profile(), instance);
  model_->AppendTabContents(tab_contents, true);
  EXPECT_EQ(model_->count(), 1);
#endif
}

TEST_F(TabStripControllerTest, SelectTab) {
  // TODO(pinkerton): Creating a WebContents crashes an unrelated test, even
  // if you don't do anything with it. http://crbug.com/10899
}

TEST_F(TabStripControllerTest, RearrangeTabs) {
  // TODO(pinkerton): Creating a WebContents crashes an unrelated test, even
  // if you don't do anything with it. http://crbug.com/10899
}

}  // namespace