]>
Commit | Line | Data |
---|---|---|
2dad08ec SL |
1 | /////////////////////////////////////////////////////////////////////////////// |
2 | // Name: tests/controls/webtest.cpp | |
3 | // Purpose: wxWebView unit test | |
4 | // Author: Steven Lamerton | |
5 | // Created: 2011-07-08 | |
2dad08ec SL |
6 | // Copyright: (c) 2011 Steven Lamerton |
7 | /////////////////////////////////////////////////////////////////////////////// | |
8 | ||
9 | #include "testprec.h" | |
10 | ||
30e2c046 | 11 | #if wxUSE_WEBVIEW && (wxUSE_WEBVIEW_WEBKIT || wxUSE_WEBVIEW_IE) |
2dad08ec SL |
12 | |
13 | #ifdef __BORLANDC__ | |
14 | #pragma hdrstop | |
15 | #endif | |
16 | ||
17 | #ifndef WX_PRECOMP | |
18 | #include "wx/app.h" | |
19 | #endif // WX_PRECOMP | |
20 | ||
21 | #include "testableframe.h" | |
22 | #include "wx/uiaction.h" | |
23 | #include "wx/webview.h" | |
24 | #include "asserthelper.h" | |
25 | ||
26 | class WebTestCase : public CppUnit::TestCase | |
27 | { | |
28 | public: | |
29 | WebTestCase() { } | |
30 | ||
31 | void setUp(); | |
32 | void tearDown(); | |
33 | ||
34 | private: | |
35 | CPPUNIT_TEST_SUITE( WebTestCase ); | |
6a2ef29f | 36 | CPPUNIT_TEST( Title ); |
d07fd8b0 SL |
37 | CPPUNIT_TEST( Url ); |
38 | CPPUNIT_TEST( History ); | |
f152b4b9 SL |
39 | CPPUNIT_TEST( HistoryEnable ); |
40 | CPPUNIT_TEST( HistoryClear ); | |
1a693ec8 | 41 | CPPUNIT_TEST( HistoryList ); |
c7cbe308 | 42 | CPPUNIT_TEST( Editable ); |
c9355a3d | 43 | CPPUNIT_TEST( Selection ); |
18cf6bb5 | 44 | CPPUNIT_TEST( Zoom ); |
c9ccc09c | 45 | CPPUNIT_TEST( RunScript ); |
7f98bdd6 | 46 | CPPUNIT_TEST( SetPage ); |
2dad08ec SL |
47 | CPPUNIT_TEST_SUITE_END(); |
48 | ||
6a2ef29f | 49 | void Title(); |
d07fd8b0 SL |
50 | void Url(); |
51 | void History(); | |
f152b4b9 SL |
52 | void HistoryEnable(); |
53 | void HistoryClear(); | |
1a693ec8 | 54 | void HistoryList(); |
c7cbe308 | 55 | void Editable(); |
c9355a3d | 56 | void Selection(); |
18cf6bb5 | 57 | void Zoom(); |
c9ccc09c | 58 | void RunScript(); |
7f98bdd6 | 59 | void SetPage(); |
0609769d | 60 | void LoadUrl(int times = 1); |
6a2ef29f | 61 | |
2dad08ec | 62 | wxWebView* m_browser; |
1e0b0d7c | 63 | EventCounter* m_loaded; |
2dad08ec SL |
64 | |
65 | DECLARE_NO_COPY_CLASS(WebTestCase) | |
66 | }; | |
67 | ||
1e0b0d7c SL |
68 | //Convenience macro |
69 | #define ENSURE_LOADED WX_ASSERT_EVENT_OCCURS((*m_loaded), 1) | |
70 | ||
2dad08ec SL |
71 | // register in the unnamed registry so that these tests are run by default |
72 | CPPUNIT_TEST_SUITE_REGISTRATION( WebTestCase ); | |
73 | ||
74 | // also include in its own registry so that these tests can be run alone | |
75 | CPPUNIT_TEST_SUITE_NAMED_REGISTRATION( WebTestCase, "WebTestCase" ); | |
76 | ||
77 | void WebTestCase::setUp() | |
78 | { | |
6a2ef29f | 79 | m_browser = wxWebView::New(wxTheApp->GetTopWindow(), wxID_ANY); |
1e0b0d7c | 80 | |
4776f0c8 | 81 | m_loaded = new EventCounter(m_browser, wxEVT_WEBVIEW_LOADED); |
0cd8ce0d | 82 | m_browser->LoadURL("about:blank"); |
1e0b0d7c | 83 | ENSURE_LOADED; |
2dad08ec SL |
84 | } |
85 | ||
86 | void WebTestCase::tearDown() | |
87 | { | |
1e0b0d7c | 88 | wxDELETE(m_loaded); |
2dad08ec SL |
89 | wxDELETE(m_browser); |
90 | } | |
91 | ||
0609769d | 92 | void WebTestCase::LoadUrl(int times) |
3ce14be7 | 93 | { |
0609769d SL |
94 | //We alternate between urls as otherwise webkit merges them in the history |
95 | //we use about and about blank to avoid the need for a network connection | |
3ce14be7 SL |
96 | for(int i = 0; i < times; i++) |
97 | { | |
0609769d | 98 | if(i % 2 == 1) |
6edb3912 | 99 | m_browser->LoadURL("about:blank"); |
0609769d | 100 | else |
6edb3912 | 101 | m_browser->LoadURL("about:"); |
1e0b0d7c | 102 | ENSURE_LOADED; |
3ce14be7 SL |
103 | } |
104 | } | |
105 | ||
6a2ef29f SL |
106 | void WebTestCase::Title() |
107 | { | |
108 | CPPUNIT_ASSERT_EQUAL("", m_browser->GetCurrentTitle()); | |
109 | ||
110 | //Test title after loading raw html | |
0609769d | 111 | m_browser->SetPage("<html><title>Title</title><body>Text</body></html>", ""); |
1e0b0d7c | 112 | ENSURE_LOADED; |
6a2ef29f SL |
113 | CPPUNIT_ASSERT_EQUAL("Title", m_browser->GetCurrentTitle()); |
114 | ||
115 | //Test title after loading a url, we yield to let events process | |
0609769d | 116 | LoadUrl(); |
6a2ef29f SL |
117 | CPPUNIT_ASSERT_EQUAL("", m_browser->GetCurrentTitle()); |
118 | } | |
119 | ||
d07fd8b0 SL |
120 | void WebTestCase::Url() |
121 | { | |
d563e28f | 122 | CPPUNIT_ASSERT_EQUAL("about:blank", m_browser->GetCurrentURL()); |
d07fd8b0 | 123 | |
0609769d SL |
124 | //After first loading about:blank the next in the sequence is about: |
125 | LoadUrl(); | |
126 | CPPUNIT_ASSERT_EQUAL("about:", m_browser->GetCurrentURL()); | |
d07fd8b0 SL |
127 | } |
128 | ||
129 | void WebTestCase::History() | |
130 | { | |
0609769d | 131 | LoadUrl(3); |
d07fd8b0 SL |
132 | |
133 | CPPUNIT_ASSERT(m_browser->CanGoBack()); | |
134 | CPPUNIT_ASSERT(!m_browser->CanGoForward()); | |
135 | ||
136 | m_browser->GoBack(); | |
1e0b0d7c | 137 | ENSURE_LOADED; |
d07fd8b0 SL |
138 | |
139 | CPPUNIT_ASSERT(m_browser->CanGoBack()); | |
140 | CPPUNIT_ASSERT(m_browser->CanGoForward()); | |
141 | ||
142 | m_browser->GoBack(); | |
1e0b0d7c | 143 | ENSURE_LOADED; |
d07fd8b0 | 144 | m_browser->GoBack(); |
1e0b0d7c | 145 | ENSURE_LOADED; |
d07fd8b0 SL |
146 | |
147 | //We should now be at the start of the history | |
148 | CPPUNIT_ASSERT(!m_browser->CanGoBack()); | |
149 | CPPUNIT_ASSERT(m_browser->CanGoForward()); | |
150 | } | |
151 | ||
f152b4b9 SL |
152 | void WebTestCase::HistoryEnable() |
153 | { | |
0609769d | 154 | LoadUrl(); |
f152b4b9 SL |
155 | m_browser->EnableHistory(false); |
156 | ||
157 | CPPUNIT_ASSERT(!m_browser->CanGoForward()); | |
158 | CPPUNIT_ASSERT(!m_browser->CanGoBack()); | |
159 | ||
0609769d | 160 | LoadUrl(); |
f152b4b9 SL |
161 | |
162 | CPPUNIT_ASSERT(!m_browser->CanGoForward()); | |
163 | CPPUNIT_ASSERT(!m_browser->CanGoBack()); | |
164 | } | |
165 | ||
166 | void WebTestCase::HistoryClear() | |
167 | { | |
0609769d | 168 | LoadUrl(2); |
f152b4b9 SL |
169 | |
170 | //Now we are in the 'middle' of the history | |
171 | m_browser->GoBack(); | |
1e0b0d7c | 172 | ENSURE_LOADED; |
f152b4b9 SL |
173 | |
174 | CPPUNIT_ASSERT(m_browser->CanGoForward()); | |
175 | CPPUNIT_ASSERT(m_browser->CanGoBack()); | |
176 | ||
177 | m_browser->ClearHistory(); | |
178 | ||
179 | CPPUNIT_ASSERT(!m_browser->CanGoForward()); | |
180 | CPPUNIT_ASSERT(!m_browser->CanGoBack()); | |
181 | } | |
182 | ||
1a693ec8 SL |
183 | void WebTestCase::HistoryList() |
184 | { | |
0609769d | 185 | LoadUrl(2); |
1a693ec8 | 186 | m_browser->GoBack(); |
1e0b0d7c | 187 | ENSURE_LOADED; |
1a693ec8 SL |
188 | |
189 | CPPUNIT_ASSERT_EQUAL(1, m_browser->GetBackwardHistory().size()); | |
190 | CPPUNIT_ASSERT_EQUAL(1, m_browser->GetForwardHistory().size()); | |
191 | ||
192 | m_browser->LoadHistoryItem(m_browser->GetForwardHistory()[0]); | |
1e0b0d7c | 193 | ENSURE_LOADED; |
1a693ec8 SL |
194 | |
195 | CPPUNIT_ASSERT(!m_browser->CanGoForward()); | |
196 | CPPUNIT_ASSERT_EQUAL(2, m_browser->GetBackwardHistory().size()); | |
197 | } | |
198 | ||
c7cbe308 SL |
199 | void WebTestCase::Editable() |
200 | { | |
201 | CPPUNIT_ASSERT(!m_browser->IsEditable()); | |
202 | ||
203 | m_browser->SetEditable(true); | |
204 | ||
205 | CPPUNIT_ASSERT(m_browser->IsEditable()); | |
206 | ||
207 | m_browser->SetEditable(false); | |
208 | ||
209 | CPPUNIT_ASSERT(!m_browser->IsEditable()); | |
210 | } | |
211 | ||
c9355a3d SL |
212 | void WebTestCase::Selection() |
213 | { | |
a9c15339 | 214 | m_browser->SetPage("<html><body>Some <strong>strong</strong> text</body></html>", ""); |
1e0b0d7c | 215 | ENSURE_LOADED; |
c9355a3d SL |
216 | CPPUNIT_ASSERT(!m_browser->HasSelection()); |
217 | ||
218 | m_browser->SelectAll(); | |
219 | ||
220 | CPPUNIT_ASSERT(m_browser->HasSelection()); | |
a9c15339 | 221 | CPPUNIT_ASSERT_EQUAL("Some strong text", m_browser->GetSelectedText()); |
75f9a954 VZ |
222 | |
223 | // The web engine doesn't necessarily represent the HTML in the same way as | |
224 | // we used above, e.g. IE uses upper case for all the tags while WebKit | |
225 | // under OS X inserts plenty of its own <span> tags, so don't test for | |
226 | // equality and just check that the source contains things we'd expect it | |
227 | // to. | |
228 | const wxString selSource = m_browser->GetSelectedSource(); | |
229 | WX_ASSERT_MESSAGE | |
230 | ( | |
231 | ("Unexpected selection source: \"%s\"", selSource), | |
232 | selSource.Lower().Matches("*some*<strong*strong</strong>*text*") | |
233 | ); | |
41933aa5 SL |
234 | |
235 | m_browser->ClearSelection(); | |
1e0b0d7c | 236 | CPPUNIT_ASSERT(!m_browser->HasSelection()); |
c9355a3d SL |
237 | } |
238 | ||
18cf6bb5 SL |
239 | void WebTestCase::Zoom() |
240 | { | |
236cff73 | 241 | if(m_browser->CanSetZoomType(wxWEBVIEW_ZOOM_TYPE_LAYOUT)) |
18cf6bb5 | 242 | { |
236cff73 SL |
243 | m_browser->SetZoomType(wxWEBVIEW_ZOOM_TYPE_LAYOUT); |
244 | CPPUNIT_ASSERT_EQUAL(wxWEBVIEW_ZOOM_TYPE_LAYOUT, m_browser->GetZoomType()); | |
18cf6bb5 | 245 | |
236cff73 SL |
246 | m_browser->SetZoom(wxWEBVIEW_ZOOM_TINY); |
247 | CPPUNIT_ASSERT_EQUAL(wxWEBVIEW_ZOOM_TINY, m_browser->GetZoom()); | |
18cf6bb5 SL |
248 | } |
249 | ||
250 | //Reset the zoom level | |
236cff73 | 251 | m_browser->SetZoom(wxWEBVIEW_ZOOM_MEDIUM); |
18cf6bb5 | 252 | |
236cff73 | 253 | if(m_browser->CanSetZoomType(wxWEBVIEW_ZOOM_TYPE_TEXT)) |
18cf6bb5 | 254 | { |
236cff73 SL |
255 | m_browser->SetZoomType(wxWEBVIEW_ZOOM_TYPE_TEXT); |
256 | CPPUNIT_ASSERT_EQUAL(wxWEBVIEW_ZOOM_TYPE_TEXT, m_browser->GetZoomType()); | |
18cf6bb5 | 257 | |
236cff73 SL |
258 | m_browser->SetZoom(wxWEBVIEW_ZOOM_TINY); |
259 | CPPUNIT_ASSERT_EQUAL(wxWEBVIEW_ZOOM_TINY, m_browser->GetZoom()); | |
18cf6bb5 SL |
260 | } |
261 | } | |
262 | ||
c9ccc09c SL |
263 | void WebTestCase::RunScript() |
264 | { | |
265 | m_browser->RunScript("document.write(\"Hello World!\");"); | |
266 | CPPUNIT_ASSERT_EQUAL("Hello World!", m_browser->GetPageText()); | |
267 | } | |
268 | ||
7f98bdd6 SL |
269 | void WebTestCase::SetPage() |
270 | { | |
271 | m_browser->SetPage("<html><body>text</body></html>", ""); | |
1e0b0d7c | 272 | ENSURE_LOADED; |
7f98bdd6 SL |
273 | CPPUNIT_ASSERT_EQUAL("text", m_browser->GetPageText()); |
274 | ||
275 | m_browser->SetPage("<html><body>other text</body></html>", ""); | |
1e0b0d7c | 276 | ENSURE_LOADED; |
7f98bdd6 SL |
277 | CPPUNIT_ASSERT_EQUAL("other text", m_browser->GetPageText()); |
278 | } | |
279 | ||
30e2c046 | 280 | #endif //wxUSE_WEBVIEW && (wxUSE_WEBVIEW_WEBKIT || wxUSE_WEBVIEW_IE) |