Chromium Code Reviews| Index: ui/views/controls/webview/webview_unittest.cc |
| diff --git a/ui/views/controls/webview/webview_unittest.cc b/ui/views/controls/webview/webview_unittest.cc |
| new file mode 100644 |
| index 0000000000000000000000000000000000000000..9755bfb5ffc42d5e40d505fbb6b55696b51f7786 |
| --- /dev/null |
| +++ b/ui/views/controls/webview/webview_unittest.cc |
| @@ -0,0 +1,112 @@ |
| +// Copyright 2014 The Chromium Authors. All rights reserved. |
| +// Use of this source code is governed by a BSD-style license that can be |
| +// found in the LICENSE file. |
| + |
| +#include "ui/views/controls/webview/webview.h" |
| + |
| +#include "base/command_line.h" |
| +#include "base/memory/scoped_ptr.h" |
| +#include "content/public/browser/web_contents.h" |
| +#include "content/public/test/test_browser_context.h" |
| +#include "content/public/test/test_browser_thread_bundle.h" |
| +#include "testing/gtest/include/gtest/gtest.h" |
| +#include "ui/aura/test/aura_test_helper.h" |
| +#include "ui/base/ime/text_input_focus_manager.h" |
| +#include "ui/base/ui_base_switches.h" |
| +#include "ui/compositor/test/context_factories_for_test.h" |
| +#include "ui/views/test/webview_test_helper.h" |
| +#include "ui/views/widget/widget.h" |
| + |
| +namespace { |
| + |
| +class WebViewTest : public testing::Test { |
| + public: |
| + WebViewTest() : widget_(NULL), webview_(NULL) {} |
| + |
| + virtual void SetUp() { |
| + testing::Test::SetUp(); |
| + |
| + ui::InitializeContextFactoryForTests(false); |
| + |
| + aura_test_helper_.reset( |
| + new aura::test::AuraTestHelper(base::MessageLoopForUI::current())); |
| + aura_test_helper_->SetUp(); |
| + |
| + InitWebView(); |
| + } |
| + |
| + virtual void TearDown() { |
| + if (widget_) |
| + widget_->Close(); |
| + |
| + aura_test_helper_->TearDown(); |
| + |
| + ui::TerminateContextFactoryForTests(); |
| + |
| + testing::Test::TearDown(); |
| + } |
| + |
| + protected: |
| + views::WebView* webview() { return webview_; } |
| + content::BrowserContext* browser_context() { return &browser_context_; } |
| + |
| + private: |
| + void InitWebView() { |
| + // WebViewTest.TextInputClientIsUpToDate needs kEnableTextInputFocusManager |
| + // flag to be enabled. |
| + base::CommandLine* cmd_line = base::CommandLine::ForCurrentProcess(); |
| + cmd_line->AppendSwitch(switches::kEnableTextInputFocusManager); |
| + |
| + widget_ = new views::Widget(); |
| + views::Widget::InitParams params(views::Widget::InitParams::TYPE_POPUP); |
| + params.context = aura_test_helper_->root_window(); |
| + params.bounds = gfx::Rect(100, 100, 100, 100); |
| + widget_->Init(params); |
| + |
| + webview_ = new views::WebView(browser_context()); |
| + widget_->SetContentsView(webview_); |
| + |
| + widget_->Activate(); |
|
sky
2014/04/25 18:21:51
If these rely on activation shouldn't they be in i
Yuki
2014/04/28 12:59:29
My understanding is that we have only one widget a
sky
2014/04/28 14:46:39
I agree with you on keeping the test small, but Ac
Yuki
2014/05/01 14:11:51
Okay, I've moved the test to interactive_ui_tests
|
| + widget_->Show(); |
| + } |
| + |
| + views::Widget* widget_; |
| + views::WebView* webview_; |
| + scoped_ptr<aura::test::AuraTestHelper> aura_test_helper_; |
| + content::TestBrowserContext browser_context_; |
| + views::WebViewTestHelper webview_test_helper_; |
| + content::TestBrowserThreadBundle browser_thread_bundle_; |
| + |
| + DISALLOW_COPY_AND_ASSIGN(WebViewTest); |
| +}; |
| + |
| +TEST_F(WebViewTest, TextInputClientIsUpToDate) { |
| + webview()->SetEmbedFullscreenWidgetMode(true); |
| + |
| + ui::TextInputFocusManager* text_input_focus_manager = |
| + ui::TextInputFocusManager::GetInstance(); |
| + const ui::TextInputClient* null_text_input_client = NULL; |
| + |
| + EXPECT_EQ(null_text_input_client, webview()->GetTextInputClient()); |
| + EXPECT_EQ(text_input_focus_manager->GetFocusedTextInputClient(), |
| + webview()->GetTextInputClient()); |
| + |
| + // Case 1: Creates a new WebContents. |
| + webview()->GetWebContents(); |
| + webview()->RequestFocus(); |
| + ui::TextInputClient* client1 = webview()->GetTextInputClient(); |
| + EXPECT_NE(null_text_input_client, client1); |
| + EXPECT_EQ(text_input_focus_manager->GetFocusedTextInputClient(), client1); |
| + |
| + // Case 2: Replaces a WebContents by SetWebContents(). |
| + content::WebContents::CreateParams params(browser_context()); |
| + scoped_ptr<content::WebContents> web_contents( |
| + content::WebContents::Create(params)); |
| + webview()->SetWebContents(web_contents.get()); |
| + ui::TextInputClient* client2 = webview()->GetTextInputClient(); |
| + EXPECT_NE(null_text_input_client, client2); |
| + EXPECT_EQ(text_input_focus_manager->GetFocusedTextInputClient(), client2); |
| + EXPECT_NE(client1, client2); |
| +} |
| + |
| +} // namespace |