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 20namespace { 21class 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 41class 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 78TEST_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 87TEST_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