Home | History | Annotate | Download | only in omnibox
      1 // Copyright 2013 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/gtk/omnibox/omnibox_view_gtk.h"
      6 
      7 #include <gtk/gtk.h>
      8 
      9 #include "base/strings/utf_string_conversions.h"
     10 #include "chrome/browser/autocomplete/autocomplete_match.h"
     11 #include "chrome/browser/ui/browser.h"
     12 #include "chrome/browser/ui/omnibox/omnibox_edit_controller.h"
     13 #include "chrome/test/base/testing_profile.h"
     14 #include "content/public/test/test_browser_thread.h"
     15 #include "testing/gmock/include/gmock/gmock.h"
     16 #include "testing/platform_test.h"
     17 #include "ui/base/gtk/gtk_hig_constants.h"
     18 #include "ui/gfx/image/image.h"
     19 
     20 namespace {
     21 class OmniboxEditControllerMock : public OmniboxEditController {
     22  public:
     23   MOCK_METHOD4(OnAutocompleteAccept, void(const GURL& url,
     24                                           WindowOpenDisposition disposition,
     25                                           content::PageTransition transition,
     26                                           const GURL& alternate_nav_url));
     27   MOCK_METHOD0(OnChanged, void());
     28   MOCK_METHOD0(OnSelectionBoundsChanged, void());
     29   MOCK_METHOD1(OnInputInProgress, void(bool in_progress));
     30   MOCK_METHOD0(OnKillFocus, void());
     31   MOCK_METHOD0(OnSetFocus, void());
     32   MOCK_CONST_METHOD0(GetFavicon, gfx::Image());
     33   MOCK_CONST_METHOD0(GetTitle, string16());
     34   MOCK_METHOD0(GetInstant, InstantController*());
     35   MOCK_CONST_METHOD0(GetWebContents, content::WebContents*());
     36 
     37   virtual ~OmniboxEditControllerMock() {}
     38 };
     39 }  // namespace
     40 
     41 class OmniboxViewGtkTest : public PlatformTest {
     42  public:
     43   OmniboxViewGtkTest() : file_thread_(content::BrowserThread::UI) {}
     44 
     45   virtual void SetUp() {
     46     PlatformTest::SetUp();
     47     profile_.reset(new TestingProfile);
     48     window_ = gtk_window_new(GTK_WINDOW_POPUP);
     49     controller_.reset(new OmniboxEditControllerMock);
     50     view_.reset(new OmniboxViewGtk(controller_.get(), NULL,
     51                                    NULL,
     52                                    profile_.get(),
     53                                    NULL, false, window_));
     54     view_->Init();
     55     text_buffer_ = view_->text_buffer_;
     56   }
     57 
     58   virtual void TearDown() {
     59     gtk_widget_destroy(window_);
     60     PlatformTest::TearDown();
     61   }
     62 
     63   void SetPasteClipboardRequested(bool b) {
     64     view_->paste_clipboard_requested_ = b;
     65   }
     66 
     67   scoped_ptr<OmniboxEditControllerMock> controller_;
     68   scoped_ptr<TestingProfile> profile_;
     69   GtkTextBuffer* text_buffer_;
     70   scoped_ptr<OmniboxViewGtk> view_;
     71   GtkWidget* window_;
     72   content::TestBrowserThread file_thread_;
     73 
     74  private:
     75   DISALLOW_COPY_AND_ASSIGN(OmniboxViewGtkTest);
     76 };
     77 
     78 TEST_F(OmniboxViewGtkTest, InsertText) {
     79   GtkTextIter i;
     80   const char input[] = "  hello, world ";
     81   const std::string expected = input;
     82   gtk_text_buffer_get_iter_at_offset(text_buffer_, &i, 0);
     83   gtk_text_buffer_insert(text_buffer_, &i, input, strlen(input));
     84   ASSERT_EQ(expected, UTF16ToUTF8(view_->GetText()));
     85 }
     86 
     87 TEST_F(OmniboxViewGtkTest, PasteText) {
     88   GtkTextIter i;
     89   const char input[] = "  hello, world ";
     90   const std::string expected = "hello, world";
     91   SetPasteClipboardRequested(true);
     92   view_->OnBeforePossibleChange();
     93   gtk_text_buffer_get_iter_at_offset(text_buffer_, &i, 0);
     94   gtk_text_buffer_insert(text_buffer_, &i, input, strlen(input));
     95 
     96   ASSERT_EQ(expected, UTF16ToUTF8(view_->GetText()));
     97 }
     98