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

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

Added SimpleTest? test framework

File size: 62.1 KB
Line 
1<?php
2// $Id: acceptance_test.php 1700 2008-03-24 16:17:48Z lastcraft $
3require_once(dirname(__FILE__) . '/../autorun.php');
4require_once(dirname(__FILE__) . '/../compatibility.php');
5require_once(dirname(__FILE__) . '/../browser.php');
6require_once(dirname(__FILE__) . '/../web_tester.php');
7require_once(dirname(__FILE__) . '/../unit_tester.php');
8
9class SimpleTestAcceptanceTest extends WebTestCase {
10    function samples() {
11        return 'http://www.lastcraft.com/test/';
12    }
13}
14
15class TestOfLiveBrowser extends UnitTestCase {
16    function samples() {
17        return SimpleTestAcceptanceTest::samples();
18    }
19
20    function testGet() {
21        $browser = &new SimpleBrowser();
22        $browser->addHeader('User-Agent: SimpleTest ' . SimpleTest::getVersion());
23        $this->assertTrue($browser->get($this->samples() . 'network_confirm.php'));
24        $this->assertPattern('/target for the SimpleTest/', $browser->getContent());
25        $this->assertPattern('/Request method.*?<dd>GET<\/dd>/', $browser->getContent());
26        $this->assertEqual($browser->getTitle(), 'Simple test target file');
27        $this->assertEqual($browser->getResponseCode(), 200);
28        $this->assertEqual($browser->getMimeType(), 'text/html');
29    }
30   
31    function testPost() {
32        $browser = &new SimpleBrowser();
33        $browser->addHeader('User-Agent: SimpleTest ' . SimpleTest::getVersion());
34        $this->assertTrue($browser->post($this->samples() . 'network_confirm.php'));
35        $this->assertPattern('/target for the SimpleTest/', $browser->getContent());
36        $this->assertPattern('/Request method.*?<dd>POST<\/dd>/', $browser->getContent());
37    }
38   
39    function testAbsoluteLinkFollowing() {
40        $browser = &new SimpleBrowser();
41        $browser->addHeader('User-Agent: SimpleTest ' . SimpleTest::getVersion());
42        $browser->get($this->samples() . 'link_confirm.php');
43        $this->assertTrue($browser->clickLink('Absolute'));
44        $this->assertPattern('/target for the SimpleTest/', $browser->getContent());
45    }
46   
47    function testRelativeEncodedeLinkFollowing() {
48        $browser = &new SimpleBrowser();
49        $browser->addHeader('User-Agent: SimpleTest ' . SimpleTest::getVersion());
50        $browser->get($this->samples() . 'link_confirm.php');
51        $this->assertTrue($browser->clickLink("märcêl kiek'eboe"));
52        $this->assertPattern('/target for the SimpleTest/', $browser->getContent());
53    }
54   
55    function testRelativeLinkFollowing() {
56        $browser = &new SimpleBrowser();
57        $browser->addHeader('User-Agent: SimpleTest ' . SimpleTest::getVersion());
58        $browser->get($this->samples() . 'link_confirm.php');
59        $this->assertTrue($browser->clickLink('Relative'));
60        $this->assertPattern('/target for the SimpleTest/', $browser->getContent());
61    }
62   
63    function testUnifiedClickLinkClicking() {
64        $browser = &new SimpleBrowser();
65        $browser->addHeader('User-Agent: SimpleTest ' . SimpleTest::getVersion());
66        $browser->get($this->samples() . 'link_confirm.php');
67        $this->assertTrue($browser->click('Relative'));
68        $this->assertPattern('/target for the SimpleTest/', $browser->getContent());
69    }
70   
71    function testIdLinkFollowing() {
72        $browser = &new SimpleBrowser();
73        $browser->addHeader('User-Agent: SimpleTest ' . SimpleTest::getVersion());
74        $browser->get($this->samples() . 'link_confirm.php');
75        $this->assertTrue($browser->clickLinkById(1));
76        $this->assertPattern('/target for the SimpleTest/', $browser->getContent());
77    }
78   
79    function testCookieReading() {
80        $browser = &new SimpleBrowser();
81        $browser->addHeader('User-Agent: SimpleTest ' . SimpleTest::getVersion());
82        $browser->get($this->samples() . 'set_cookies.php');
83        $this->assertEqual($browser->getCurrentCookieValue('session_cookie'), 'A');
84        $this->assertEqual($browser->getCurrentCookieValue('short_cookie'), 'B');
85        $this->assertEqual($browser->getCurrentCookieValue('day_cookie'), 'C');
86    }
87   
88    function testSimpleSubmit() {
89        $browser = &new SimpleBrowser();
90        $browser->addHeader('User-Agent: SimpleTest ' . SimpleTest::getVersion());
91        $browser->get($this->samples() . 'form.html');
92        $this->assertTrue($browser->clickSubmit('Go!'));
93        $this->assertPattern('/Request method.*?<dd>POST<\/dd>/', $browser->getContent());
94        $this->assertPattern('/go=\[Go!\]/', $browser->getContent());
95    }
96   
97    function testUnifiedClickCanSubmit() {
98        $browser = &new SimpleBrowser();
99        $browser->addHeader('User-Agent: SimpleTest ' . SimpleTest::getVersion());
100        $browser->get($this->samples() . 'form.html');
101        $this->assertTrue($browser->click('Go!'));
102        $this->assertPattern('/go=\[Go!\]/', $browser->getContent());
103    }
104}
105
106class TestRadioFields extends SimpleTestAcceptanceTest {
107        function testSetFieldAsInteger() {
108                $this->get($this->samples() . 'form_with_radio_buttons.html');
109                $this->assertTrue($this->setField('tested_field', 2));
110                $this->clickSubmitByName('send');
111                $this->assertEqual($this->getUrl(), $this->samples() . 'form_with_radio_buttons.html?tested_field=2&send=click+me');
112        }
113
114        function testSetFieldAsString() {
115                $this->get($this->samples() . 'form_with_radio_buttons.html');
116                $this->assertTrue($this->setField('tested_field', '2'));
117                $this->clickSubmitByName('send');
118                $this->assertEqual($this->getUrl(), $this->samples() . 'form_with_radio_buttons.html?tested_field=2&send=click+me');
119        }
120}
121
122class TestOfLiveFetching extends SimpleTestAcceptanceTest {
123    function setUp() {
124        $this->addHeader('User-Agent: SimpleTest ' . SimpleTest::getVersion());
125    }
126 
127        function testFormWithArrayBasedInputs() {
128                $this->get($this->samples() . 'form_with_array_based_inputs.php');
129                $this->setField('value[]', '3', '1');
130                $this->setField('value[]', '4', '2');
131                $this->clickSubmit('Go');
132        $this->assertPattern('/QUERY_STRING : value%5B%5D=3&value%5B%5D=4&submit=Go/');
133        }
134
135        function testFormWithQuotedValues() {
136                $this->get($this->samples() . 'form_with_quoted_values.php');
137                $this->assertField('a', 'default');
138                $this->assertFieldById('text_field', 'default');
139                $this->clickSubmit('Go');
140        $this->assertPattern('/a=default&submit=Go/');
141        }
142
143    function testGet() {
144        $this->assertTrue($this->get($this->samples() . 'network_confirm.php'));
145        $this->assertEqual($this->getUrl(), $this->samples() . 'network_confirm.php');
146        $this->assertText('target for the SimpleTest');
147        $this->assertPattern('/Request method.*?<dd>GET<\/dd>/');
148        $this->assertTitle('Simple test target file');
149        $this->assertTitle(new PatternExpectation('/target file/'));
150        $this->assertResponse(200);
151        $this->assertMime('text/html');
152        $this->assertHeader('connection', 'close');
153        $this->assertHeader('connection', new PatternExpectation('/los/'));
154    }
155   
156    function testSlowGet() {
157        $this->assertTrue($this->get($this->samples() . 'slow_page.php'));
158    }
159   
160    function testTimedOutGet() {
161        $this->setConnectionTimeout(1);
162        $this->ignoreErrors();
163        $this->assertFalse($this->get($this->samples() . 'slow_page.php'));
164    }
165   
166    function testPost() {
167        $this->assertTrue($this->post($this->samples() . 'network_confirm.php'));
168        $this->assertText('target for the SimpleTest');
169        $this->assertPattern('/Request method.*?<dd>POST<\/dd>/');
170    }
171   
172    function testGetWithData() {
173        $this->get($this->samples() . 'network_confirm.php', array("a" => "aaa"));
174        $this->assertPattern('/Request method.*?<dd>GET<\/dd>/');
175        $this->assertText('a=[aaa]');
176    }
177   
178    function testPostWithData() {
179        $this->post($this->samples() . 'network_confirm.php', array("a" => "aaa"));
180        $this->assertPattern('/Request method.*?<dd>POST<\/dd>/');
181        $this->assertText('a=[aaa]');
182    }
183
184    function testPostWithRecursiveData() {
185        $this->post($this->samples() . 'network_confirm.php', array("a" => "aaa"));
186        $this->assertPattern('/Request method.*?<dd>POST<\/dd>/');
187        $this->assertText('a=[aaa]');
188
189        $this->post($this->samples() . 'network_confirm.php', array("a[aa]" => "aaa"));
190        $this->assertPattern('/Request method.*?<dd>POST<\/dd>/');
191        $this->assertText('a=[aa=[aaa]]');
192
193        $this->post($this->samples() . 'network_confirm.php', array("a[aa][aaa]" => "aaaa"));
194        $this->assertPattern('/Request method.*?<dd>POST<\/dd>/');
195        $this->assertText('a=[aa=[aaa=[aaaa]]]');
196
197        $this->post($this->samples() . 'network_confirm.php', array("a" => array("aa" => "aaa")));
198        $this->assertPattern('/Request method.*?<dd>POST<\/dd>/');
199        $this->assertText('a=[aa=[aaa]]');
200
201        $this->post($this->samples() . 'network_confirm.php', array("a" => array("aa" => array("aaa" => "aaaa"))));
202        $this->assertPattern('/Request method.*?<dd>POST<\/dd>/');
203        $this->assertText('a=[aa=[aaa=[aaaa]]]');
204    }
205
206    function testRelativeGet() {
207        $this->get($this->samples() . 'link_confirm.php');
208        $this->assertTrue($this->get('network_confirm.php'));
209        $this->assertText('target for the SimpleTest');
210    }
211   
212    function testRelativePost() {
213        $this->post($this->samples() . 'link_confirm.php');
214        $this->assertTrue($this->post('network_confirm.php'));
215        $this->assertText('target for the SimpleTest');
216    }
217}
218
219class TestOfLinkFollowing extends SimpleTestAcceptanceTest {
220    function setUp() {
221        $this->addHeader('User-Agent: SimpleTest ' . SimpleTest::getVersion());
222    }
223   
224    function testLinkAssertions() {
225        $this->get($this->samples() . 'link_confirm.php');
226        $this->assertLink('Absolute', $this->samples() . 'network_confirm.php');
227        $this->assertLink('Absolute', new PatternExpectation('/confirm/'));
228        $this->assertClickable('Absolute');
229    }
230   
231    function testAbsoluteLinkFollowing() {
232        $this->get($this->samples() . 'link_confirm.php');
233        $this->assertTrue($this->clickLink('Absolute'));
234        $this->assertText('target for the SimpleTest');
235    }
236   
237    function testRelativeLinkFollowing() {
238        $this->get($this->samples() . 'link_confirm.php');
239        $this->assertTrue($this->clickLink('Relative'));
240        $this->assertText('target for the SimpleTest');
241    }
242   
243    function testLinkIdFollowing() {
244        $this->get($this->samples() . 'link_confirm.php');
245        $this->assertLinkById(1);
246        $this->assertTrue($this->clickLinkById(1));
247        $this->assertText('target for the SimpleTest');
248    }
249   
250    function testAbsoluteUrlBehavesAbsolutely() {
251        $this->get($this->samples() . 'link_confirm.php');
252        $this->get('http://www.lastcraft.com');
253        $this->assertText('No guarantee of quality is given or even intended');
254    }
255   
256    function testRelativeUrlRespectsBaseTag() {
257        $this->get($this->samples() . 'base_tag/base_link.html');
258        $this->click('Back to test pages');
259        $this->assertTitle('Simple test target file');
260    }
261}
262
263class TestOfLivePageLinkingWithMinimalLinks extends SimpleTestAcceptanceTest {
264    function setUp() {
265        $this->addHeader('User-Agent: SimpleTest ' . SimpleTest::getVersion());
266    }
267   
268    function testClickToExplicitelyNamedSelfReturns() {
269        $this->get($this->samples() . 'front_controller_style/a_page.php');
270        $this->assertEqual($this->getUrl(), $this->samples() . 'front_controller_style/a_page.php');
271        $this->assertTitle('Simple test page with links');
272        $this->assertLink('Self');
273        $this->clickLink('Self');
274        $this->assertTitle('Simple test page with links');
275    }
276   
277    function testClickToMissingPageReturnsToSamePage() {
278        $this->get($this->samples() . 'front_controller_style/a_page.php');
279        $this->clickLink('No page');
280        $this->assertTitle('Simple test page with links');
281        $this->assertText('[action=no_page]');
282    }
283   
284    function testClickToBareActionReturnsToSamePage() {
285        $this->get($this->samples() . 'front_controller_style/a_page.php');
286        $this->clickLink('Bare action');
287        $this->assertTitle('Simple test page with links');
288        $this->assertText('[action=]');
289    }
290   
291    function testClickToSingleQuestionMarkReturnsToSamePage() {
292        $this->get($this->samples() . 'front_controller_style/a_page.php');
293        $this->clickLink('Empty query');
294        $this->assertTitle('Simple test page with links');
295    }
296   
297    function testClickToEmptyStringReturnsToSamePage() {
298        $this->get($this->samples() . 'front_controller_style/a_page.php');
299        $this->clickLink('Empty link');
300        $this->assertTitle('Simple test page with links');
301    }
302   
303    function testClickToSingleDotGoesToCurrentDirectory() {
304        $this->get($this->samples() . 'front_controller_style/a_page.php');
305        $this->clickLink('Current directory');
306        $this->assertTitle(
307                'Simple test front controller',
308                '%s -> index.php needs to be set as a default web server home page');
309    }
310   
311    function testClickBackADirectoryLevel() {
312        $this->get($this->samples() . 'front_controller_style/');
313        $this->clickLink('Down one');
314        $this->assertPattern('|Index of .*?/test|i');
315    }
316}
317
318class TestOfLiveFrontControllerEmulation extends SimpleTestAcceptanceTest {
319    function setUp() {
320        $this->addHeader('User-Agent: SimpleTest ' . SimpleTest::getVersion());
321    }
322   
323    function testJumpToNamedPage() {
324        $this->get($this->samples() . 'front_controller_style/');
325        $this->assertText('Simple test front controller');
326        $this->clickLink('Index');
327        $this->assertResponse(200);
328        $this->assertText('[action=index]');
329    }
330   
331    function testJumpToUnnamedPage() {
332        $this->get($this->samples() . 'front_controller_style/');
333        $this->clickLink('No page');
334        $this->assertResponse(200);
335        $this->assertText('Simple test front controller');
336        $this->assertText('[action=no_page]');
337    }
338   
339    function testJumpToUnnamedPageWithBareParameter() {
340        $this->get($this->samples() . 'front_controller_style/');
341        $this->clickLink('Bare action');
342        $this->assertResponse(200);
343        $this->assertText('Simple test front controller');
344        $this->assertText('[action=]');
345    }
346   
347    function testJumpToUnnamedPageWithEmptyQuery() {
348        $this->get($this->samples() . 'front_controller_style/');
349        $this->clickLink('Empty query');
350        $this->assertResponse(200);
351        $this->assertPattern('/Simple test front controller/');
352        $this->assertPattern('/raw get data.*?\[\].*?get data/si');
353    }
354   
355    function testJumpToUnnamedPageWithEmptyLink() {
356        $this->get($this->samples() . 'front_controller_style/');
357        $this->clickLink('Empty link');
358        $this->assertResponse(200);
359        $this->assertPattern('/Simple test front controller/');
360        $this->assertPattern('/raw get data.*?\[\].*?get data/si');
361    }
362   
363    function testJumpBackADirectoryLevel() {
364        $this->get($this->samples() . 'front_controller_style/');
365        $this->clickLink('Down one');
366        $this->assertPattern('|Index of .*?/test|');
367    }
368   
369    function testSubmitToNamedPage() {
370        $this->get($this->samples() . 'front_controller_style/');
371        $this->assertText('Simple test front controller');
372        $this->clickSubmit('Index');
373        $this->assertResponse(200);
374        $this->assertText('[action=Index]');
375    }
376   
377    function testSubmitToSameDirectory() {
378        $this->get($this->samples() . 'front_controller_style/index.php');
379        $this->clickSubmit('Same directory');
380        $this->assertResponse(200);
381        $this->assertText('[action=Same+directory]');
382    }
383   
384    function testSubmitToEmptyAction() {
385        $this->get($this->samples() . 'front_controller_style/index.php');
386        $this->clickSubmit('Empty action');
387        $this->assertResponse(200);
388        $this->assertText('[action=Empty+action]');
389    }
390   
391    function testSubmitToNoAction() {
392        $this->get($this->samples() . 'front_controller_style/index.php');
393        $this->clickSubmit('No action');
394        $this->assertResponse(200);
395        $this->assertText('[action=No+action]');
396    }
397   
398    function testSubmitBackADirectoryLevel() {
399        $this->get($this->samples() . 'front_controller_style/');
400        $this->clickSubmit('Down one');
401        $this->assertPattern('|Index of .*?/test|');
402    }
403   
404    function testSubmitToNamedPageWithMixedPostAndGet() {
405        $this->get($this->samples() . 'front_controller_style/?a=A');
406        $this->assertText('Simple test front controller');
407        $this->clickSubmit('Index post');
408        $this->assertText('action=[Index post]');
409        $this->assertNoText('[a=A]');
410    }
411   
412    function testSubmitToSameDirectoryMixedPostAndGet() {
413        $this->get($this->samples() . 'front_controller_style/index.php?a=A');
414        $this->clickSubmit('Same directory post');
415        $this->assertText('action=[Same directory post]');
416        $this->assertNoText('[a=A]');
417    }
418   
419    function testSubmitToEmptyActionMixedPostAndGet() {
420        $this->get($this->samples() . 'front_controller_style/index.php?a=A');
421        $this->clickSubmit('Empty action post');
422        $this->assertText('action=[Empty action post]');
423        $this->assertText('[a=A]');
424    }
425   
426    function testSubmitToNoActionMixedPostAndGet() {
427        $this->get($this->samples() . 'front_controller_style/index.php?a=A');
428        $this->clickSubmit('No action post');
429        $this->assertText('action=[No action post]');
430        $this->assertText('[a=A]');
431    }
432}
433
434class TestOfLiveHeaders extends SimpleTestAcceptanceTest {
435    function setUp() {
436        $this->addHeader('User-Agent: SimpleTest ' . SimpleTest::getVersion());
437    }
438   
439    function testConfirmingHeaderExistence() {
440        $this->get('http://www.lastcraft.com/');
441        $this->assertHeader('content-type');
442        $this->assertHeader('content-type', 'text/html');
443        $this->assertHeaderPattern('content-type', '/HTML/i');
444        $this->assertNoHeader('WWW-Authenticate');
445    }
446}
447 
448class TestOfLiveRedirects extends SimpleTestAcceptanceTest {
449    function setUp() {
450        $this->addHeader('User-Agent: SimpleTest ' . SimpleTest::getVersion());
451    }
452   
453    function testNoRedirects() {
454        $this->setMaximumRedirects(0);
455        $this->get($this->samples() . 'redirect.php');
456        $this->assertTitle('Redirection test');
457    }
458   
459    function testRedirects() {
460        $this->setMaximumRedirects(1);
461        $this->get($this->samples() . 'redirect.php');
462        $this->assertTitle('Simple test target file');
463    }
464   
465    function testRedirectLosesGetData() {
466        $this->get($this->samples() . 'redirect.php', array('a' => 'aaa'));
467        $this->assertNoText('a=[aaa]');
468    }
469   
470    function testRedirectKeepsExtraRequestDataOfItsOwn() {
471        $this->get($this->samples() . 'redirect.php');
472        $this->assertText('r=[rrr]');
473    }
474   
475    function testRedirectLosesPostData() {
476        $this->post($this->samples() . 'redirect.php', array('a' => 'aaa'));
477        $this->assertTitle('Simple test target file');
478        $this->assertNoText('a=[aaa]');
479    }
480   
481    function testRedirectWithBaseUrlChange() {
482        $this->get($this->samples() . 'base_change_redirect.php');
483        $this->assertTitle('Simple test target file in folder');
484        $this->get($this->samples() . 'path/base_change_redirect.php');
485        $this->assertTitle('Simple test target file');
486    }
487   
488    function testRedirectWithDoubleBaseUrlChange() {
489        $this->get($this->samples() . 'double_base_change_redirect.php');
490        $this->assertTitle('Simple test target file');
491    }
492}
493
494class TestOfLiveCookies extends SimpleTestAcceptanceTest {
495    function setUp() {
496        $this->addHeader('User-Agent: SimpleTest ' . SimpleTest::getVersion());
497    }
498   
499    function here() {
500        return new SimpleUrl($this->samples());
501    }
502   
503    function thisHost() {
504        $here = $this->here();
505        return $here->getHost();
506    }
507   
508    function thisPath() {
509        $here = $this->here();
510        return $here->getPath();
511    }
512   
513    function testCookieSettingAndAssertions() {
514        $this->setCookie('a', 'Test cookie a');
515        $this->setCookie('b', 'Test cookie b', $this->thisHost());
516        $this->setCookie('c', 'Test cookie c', $this->thisHost(), $this->thisPath());
517        $this->get($this->samples() . 'network_confirm.php');
518        $this->assertText('Test cookie a');
519        $this->assertText('Test cookie b');
520        $this->assertText('Test cookie c');
521        $this->assertCookie('a');
522        $this->assertCookie('b', 'Test cookie b');
523        $this->assertTrue($this->getCookie('c') == 'Test cookie c');
524    }
525   
526    function testNoCookieSetWhenCookiesDisabled() {
527        $this->setCookie('a', 'Test cookie a');
528        $this->ignoreCookies();
529        $this->get($this->samples() . 'network_confirm.php');
530        $this->assertNoText('Test cookie a');
531    }
532   
533    function testCookieReading() {
534        $this->get($this->samples() . 'set_cookies.php');
535        $this->assertCookie('session_cookie', 'A');
536        $this->assertCookie('short_cookie', 'B');
537        $this->assertCookie('day_cookie', 'C');
538    }
539     
540    function testNoCookieReadingWhenCookiesDisabled() {
541        $this->ignoreCookies();
542        $this->get($this->samples() . 'set_cookies.php');
543        $this->assertNoCookie('session_cookie');
544        $this->assertNoCookie('short_cookie');
545        $this->assertNoCookie('day_cookie');
546    }
547   
548    function testCookiePatternAssertions() {
549        $this->get($this->samples() . 'set_cookies.php');
550        $this->assertCookie('session_cookie', new PatternExpectation('/a/i'));
551    }
552   
553    function testTemporaryCookieExpiry() {
554        $this->get($this->samples() . 'set_cookies.php');
555        $this->restart();
556        $this->assertNoCookie('session_cookie');
557        $this->assertCookie('day_cookie', 'C');
558    }
559   
560    function testTimedCookieExpiryWith100SecondMargin() {
561        $this->get($this->samples() . 'set_cookies.php');
562        $this->ageCookies(3600);
563        $this->restart(time() + 100);
564        $this->assertNoCookie('session_cookie');
565        $this->assertNoCookie('hour_cookie');
566        $this->assertCookie('day_cookie', 'C');
567    }
568   
569    function testNoClockOverDriftBy100Seconds() {
570        $this->get($this->samples() . 'set_cookies.php');
571        $this->restart(time() + 200);
572        $this->assertNoCookie(
573                'short_cookie',
574                '%s -> Please check your computer clock setting if you are not using NTP');
575    }
576   
577    function testNoClockUnderDriftBy100Seconds() {
578        $this->get($this->samples() . 'set_cookies.php');
579        $this->restart(time() + 0);
580        $this->assertCookie(
581                'short_cookie',
582                'B',
583                '%s -> Please check your computer clock setting if you are not using NTP');
584    }
585   
586    function testCookiePath() {
587        $this->get($this->samples() . 'set_cookies.php');
588        $this->assertNoCookie('path_cookie', 'D');
589        $this->get('./path/show_cookies.php');
590        $this->assertPattern('/path_cookie/');
591        $this->assertCookie('path_cookie', 'D');
592    }
593}
594
595class LiveTestOfForms extends SimpleTestAcceptanceTest {
596    function setUp() {
597        $this->addHeader('User-Agent: SimpleTest ' . SimpleTest::getVersion());
598    }
599   
600    function testSimpleSubmit() {
601        $this->get($this->samples() . 'form.html');
602        $this->assertTrue($this->clickSubmit('Go!'));
603        $this->assertPattern('/Request method.*?<dd>POST<\/dd>/');
604        $this->assertText('go=[Go!]');
605    }
606   
607    function testDefaultFormValues() {
608        $this->get($this->samples() . 'form.html');
609        $this->assertFieldByName('a', '');
610        $this->assertFieldByName('b', 'Default text');
611        $this->assertFieldByName('c', '');
612        $this->assertFieldByName('d', 'd1');
613        $this->assertFieldByName('e', false);
614        $this->assertFieldByName('f', 'on');
615        $this->assertFieldByName('g', 'g3');
616        $this->assertFieldByName('h', 2);
617        $this->assertFieldByName('go', 'Go!');
618        $this->assertClickable('Go!');
619        $this->assertSubmit('Go!');
620        $this->assertTrue($this->clickSubmit('Go!'));
621        $this->assertText('go=[Go!]');
622        $this->assertText('a=[]');
623        $this->assertText('b=[Default text]');
624        $this->assertText('c=[]');
625        $this->assertText('d=[d1]');
626        $this->assertNoText('e=[');
627        $this->assertText('f=[on]');
628        $this->assertText('g=[g3]');
629    }
630   
631    function testFormSubmissionByButtonLabel() {
632        $this->get($this->samples() . 'form.html');
633        $this->setFieldByName('a', 'aaa');
634        $this->setFieldByName('b', 'bbb');
635        $this->setFieldByName('c', 'ccc');
636        $this->setFieldByName('d', 'D2');
637        $this->setFieldByName('e', 'on');
638        $this->setFieldByName('f', false);
639        $this->setFieldByName('g', 'g2');
640        $this->setFieldByName('h', 1);
641        $this->assertTrue($this->clickSubmit('Go!'));
642        $this->assertText('a=[aaa]');
643        $this->assertText('b=[bbb]');
644        $this->assertText('c=[ccc]');
645        $this->assertText('d=[d2]');
646        $this->assertText('e=[on]');
647        $this->assertNoText('f=[');
648        $this->assertText('g=[g2]');
649    }
650   
651    function testAdditionalFormValues() {
652        $this->get($this->samples() . 'form.html');
653        $this->assertTrue($this->clickSubmit('Go!', array('add' => 'A')));
654        $this->assertText('go=[Go!]');
655        $this->assertText('add=[A]');
656    }
657   
658    function testFormSubmissionByName() {
659        $this->get($this->samples() . 'form.html');
660        $this->setFieldByName('a', 'A');
661        $this->assertTrue($this->clickSubmitByName('go'));
662        $this->assertText('a=[A]');
663    }
664   
665    function testFormSubmissionByNameAndAdditionalParameters() {
666        $this->get($this->samples() . 'form.html');
667        $this->assertTrue($this->clickSubmitByName('go', array('add' => 'A')));
668        $this->assertText('go=[Go!]');
669        $this->assertText('add=[A]');
670    }
671   
672    function testFormSubmissionBySubmitButtonLabeledSubmit() {
673        $this->get($this->samples() . 'form.html');
674        $this->assertTrue($this->clickSubmitByName('test'));
675        $this->assertText('test=[Submit]');
676    }
677   
678    function testFormSubmissionWithIds() {
679        $this->get($this->samples() . 'form.html');
680        $this->assertFieldById(1, '');
681        $this->assertFieldById(2, 'Default text');
682        $this->assertFieldById(3, '');
683        $this->assertFieldById(4, 'd1');
684        $this->assertFieldById(5, false);
685        $this->assertFieldById(6, 'on');
686        $this->assertFieldById(8, 'g3');
687        $this->assertFieldById(11, 2);
688        $this->setFieldById(1, 'aaa');
689        $this->setFieldById(2, 'bbb');
690        $this->setFieldById(3, 'ccc');
691        $this->setFieldById(4, 'D2');
692        $this->setFieldById(5, 'on');
693        $this->setFieldById(6, false);
694        $this->setFieldById(8, 'g2');
695        $this->setFieldById(11, 'H1');
696        $this->assertTrue($this->clickSubmitById(99));
697        $this->assertText('a=[aaa]');
698        $this->assertText('b=[bbb]');
699        $this->assertText('c=[ccc]');
700        $this->assertText('d=[d2]');
701        $this->assertText('e=[on]');
702        $this->assertNoText('f=[');
703        $this->assertText('g=[g2]');
704        $this->assertText('h=[1]');
705        $this->assertText('go=[Go!]');
706    }
707   
708    function testFormSubmissionWithLabels() {
709        $this->get($this->samples() . 'form.html');
710        $this->assertField('Text A', '');
711        $this->assertField('Text B', 'Default text');
712        $this->assertField('Text area C', '');
713        $this->assertField('Selection D', 'd1');
714        $this->assertField('Checkbox E', false);
715        $this->assertField('Checkbox F', 'on');
716        $this->assertField('3', 'g3');
717        $this->assertField('Selection H', 2);
718        $this->setField('Text A', 'aaa');
719        $this->setField('Text B', 'bbb');
720        $this->setField('Text area C', 'ccc');
721        $this->setField('Selection D', 'D2');
722        $this->setField('Checkbox E', 'on');
723        $this->setField('Checkbox F', false);
724        $this->setField('2', 'g2');
725        $this->setField('Selection H', 'H1');
726        $this->clickSubmit('Go!');
727        $this->assertText('a=[aaa]');
728        $this->assertText('b=[bbb]');
729        $this->assertText('c=[ccc]');
730        $this->assertText('d=[d2]');
731        $this->assertText('e=[on]');
732        $this->assertNoText('f=[');
733        $this->assertText('g=[g2]');
734        $this->assertText('h=[1]');
735        $this->assertText('go=[Go!]');
736    }
737   
738    function testSettingCheckboxWithBooleanTrueSetsUnderlyingValue() {
739        $this->get($this->samples() . 'form.html');
740        $this->setField('Checkbox E', true);
741        $this->assertField('Checkbox E', 'on');
742        $this->clickSubmit('Go!');
743        $this->assertText('e=[on]');
744    }
745   
746    function testFormSubmissionWithMixedPostAndGet() {
747        $this->get($this->samples() . 'form_with_mixed_post_and_get.html');
748        $this->setField('Text A', 'Hello');
749        $this->assertTrue($this->clickSubmit('Go!'));
750        $this->assertText('a=[Hello]');
751        $this->assertText('x=[X]');
752        $this->assertText('y=[Y]');
753    }
754   
755    function testFormSubmissionWithMixedPostAndEncodedGet() {
756        $this->get($this->samples() . 'form_with_mixed_post_and_get.html');
757        $this->setField('Text B', 'Hello');
758        $this->assertTrue($this->clickSubmit('Go encoded!'));
759        $this->assertText('b=[Hello]');
760        $this->assertText('x=[X]');
761        $this->assertText('y=[Y]');
762    }
763   
764    function testFormSubmissionWithoutAction() {
765        $this->get($this->samples() . 'form_without_action.php?test=test');
766        $this->assertText('_GET : [test]');
767        $this->assertTrue($this->clickSubmit('Submit Post With Empty Action'));
768        $this->assertText('_GET : [test]');
769        $this->assertText('_POST : [test]');
770    }
771
772    function testImageSubmissionByLabel() {
773        $this->get($this->samples() . 'form.html');
774        $this->assertImage('Image go!');
775        $this->assertTrue($this->clickImage('Image go!', 10, 12));
776        $this->assertText('go_x=[10]');
777        $this->assertText('go_y=[12]');
778    }
779   
780    function testImageSubmissionByLabelWithAdditionalParameters() {
781        $this->get($this->samples() . 'form.html');
782        $this->assertTrue($this->clickImage('Image go!', 10, 12, array('add' => 'A')));
783        $this->assertText('add=[A]');
784    }
785   
786    function testImageSubmissionByName() {
787        $this->get($this->samples() . 'form.html');
788        $this->assertTrue($this->clickImageByName('go', 10, 12));
789        $this->assertText('go_x=[10]');
790        $this->assertText('go_y=[12]');
791    }
792   
793    function testImageSubmissionById() {
794        $this->get($this->samples() . 'form.html');
795        $this->assertTrue($this->clickImageById(97, 10, 12));
796        $this->assertText('go_x=[10]');
797        $this->assertText('go_y=[12]');
798    }
799   
800    function testButtonSubmissionByLabel() {
801        $this->get($this->samples() . 'form.html');
802        $this->assertTrue($this->clickSubmit('Button go!', 10, 12));
803        $this->assertPattern('/go=\[ButtonGo\]/s');
804    }
805   
806    function testNamelessSubmitSendsNoValue() {
807        $this->get($this->samples() . 'form_with_unnamed_submit.html');
808        $this->click('Go!');
809        $this->assertNoText('Go!');
810        $this->assertNoText('submit');
811    }
812   
813    function testNamelessImageSendsXAndYValues() {
814        $this->get($this->samples() . 'form_with_unnamed_submit.html');
815        $this->clickImage('Image go!', 4, 5);
816        $this->assertNoText('ImageGo');
817        $this->assertText('x=[4]');
818        $this->assertText('y=[5]');
819    }
820   
821    function testNamelessButtonSendsNoValue() {
822        $this->get($this->samples() . 'form_with_unnamed_submit.html');
823        $this->click('Button Go!');
824        $this->assertNoText('ButtonGo');
825    }
826   
827    function testSelfSubmit() {
828        $this->get($this->samples() . 'self_form.php');
829        $this->assertNoText('[Submitted]');
830        $this->assertNoText('[Wrong form]');
831        $this->assertTrue($this->clickSubmit());
832        $this->assertText('[Submitted]');
833        $this->assertNoText('[Wrong form]');
834        $this->assertTitle('Test of form self submission');
835    }
836   
837    function testSelfSubmitWithParameters() {
838        $this->get($this->samples() . 'self_form.php');
839        $this->setFieldByName('visible', 'Resent');
840        $this->assertTrue($this->clickSubmit());
841        $this->assertText('[Resent]');
842    }
843   
844    function testSettingOfBlankOption() {
845        $this->get($this->samples() . 'form.html');
846        $this->assertTrue($this->setFieldByName('d', ''));
847        $this->clickSubmit('Go!');
848        $this->assertText('d=[]');
849    }
850   
851    function testAssertingFieldValueWithPattern() {
852        $this->get($this->samples() . 'form.html');
853        $this->setField('c', 'A very long string');
854        $this->assertField('c', new PatternExpectation('/very long/'));
855    }
856   
857    function testSendingMultipartFormDataEncodedForm() {
858        $this->get($this->samples() . 'form_data_encoded_form.html');
859        $this->assertField('Text A', '');
860        $this->assertField('Text B', 'Default text');
861        $this->assertField('Text area C', '');
862        $this->assertField('Selection D', 'd1');
863        $this->assertField('Checkbox E', false);
864        $this->assertField('Checkbox F', 'on');
865        $this->assertField('3', 'g3');
866        $this->assertField('Selection H', 2);
867        $this->setField('Text A', 'aaa');
868        $this->setField('Text B', 'bbb');
869        $this->setField('Text area C', 'ccc');
870        $this->setField('Selection D', 'D2');
871        $this->setField('Checkbox E', 'on');
872        $this->setField('Checkbox F', false);
873        $this->setField('2', 'g2');
874        $this->setField('Selection H', 'H1');
875        $this->assertTrue($this->clickSubmit('Go!'));
876        $this->assertText('a=[aaa]');
877        $this->assertText('b=[bbb]');
878        $this->assertText('c=[ccc]');
879        $this->assertText('d=[d2]');
880        $this->assertText('e=[on]');
881        $this->assertNoText('f=[');
882        $this->assertText('g=[g2]');
883        $this->assertText('h=[1]');
884        $this->assertText('go=[Go!]');
885    }
886   
887    function testSettingVariousBlanksInFields() {
888        $this->get($this->samples() . 'form_with_false_defaults.html');
889        $this->assertField('Text A', '');
890        $this->setField('Text A', '0');
891        $this->assertField('Text A', '0');
892        $this->assertField('Text area B', '');
893        $this->setField('Text area B', '0');
894        $this->assertField('Text area B', '0');
895        $this->assertField('Text area C', "                ");
896        $this->assertField('Selection D', '');
897        $this->setField('Selection D', 'D2');
898        $this->assertField('Selection D', 'D2');
899        $this->setField('Selection D', 'D3');
900        $this->assertField('Selection D', '0');
901        $this->setField('Selection D', 'D4');
902        $this->assertField('Selection D', '?');
903        $this->assertField('Checkbox E', '');
904        $this->assertField('Checkbox F', 'on');
905        $this->assertField('Checkbox G', '0');
906        $this->assertField('Checkbox H', '?');
907        $this->assertFieldByName('i', 'on');
908        $this->setFieldByName('i', '');
909        $this->assertFieldByName('i', '');
910        $this->setFieldByName('i', '0');
911        $this->assertFieldByName('i', '0');
912        $this->setFieldByName('i', '?');
913        $this->assertFieldByName('i', '?');
914    }
915   
916    function testSubmissionOfBlankFields() {
917        $this->get($this->samples() . 'form_with_false_defaults.html');
918        $this->setField('Text A', '');
919        $this->setField('Text area B', '');
920        $this->setFieldByName('i', '');
921        $this->click('Go!');
922        $this->assertText('a=[]');
923        $this->assertText('b=[]');
924        $this->assertPattern('/c=\[                \]/');
925        $this->assertText('d=[]');
926        $this->assertText('e=[]');
927        $this->assertText('i=[]');
928    }
929   
930    function testSubmissionOfEmptyValues() {
931        $this->get($this->samples() . 'form_with_false_defaults.html');
932        $this->setField('Selection D', 'D2');
933        $this->click('Go!');
934        $this->assertText('a=[]');
935        $this->assertText('b=[]');
936        $this->assertText('d=[D2]');
937        $this->assertText('f=[on]');
938        $this->assertText('i=[on]');
939    }
940   
941    function testSubmissionOfZeroes() {
942        $this->get($this->samples() . 'form_with_false_defaults.html');
943        $this->setField('Text A', '0');
944        $this->setField('Text area B', '0');
945        $this->setField('Selection D', 'D3');
946        $this->setFieldByName('i', '0');
947        $this->click('Go!');
948        $this->assertText('a=[0]');
949        $this->assertText('b=[0]');
950        $this->assertText('d=[0]');
951        $this->assertText('g=[0]');
952        $this->assertText('i=[0]');
953    }
954   
955    function testSubmissionOfQuestionMarks() {
956        $this->get($this->samples() . 'form_with_false_defaults.html');
957        $this->setField('Text A', '?');
958        $this->setField('Text area B', '?');
959        $this->setField('Selection D', 'D4');
960        $this->setFieldByName('i', '?');
961        $this->click('Go!');
962        $this->assertText('a=[?]');
963        $this->assertText('b=[?]');
964        $this->assertText('d=[?]');
965        $this->assertText('h=[?]');
966        $this->assertText('i=[?]');
967    }
968
969    function testSubmissionOfHtmlEncodedValues() {
970        $this->get($this->samples() . 'form_with_tricky_defaults.html');
971        $this->assertField('Text A', '&\'"<>');
972        $this->assertField('Text B', '"');
973        $this->assertField('Text area C', '&\'"<>');
974        $this->assertField('Selection D', "'");
975        $this->assertField('Checkbox E', '&\'"<>');
976        $this->assertField('Checkbox F', false);
977        $this->assertFieldByname('i', "'");
978        $this->click('Go!');
979        $this->assertText('a=[&\'"<>, "]');
980        $this->assertText('c=[&\'"<>]');
981        $this->assertText("d=[']");
982        $this->assertText('e=[&\'"<>]');
983        $this->assertText("i=[']");
984    }
985   
986    function testFormActionRespectsBaseTag() {
987        $this->get($this->samples() . 'base_tag/form.html');
988        $this->assertTrue($this->clickSubmit('Go!'));
989        $this->assertText('go=[Go!]');
990        $this->assertText('a=[]');
991    }
992}
993
994class TestOfLiveMultiValueWidgets extends SimpleTestAcceptanceTest {
995    function setUp() {
996        $this->addHeader('User-Agent: SimpleTest ' . SimpleTest::getVersion());
997    }
998   
999    function testDefaultFormValueSubmission() {
1000        $this->get($this->samples() . 'multiple_widget_form.html');
1001        $this->assertFieldByName('a', array('a2', 'a3'));
1002        $this->assertFieldByName('b', array('b2', 'b3'));
1003        $this->assertFieldByName('c[]', array('c2', 'c3'));
1004        $this->assertFieldByName('d', array('2', '3'));
1005        $this->assertFieldByName('e', array('2', '3'));
1006        $this->assertTrue($this->clickSubmit('Go!'));
1007        $this->assertText('a=[a2, a3]');
1008        $this->assertText('b=[b2, b3]');
1009        $this->assertText('c=[c2, c3]');
1010        $this->assertText('d=[2, 3]');
1011        $this->assertText('e=[2, 3]');
1012    }
1013   
1014    function testSubmittingMultipleValues() {
1015        $this->get($this->samples() . 'multiple_widget_form.html');
1016        $this->setFieldByName('a', array('a1', 'a4'));
1017        $this->assertFieldByName('a', array('a1', 'a4'));
1018        $this->assertFieldByName('a', array('a4', 'a1'));
1019        $this->setFieldByName('b', array('b1', 'b4'));
1020        $this->assertFieldByName('b', array('b1', 'b4'));
1021        $this->setFieldByName('c[]', array('c1', 'c4'));
1022        $this->assertField('c[]', array('c1', 'c4'));
1023        $this->setFieldByName('d', array('1', '4'));
1024        $this->assertField('d', array('1', '4'));
1025        $this->setFieldByName('e', array('e1', 'e4'));
1026        $this->assertField('e', array('1', '4'));
1027        $this->assertTrue($this->clickSubmit('Go!'));
1028        $this->assertText('a=[a1, a4]');
1029        $this->assertText('b=[b1, b4]');
1030        $this->assertText('c=[c1, c4]');
1031        $this->assertText('d=[1, 4]');
1032        $this->assertText('e=[1, 4]');
1033    }
1034   
1035    function testSettingByOptionValue() {
1036        $this->get($this->samples() . 'multiple_widget_form.html');
1037        $this->setFieldByName('d', array('1', '4'));
1038        $this->assertField('d', array('1', '4'));
1039        $this->assertTrue($this->clickSubmit('Go!'));
1040        $this->assertText('d=[1, 4]');
1041    }
1042     
1043    function testSubmittingMultipleValuesByLabel() {
1044        $this->get($this->samples() . 'multiple_widget_form.html');
1045        $this->setField('Multiple selection A', array('a1', 'a4'));
1046        $this->assertField('Multiple selection A', array('a1', 'a4'));
1047        $this->assertField('Multiple selection A', array('a4', 'a1'));
1048        $this->setField('multiple selection C', array('c1', 'c4'));
1049        $this->assertField('multiple selection C', array('c1', 'c4'));
1050        $this->assertTrue($this->clickSubmit('Go!'));
1051        $this->assertText('a=[a1, a4]');
1052        $this->assertText('c=[c1, c4]');
1053    }
1054 
1055    function testSavantStyleHiddenFieldDefaults() {
1056        $this->get($this->samples() . 'savant_style_form.html');
1057        $this->assertFieldByName('a', array('a0'));
1058        $this->assertFieldByName('b', array('b0'));
1059        $this->assertTrue($this->clickSubmit('Go!'));
1060        $this->assertText('a=[a0]');
1061        $this->assertText('b=[b0]');
1062    }
1063   
1064    function testSavantStyleHiddenDefaultsAreOverridden() {
1065        $this->get($this->samples() . 'savant_style_form.html');
1066        $this->assertTrue($this->setFieldByName('a', array('a1')));
1067        $this->assertTrue($this->setFieldByName('b', 'b1'));
1068        $this->assertTrue($this->clickSubmit('Go!'));
1069        $this->assertText('a=[a1]');
1070        $this->assertText('b=[b1]');
1071    }
1072   
1073    function testSavantStyleFormSettingById() {
1074        $this->get($this->samples() . 'savant_style_form.html');
1075        $this->assertFieldById(1, array('a0'));
1076        $this->assertFieldById(4, array('b0'));
1077        $this->assertTrue($this->setFieldById(2, 'a1'));
1078        $this->assertTrue($this->setFieldById(5, 'b1'));
1079        $this->assertTrue($this->clickSubmitById(99));
1080        $this->assertText('a=[a1]');
1081        $this->assertText('b=[b1]');
1082    }
1083}
1084
1085class TestOfFileUploads extends SimpleTestAcceptanceTest {
1086    function setUp() {
1087        $this->addHeader('User-Agent: SimpleTest ' . SimpleTest::getVersion());
1088    }
1089
1090    function testSingleFileUpload() {
1091        $this->get($this->samples() . 'upload_form.html');
1092        $this->assertTrue($this->setField('Content:',
1093                dirname(__FILE__) . '/support/upload_sample.txt'));
1094        $this->assertField('Content:', dirname(__FILE__) . '/support/upload_sample.txt');
1095        $this->click('Go!');
1096        $this->assertText('Sample for testing file upload');
1097    }
1098   
1099    function testMultipleFileUpload() {
1100        $this->get($this->samples() . 'upload_form.html');
1101        $this->assertTrue($this->setField('Content:',
1102                dirname(__FILE__) . '/support/upload_sample.txt'));
1103        $this->assertTrue($this->setField('Supplemental:',
1104                dirname(__FILE__) . '/support/supplementary_upload_sample.txt'));
1105        $this->assertField('Supplemental:',
1106                dirname(__FILE__) . '/support/supplementary_upload_sample.txt');
1107        $this->click('Go!');
1108        $this->assertText('Sample for testing file upload');
1109        $this->assertText('Some more text content');
1110    }
1111   
1112    function testBinaryFileUpload() {
1113        $this->get($this->samples() . 'upload_form.html');
1114        $this->assertTrue($this->setField('Content:',
1115                dirname(__FILE__) . '/support/latin1_sample'));
1116        $this->click('Go!');
1117        $this->assertText(
1118                implode('', file(dirname(__FILE__) . '/support/latin1_sample')));
1119    }
1120}
1121
1122class TestOfLiveHistoryNavigation extends SimpleTestAcceptanceTest {       
1123    function setUp() {
1124        $this->addHeader('User-Agent: SimpleTest ' . SimpleTest::getVersion());
1125    }
1126   
1127    function testRetry() {
1128        $this->get($this->samples() . 'cookie_based_counter.php');
1129        $this->assertPattern('/count: 1/i');
1130        $this->retry();
1131        $this->assertPattern('/count: 2/i');
1132        $this->retry();
1133        $this->assertPattern('/count: 3/i');
1134    }
1135   
1136    function testOfBackButton() {
1137        $this->get($this->samples() . '1.html');
1138        $this->clickLink('2');
1139        $this->assertTitle('2');
1140        $this->assertTrue($this->back());
1141        $this->assertTitle('1');
1142        $this->assertTrue($this->forward());
1143        $this->assertTitle('2');
1144        $this->assertFalse($this->forward());
1145    }
1146   
1147    function testGetRetryResubmitsData() {
1148        $this->assertTrue($this->get(
1149                $this->samples() . 'network_confirm.php?a=aaa'));
1150        $this->assertPattern('/Request method.*?<dd>GET<\/dd>/');
1151        $this->assertText('a=[aaa]');
1152        $this->retry();
1153        $this->assertPattern('/Request method.*?<dd>GET<\/dd>/');
1154        $this->assertText('a=[aaa]');
1155    }
1156   
1157    function testGetRetryResubmitsExtraData() {
1158        $this->assertTrue($this->get(
1159                $this->samples() . 'network_confirm.php',
1160                array('a' => 'aaa')));
1161        $this->assertPattern('/Request method.*?<dd>GET<\/dd>/');
1162        $this->assertText('a=[aaa]');
1163        $this->retry();
1164        $this->assertPattern('/Request method.*?<dd>GET<\/dd>/');
1165        $this->assertText('a=[aaa]');
1166    }
1167   
1168    function testPostRetryResubmitsData() {
1169        $this->assertTrue($this->post(
1170                $this->samples() . 'network_confirm.php',
1171                array('a' => 'aaa')));
1172        $this->assertPattern('/Request method.*?<dd>POST<\/dd>/');
1173        $this->assertText('a=[aaa]');
1174        $this->retry();
1175        $this->assertPattern('/Request method.*?<dd>POST<\/dd>/');
1176        $this->assertText('a=[aaa]');
1177    }
1178   
1179    function testGetRetryResubmitsRepeatedData() {
1180        $this->assertTrue($this->get(
1181                $this->samples() . 'network_confirm.php?a=1&a=2'));
1182        $this->assertPattern('/Request method.*?<dd>GET<\/dd>/');
1183        $this->assertText('a=[1, 2]');
1184        $this->retry();
1185        $this->assertPattern('/Request method.*?<dd>GET<\/dd>/');
1186        $this->assertText('a=[1, 2]');
1187    }
1188}
1189
1190class TestOfLiveAuthentication extends SimpleTestAcceptanceTest {
1191    function setUp() {
1192        $this->addHeader('User-Agent: SimpleTest ' . SimpleTest::getVersion());
1193    }
1194   
1195    function testChallengeFromProtectedPage() {
1196        $this->get($this->samples() . 'protected/');
1197        $this->assertResponse(401);
1198        $this->assertAuthentication('Basic');
1199        $this->assertRealm('SimpleTest basic authentication');
1200        $this->assertRealm(new PatternExpectation('/simpletest/i'));
1201        $this->authenticate('test', 'secret');
1202        $this->assertResponse(200);
1203        $this->retry();
1204        $this->assertResponse(200);
1205    }
1206   
1207    function testTrailingSlashImpliedWithinRealm() {
1208        $this->get($this->samples() . 'protected/');
1209        $this->authenticate('test', 'secret');
1210        $this->assertResponse(200);
1211        $this->get($this->samples() . 'protected');
1212        $this->assertResponse(200);
1213    }
1214   
1215    function testTrailingSlashImpliedSettingRealm() {
1216        $this->get($this->samples() . 'protected');
1217        $this->authenticate('test', 'secret');
1218        $this->assertResponse(200);
1219        $this->get($this->samples() . 'protected/');
1220        $this->assertResponse(200);
1221    }
1222   
1223    function testEncodedAuthenticationFetchesPage() {
1224        $this->get('http://test:secret@www.lastcraft.com/test/protected/');
1225        $this->assertResponse(200);
1226    }
1227
1228    function testEncodedAuthenticationFetchesPageAfterTrailingSlashRedirect() {
1229        $this->get('http://test:secret@www.lastcraft.com/test/protected');
1230        $this->assertResponse(200);
1231    }
1232
1233    function testRealmExtendsToWholeDirectory() {
1234        $this->get($this->samples() . 'protected/1.html');
1235        $this->authenticate('test', 'secret');
1236        $this->clickLink('2');
1237        $this->assertResponse(200);
1238        $this->clickLink('3');
1239        $this->assertResponse(200);
1240    }
1241   
1242    function testRedirectKeepsAuthentication() {
1243        $this->get($this->samples() . 'protected/local_redirect.php');
1244        $this->authenticate('test', 'secret');
1245        $this->assertTitle('Simple test target file');
1246    }
1247   
1248    function testRedirectKeepsEncodedAuthentication() {
1249        $this->get('http://test:secret@www.lastcraft.com/test/protected/local_redirect.php');
1250        $this->assertResponse(200);
1251        $this->assertTitle('Simple test target file');
1252    }
1253   
1254    function testSessionRestartLosesAuthentication() {
1255        $this->get($this->samples() . 'protected/');
1256        $this->authenticate('test', 'secret');
1257        $this->assertResponse(200);
1258        $this->restart();
1259        $this->get($this->samples() . 'protected/');
1260        $this->assertResponse(401);
1261    }
1262}
1263
1264class TestOfLoadingFrames extends SimpleTestAcceptanceTest {
1265    function setUp() {
1266        $this->addHeader('User-Agent: SimpleTest ' . SimpleTest::getVersion());
1267    }
1268   
1269    function testNoFramesContentWhenFramesDisabled() {
1270        $this->ignoreFrames();
1271        $this->get($this->samples() . 'one_page_frameset.html');
1272        $this->assertTitle('Frameset for testing of SimpleTest');
1273        $this->assertText('This content is for no frames only');
1274    }
1275   
1276    function testPatternMatchCanReadTheOnlyFrame() {
1277        $this->get($this->samples() . 'one_page_frameset.html');
1278        $this->assertText('A target for the SimpleTest test suite');
1279        $this->assertNoText('This content is for no frames only');
1280    }
1281   
1282    function testMessyFramesetResponsesByName() {
1283        $this->assertTrue($this->get(
1284                $this->samples() . 'messy_frameset.html'));
1285        $this->assertTitle('Frameset for testing of SimpleTest');
1286       
1287        $this->assertTrue($this->setFrameFocus('Front controller'));
1288        $this->assertResponse(200);
1289        $this->assertText('Simple test front controller');
1290       
1291        $this->assertTrue($this->setFrameFocus('One'));
1292        $this->assertResponse(200);
1293        $this->assertLink('2');
1294       
1295        $this->assertTrue($this->setFrameFocus('Frame links'));
1296        $this->assertResponse(200);
1297        $this->assertLink('Set one to 2');
1298       
1299        $this->assertTrue($this->setFrameFocus('Counter'));
1300        $this->assertResponse(200);
1301        $this->assertText('Count: 1');
1302       
1303        $this->assertTrue($this->setFrameFocus('Redirected'));
1304        $this->assertResponse(200);
1305        $this->assertText('r=rrr');
1306       
1307        $this->assertTrue($this->setFrameFocus('Protected'));
1308        $this->assertResponse(401);
1309       
1310        $this->assertTrue($this->setFrameFocus('Protected redirect'));
1311        $this->assertResponse(401);
1312       
1313        $this->assertTrue($this->setFrameFocusByIndex(1));
1314        $this->assertResponse(200);
1315        $this->assertText('Simple test front controller');
1316       
1317        $this->assertTrue($this->setFrameFocusByIndex(2));
1318        $this->assertResponse(200);
1319        $this->assertLink('2');
1320       
1321        $this->assertTrue($this->setFrameFocusByIndex(3));
1322        $this->assertResponse(200);
1323        $this->assertLink('Set one to 2');
1324       
1325        $this->assertTrue($this->setFrameFocusByIndex(4));
1326        $this->assertResponse(200);
1327        $this->assertText('Count: 1');
1328       
1329        $this->assertTrue($this->setFrameFocusByIndex(5));
1330        $this->assertResponse(200);
1331        $this->assertText('r=rrr');
1332       
1333        $this->assertTrue($this->setFrameFocusByIndex(6));
1334        $this->assertResponse(401);
1335       
1336        $this->assertTrue($this->setFrameFocusByIndex(7));
1337    }
1338   
1339    function testReloadingFramesetPage() {
1340        $this->get($this->samples() . 'messy_frameset.html');
1341        $this->assertText('Count: 1');
1342        $this->retry();
1343        $this->assertText('Count: 2');
1344        $this->retry();
1345        $this->assertText('Count: 3');
1346    }
1347   
1348    function testReloadingSingleFrameWithCookieCounter() {
1349        $this->get($this->samples() . 'counting_frameset.html');
1350        $this->setFrameFocus('a');
1351        $this->assertText('Count: 1');
1352        $this->setFrameFocus('b');
1353        $this->assertText('Count: 2');
1354       
1355        $this->setFrameFocus('a');
1356        $this->retry();
1357        $this->assertText('Count: 3');
1358        $this->retry();
1359        $this->assertText('Count: 4');
1360        $this->setFrameFocus('b');
1361        $this->assertText('Count: 2');
1362    }
1363   
1364    function testReloadingFrameWhenUnfocusedReloadsWholeFrameset() {
1365        $this->get($this->samples() . 'counting_frameset.html');
1366        $this->setFrameFocus('a');
1367        $this->assertText('Count: 1');
1368        $this->setFrameFocus('b');
1369        $this->assertText('Count: 2');
1370       
1371        $this->clearFrameFocus('a');
1372        $this->retry();
1373       
1374        $this->assertTitle('Frameset for testing of SimpleTest');
1375        $this->setFrameFocus('a');
1376        $this->assertText('Count: 3');
1377        $this->setFrameFocus('b');
1378        $this->assertText('Count: 4');
1379    }
1380   
1381    function testClickingNormalLinkReplacesJustThatFrame() {
1382        $this->get($this->samples() . 'messy_frameset.html');
1383        $this->clickLink('2');
1384        $this->assertLink('3');
1385        $this->assertText('Simple test front controller');
1386    }
1387   
1388    function testJumpToNamedPageReplacesJustThatFrame() {
1389        $this->get($this->samples() . 'messy_frameset.html');
1390        $this->assertPattern('/Simple test front controller/');
1391        $this->clickLink('Index');
1392        $this->assertResponse(200);
1393        $this->assertText('[action=index]');
1394        $this->assertText('Count: 1');
1395    }
1396   
1397    function testJumpToUnnamedPageReplacesJustThatFrame() {
1398        $this->get($this->samples() . 'messy_frameset.html');
1399        $this->clickLink('No page');
1400        $this->assertResponse(200);
1401        $this->assertText('Simple test front controller');
1402        $this->assertText('[action=no_page]');
1403        $this->assertText('Count: 1');
1404    }
1405   
1406    function testJumpToUnnamedPageWithBareParameterReplacesJustThatFrame() {
1407        $this->get($this->samples() . 'messy_frameset.html');
1408        $this->clickLink('Bare action');
1409        $this->assertResponse(200);
1410        $this->assertText('Simple test front controller');
1411        $this->assertText('[action=]');
1412        $this->assertText('Count: 1');
1413    }
1414   
1415    function testJumpToUnnamedPageWithEmptyQueryReplacesJustThatFrame() {
1416        $this->get($this->samples() . 'messy_frameset.html');
1417        $this->clickLink('Empty query');
1418        $this->assertResponse(200);
1419        $this->assertPattern('/Simple test front controller/');
1420        $this->assertPattern('/raw get data.*?\[\].*?get data/si');
1421        $this->assertPattern('/Count: 1/');
1422    }
1423   
1424    function testJumpToUnnamedPageWithEmptyLinkReplacesJustThatFrame() {
1425        $this->get($this->samples() . 'messy_frameset.html');
1426        $this->clickLink('Empty link');
1427        $this->assertResponse(200);
1428        $this->assertPattern('/Simple test front controller/');
1429        $this->assertPattern('/raw get data.*?\[\].*?get data/si');
1430        $this->assertPattern('/Count: 1/');
1431    }
1432   
1433    function testJumpBackADirectoryLevelReplacesJustThatFrame() {
1434        $this->get($this->samples() . 'messy_frameset.html');
1435        $this->clickLink('Down one');
1436        $this->assertPattern('/index of .*\/test/i');
1437        $this->assertPattern('/Count: 1/');
1438    }
1439   
1440    function testSubmitToNamedPageReplacesJustThatFrame() {
1441        $this->get($this->samples() . 'messy_frameset.html');
1442        $this->assertPattern('/Simple test front controller/');
1443        $this->clickSubmit('Index');
1444        $this->assertResponse(200);
1445        $this->assertText('[action=Index]');
1446        $this->assertText('Count: 1');
1447    }
1448   
1449    function testSubmitToSameDirectoryReplacesJustThatFrame() {
1450        $this->get($this->samples() . 'messy_frameset.html');
1451        $this->clickSubmit('Same directory');
1452        $this->assertResponse(200);
1453        $this->assertText('[action=Same+directory]');
1454        $this->assertText('Count: 1');
1455    }
1456   
1457    function testSubmitToEmptyActionReplacesJustThatFrame() {
1458        $this->get($this->samples() . 'messy_frameset.html');
1459        $this->clickSubmit('Empty action');
1460        $this->assertResponse(200);
1461        $this->assertText('[action=Empty+action]');
1462        $this->assertText('Count: 1');
1463    }
1464   
1465    function testSubmitToNoActionReplacesJustThatFrame() {
1466        $this->get($this->samples() . 'messy_frameset.html');
1467        $this->clickSubmit('No action');
1468        $this->assertResponse(200);
1469        $this->assertText('[action=No+action]');
1470        $this->assertText('Count: 1');
1471    }
1472   
1473    function testSubmitBackADirectoryLevelReplacesJustThatFrame() {
1474        $this->get($this->samples() . 'messy_frameset.html');
1475        $this->clickSubmit('Down one');
1476        $this->assertPattern('/index of .*\/test/i');
1477        $this->assertPattern('/Count: 1/');
1478    }
1479   
1480    function testTopLinkExitsFrameset() {
1481        $this->get($this->samples() . 'messy_frameset.html');
1482        $this->clickLink('Exit the frameset');
1483        $this->assertTitle('Simple test target file');
1484    }
1485   
1486    function testLinkInOnePageCanLoadAnother() {
1487        $this->get($this->samples() . 'messy_frameset.html');
1488        $this->assertNoLink('3');
1489        $this->clickLink('Set one to 2');
1490        $this->assertLink('3');
1491        $this->assertNoLink('2');
1492        $this->assertTitle('Frameset for testing of SimpleTest');
1493    }
1494   
1495    function testFrameWithRelativeLinksRespectsBaseTagForThatPage() {
1496        $this->get($this->samples() . 'base_tag/frameset.html');
1497        $this->click('Back to test pages');
1498        $this->assertTitle('Frameset for testing of SimpleTest');
1499        $this->assertText('A target for the SimpleTest test suite');
1500    }
1501   
1502    function testRelativeLinkInFrameIsNotAffectedByFramesetBaseTag() {
1503        $this->get($this->samples() . 'base_tag/frameset_with_base_tag.html');
1504        $this->assertText('This is page 1');
1505        $this->click('To page 2');
1506        $this->assertTitle('Frameset for testing of SimpleTest');
1507        $this->assertText('This is page 2');
1508    }
1509}
1510
1511class TestOfFrameAuthentication extends SimpleTestAcceptanceTest {
1512    function setUp() {
1513        $this->addHeader('User-Agent: SimpleTest ' . SimpleTest::getVersion());
1514    }
1515   
1516    function testUnauthenticatedFrameSendsChallenge() {
1517        $this->get($this->samples() . 'protected/');
1518        $this->setFrameFocus('Protected');
1519        $this->assertAuthentication('Basic');
1520        $this->assertRealm('SimpleTest basic authentication');
1521        $this->assertResponse(401);
1522    }
1523   
1524    function testCanReadFrameFromAlreadyAuthenticatedRealm() {
1525        $this->get($this->samples() . 'protected/');
1526        $this->authenticate('test', 'secret');
1527        $this->get($this->samples() . 'messy_frameset.html');
1528        $this->setFrameFocus('Protected');
1529        $this->assertResponse(200);
1530        $this->assertText('A target for the SimpleTest test suite');
1531    }
1532   
1533    function testCanAuthenticateFrame() {
1534        $this->get($this->samples() . 'messy_frameset.html');
1535        $this->setFrameFocus('Protected');
1536        $this->authenticate('test', 'secret');
1537        $this->assertResponse(200);
1538        $this->assertText('A target for the SimpleTest test suite');
1539        $this->clearFrameFocus();
1540        $this->assertText('Count: 1');
1541    }
1542   
1543    function testCanAuthenticateRedirectedFrame() {
1544        $this->get($this->samples() . 'messy_frameset.html');
1545        $this->setFrameFocus('Protected redirect');
1546        $this->assertResponse(401);
1547        $this->authenticate('test', 'secret');
1548        $this->assertResponse(200);
1549        $this->assertText('A target for the SimpleTest test suite');
1550        $this->clearFrameFocus();
1551        $this->assertText('Count: 1');
1552    }
1553}
1554
1555class TestOfNestedFrames extends SimpleTestAcceptanceTest {
1556    function setUp() {
1557        $this->addHeader('User-Agent: SimpleTest ' . SimpleTest::getVersion());
1558    }
1559   
1560    function testCanNavigateToSpecificContent() {
1561        $this->get($this->samples() . 'nested_frameset.html');
1562        $this->assertTitle('Nested frameset for testing of SimpleTest');
1563       
1564        $this->assertPattern('/This is frame A/');
1565        $this->assertPattern('/This is frame B/');
1566        $this->assertPattern('/Simple test front controller/');
1567        $this->assertLink('2');
1568        $this->assertLink('Set one to 2');
1569        $this->assertPattern('/Count: 1/');
1570        $this->assertPattern('/r=rrr/');
1571       
1572        $this->setFrameFocus('pair');
1573        $this->assertPattern('/This is frame A/');
1574        $this->assertPattern('/This is frame B/');
1575        $this->assertNoPattern('/Simple test front controller/');
1576        $this->assertNoLink('2');
1577       
1578        $this->setFrameFocus('aaa');
1579        $this->assertPattern('/This is frame A/');
1580        $this->assertNoPattern('/This is frame B/');
1581       
1582        $this->clearFrameFocus();
1583        $this->assertResponse(200);
1584        $this->setFrameFocus('messy');
1585        $this->assertResponse(200);
1586        $this->setFrameFocus('Front controller');
1587        $this->assertResponse(200);
1588        $this->assertPattern('/Simple test front controller/');
1589        $this->assertNoLink('2');
1590    }
1591   
1592    function testReloadingFramesetPage() {
1593        $this->get($this->samples() . 'nested_frameset.html');
1594        $this->assertPattern('/Count: 1/');
1595        $this->retry();
1596        $this->assertPattern('/Count: 2/');
1597        $this->retry();
1598        $this->assertPattern('/Count: 3/');
1599    }
1600   
1601    function testRetryingNestedPageOnlyRetriesThatSet() {
1602        $this->get($this->samples() . 'nested_frameset.html');
1603        $this->assertPattern('/Count: 1/');
1604        $this->setFrameFocus('messy');
1605        $this->retry();
1606        $this->assertPattern('/Count: 2/');
1607        $this->setFrameFocus('Counter');
1608        $this->retry();
1609        $this->assertPattern('/Count: 3/');
1610       
1611        $this->clearFrameFocus();
1612        $this->setFrameFocus('messy');
1613        $this->setFrameFocus('Front controller');
1614        $this->retry();
1615       
1616        $this->clearFrameFocus();
1617        $this->assertPattern('/Count: 3/');
1618    }
1619   
1620    function testAuthenticatingNestedPage() {
1621        $this->get($this->samples() . 'nested_frameset.html');
1622        $this->setFrameFocus('messy');
1623        $this->setFrameFocus('Protected');
1624        $this->assertAuthentication('Basic');
1625        $this->assertRealm('SimpleTest basic authentication');
1626        $this->assertResponse(401);
1627       
1628        $this->authenticate('test', 'secret');
1629        $this->assertResponse(200);
1630        $this->assertPattern('/A target for the SimpleTest test suite/');
1631    }
1632}
1633?>
Note: See TracBrowser for help on using the repository browser.