Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #ifndef CHROME_BROWSER_UI_WEBUI_WEB_UI_BROWSERTEST_H_ | 5 #ifndef CHROME_BROWSER_UI_WEBUI_WEB_UI_BROWSERTEST_H_ |
| 6 #define CHROME_BROWSER_UI_WEBUI_WEB_UI_BROWSERTEST_H_ | 6 #define CHROME_BROWSER_UI_WEBUI_WEB_UI_BROWSERTEST_H_ |
| 7 #pragma once | 7 #pragma once |
| 8 | 8 |
| 9 #include <string> | 9 #include <string> |
| 10 | 10 |
| 11 #include "base/file_path.h" | 11 #include "base/file_path.h" |
| 12 #include "base/string16.h" | 12 #include "base/string16.h" |
| 13 #include "chrome/browser/ui/webui/web_ui_test_handler.h" | 13 #include "chrome/browser/ui/webui/web_ui_test_handler.h" |
| 14 #include "chrome/test/base/in_process_browser_test.h" | 14 #include "chrome/test/base/in_process_browser_test.h" |
| 15 #include "chrome/test/test_navigation_observer.h" | 15 #include "chrome/test/test_navigation_observer.h" |
| 16 | 16 |
| 17 class RenderViewHost; | 17 class RenderViewHost; |
| 18 class WebUIMessageHandler; | 18 class WebUIMessageHandler; |
| 19 | 19 |
| 20 namespace base { | 20 namespace base { |
| 21 class Value; | 21 class Value; |
| 22 } | 22 } |
| 23 | 23 |
| 24 // This macro simplifies the declaration of simple javascript unit tests. | 24 // These macros simplify the declaration of simple javascript unit tests. |
|
Sheridan Rawlins
2011/09/09 15:47:50
We shouldn't need any WEB_UI macros.
These macros
flackr
2011/09/15 18:41:52
Done.
| |
| 25 // Use: | 25 // Use: |
| 26 // WEB_UI_UNITTEST_F(MyWebUIPageTest, myJavascriptUnittest); | 26 // WEB_UI_UNITTEST_F(MyWebUIPageTest, myJavascriptUnittest); |
| 27 // WEB_UI_UNITTEST_F1(MyWebUIPageTest, myJavascriptUnittest, myArg); | |
| 28 // WEB_UI_ASYNC_UNITTEST_F(MyWebUIPageTest, myJavascriptUnittest); | |
| 29 // WEB_UI_ASYNC_UNITTEST_F1(MyWebUIPageTest, myJavascriptUnittest, myArg); | |
| 27 #define WEB_UI_UNITTEST_F(x, y) \ | 30 #define WEB_UI_UNITTEST_F(x, y) \ |
| 28 IN_PROC_BROWSER_TEST_F(x, y) { \ | 31 IN_PROC_BROWSER_TEST_F(x, y) { \ |
| 29 ASSERT_TRUE(RunJavascriptTest(#y)); \ | 32 ASSERT_TRUE(RunJavascriptTest(#y)); \ |
| 30 } | 33 } |
| 31 | 34 |
| 35 #define WEB_UI_UNITTEST_F1(x, y, z) \ | |
| 36 IN_PROC_BROWSER_TEST_F(x, y) { \ | |
| 37 ASSERT_TRUE(RunJavascriptTest(#y, z)); \ | |
| 38 } | |
| 39 | |
| 40 #define WEB_UI_ASYNC_UNITTEST_F(x, y) \ | |
| 41 IN_PROC_BROWSER_TEST_F(x, y) { \ | |
| 42 ASSERT_TRUE(RunJavascriptAsyncTest(#y)); \ | |
| 43 } | |
| 44 | |
| 45 #define WEB_UI_ASYNC_UNITTEST_F1(x, y, z) \ | |
| 46 IN_PROC_BROWSER_TEST_F(x, y) { \ | |
| 47 ASSERT_TRUE(RunJavascriptAsyncTest(#y, z)); \ | |
| 48 } | |
| 49 | |
| 32 // The runner of WebUI javascript based tests. | 50 // The runner of WebUI javascript based tests. |
| 33 // See chrome/test/data/webui/test_api.js for the javascript side test API's. | 51 // See chrome/test/data/webui/test_api.js for the javascript side test API's. |
| 34 // | 52 // |
| 35 // These tests should follow the form given in: | 53 // These tests should follow the form given in: |
| 36 // chrome/test/data/webui/sample_downloads.js. | 54 // chrome/test/data/webui/sample_downloads.js. |
| 37 // and the lone test within this class. | 55 // and the lone test within this class. |
| 38 class WebUIBrowserTest | 56 class WebUIBrowserTest |
| 39 : public InProcessBrowserTest, | 57 : public InProcessBrowserTest, |
| 40 public TestNavigationObserver::JsInjectionReadyObserver { | 58 public TestNavigationObserver::JsInjectionReadyObserver, |
| 59 public NotificationObserver { | |
| 41 public: | 60 public: |
| 42 typedef std::vector<const base::Value*> ConstValueVector; | 61 typedef std::vector<const base::Value*> ConstValueVector; |
| 43 virtual ~WebUIBrowserTest(); | 62 virtual ~WebUIBrowserTest(); |
| 44 | 63 |
| 45 // Add a custom helper JS library for your test. | 64 // Add a custom helper JS library for your test. |
| 46 // If a relative path is specified, it'll be read | 65 // If a relative path is specified, it'll be read |
| 47 // as relative to the test data dir. | 66 // as relative to the test data dir. |
| 48 void AddLibrary(const FilePath& library_path); | 67 void AddLibrary(const FilePath& library_path); |
| 49 | 68 |
| 50 // Runs a javascript function in the context of all libraries. | 69 // Runs a javascript function in the context of all libraries. |
| (...skipping 18 matching lines...) Expand all Loading... | |
| 69 bool RunJavascriptTest(const std::string& test_name); | 88 bool RunJavascriptTest(const std::string& test_name); |
| 70 bool RunJavascriptTest(const std::string& test_name, | 89 bool RunJavascriptTest(const std::string& test_name, |
| 71 base::Value* arg); | 90 base::Value* arg); |
| 72 bool RunJavascriptTest(const std::string& test_name, | 91 bool RunJavascriptTest(const std::string& test_name, |
| 73 base::Value* arg1, | 92 base::Value* arg1, |
| 74 base::Value* arg2); | 93 base::Value* arg2); |
| 75 bool RunJavascriptTest(const std::string& test_name, | 94 bool RunJavascriptTest(const std::string& test_name, |
| 76 const ConstValueVector& test_arguments); | 95 const ConstValueVector& test_arguments); |
| 77 | 96 |
| 78 // Runs a test that may include calls to functions in test_api.js, and waits | 97 // Runs a test that may include calls to functions in test_api.js, and waits |
| 79 // for call to asyncTestDone(). Takes ownership of Value arguments. | 98 // for call to testDone(). Takes ownership of Value arguments. |
| 80 bool RunJavascriptAsyncTest(const std::string& test_name); | 99 bool RunJavascriptAsyncTest(const std::string& test_name); |
| 81 bool RunJavascriptAsyncTest(const std::string& test_name, | 100 bool RunJavascriptAsyncTest(const std::string& test_name, |
| 82 base::Value* arg); | 101 base::Value* arg); |
| 83 bool RunJavascriptAsyncTest(const std::string& test_name, | 102 bool RunJavascriptAsyncTest(const std::string& test_name, |
| 84 base::Value* arg1, | 103 base::Value* arg1, |
| 85 base::Value* arg2); | 104 base::Value* arg2); |
| 86 bool RunJavascriptAsyncTest(const std::string& test_name, | 105 bool RunJavascriptAsyncTest(const std::string& test_name, |
| 87 base::Value* arg1, | 106 base::Value* arg1, |
| 88 base::Value* arg2, | 107 base::Value* arg2, |
| 89 base::Value* arg3); | 108 base::Value* arg3); |
| (...skipping 28 matching lines...) Expand all Loading... | |
| 118 static const char kDummyURL[]; | 137 static const char kDummyURL[]; |
| 119 | 138 |
| 120 WebUIBrowserTest(); | 139 WebUIBrowserTest(); |
| 121 | 140 |
| 122 // Set up test path & override for |kDummyURL|. | 141 // Set up test path & override for |kDummyURL|. |
| 123 virtual void SetUpInProcessBrowserTestFixture() OVERRIDE; | 142 virtual void SetUpInProcessBrowserTestFixture() OVERRIDE; |
| 124 | 143 |
| 125 // Tear down override for |kDummyURL|. | 144 // Tear down override for |kDummyURL|. |
| 126 virtual void TearDownInProcessBrowserTestFixture() OVERRIDE; | 145 virtual void TearDownInProcessBrowserTestFixture() OVERRIDE; |
| 127 | 146 |
| 147 // Observes the next HtmlDialog to be created. | |
| 148 virtual void ObserveNextHtmlDialog(); | |
| 149 | |
| 150 // Wait for HtmlDialog to have loaded. | |
| 151 virtual void WaitForHtmlDialogLoad(); | |
| 152 | |
| 128 // Returns a mock WebUI object under test (if any). | 153 // Returns a mock WebUI object under test (if any). |
| 129 virtual WebUIMessageHandler* GetMockMessageHandler(); | 154 virtual WebUIMessageHandler* GetMockMessageHandler(); |
| 130 | 155 |
| 131 // Returns a file:// GURL constructed from |path| inside the test data dir for | 156 // Returns a file:// GURL constructed from |path| inside the test data dir for |
| 132 // webui tests. | 157 // webui tests. |
| 133 static GURL WebUITestDataPathToURL(const FilePath::StringType& path); | 158 static GURL WebUITestDataPathToURL(const FilePath::StringType& path); |
| 134 | 159 |
| 135 private: | 160 private: |
| 136 // TestNavigationObserver::JsInjectionReadyObserver implementation. | 161 // TestNavigationObserver::JsInjectionReadyObserver implementation. |
| 137 virtual void OnJsInjectionReady(RenderViewHost* render_view_host) OVERRIDE; | 162 virtual void OnJsInjectionReady(RenderViewHost* render_view_host) OVERRIDE; |
| 138 | 163 |
| 164 // NotificationObserver implementation. | |
| 165 virtual void Observe(int type, | |
| 166 const NotificationSource& source, | |
| 167 const NotificationDetails& details); | |
| 168 | |
| 139 // Builds a string containing all added javascript libraries. | 169 // Builds a string containing all added javascript libraries. |
| 140 void BuildJavascriptLibraries(string16* content); | 170 void BuildJavascriptLibraries(string16* content); |
| 141 | 171 |
| 142 // Builds a string with a call to the runTest JS function, passing the | 172 // Builds a string with a call to the runTest JS function, passing the |
| 143 // given |is_async|, |test_name| and its |args|. | 173 // given |is_async|, |test_name| and its |args|. |
| 144 string16 BuildRunTestJSCall(bool is_async, | 174 string16 BuildRunTestJSCall(bool is_async, |
| 145 const std::string& test_name, | 175 const std::string& test_name, |
| 146 const WebUIBrowserTest::ConstValueVector& args); | 176 const WebUIBrowserTest::ConstValueVector& args); |
| 147 | 177 |
| 148 // Loads all libraries added with AddLibrary(), and calls |function_name| with | 178 // Loads all libraries added with AddLibrary(), and calls |function_name| with |
| (...skipping 22 matching lines...) Expand all Loading... | |
| 171 std::vector<FilePath> user_libraries_; | 201 std::vector<FilePath> user_libraries_; |
| 172 | 202 |
| 173 // Indicates that the libraries have been pre-loaded and to not load them | 203 // Indicates that the libraries have been pre-loaded and to not load them |
| 174 // again. | 204 // again. |
| 175 bool libraries_preloaded_; | 205 bool libraries_preloaded_; |
| 176 | 206 |
| 177 // Saves the states of |test_fixture| and |test_name| for calling | 207 // Saves the states of |test_fixture| and |test_name| for calling |
| 178 // PreloadJavascriptLibraries(). | 208 // PreloadJavascriptLibraries(). |
| 179 std::string preload_test_fixture_; | 209 std::string preload_test_fixture_; |
| 180 std::string preload_test_name_; | 210 std::string preload_test_name_; |
| 211 | |
| 212 // The WebUI instance used for testing. | |
| 213 WebUI* web_ui_instance_; | |
| 214 | |
| 215 // Track whether the custom WebUI instance has loaded. | |
| 216 bool web_ui_instance_ready_; | |
| 217 | |
| 218 // Track if a message loop is running waiting on notification. | |
| 219 bool message_loop_running_; | |
| 220 | |
| 221 NotificationRegistrar registrar_; | |
| 181 }; | 222 }; |
| 182 | 223 |
| 183 #endif // CHROME_BROWSER_UI_WEBUI_WEB_UI_BROWSERTEST_H_ | 224 #endif // CHROME_BROWSER_UI_WEBUI_WEB_UI_BROWSERTEST_H_ |
| OLD | NEW |