2
// $Id: browser_test.php,v 1.114 2005/09/09 01:27:38 lastcraft Exp $
4
require_once(dirname(__FILE__) . '/../browser.php');
5
require_once(dirname(__FILE__) . '/../user_agent.php');
6
require_once(dirname(__FILE__) . '/../http.php');
7
require_once(dirname(__FILE__) . '/../page.php');
8
require_once(dirname(__FILE__) . '/../encoding.php');
10
Mock::generate('SimpleHttpResponse');
11
Mock::generate('SimplePage');
12
Mock::generate('SimpleForm');
13
Mock::generate('SimpleUserAgent');
14
Mock::generatePartial(
16
'MockParseSimpleBrowser',
17
array('_createUserAgent', '_parse'));
18
Mock::generatePartial(
20
'MockUserAgentSimpleBrowser',
21
array('_createUserAgent'));
23
class TestOfHistory extends UnitTestCase {
25
function testEmptyHistoryHasFalseContents() {
26
$history = &new SimpleBrowserHistory();
27
$this->assertIdentical($history->getUrl(), false);
28
$this->assertIdentical($history->getParameters(), false);
31
function testCannotMoveInEmptyHistory() {
32
$history = &new SimpleBrowserHistory();
33
$this->assertFalse($history->back());
34
$this->assertFalse($history->forward());
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());
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)));
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());
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());
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());
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)));
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)));
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());
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());
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());
144
$this->assertIdentical($history->getUrl(), new SimpleUrl('http://www.first.com/'));
145
$this->assertFalse($history->back());
149
class TestOfParsedPageAccess extends UnitTestCase {
151
function &loadPage(&$page) {
152
$response = &new MockSimpleHttpResponse($this);
154
$agent = &new MockSimpleUserAgent($this);
155
$agent->setReturnReference('fetchResponse', $response);
157
$browser = &new MockParseSimpleBrowser($this);
158
$browser->setReturnReference('_createUserAgent', $agent);
159
$browser->setReturnReference('_parse', $page);
160
$browser->SimpleBrowser();
162
$browser->get('http://this.com/page.html');
166
function testAccessorsWhenNoPage() {
167
$agent = &new MockSimpleUserAgent($this);
169
$browser = &new MockParseSimpleBrowser($this);
170
$browser->setReturnReference('_createUserAgent', $agent);
171
$browser->SimpleBrowser();
173
$this->assertEqual($browser->getContent(), '');
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!');
188
$browser = &$this->loadPage($page);
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!');
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->assertTrue($browser->isLink('a link label'));
209
function testLinkAffirmationByIdWhenPresent() {
210
$page = &new MockSimplePage();
211
$page->setReturnValue('getUrlById', true, array(99));
212
$page->setReturnValue('getUrlById', false, array('*'));
213
$browser = &$this->loadPage($page);
214
$this->assertTrue($browser->isLinkById(99));
215
$this->assertFalse($browser->isLinkById(98));
218
function testSettingFieldIsPassedToPage() {
219
$page = &new MockSimplePage();
220
$page->expectOnce('setField', array(new SimpleByLabelOrName('key'), 'Value'));
221
$page->setReturnValue('getField', 'Value');
222
$browser = &$this->loadPage($page);
223
$this->assertEqual($browser->getField('key'), 'Value');
224
$browser->setField('key', 'Value');
228
class TestOfBrowserNavigation extends UnitTestCase {
230
function &createBrowser(&$agent, &$page) {
231
$browser = &new MockParseSimpleBrowser();
232
$browser->setReturnReference('_createUserAgent', $agent);
233
$browser->setReturnReference('_parse', $page);
234
$browser->SimpleBrowser();
238
function testClickLinkRequestsPage() {
239
$agent = &new MockSimpleUserAgent();
240
$agent->setReturnReference('fetchResponse', new MockSimpleHttpResponse());
241
$agent->expectArgumentsAt(
244
array(new SimpleUrl('http://this.com/page.html'), new SimpleGetEncoding()));
245
$agent->expectArgumentsAt(
248
array(new SimpleUrl('http://this.com/new.html'), new SimpleGetEncoding()));
249
$agent->expectCallCount('fetchResponse', 2);
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');
256
$browser = &$this->createBrowser($agent, $page);
257
$browser->get('http://this.com/page.html');
258
$this->assertTrue($browser->clickLink('New'));
261
function testClickLinkWithUnknownFrameStillRequestsWholePage() {
262
$agent = &new MockSimpleUserAgent();
263
$agent->setReturnReference('fetchResponse', new MockSimpleHttpResponse());
264
$agent->expectArgumentsAt(
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(
273
array($target, new SimpleGetEncoding()));
274
$agent->expectCallCount('fetchResponse', 2);
276
$parsed_url = new SimpleUrl('http://this.com/new.html');
277
$parsed_url->setTarget('missing');
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');
285
$browser = &$this->createBrowser($agent, $page);
286
$browser->get('http://this.com/page.html');
287
$this->assertTrue($browser->clickLink('New'));
290
function testClickingMissingLinkFails() {
291
$agent = &new MockSimpleUserAgent($this);
292
$agent->setReturnReference('fetchResponse', new MockSimpleHttpResponse());
294
$page = &new MockSimplePage();
295
$page->setReturnValue('getUrlsByLabel', array());
296
$page->setReturnValue('getRaw', 'stuff');
298
$browser = &$this->createBrowser($agent, $page);
299
$this->assertTrue($browser->get('http://this.com/page.html'));
300
$this->assertFalse($browser->clickLink('New'));
303
function testClickIndexedLink() {
304
$agent = &new MockSimpleUserAgent();
305
$agent->setReturnReference('fetchResponse', new MockSimpleHttpResponse());
306
$agent->expectArgumentsAt(
309
array(new SimpleUrl('1.html'), new SimpleGetEncoding()));
310
$agent->expectCallCount('fetchResponse', 2);
312
$page = &new MockSimplePage();
313
$page->setReturnValue(
315
array(new SimpleUrl('0.html'), new SimpleUrl('1.html')));
316
$page->setReturnValue('getRaw', 'A page');
318
$browser = &$this->createBrowser($agent, $page);
319
$browser->get('http://this.com/page.html');
320
$this->assertTrue($browser->clickLink('New', 1));
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);
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');
336
$browser = &$this->createBrowser($agent, $page);
337
$browser->get('http://this.com/page.html');
338
$this->assertTrue($browser->clickLinkById(2));
341
function testClickingMissingLinkIdFails() {
342
$agent = &new MockSimpleUserAgent();
343
$agent->setReturnReference('fetchResponse', new MockSimpleHttpResponse());
345
$page = &new MockSimplePage();
346
$page->setReturnValue('getUrlById', false);
348
$browser = &$this->createBrowser($agent, $page);
349
$browser->get('http://this.com/page.html');
350
$this->assertFalse($browser->clickLink(0));
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);
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));
367
$page = &new MockSimplePage();
368
$page->setReturnReference('getFormBySubmit', $form);
369
$page->expectOnce('getFormBySubmit', array(new SimpleByLabel('Go')));
370
$page->setReturnValue('getRaw', 'stuff');
372
$browser = &$this->createBrowser($agent, $page);
373
$browser->get('http://this.com/page.html');
374
$this->assertTrue($browser->clickSubmit('Go'));
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);
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')));
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'));
396
$browser = &$this->createBrowser($agent, $page);
397
$browser->get('http://this.com/page.html');
398
$this->assertTrue($browser->clickSubmit());
401
function testSubmitFormByName() {
402
$agent = &new MockSimpleUserAgent();
403
$agent->setReturnReference('fetchResponse', new MockSimpleHttpResponse());
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')));
410
$page = &new MockSimplePage();
411
$page->setReturnReference('getFormBySubmit', $form);
412
$page->expectOnce('getFormBySubmit', array(new SimpleByName('me')));
413
$page->setReturnValue('getRaw', 'stuff');
415
$browser = &$this->createBrowser($agent, $page);
416
$browser->get('http://this.com/page.html');
417
$this->assertTrue($browser->clickSubmitByName('me'));
420
function testSubmitFormById() {
421
$agent = &new MockSimpleUserAgent();
422
$agent->setReturnReference('fetchResponse', new MockSimpleHttpResponse());
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));
430
$page = &new MockSimplePage();
431
$page->setReturnReference('getFormBySubmit', $form);
432
$page->expectOnce('getFormBySubmit', array(new SimpleById(99)));
433
$page->setReturnValue('getRaw', 'stuff');
435
$browser = &$this->createBrowser($agent, $page);
436
$browser->get('http://this.com/page.html');
437
$this->assertTrue($browser->clickSubmitById(99));
440
function testSubmitFormByImageLabel() {
441
$agent = &new MockSimpleUserAgent();
442
$agent->setReturnReference('fetchResponse', new MockSimpleHttpResponse());
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));
450
$page = &new MockSimplePage();
451
$page->setReturnReference('getFormByImage', $form);
452
$page->expectOnce('getFormByImage', array(new SimpleByLabel('Go!')));
453
$page->setReturnValue('getRaw', 'stuff');
455
$browser = &$this->createBrowser($agent, $page);
456
$browser->get('http://this.com/page.html');
457
$this->assertTrue($browser->clickImage('Go!', 10, 11));
460
function testSubmitFormByImageName() {
461
$agent = &new MockSimpleUserAgent();
462
$agent->setReturnReference('fetchResponse', new MockSimpleHttpResponse());
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));
470
$page = &new MockSimplePage();
471
$page->setReturnReference('getFormByImage', $form);
472
$page->expectOnce('getFormByImage', array(new SimpleByName('a')));
473
$page->setReturnValue('getRaw', 'stuff');
475
$browser = &$this->createBrowser($agent, $page);
476
$browser->get('http://this.com/page.html');
477
$this->assertTrue($browser->clickImageByName('a', 10, 11));
480
function testSubmitFormByImageId() {
481
$agent = &new MockSimpleUserAgent();
482
$agent->setReturnReference('fetchResponse', new MockSimpleHttpResponse());
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));
490
$page = &new MockSimplePage();
491
$page->setReturnReference('getFormByImage', $form);
492
$page->expectOnce('getFormByImage', array(new SimpleById(99)));
493
$page->setReturnValue('getRaw', 'stuff');
495
$browser = &$this->createBrowser($agent, $page);
496
$browser->get('http://this.com/page.html');
497
$this->assertTrue($browser->clickImageById(99, 10, 11));
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);
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')));
513
$page = &new MockSimplePage();
514
$page->setReturnReference('getFormById', $form);
515
$page->expectOnce('getFormById', array(33));
516
$page->setReturnValue('getRaw', 'stuff');
518
$browser = &$this->createBrowser($agent, $page);
519
$browser->get('http://this.com/page.html');
520
$this->assertTrue($browser->submitFormById(33));
524
class TestOfBrowserFrames extends UnitTestCase {
526
function &createBrowser(&$agent) {
527
$browser = &new MockUserAgentSimpleBrowser();
528
$browser->setReturnReference('_createUserAgent', $agent);
529
$browser->SimpleBrowser();
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, '*'));
545
function testSimplePageHasNoFrames() {
546
$browser = &$this->createBrowser($this->createUserAgent(
547
array('http://site.with.no.frames/' => 'A non-framed page')));
549
$browser->get('http://site.with.no.frames/'),
550
'A non-framed page');
551
$this->assertIdentical($browser->getFrames(), 'http://site.with.no.frames/');
554
function testFramesetWithNoFrames() {
555
$browser = &$this->createBrowser($this->createUserAgent(
556
array('http://site.with.no.frames/' => '<frameset></frameset>')));
558
$browser->get('http://site.with.no.frames/'),
560
$this->assertIdentical($browser->getFrames(), array());
563
function testFramesetWithSingleFrame() {
564
$frameset = '<frameset><frame name="a" src="frame.html"></frameset>';
565
$browser = &$this->createBrowser($this->createUserAgent(array(
566
'http://site.with.one.frame/' => $frameset,
567
'http://site.with.one.frame/frame.html' => 'A frame')));
570
$browser->get('http://site.with.one.frame/'),
572
$this->assertIdentical(
573
$browser->getFrames(),
574
array('a' => 'http://site.with.one.frame/frame.html'));
577
function testTitleTakenFromFramesetPage() {
578
$frameset = '<title>Frameset title</title>' .
579
'<frameset><frame name="a" src="frame.html"></frameset>';
580
$browser = &$this->createBrowser($this->createUserAgent(array(
581
'http://site.with.one.frame/' => $frameset,
582
'http://site.with.one.frame/frame.html' => '<title>Page title</title>')));
584
$browser->get('http://site.with.one.frame/');
585
$this->assertEqual($browser->getTitle(), 'Frameset title');
588
function testFramesetWithSingleUnnamedFrame() {
589
$frameset = '<frameset><frame src="frame.html"></frameset>';
590
$browser = &$this->createBrowser($this->createUserAgent(array(
591
'http://site.with.one.frame/' => $frameset,
592
'http://site.with.one.frame/frame.html' => 'One frame')));
595
$browser->get('http://site.with.one.frame/'),
597
$this->assertIdentical(
598
$browser->getFrames(),
599
array(1 => 'http://site.with.one.frame/frame.html'));
602
function testFramesetWithMultipleFrames() {
603
$frameset = '<frameset>' .
604
'<frame name="a" src="frame_a.html">' .
605
'<frame name="b" src="frame_b.html">' .
606
'<frame name="c" src="frame_c.html">' .
608
$browser = &$this->createBrowser($this->createUserAgent(array(
609
'http://site.with.frames/' => $frameset,
610
'http://site.with.frames/frame_a.html' => 'A frame',
611
'http://site.with.frames/frame_b.html' => 'B frame',
612
'http://site.with.frames/frame_c.html' => 'C frame')));
615
$browser->get('http://site.with.frames/'),
616
'A frameB frameC frame');
617
$this->assertIdentical($browser->getFrames(), array(
618
'a' => 'http://site.with.frames/frame_a.html',
619
'b' => 'http://site.with.frames/frame_b.html',
620
'c' => 'http://site.with.frames/frame_c.html'));
623
function testFrameFocusByName() {
624
$frameset = '<frameset>' .
625
'<frame name="a" src="frame_a.html">' .
626
'<frame name="b" src="frame_b.html">' .
627
'<frame name="c" src="frame_c.html">' .
629
$browser = &$this->createBrowser($this->createUserAgent(array(
630
'http://site.with.frames/' => $frameset,
631
'http://site.with.frames/frame_a.html' => 'A frame',
632
'http://site.with.frames/frame_b.html' => 'B frame',
633
'http://site.with.frames/frame_c.html' => 'C frame')));
635
$browser->get('http://site.with.frames/');
636
$browser->setFrameFocus('a');
637
$this->assertEqual($browser->getContent(), 'A frame');
638
$browser->setFrameFocus('b');
639
$this->assertEqual($browser->getContent(), 'B frame');
640
$browser->setFrameFocus('c');
641
$this->assertEqual($browser->getContent(), 'C frame');
644
function testFramesetWithSomeNamedFrames() {
645
$frameset = '<frameset>' .
646
'<frame name="a" src="frame_a.html">' .
647
'<frame src="frame_b.html">' .
648
'<frame name="c" src="frame_c.html">' .
649
'<frame src="frame_d.html">' .
651
$browser = &$this->createBrowser($this->createUserAgent(array(
652
'http://site.with.frames/' => $frameset,
653
'http://site.with.frames/frame_a.html' => 'A frame',
654
'http://site.with.frames/frame_b.html' => 'B frame',
655
'http://site.with.frames/frame_c.html' => 'C frame',
656
'http://site.with.frames/frame_d.html' => 'D frame')));
659
$browser->get('http://site.with.frames/'),
660
'A frameB frameC frameD frame');
661
$this->assertIdentical($browser->getFrames(), array(
662
'a' => 'http://site.with.frames/frame_a.html',
663
2 => 'http://site.with.frames/frame_b.html',
664
'c' => 'http://site.with.frames/frame_c.html',
665
4 => 'http://site.with.frames/frame_d.html'));
668
function testFrameFocusWithMixedNamesAndIndexes() {
669
$frameset = '<frameset>' .
670
'<frame name="a" src="frame_a.html">' .
671
'<frame src="frame_b.html">' .
672
'<frame name="c" src="frame_c.html">' .
673
'<frame src="frame_d.html">' .
675
$browser = &$this->createBrowser($this->createUserAgent(array(
676
'http://site.with.frames/' => $frameset,
677
'http://site.with.frames/frame_a.html' => 'A frame',
678
'http://site.with.frames/frame_b.html' => 'B frame',
679
'http://site.with.frames/frame_c.html' => 'C frame',
680
'http://site.with.frames/frame_d.html' => 'D frame')));
682
$browser->get('http://site.with.frames/');
683
$browser->setFrameFocus('a');
684
$this->assertEqual($browser->getContent(), 'A frame');
685
$browser->setFrameFocus(2);
686
$this->assertEqual($browser->getContent(), 'B frame');
687
$browser->setFrameFocus('c');
688
$this->assertEqual($browser->getContent(), 'C frame');
689
$browser->setFrameFocus(4);
690
$this->assertEqual($browser->getContent(), 'D frame');
691
$browser->clearFrameFocus();
692
$this->assertEqual($browser->getContent(), 'A frameB frameC frameD frame');
695
function testNestedFrameset() {
696
$inner = '<frameset>' .
697
'<frame name="page" src="page.html">' .
699
$outer = '<frameset>' .
700
'<frame name="inner" src="inner.html">' .
702
$browser = &$this->createBrowser($this->createUserAgent(array(
703
'http://site.with.nested.frame/' => $outer,
704
'http://site.with.nested.frame/inner.html' => $inner,
705
'http://site.with.nested.frame/page.html' => 'The page')));
708
$browser->get('http://site.with.nested.frame/'),
710
$this->assertIdentical($browser->getFrames(), array(
712
'page' => 'http://site.with.nested.frame/page.html')));
715
function testCanNavigateToNestedFrame() {
716
$inner = '<frameset>' .
717
'<frame name="one" src="one.html">' .
718
'<frame name="two" src="two.html">' .
720
$outer = '<frameset>' .
721
'<frame name="inner" src="inner.html">' .
722
'<frame name="three" src="three.html">' .
724
$browser = &$this->createBrowser($this->createUserAgent(array(
725
'http://site.with.nested.frames/' => $outer,
726
'http://site.with.nested.frames/inner.html' => $inner,
727
'http://site.with.nested.frames/one.html' => 'Page one',
728
'http://site.with.nested.frames/two.html' => 'Page two',
729
'http://site.with.nested.frames/three.html' => 'Page three')));
731
$browser->get('http://site.with.nested.frames/');
732
$this->assertEqual($browser->getContent(), 'Page onePage twoPage three');
734
$this->assertTrue($browser->setFrameFocus('inner'));
735
$this->assertEqual($browser->getFrameFocus(), array('inner'));
736
$this->assertTrue($browser->setFrameFocus('one'));
737
$this->assertEqual($browser->getFrameFocus(), array('inner', 'one'));
738
$this->assertEqual($browser->getContent(), 'Page one');
740
$this->assertTrue($browser->setFrameFocus('two'));
741
$this->assertEqual($browser->getFrameFocus(), array('inner', 'two'));
742
$this->assertEqual($browser->getContent(), 'Page two');
744
$browser->clearFrameFocus();
745
$this->assertTrue($browser->setFrameFocus('three'));
746
$this->assertEqual($browser->getFrameFocus(), array('three'));
747
$this->assertEqual($browser->getContent(), 'Page three');
749
$this->assertTrue($browser->setFrameFocus('inner'));
750
$this->assertEqual($browser->getContent(), 'Page onePage two');
753
function testCanNavigateToNestedFrameByIndex() {
754
$inner = '<frameset>' .
755
'<frame src="one.html">' .
756
'<frame src="two.html">' .
758
$outer = '<frameset>' .
759
'<frame src="inner.html">' .
760
'<frame src="three.html">' .
762
$browser = &$this->createBrowser($this->createUserAgent(array(
763
'http://site.with.nested.frames/' => $outer,
764
'http://site.with.nested.frames/inner.html' => $inner,
765
'http://site.with.nested.frames/one.html' => 'Page one',
766
'http://site.with.nested.frames/two.html' => 'Page two',
767
'http://site.with.nested.frames/three.html' => 'Page three')));
769
$browser->get('http://site.with.nested.frames/');
770
$this->assertEqual($browser->getContent(), 'Page onePage twoPage three');
772
$this->assertTrue($browser->setFrameFocusByIndex(1));
773
$this->assertEqual($browser->getFrameFocus(), array(1));
774
$this->assertTrue($browser->setFrameFocusByIndex(1));
775
$this->assertEqual($browser->getFrameFocus(), array(1, 1));
776
$this->assertEqual($browser->getContent(), 'Page one');
778
$this->assertTrue($browser->setFrameFocusByIndex(2));
779
$this->assertEqual($browser->getFrameFocus(), array(1, 2));
780
$this->assertEqual($browser->getContent(), 'Page two');
782
$browser->clearFrameFocus();
783
$this->assertTrue($browser->setFrameFocusByIndex(2));
784
$this->assertEqual($browser->getFrameFocus(), array(2));
785
$this->assertEqual($browser->getContent(), 'Page three');
787
$this->assertTrue($browser->setFrameFocusByIndex(1));
788
$this->assertEqual($browser->getContent(), 'Page onePage two');
b'\\ No newline at end of file'