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