1 // Copyright (c) 2012 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 #import "chrome/browser/ui/cocoa/tabpose_window.h" 6 7 #include "base/mac/mac_util.h" 8 #include "chrome/browser/ui/browser_window.h" 9 #include "chrome/browser/ui/cocoa/cocoa_profile_test.h" 10 #include "chrome/browser/ui/tabs/tab_strip_model.h" 11 #include "chrome/test/base/testing_profile.h" 12 #include "content/public/browser/site_instance.h" 13 #include "content/public/browser/web_contents.h" 14 #include "testing/gtest/include/gtest/gtest.h" 15 16 using content::SiteInstance; 17 18 class TabposeWindowTest : public CocoaProfileTest { 19 public: 20 virtual void SetUp() { 21 CocoaProfileTest::SetUp(); 22 ASSERT_TRUE(profile()); 23 24 site_instance_ = SiteInstance::Create(profile()); 25 } 26 27 void AppendTabToStrip() { 28 content::WebContents* web_contents = content::WebContents::Create( 29 content::WebContents::CreateParams(profile(), site_instance_.get())); 30 browser()->tab_strip_model()->AppendWebContents( 31 web_contents, /*foreground=*/true); 32 } 33 34 scoped_refptr<SiteInstance> site_instance_; 35 }; 36 37 TEST_F(TabposeWindowTest, TestShow) { 38 // Skip this test on 10.7 39 // http://code.google.com/p/chromium/issues/detail?id=127845 40 if (base::mac::IsOSLionOrLater()) { 41 return; 42 } 43 44 NSWindow* parent = browser()->window()->GetNativeWindow(); 45 46 [parent orderFront:nil]; 47 EXPECT_TRUE([parent isVisible]); 48 49 // Add a few tabs to the tab strip model. 50 for (int i = 0; i < 3; ++i) 51 AppendTabToStrip(); 52 53 base::mac::ScopedNSAutoreleasePool pool; 54 TabposeWindow* window = 55 [TabposeWindow openTabposeFor:parent 56 rect:NSMakeRect(10, 20, 250, 160) 57 slomo:NO 58 tabStripModel:browser()->tab_strip_model()]; 59 60 // Should release the window. 61 [window mouseDown:nil]; 62 } 63 64 TEST_F(TabposeWindowTest, TestModelObserver) { 65 // Skip this test on 10.7 66 // http://code.google.com/p/chromium/issues/detail?id=127845 67 if (base::mac::IsOSLionOrLater()) { 68 return; 69 } 70 71 NSWindow* parent = browser()->window()->GetNativeWindow(); 72 [parent orderFront:nil]; 73 74 // Add a few tabs to the tab strip model. 75 for (int i = 0; i < 3; ++i) 76 AppendTabToStrip(); 77 78 base::mac::ScopedNSAutoreleasePool pool; 79 TabposeWindow* window = 80 [TabposeWindow openTabposeFor:parent 81 rect:NSMakeRect(10, 20, 250, 160) 82 slomo:NO 83 tabStripModel:browser()->tab_strip_model()]; 84 85 // Exercise all the model change events. 86 TabStripModel* model = browser()->tab_strip_model(); 87 DCHECK_EQ([window thumbnailLayerCount], 3u); 88 DCHECK_EQ([window selectedIndex], 2); 89 90 model->MoveWebContentsAt(0, 2, /*select_after_move=*/false); 91 DCHECK_EQ([window thumbnailLayerCount], 3u); 92 DCHECK_EQ([window selectedIndex], 1); 93 94 model->MoveWebContentsAt(2, 0, /*select_after_move=*/false); 95 DCHECK_EQ([window thumbnailLayerCount], 3u); 96 DCHECK_EQ([window selectedIndex], 2); 97 98 [window selectTileAtIndexWithoutAnimation:0]; 99 DCHECK_EQ([window selectedIndex], 0); 100 101 model->MoveWebContentsAt(0, 2, /*select_after_move=*/false); 102 DCHECK_EQ([window selectedIndex], 2); 103 104 model->MoveWebContentsAt(2, 0, /*select_after_move=*/false); 105 DCHECK_EQ([window selectedIndex], 0); 106 107 delete model->DetachWebContentsAt(0); 108 DCHECK_EQ([window thumbnailLayerCount], 2u); 109 DCHECK_EQ([window selectedIndex], 0); 110 111 AppendTabToStrip(); 112 DCHECK_EQ([window thumbnailLayerCount], 3u); 113 DCHECK_EQ([window selectedIndex], 0); 114 115 model->CloseWebContentsAt(0, TabStripModel::CLOSE_NONE); 116 DCHECK_EQ([window thumbnailLayerCount], 2u); 117 DCHECK_EQ([window selectedIndex], 0); 118 119 [window selectTileAtIndexWithoutAnimation:1]; 120 model->CloseWebContentsAt(0, TabStripModel::CLOSE_NONE); 121 DCHECK_EQ([window thumbnailLayerCount], 1u); 122 DCHECK_EQ([window selectedIndex], 0); 123 124 // Should release the window. 125 [window mouseDown:nil]; 126 } 127