virtual_keyboard_browsertest.cc revision 68043e1e95eeb07d5cae7aca370b26518b0867d6
1/* 2 * Copyright 2013 The Chromium Authors. All rights reserved. 3 * Use of this source code is governed by a BSD-style license that can be 4 * found in the LICENSE file. 5 */ 6 7#include <vector> 8 9#include "base/command_line.h" 10#include "chrome/browser/ui/browser.h" 11#include "chrome/browser/ui/tabs/tab_strip_model.h" 12#include "chrome/test/base/in_process_browser_test.h" 13#include "chrome/test/base/ui_test_utils.h" 14#include "content/public/browser/render_view_host.h" 15#include "content/public/browser/web_contents.h" 16#include "content/public/test/browser_test_utils.h" 17#include "ui/keyboard/keyboard_switches.h" 18 19namespace { 20 21const base::FilePath kWebuiTestDir = 22 base::FilePath(FILE_PATH_LITERAL("webui")); 23 24const base::FilePath kVirtualKeyboardTestDir = 25 base::FilePath(FILE_PATH_LITERAL("chromeos/virtual_keyboard")); 26 27const base::FilePath kMockController = 28 base::FilePath(FILE_PATH_LITERAL("mock_controller.js")); 29 30const base::FilePath kBaseKeyboardTestFramework = 31 base::FilePath(FILE_PATH_LITERAL("virtual_keyboard_test_base.js")); 32 33} // namespace 34 35class VirtualKeyboardBrowserTest : public InProcessBrowserTest { 36 public: 37 38 /** 39 * Ensure that the virtual keyboard is enabled. 40 */ 41 virtual void SetUpCommandLine(CommandLine* command_line) OVERRIDE { 42 command_line->AppendSwitch( 43 keyboard::switches::kEnableVirtualKeyboard); 44 } 45 46 /** 47 * Injects javascript in |file| into the keyboard page and runs test methods. 48 */ 49 void RunTest(const base::FilePath& file) { 50 ui_test_utils::NavigateToURL(browser(), GURL("chrome://keyboard")); 51 52 content::RenderViewHost* rvh = browser()->tab_strip_model() 53 ->GetActiveWebContents()->GetRenderViewHost(); 54 ASSERT_TRUE(rvh); 55 56 // Inject testing scripts. 57 InjectJavascript(kWebuiTestDir, kMockController); 58 InjectJavascript(kVirtualKeyboardTestDir, kBaseKeyboardTestFramework); 59 InjectJavascript(kVirtualKeyboardTestDir, file); 60 61 ASSERT_TRUE(content::ExecuteScript(rvh, utf8_content_)); 62 63 // Inject DOM-automation test harness and run tests. 64 std::vector<int> resource_ids; 65 EXPECT_TRUE(ExecuteWebUIResourceTest(rvh, resource_ids)); 66 } 67 68 private: 69 70 /** 71 * Injects javascript into the keyboard page. The test |file| is in 72 * directory |dir| relative to the root testing directory. 73 */ 74 void InjectJavascript(const base::FilePath& dir, 75 const base::FilePath& file) { 76 base::FilePath path = ui_test_utils::GetTestFilePath(dir, file); 77 std::string library_content; 78 ASSERT_TRUE(base::ReadFileToString(path, &library_content)) 79 << path.value(); 80 utf8_content_.append(library_content); 81 utf8_content_.append(";\n"); 82 } 83 84 std::string utf8_content_; 85}; 86 87IN_PROC_BROWSER_TEST_F(VirtualKeyboardBrowserTest, TypingTest) { 88 RunTest(base::FilePath(FILE_PATH_LITERAL("typing_test.js"))); 89} 90 91// TODO(kevers|rsadam|bshe): Add UI tests for remaining virtual keyboard 92// functionality. 93