Home | History | Annotate | Download | only in cocoa
      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 #import "chrome/browser/ui/cocoa/html_dialog_window_controller.h"
      6 
      7 #include <string>
      8 #include <vector>
      9 
     10 #import <Cocoa/Cocoa.h>
     11 
     12 #import "base/mac/scoped_nsautorelease_pool.h"
     13 #include "base/sys_string_conversions.h"
     14 #include "chrome/browser/ui/browser.h"
     15 #include "chrome/browser/ui/cocoa/cocoa_test_helper.h"
     16 #include "chrome/browser/ui/webui/html_dialog_ui.h"
     17 #include "chrome/test/browser_with_test_window_test.h"
     18 #include "chrome/test/testing_profile.h"
     19 #include "content/browser/webui/web_ui.h"
     20 #include "googleurl/src/gurl.h"
     21 #include "testing/gmock/include/gmock/gmock.h"
     22 #include "testing/gtest/include/gtest/gtest.h"
     23 #include "ui/gfx/size.h"
     24 
     25 namespace {
     26 
     27 class MockDelegate : public HtmlDialogUIDelegate {
     28 public:
     29   MOCK_CONST_METHOD0(IsDialogModal, bool());
     30   MOCK_CONST_METHOD0(GetDialogTitle, std::wstring());
     31   MOCK_CONST_METHOD0(GetDialogContentURL, GURL());
     32   MOCK_CONST_METHOD1(GetWebUIMessageHandlers,
     33                      void(std::vector<WebUIMessageHandler*>*));
     34   MOCK_CONST_METHOD1(GetDialogSize, void(gfx::Size*));
     35   MOCK_CONST_METHOD0(GetDialogArgs, std::string());
     36   MOCK_METHOD1(OnDialogClosed, void(const std::string& json_retval));
     37   MOCK_METHOD2(OnCloseContents,
     38                void(TabContents* source, bool* out_close_dialog));
     39   MOCK_CONST_METHOD0(ShouldShowDialogTitle, bool());
     40 };
     41 
     42 class HtmlDialogWindowControllerTest : public BrowserWithTestWindowTest {
     43  public:
     44   virtual void SetUp() {
     45     BrowserWithTestWindowTest::SetUp();
     46     CocoaTest::BootstrapCocoa();
     47     title_ = L"Mock Title";
     48     size_ = gfx::Size(50, 100);
     49     gurl_ = GURL("");
     50   }
     51 
     52  protected:
     53   std::wstring title_;
     54   gfx::Size size_;
     55   GURL gurl_;
     56 
     57   // Order here is important.
     58   MockDelegate delegate_;
     59 };
     60 
     61 using ::testing::_;
     62 using ::testing::Return;
     63 using ::testing::SetArgumentPointee;
     64 
     65 // TODO(akalin): We can't test much more than the below without a real browser.
     66 // In particular, GetWebUIMessageHandlers() and GetDialogArgs() are never
     67 // called. This should be fixed.
     68 
     69 TEST_F(HtmlDialogWindowControllerTest, showDialog) {
     70   // We want to make sure html_dialog_window_controller below gets
     71   // destroyed before delegate_, so we specify our own autorelease pool.
     72   //
     73   // TODO(dmaclach): Remove this once
     74   // http://code.google.com/p/chromium/issues/detail?id=26133 is fixed.
     75   base::mac::ScopedNSAutoreleasePool release_pool;
     76 
     77   EXPECT_CALL(delegate_, GetDialogTitle())
     78     .WillOnce(Return(title_));
     79   EXPECT_CALL(delegate_, GetDialogSize(_))
     80     .WillOnce(SetArgumentPointee<0>(size_));
     81   EXPECT_CALL(delegate_, GetDialogContentURL())
     82     .WillOnce(Return(gurl_));
     83   EXPECT_CALL(delegate_, OnDialogClosed(_))
     84     .Times(1);
     85 
     86   HtmlDialogWindowController* html_dialog_window_controller =
     87     [[HtmlDialogWindowController alloc] initWithDelegate:&delegate_
     88                                                  profile:profile()];
     89 
     90   [html_dialog_window_controller loadDialogContents];
     91   [html_dialog_window_controller showWindow:nil];
     92   [html_dialog_window_controller close];
     93 }
     94 
     95 }  // namespace
     96