source: trunk/server/www/vendors/simpletest/test/browser_test.php @ 6

Last change on this file since 6 was 6, checked in by sander, 12 years ago

Added SimpleTest? test framework

File size: 33.8 KB
Line 
1<?php
2// $Id: browser_test.php 1624 2008-01-01 15:00:43Z pp11 $
3require_once(dirname(__FILE__) . '/../autorun.php');
4require_once(dirname(__FILE__) . '/../browser.php');
5require_once(dirname(__FILE__) . '/../user_agent.php');
6require_once(dirname(__FILE__) . '/../http.php');
7require_once(dirname(__FILE__) . '/../page.php');
8require_once(dirname(__FILE__) . '/../encoding.php');
9
10Mock::generate('SimpleHttpResponse');
11Mock::generate('SimplePage');
12Mock::generate('SimpleForm');
13Mock::generate('SimpleUserAgent');
14Mock::generatePartial(
15        'SimpleBrowser',
16        'MockParseSimpleBrowser',
17        array('_createUserAgent', '_parse'));
18Mock::generatePartial(
19        'SimpleBrowser',
20        'MockUserAgentSimpleBrowser',
21        array('_createUserAgent'));
22
23class TestOfHistory extends UnitTestCase {
24
25    function testEmptyHistoryHasFalseContents() {
26        $history = &new SimpleBrowserHistory();
27        $this->assertIdentical($history->getUrl(), false);
28        $this->assertIdentical($history->getParameters(), false);
29    }
30
31    function testCannotMoveInEmptyHistory() {
32        $history = &new SimpleBrowserHistory();
33        $this->assertFalse($history->back());
34        $this->assertFalse($history->forward());
35    }
36
37    function testCurrentTargetAccessors() {
38        $history = &new SimpleBrowserHistory();
39        $history->recordEntry(
40                new SimpleUrl('http://www.here.com/'),
41                new SimpleGetEncoding());
42        $this->assertIdentical($history->getUrl(), new SimpleUrl('http://www.here.com/'));
43        $this->assertIdentical($history->getParameters(), new SimpleGetEncoding());
44    }
45
46    function testSecondEntryAccessors() {
47        $history = &new SimpleBrowserHistory();
48        $history->recordEntry(
49                new SimpleUrl('http://www.first.com/'),
50                new SimpleGetEncoding());
51        $history->recordEntry(
52                new SimpleUrl('http://www.second.com/'),
53                new SimplePostEncoding(array('a' => 1)));
54        $this->assertIdentical($history->getUrl(), new SimpleUrl('http://www.second.com/'));
55        $this->assertIdentical(
56                $history->getParameters(),
57                new SimplePostEncoding(array('a' => 1)));
58    }
59
60    function testGoingBackwards() {
61        $history = &new SimpleBrowserHistory();
62        $history->recordEntry(
63                new SimpleUrl('http://www.first.com/'),
64                new SimpleGetEncoding());
65        $history->recordEntry(
66                new SimpleUrl('http://www.second.com/'),
67                new SimplePostEncoding(array('a' => 1)));
68        $this->assertTrue($history->back());
69        $this->assertIdentical($history->getUrl(), new SimpleUrl('http://www.first.com/'));
70        $this->assertIdentical($history->getParameters(), new SimpleGetEncoding());
71    }
72
73    function testGoingBackwardsOffBeginning() {
74        $history = &new SimpleBrowserHistory();
75        $history->recordEntry(
76                new SimpleUrl('http://www.first.com/'),
77                new SimpleGetEncoding());
78        $this->assertFalse($history->back());
79        $this->assertIdentical($history->getUrl(), new SimpleUrl('http://www.first.com/'));
80        $this->assertIdentical($history->getParameters(), new SimpleGetEncoding());
81    }
82
83    function testGoingForwardsOffEnd() {
84        $history = &new SimpleBrowserHistory();
85        $history->recordEntry(
86                new SimpleUrl('http://www.first.com/'),
87                new SimpleGetEncoding());
88        $this->assertFalse($history->forward());
89        $this->assertIdentical($history->getUrl(), new SimpleUrl('http://www.first.com/'));
90        $this->assertIdentical($history->getParameters(), new SimpleGetEncoding());
91    }
92
93    function testGoingBackwardsAndForwards() {
94        $history = &new SimpleBrowserHistory();
95        $history->recordEntry(
96                new SimpleUrl('http://www.first.com/'),
97                new SimpleGetEncoding());
98        $history->recordEntry(
99                new SimpleUrl('http://www.second.com/'),
100                new SimplePostEncoding(array('a' => 1)));
101        $this->assertTrue($history->back());
102        $this->assertTrue($history->forward());
103        $this->assertIdentical($history->getUrl(), new SimpleUrl('http://www.second.com/'));
104        $this->assertIdentical(
105                $history->getParameters(),
106                new SimplePostEncoding(array('a' => 1)));
107    }
108
109    function testNewEntryReplacesNextOne() {
110        $history = &new SimpleBrowserHistory();
111        $history->recordEntry(
112                new SimpleUrl('http://www.first.com/'),
113                new SimpleGetEncoding());
114        $history->recordEntry(
115                new SimpleUrl('http://www.second.com/'),
116                new SimplePostEncoding(array('a' => 1)));
117        $history->back();
118        $history->recordEntry(
119                new SimpleUrl('http://www.third.com/'),
120                new SimpleGetEncoding());
121        $this->assertIdentical($history->getUrl(), new SimpleUrl('http://www.third.com/'));
122        $this->assertIdentical($history->getParameters(), new SimpleGetEncoding());
123    }
124
125    function testNewEntryDropsFutureEntries() {
126        $history = &new SimpleBrowserHistory();
127        $history->recordEntry(
128                new SimpleUrl('http://www.first.com/'),
129                new SimpleGetEncoding());
130        $history->recordEntry(
131                new SimpleUrl('http://www.second.com/'),
132                new SimpleGetEncoding());
133        $history->recordEntry(
134                new SimpleUrl('http://www.third.com/'),
135                new SimpleGetEncoding());
136        $history->back();
137        $history->back();
138        $history->recordEntry(
139                new SimpleUrl('http://www.fourth.com/'),
140                new SimpleGetEncoding());
141        $this->assertIdentical($history->getUrl(), new SimpleUrl('http://www.fourth.com/'));
142        $this->assertFalse($history->forward());
143        $history->back();
144        $this->assertIdentical($history->getUrl(), new SimpleUrl('http://www.first.com/'));
145        $this->assertFalse($history->back());
146    }
147}
148
149class TestOfParsedPageAccess extends UnitTestCase {
150
151    function &loadPage(&$page) {
152        $response = &new MockSimpleHttpResponse($this);
153
154        $agent = &new MockSimpleUserAgent($this);
155        $agent->setReturnReference('fetchResponse', $response);
156
157        $browser = &new MockParseSimpleBrowser($this);
158        $browser->setReturnReference('_createUserAgent', $agent);
159        $browser->setReturnReference('_parse', $page);
160        $browser->SimpleBrowser();
161
162        $browser->get('http://this.com/page.html');
163        return $browser;
164    }
165
166    function testAccessorsWhenNoPage() {
167        $agent = &new MockSimpleUserAgent($this);
168
169        $browser = &new MockParseSimpleBrowser($this);
170        $browser->setReturnReference('_createUserAgent', $agent);
171        $browser->SimpleBrowser();
172
173        $this->assertEqual($browser->getContent(), '');
174    }
175
176    function testParse() {
177        $page = &new MockSimplePage();
178        $page->setReturnValue('getRequest', "GET here.html\r\n\r\n");
179        $page->setReturnValue('getRaw', 'Raw HTML');
180        $page->setReturnValue('getTitle', 'Here');
181        $page->setReturnValue('getFrameFocus', 'Frame');
182        $page->setReturnValue('getMimeType', 'text/html');
183        $page->setReturnValue('getResponseCode', 200);
184        $page->setReturnValue('getAuthentication', 'Basic');
185        $page->setReturnValue('getRealm', 'Somewhere');
186        $page->setReturnValue('getTransportError', 'Ouch!');
187
188        $browser = &$this->loadPage($page);
189
190        $this->assertEqual($browser->getRequest(), "GET here.html\r\n\r\n");
191        $this->assertEqual($browser->getContent(), 'Raw HTML');
192        $this->assertEqual($browser->getTitle(), 'Here');
193        $this->assertEqual($browser->getFrameFocus(), 'Frame');
194        $this->assertIdentical($browser->getResponseCode(), 200);
195        $this->assertEqual($browser->getMimeType(), 'text/html');
196        $this->assertEqual($browser->getAuthentication(), 'Basic');
197        $this->assertEqual($browser->getRealm(), 'Somewhere');
198        $this->assertEqual($browser->getTransportError(), 'Ouch!');
199    }
200
201    function testLinkAffirmationWhenPresent() {
202        $page = &new MockSimplePage();
203        $page->setReturnValue('getUrlsByLabel', array('http://www.nowhere.com'));
204        $page->expectOnce('getUrlsByLabel', array('a link label'));
205        $browser = &$this->loadPage($page);
206        $this->assertIdentical($browser->getLink('a link label'), 'http://www.nowhere.com');
207    }
208
209    function testLinkAffirmationByIdWhenPresent() {
210        $page = &new MockSimplePage();
211        $page->setReturnValue('getUrlById', 'a_page.com', array(99));
212        $page->setReturnValue('getUrlById', false, array('*'));
213        $browser = &$this->loadPage($page);
214        $this->assertIdentical($browser->getLinkById(99), 'a_page.com');
215        $this->assertFalse($browser->getLinkById(98));
216    }
217
218    function testSettingFieldIsPassedToPage() {
219        $page = &new MockSimplePage();
220        $page->expectOnce('setField', array(new SimpleByLabelOrName('key'), 'Value', false));
221        $page->setReturnValue('getField', 'Value');
222        $browser = &$this->loadPage($page);
223        $this->assertEqual($browser->getField('key'), 'Value');
224        $browser->setField('key', 'Value');
225    }
226}
227
228class TestOfBrowserNavigation extends UnitTestCase {
229
230    function &createBrowser(&$agent, &$page) {
231        $browser = &new MockParseSimpleBrowser();
232        $browser->setReturnReference('_createUserAgent', $agent);
233        $browser->setReturnReference('_parse', $page);
234        $browser->SimpleBrowser();
235        return $browser;
236    }
237
238    function testClickLinkRequestsPage() {
239        $agent = &new MockSimpleUserAgent();
240        $agent->setReturnReference('fetchResponse', new MockSimpleHttpResponse());
241        $agent->expectArgumentsAt(
242                0,
243                'fetchResponse',
244                array(new SimpleUrl('http://this.com/page.html'), new SimpleGetEncoding()));
245        $agent->expectArgumentsAt(
246                1,
247                'fetchResponse',
248                array(new SimpleUrl('http://this.com/new.html'), new SimpleGetEncoding()));
249        $agent->expectCallCount('fetchResponse', 2);
250
251        $page = &new MockSimplePage();
252        $page->setReturnValue('getUrlsByLabel', array(new SimpleUrl('http://this.com/new.html')));
253        $page->expectOnce('getUrlsByLabel', array('New'));
254        $page->setReturnValue('getRaw', 'A page');
255
256        $browser = &$this->createBrowser($agent, $page);
257        $browser->get('http://this.com/page.html');
258        $this->assertTrue($browser->clickLink('New'));
259    }
260
261    function testClickLinkWithUnknownFrameStillRequestsWholePage() {
262        $agent = &new MockSimpleUserAgent();
263        $agent->setReturnReference('fetchResponse', new MockSimpleHttpResponse());
264        $agent->expectArgumentsAt(
265                0,
266                'fetchResponse',
267                array(new SimpleUrl('http://this.com/page.html'), new SimpleGetEncoding()));
268        $target = new SimpleUrl('http://this.com/new.html');
269        $target->setTarget('missing');
270        $agent->expectArgumentsAt(
271                1,
272                'fetchResponse',
273                array($target, new SimpleGetEncoding()));
274        $agent->expectCallCount('fetchResponse', 2);
275
276        $parsed_url = new SimpleUrl('http://this.com/new.html');
277        $parsed_url->setTarget('missing');
278
279        $page = &new MockSimplePage();
280        $page->setReturnValue('getUrlsByLabel', array($parsed_url));
281        $page->setReturnValue('hasFrames', false);
282        $page->expectOnce('getUrlsByLabel', array('New'));
283        $page->setReturnValue('getRaw', 'A page');
284
285        $browser = &$this->createBrowser($agent, $page);
286        $browser->get('http://this.com/page.html');
287        $this->assertTrue($browser->clickLink('New'));
288    }
289
290    function testClickingMissingLinkFails() {
291        $agent = &new MockSimpleUserAgent($this);
292        $agent->setReturnReference('fetchResponse', new MockSimpleHttpResponse());
293
294        $page = &new MockSimplePage();
295        $page->setReturnValue('getUrlsByLabel', array());
296        $page->setReturnValue('getRaw', 'stuff');
297
298        $browser = &$this->createBrowser($agent, $page);
299        $this->assertTrue($browser->get('http://this.com/page.html'));
300        $this->assertFalse($browser->clickLink('New'));
301    }
302
303    function testClickIndexedLink() {
304        $agent = &new MockSimpleUserAgent();
305        $agent->setReturnReference('fetchResponse', new MockSimpleHttpResponse());
306        $agent->expectArgumentsAt(
307                1,
308                'fetchResponse',
309                array(new SimpleUrl('1.html'), new SimpleGetEncoding()));
310        $agent->expectCallCount('fetchResponse', 2);
311
312        $page = &new MockSimplePage();
313        $page->setReturnValue(
314                'getUrlsByLabel',
315                array(new SimpleUrl('0.html'), new SimpleUrl('1.html')));
316        $page->setReturnValue('getRaw', 'A page');
317
318        $browser = &$this->createBrowser($agent, $page);
319        $browser->get('http://this.com/page.html');
320        $this->assertTrue($browser->clickLink('New', 1));
321    }
322
323    function testClinkLinkById() {
324        $agent = &new MockSimpleUserAgent();
325        $agent->setReturnReference('fetchResponse', new MockSimpleHttpResponse());
326        $agent->expectArgumentsAt(1, 'fetchResponse', array(
327                new SimpleUrl('http://this.com/link.html'),
328                new SimpleGetEncoding()));
329        $agent->expectCallCount('fetchResponse', 2);
330
331        $page = &new MockSimplePage();
332        $page->setReturnValue('getUrlById', new SimpleUrl('http://this.com/link.html'));
333        $page->expectOnce('getUrlById', array(2));
334        $page->setReturnValue('getRaw', 'A page');
335
336        $browser = &$this->createBrowser($agent, $page);
337        $browser->get('http://this.com/page.html');
338        $this->assertTrue($browser->clickLinkById(2));
339    }
340
341    function testClickingMissingLinkIdFails() {
342        $agent = &new MockSimpleUserAgent();
343        $agent->setReturnReference('fetchResponse', new MockSimpleHttpResponse());
344
345        $page = &new MockSimplePage();
346        $page->setReturnValue('getUrlById', false);
347
348        $browser = &$this->createBrowser($agent, $page);
349        $browser->get('http://this.com/page.html');
350        $this->assertFalse($browser->clickLink(0));
351    }
352
353    function testSubmitFormByLabel() {
354        $agent = &new MockSimpleUserAgent();
355        $agent->setReturnReference('fetchResponse', new MockSimpleHttpResponse());
356        $agent->expectArgumentsAt(1, 'fetchResponse', array(
357                new SimpleUrl('http://this.com/handler.html'),
358                new SimplePostEncoding(array('a' => 'A'))));
359        $agent->expectCallCount('fetchResponse', 2);
360
361        $form = &new MockSimpleForm();
362        $form->setReturnValue('getAction', new SimpleUrl('http://this.com/handler.html'));
363        $form->setReturnValue('getMethod', 'post');
364        $form->setReturnValue('submitButton', new SimplePostEncoding(array('a' => 'A')));
365        $form->expectOnce('submitButton', array(new SimpleByLabel('Go'), false));
366
367        $page = &new MockSimplePage();
368        $page->setReturnReference('getFormBySubmit', $form);
369        $page->expectOnce('getFormBySubmit', array(new SimpleByLabel('Go')));
370        $page->setReturnValue('getRaw', 'stuff');
371
372        $browser = &$this->createBrowser($agent, $page);
373        $browser->get('http://this.com/page.html');
374        $this->assertTrue($browser->clickSubmit('Go'));
375    }
376
377    function testDefaultSubmitFormByLabel() {
378        $agent = &new MockSimpleUserAgent();
379        $agent->setReturnReference('fetchResponse', new MockSimpleHttpResponse());
380        $agent->expectArgumentsAt(1,  'fetchResponse', array(
381                new SimpleUrl('http://this.com/page.html'),
382                new SimpleGetEncoding(array('a' => 'A'))));
383        $agent->expectCallCount('fetchResponse', 2);
384
385        $form = &new MockSimpleForm();
386        $form->setReturnValue('getAction', new SimpleUrl('http://this.com/page.html'));
387        $form->setReturnValue('getMethod', 'get');
388        $form->setReturnValue('submitButton', new SimpleGetEncoding(array('a' => 'A')));
389
390        $page = &new MockSimplePage();
391        $page->setReturnReference('getFormBySubmit', $form);
392        $page->expectOnce('getFormBySubmit', array(new SimpleByLabel('Submit')));
393        $page->setReturnValue('getRaw', 'stuff');
394        $page->setReturnValue('getUrl', new SimpleUrl('http://this.com/page.html'));
395
396        $browser = &$this->createBrowser($agent, $page);
397        $browser->get('http://this.com/page.html');
398        $this->assertTrue($browser->clickSubmit());
399    }
400
401    function testSubmitFormByName() {
402        $agent = &new MockSimpleUserAgent();
403        $agent->setReturnReference('fetchResponse', new MockSimpleHttpResponse());
404
405        $form = &new MockSimpleForm();
406        $form->setReturnValue('getAction', new SimpleUrl('http://this.com/handler.html'));
407        $form->setReturnValue('getMethod', 'post');
408        $form->setReturnValue('submitButton', new SimplePostEncoding(array('a' => 'A')));
409
410        $page = &new MockSimplePage();
411        $page->setReturnReference('getFormBySubmit', $form);
412        $page->expectOnce('getFormBySubmit', array(new SimpleByName('me')));
413        $page->setReturnValue('getRaw', 'stuff');
414
415        $browser = &$this->createBrowser($agent, $page);
416        $browser->get('http://this.com/page.html');
417        $this->assertTrue($browser->clickSubmitByName('me'));
418    }
419
420    function testSubmitFormById() {
421        $agent = &new MockSimpleUserAgent();
422        $agent->setReturnReference('fetchResponse', new MockSimpleHttpResponse());
423
424        $form = &new MockSimpleForm();
425        $form->setReturnValue('getAction', new SimpleUrl('http://this.com/handler.html'));
426        $form->setReturnValue('getMethod', 'post');
427        $form->setReturnValue('submitButton', new SimplePostEncoding(array('a' => 'A')));
428        $form->expectOnce('submitButton', array(new SimpleById(99), false));
429
430        $page = &new MockSimplePage();
431        $page->setReturnReference('getFormBySubmit', $form);
432        $page->expectOnce('getFormBySubmit', array(new SimpleById(99)));
433        $page->setReturnValue('getRaw', 'stuff');
434
435        $browser = &$this->createBrowser($agent, $page);
436        $browser->get('http://this.com/page.html');
437        $this->assertTrue($browser->clickSubmitById(99));
438    }
439
440    function testSubmitFormByImageLabel() {
441        $agent = &new MockSimpleUserAgent();
442        $agent->setReturnReference('fetchResponse', new MockSimpleHttpResponse());
443
444        $form = &new MockSimpleForm();
445        $form->setReturnValue('getAction', new SimpleUrl('http://this.com/handler.html'));
446        $form->setReturnValue('getMethod', 'post');
447        $form->setReturnValue('submitImage', new SimplePostEncoding(array('a' => 'A')));
448        $form->expectOnce('submitImage', array(new SimpleByLabel('Go!'), 10, 11, false));
449
450        $page = &new MockSimplePage();
451        $page->setReturnReference('getFormByImage', $form);
452        $page->expectOnce('getFormByImage', array(new SimpleByLabel('Go!')));
453        $page->setReturnValue('getRaw', 'stuff');
454
455        $browser = &$this->createBrowser($agent, $page);
456        $browser->get('http://this.com/page.html');
457        $this->assertTrue($browser->clickImage('Go!', 10, 11));
458    }
459
460    function testSubmitFormByImageName() {
461        $agent = &new MockSimpleUserAgent();
462        $agent->setReturnReference('fetchResponse', new MockSimpleHttpResponse());
463
464        $form = &new MockSimpleForm();
465        $form->setReturnValue('getAction', new SimpleUrl('http://this.com/handler.html'));
466        $form->setReturnValue('getMethod', 'post');
467        $form->setReturnValue('submitImage', new SimplePostEncoding(array('a' => 'A')));
468        $form->expectOnce('submitImage', array(new SimpleByName('a'), 10, 11, false));
469
470        $page = &new MockSimplePage();
471        $page->setReturnReference('getFormByImage', $form);
472        $page->expectOnce('getFormByImage', array(new SimpleByName('a')));
473        $page->setReturnValue('getRaw', 'stuff');
474
475        $browser = &$this->createBrowser($agent, $page);
476        $browser->get('http://this.com/page.html');
477        $this->assertTrue($browser->clickImageByName('a', 10, 11));
478    }
479
480    function testSubmitFormByImageId() {
481        $agent = &new MockSimpleUserAgent();
482        $agent->setReturnReference('fetchResponse', new MockSimpleHttpResponse());
483
484        $form = &new MockSimpleForm();
485        $form->setReturnValue('getAction', new SimpleUrl('http://this.com/handler.html'));
486        $form->setReturnValue('getMethod', 'post');
487        $form->setReturnValue('submitImage', new SimplePostEncoding(array('a' => 'A')));
488        $form->expectOnce('submitImage', array(new SimpleById(99), 10, 11, false));
489
490        $page = &new MockSimplePage();
491        $page->setReturnReference('getFormByImage', $form);
492        $page->expectOnce('getFormByImage', array(new SimpleById(99)));
493        $page->setReturnValue('getRaw', 'stuff');
494
495        $browser = &$this->createBrowser($agent, $page);
496        $browser->get('http://this.com/page.html');
497        $this->assertTrue($browser->clickImageById(99, 10, 11));
498    }
499
500    function testSubmitFormByFormId() {
501        $agent = &new MockSimpleUserAgent();
502        $agent->setReturnReference('fetchResponse', new MockSimpleHttpResponse());
503        $agent->expectArgumentsAt(1, 'fetchResponse', array(
504                new SimpleUrl('http://this.com/handler.html'),
505                new SimplePostEncoding(array('a' => 'A'))));
506        $agent->expectCallCount('fetchResponse', 2);
507
508        $form = &new MockSimpleForm();
509        $form->setReturnValue('getAction', new SimpleUrl('http://this.com/handler.html'));
510        $form->setReturnValue('getMethod', 'post');
511        $form->setReturnValue('submit', new SimplePostEncoding(array('a' => 'A')));
512
513        $page = &new MockSimplePage();
514        $page->setReturnReference('getFormById', $form);
515        $page->expectOnce('getFormById', array(33));
516        $page->setReturnValue('getRaw', 'stuff');
517
518        $browser = &$this->createBrowser($agent, $page);
519        $browser->get('http://this.com/page.html');
520        $this->assertTrue($browser->submitFormById(33));
521    }
522}
523
524class TestOfBrowserFrames extends UnitTestCase {
525
526    function &createBrowser(&$agent) {
527        $browser = &new MockUserAgentSimpleBrowser();
528        $browser->setReturnReference('_createUserAgent', $agent);
529        $browser->SimpleBrowser();
530        return $browser;
531    }
532
533    function &createUserAgent($pages) {
534        $agent = &new MockSimpleUserAgent();
535        foreach ($pages as $url => $raw) {
536            $url = new SimpleUrl($url);
537            $response = &new MockSimpleHttpResponse();
538            $response->setReturnValue('getUrl', $url);
539            $response->setReturnValue('getContent', $raw);
540            $agent->setReturnReference('fetchResponse', $response, array($url, '*'));
541        }
542        return $agent;
543    }
544
545    function testSimplePageHasNoFrames() {
546        $browser = &$this->createBrowser($this->createUserAgent(
547                array('http://site.with.no.frames/' => 'A non-framed page')));
548        $this->assertEqual(
549                $browser->get('http://site.with.no.frames/'),
550                'A non-framed page');
551        $this->assertIdentical($browser->getFrames(), 'http://site.with.no.frames/');
552    }
553
554    function testFramesetWithNoFrames() {
555        $browser = &$this->createBrowser($this->createUserAgent(
556                array('http://site.with.no.frames/' => '<frameset></frameset>')));
557        $this->assertEqual($browser->get('http://site.with.no.frames/'), '');
558        $this->assertIdentical($browser->getFrames(), array());
559    }
560
561    function testFramesetWithSingleFrame() {
562        $frameset = '<frameset><frame name="a" src="frame.html"></frameset>';
563        $browser = &$this->createBrowser($this->createUserAgent(array(
564                'http://site.with.one.frame/' => $frameset,
565                'http://site.with.one.frame/frame.html' => 'A frame')));
566        $this->assertEqual($browser->get('http://site.with.one.frame/'), 'A frame');
567        $this->assertIdentical(
568                $browser->getFrames(),
569                array('a' => 'http://site.with.one.frame/frame.html'));
570    }
571
572    function testTitleTakenFromFramesetPage() {
573        $frameset = '<title>Frameset title</title>' .
574                '<frameset><frame name="a" src="frame.html"></frameset>';
575        $browser = &$this->createBrowser($this->createUserAgent(array(
576                'http://site.with.one.frame/' => $frameset,
577                'http://site.with.one.frame/frame.html' => '<title>Page title</title>')));
578        $browser->get('http://site.with.one.frame/');
579        $this->assertEqual($browser->getTitle(), 'Frameset title');
580    }
581
582    function testFramesetWithSingleUnnamedFrame() {
583        $frameset = '<frameset><frame src="frame.html"></frameset>';
584        $browser = &$this->createBrowser($this->createUserAgent(array(
585                'http://site.with.one.frame/' => $frameset,
586                'http://site.with.one.frame/frame.html' => 'One frame')));
587        $this->assertEqual(
588                $browser->get('http://site.with.one.frame/'),
589                'One frame');
590        $this->assertIdentical(
591                $browser->getFrames(),
592                array(1 => 'http://site.with.one.frame/frame.html'));
593    }
594
595    function testFramesetWithMultipleFrames() {
596        $frameset = '<frameset>' .
597                '<frame name="a" src="frame_a.html">' .
598                '<frame name="b" src="frame_b.html">' .
599                '<frame name="c" src="frame_c.html">' .
600                '</frameset>';
601        $browser = &$this->createBrowser($this->createUserAgent(array(
602                'http://site.with.frames/' => $frameset,
603                'http://site.with.frames/frame_a.html' => 'A frame',
604                'http://site.with.frames/frame_b.html' => 'B frame',
605                'http://site.with.frames/frame_c.html' => 'C frame')));
606        $this->assertEqual(
607                $browser->get('http://site.with.frames/'),
608                'A frameB frameC frame');
609        $this->assertIdentical($browser->getFrames(), array(
610                'a' => 'http://site.with.frames/frame_a.html',
611                'b' => 'http://site.with.frames/frame_b.html',
612                'c' => 'http://site.with.frames/frame_c.html'));
613    }
614
615    function testFrameFocusByName() {
616        $frameset = '<frameset>' .
617                '<frame name="a" src="frame_a.html">' .
618                '<frame name="b" src="frame_b.html">' .
619                '<frame name="c" src="frame_c.html">' .
620                '</frameset>';
621        $browser = &$this->createBrowser($this->createUserAgent(array(
622                'http://site.with.frames/' => $frameset,
623                'http://site.with.frames/frame_a.html' => 'A frame',
624                'http://site.with.frames/frame_b.html' => 'B frame',
625                'http://site.with.frames/frame_c.html' => 'C frame')));
626        $browser->get('http://site.with.frames/');
627        $browser->setFrameFocus('a');
628        $this->assertEqual($browser->getContent(), 'A frame');
629        $browser->setFrameFocus('b');
630        $this->assertEqual($browser->getContent(), 'B frame');
631        $browser->setFrameFocus('c');
632        $this->assertEqual($browser->getContent(), 'C frame');
633    }
634
635    function testFramesetWithSomeNamedFrames() {
636        $frameset = '<frameset>' .
637                '<frame name="a" src="frame_a.html">' .
638                '<frame src="frame_b.html">' .
639                '<frame name="c" src="frame_c.html">' .
640                '<frame src="frame_d.html">' .
641                '</frameset>';
642        $browser = &$this->createBrowser($this->createUserAgent(array(
643                'http://site.with.frames/' => $frameset,
644                'http://site.with.frames/frame_a.html' => 'A frame',
645                'http://site.with.frames/frame_b.html' => 'B frame',
646                'http://site.with.frames/frame_c.html' => 'C frame',
647                'http://site.with.frames/frame_d.html' => 'D frame')));
648        $this->assertEqual(
649                $browser->get('http://site.with.frames/'),
650                'A frameB frameC frameD frame');
651        $this->assertIdentical($browser->getFrames(), array(
652                'a' => 'http://site.with.frames/frame_a.html',
653                2 => 'http://site.with.frames/frame_b.html',
654                'c' => 'http://site.with.frames/frame_c.html',
655                4 => 'http://site.with.frames/frame_d.html'));
656    }
657
658    function testFrameFocusWithMixedNamesAndIndexes() {
659        $frameset = '<frameset>' .
660                '<frame name="a" src="frame_a.html">' .
661                '<frame src="frame_b.html">' .
662                '<frame name="c" src="frame_c.html">' .
663                '<frame src="frame_d.html">' .
664                '</frameset>';
665        $browser = &$this->createBrowser($this->createUserAgent(array(
666                'http://site.with.frames/' => $frameset,
667                'http://site.with.frames/frame_a.html' => 'A frame',
668                'http://site.with.frames/frame_b.html' => 'B frame',
669                'http://site.with.frames/frame_c.html' => 'C frame',
670                'http://site.with.frames/frame_d.html' => 'D frame')));
671        $browser->get('http://site.with.frames/');
672        $browser->setFrameFocus('a');
673        $this->assertEqual($browser->getContent(), 'A frame');
674        $browser->setFrameFocus(2);
675        $this->assertEqual($browser->getContent(), 'B frame');
676        $browser->setFrameFocus('c');
677        $this->assertEqual($browser->getContent(), 'C frame');
678        $browser->setFrameFocus(4);
679        $this->assertEqual($browser->getContent(), 'D frame');
680        $browser->clearFrameFocus();
681        $this->assertEqual($browser->getContent(), 'A frameB frameC frameD frame');
682    }
683
684    function testNestedFrameset() {
685        $inner = '<frameset>' .
686                '<frame name="page" src="page.html">' .
687                '</frameset>';
688        $outer = '<frameset>' .
689                '<frame name="inner" src="inner.html">' .
690                '</frameset>';
691        $browser = &$this->createBrowser($this->createUserAgent(array(
692                'http://site.with.nested.frame/' => $outer,
693                'http://site.with.nested.frame/inner.html' => $inner,
694                'http://site.with.nested.frame/page.html' => 'The page')));
695        $this->assertEqual(
696                $browser->get('http://site.with.nested.frame/'),
697                'The page');
698        $this->assertIdentical($browser->getFrames(), array(
699                'inner' => array(
700                        'page' => 'http://site.with.nested.frame/page.html')));
701    }
702
703    function testCanNavigateToNestedFrame() {
704        $inner = '<frameset>' .
705                '<frame name="one" src="one.html">' .
706                '<frame name="two" src="two.html">' .
707                '</frameset>';
708        $outer = '<frameset>' .
709                '<frame name="inner" src="inner.html">' .
710                '<frame name="three" src="three.html">' .
711                '</frameset>';
712        $browser = &$this->createBrowser($this->createUserAgent(array(
713                'http://site.with.nested.frames/' => $outer,
714                'http://site.with.nested.frames/inner.html' => $inner,
715                'http://site.with.nested.frames/one.html' => 'Page one',
716                'http://site.with.nested.frames/two.html' => 'Page two',
717                'http://site.with.nested.frames/three.html' => 'Page three')));
718
719        $browser->get('http://site.with.nested.frames/');
720        $this->assertEqual($browser->getContent(), 'Page onePage twoPage three');
721
722        $this->assertTrue($browser->setFrameFocus('inner'));
723        $this->assertEqual($browser->getFrameFocus(), array('inner'));
724        $this->assertTrue($browser->setFrameFocus('one'));
725        $this->assertEqual($browser->getFrameFocus(), array('inner', 'one'));
726        $this->assertEqual($browser->getContent(), 'Page one');
727
728        $this->assertTrue($browser->setFrameFocus('two'));
729        $this->assertEqual($browser->getFrameFocus(), array('inner', 'two'));
730        $this->assertEqual($browser->getContent(), 'Page two');
731
732        $browser->clearFrameFocus();
733        $this->assertTrue($browser->setFrameFocus('three'));
734        $this->assertEqual($browser->getFrameFocus(), array('three'));
735        $this->assertEqual($browser->getContent(), 'Page three');
736
737        $this->assertTrue($browser->setFrameFocus('inner'));
738        $this->assertEqual($browser->getContent(), 'Page onePage two');
739    }
740
741    function testCanNavigateToNestedFrameByIndex() {
742        $inner = '<frameset>' .
743                '<frame src="one.html">' .
744                '<frame src="two.html">' .
745                '</frameset>';
746        $outer = '<frameset>' .
747                '<frame src="inner.html">' .
748                '<frame src="three.html">' .
749                '</frameset>';
750        $browser = &$this->createBrowser($this->createUserAgent(array(
751                'http://site.with.nested.frames/' => $outer,
752                'http://site.with.nested.frames/inner.html' => $inner,
753                'http://site.with.nested.frames/one.html' => 'Page one',
754                'http://site.with.nested.frames/two.html' => 'Page two',
755                'http://site.with.nested.frames/three.html' => 'Page three')));
756
757        $browser->get('http://site.with.nested.frames/');
758        $this->assertEqual($browser->getContent(), 'Page onePage twoPage three');
759
760        $this->assertTrue($browser->setFrameFocusByIndex(1));
761        $this->assertEqual($browser->getFrameFocus(), array(1));
762        $this->assertTrue($browser->setFrameFocusByIndex(1));
763        $this->assertEqual($browser->getFrameFocus(), array(1, 1));
764        $this->assertEqual($browser->getContent(), 'Page one');
765
766        $this->assertTrue($browser->setFrameFocusByIndex(2));
767        $this->assertEqual($browser->getFrameFocus(), array(1, 2));
768        $this->assertEqual($browser->getContent(), 'Page two');
769
770        $browser->clearFrameFocus();
771        $this->assertTrue($browser->setFrameFocusByIndex(2));
772        $this->assertEqual($browser->getFrameFocus(), array(2));
773        $this->assertEqual($browser->getContent(), 'Page three');
774
775        $this->assertTrue($browser->setFrameFocusByIndex(1));
776        $this->assertEqual($browser->getContent(), 'Page onePage two');
777    }
778}
779?>
Note: See TracBrowser for help on using the repository browser.