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

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

Added SimpleTest? test framework

File size: 16.0 KB
Line 
1<?php
2// $Id: form_test.php 1624 2008-01-01 15:00:43Z pp11 $
3require_once(dirname(__FILE__) . '/../autorun.php');
4require_once(dirname(__FILE__) . '/../url.php');
5require_once(dirname(__FILE__) . '/../form.php');
6require_once(dirname(__FILE__) . '/../page.php');
7require_once(dirname(__FILE__) . '/../encoding.php');
8Mock::generate('SimplePage');
9
10class TestOfForm extends UnitTestCase {
11   
12    function &page($url, $action = false) {
13        $page = &new MockSimplePage();
14        $page->setReturnValue('getUrl', new SimpleUrl($url));
15        $page->setReturnValue('expandUrl', new SimpleUrl($url));
16        return $page;
17    }
18   
19    function testFormAttributes() {
20        $tag = &new SimpleFormTag(array('method' => 'GET', 'action' => 'here.php', 'id' => '33'));
21        $form = &new SimpleForm($tag, $this->page('http://host/a/index.html'));
22        $this->assertEqual($form->getMethod(), 'get');
23        $this->assertIdentical($form->getId(), '33');
24        $this->assertNull($form->getValue(new SimpleByName('a')));
25    }
26   
27    function testAction() {
28        $page = &new MockSimplePage();
29        $page->expectOnce('expandUrl', array(new SimpleUrl('here.php')));
30        $page->setReturnValue('expandUrl', new SimpleUrl('http://host/here.php'));
31        $tag = &new SimpleFormTag(array('method' => 'GET', 'action' => 'here.php'));
32        $form = &new SimpleForm($tag, $page);
33        $this->assertEqual($form->getAction(), new SimpleUrl('http://host/here.php'));
34    }
35   
36    function testEmptyAction() {
37        $tag = &new SimpleFormTag(array('method' => 'GET', 'action' => '', 'id' => '33'));
38        $form = &new SimpleForm($tag, $this->page('http://host/a/index.html'));
39        $this->assertEqual(
40                $form->getAction(),
41                new SimpleUrl('http://host/a/index.html'));
42    }
43   
44    function testMissingAction() {
45        $tag = &new SimpleFormTag(array('method' => 'GET'));
46        $form = &new SimpleForm($tag, $this->page('http://host/a/index.html'));
47        $this->assertEqual(
48                $form->getAction(),
49                new SimpleUrl('http://host/a/index.html'));
50    }
51   
52    function testRootAction() {
53        $page = &new MockSimplePage();
54        $page->expectOnce('expandUrl', array(new SimpleUrl('/')));
55        $page->setReturnValue('expandUrl', new SimpleUrl('http://host/'));
56        $tag = &new SimpleFormTag(array('method' => 'GET', 'action' => '/'));
57        $form = &new SimpleForm($tag, $page);
58        $this->assertEqual(
59                $form->getAction(),
60                new SimpleUrl('http://host/'));
61    }
62   
63    function testDefaultFrameTargetOnForm() {
64        $page = &new MockSimplePage();
65        $page->expectOnce('expandUrl', array(new SimpleUrl('here.php')));
66        $page->setReturnValue('expandUrl', new SimpleUrl('http://host/here.php'));
67        $tag = &new SimpleFormTag(array('method' => 'GET', 'action' => 'here.php'));
68        $form = &new SimpleForm($tag, $page);
69        $form->setDefaultTarget('frame');
70        $expected = new SimpleUrl('http://host/here.php');
71        $expected->setTarget('frame');
72        $this->assertEqual($form->getAction(), $expected);
73    }
74   
75    function testTextWidget() {
76        $form = &new SimpleForm(new SimpleFormTag(array()), $this->page('htp://host'));
77        $form->addWidget(new SimpleTextTag(
78                array('name' => 'me', 'type' => 'text', 'value' => 'Myself')));
79        $this->assertIdentical($form->getValue(new SimpleByName('me')), 'Myself');
80        $this->assertTrue($form->setField(new SimpleByName('me'), 'Not me'));
81        $this->assertFalse($form->setField(new SimpleByName('not_present'), 'Not me'));
82        $this->assertIdentical($form->getValue(new SimpleByName('me')), 'Not me');
83        $this->assertNull($form->getValue(new SimpleByName('not_present')));
84    }
85   
86    function testTextWidgetById() {
87        $form = &new SimpleForm(new SimpleFormTag(array()), $this->page('htp://host'));
88        $form->addWidget(new SimpleTextTag(
89                array('name' => 'me', 'type' => 'text', 'value' => 'Myself', 'id' => 50)));
90        $this->assertIdentical($form->getValue(new SimpleById(50)), 'Myself');
91        $this->assertTrue($form->setField(new SimpleById(50), 'Not me'));
92        $this->assertIdentical($form->getValue(new SimpleById(50)), 'Not me');
93    }
94   
95    function testTextWidgetByLabel() {
96        $form = &new SimpleForm(new SimpleFormTag(array()), $this->page('htp://host'));
97        $widget = &new SimpleTextTag(array('name' => 'me', 'type' => 'text', 'value' => 'a'));
98        $form->addWidget($widget);
99        $widget->setLabel('thing');
100        $this->assertIdentical($form->getValue(new SimpleByLabel('thing')), 'a');
101        $this->assertTrue($form->setField(new SimpleByLabel('thing'), 'b'));
102        $this->assertIdentical($form->getValue(new SimpleByLabel('thing')), 'b');
103    }
104   
105    function testSubmitEmpty() {
106        $form = &new SimpleForm(new SimpleFormTag(array()), $this->page('htp://host'));
107        $this->assertIdentical($form->submit(), new SimpleGetEncoding());
108    }
109   
110    function testSubmitButton() {
111        $form = &new SimpleForm(new SimpleFormTag(array()), $this->page('http://host'));
112        $form->addWidget(new SimpleSubmitTag(
113                array('type' => 'submit', 'name' => 'go', 'value' => 'Go!', 'id' => '9')));
114        $this->assertTrue($form->hasSubmit(new SimpleByName('go')));
115        $this->assertEqual($form->getValue(new SimpleByName('go')), 'Go!');
116        $this->assertEqual($form->getValue(new SimpleById(9)), 'Go!');
117        $this->assertEqual(
118                $form->submitButton(new SimpleByName('go')),
119                new SimpleGetEncoding(array('go' => 'Go!')));           
120        $this->assertEqual(
121                $form->submitButton(new SimpleByLabel('Go!')),
122                new SimpleGetEncoding(array('go' => 'Go!')));
123        $this->assertEqual(
124                $form->submitButton(new SimpleById(9)),
125                new SimpleGetEncoding(array('go' => 'Go!')));           
126    }
127   
128    function testSubmitWithAdditionalParameters() {
129        $form = &new SimpleForm(new SimpleFormTag(array()), $this->page('http://host'));
130        $form->addWidget(new SimpleSubmitTag(
131                array('type' => 'submit', 'name' => 'go', 'value' => 'Go!')));
132        $this->assertEqual(
133                $form->submitButton(new SimpleByLabel('Go!'), array('a' => 'A')),
134                new SimpleGetEncoding(array('go' => 'Go!', 'a' => 'A')));           
135    }
136   
137    function testSubmitButtonWithLabelOfSubmit() {
138        $form = &new SimpleForm(new SimpleFormTag(array()), $this->page('http://host'));
139        $form->addWidget(new SimpleSubmitTag(
140                array('type' => 'submit', 'name' => 'test', 'value' => 'Submit')));
141        $this->assertEqual(
142                $form->submitButton(new SimpleByName('test')),
143                new SimpleGetEncoding(array('test' => 'Submit')));           
144        $this->assertEqual(
145                $form->submitButton(new SimpleByLabel('Submit')),
146                new SimpleGetEncoding(array('test' => 'Submit')));           
147    }
148   
149    function testSubmitButtonWithWhitespacePaddedLabelOfSubmit() {
150        $form = &new SimpleForm(new SimpleFormTag(array()), $this->page('http://host'));
151        $form->addWidget(new SimpleSubmitTag(
152                array('type' => 'submit', 'name' => 'test', 'value' => ' Submit ')));
153        $this->assertEqual(
154                $form->submitButton(new SimpleByLabel('Submit')),
155                new SimpleGetEncoding(array('test' => ' Submit ')));           
156    }
157   
158    function testImageSubmitButton() {
159        $form = &new SimpleForm(new SimpleFormTag(array()),  $this->page('htp://host'));
160        $form->addWidget(new SimpleImageSubmitTag(array(
161                'type' => 'image',
162                'src' => 'source.jpg',
163                'name' => 'go',
164                'alt' => 'Go!',
165                'id' => '9')));
166        $this->assertTrue($form->hasImage(new SimpleByLabel('Go!')));
167        $this->assertEqual(
168                $form->submitImage(new SimpleByLabel('Go!'), 100, 101),
169                new SimpleGetEncoding(array('go.x' => 100, 'go.y' => 101)));
170        $this->assertTrue($form->hasImage(new SimpleByName('go')));
171        $this->assertEqual(
172                $form->submitImage(new SimpleByName('go'), 100, 101),
173                new SimpleGetEncoding(array('go.x' => 100, 'go.y' => 101)));
174        $this->assertTrue($form->hasImage(new SimpleById(9)));
175        $this->assertEqual(
176                $form->submitImage(new SimpleById(9), 100, 101),
177                new SimpleGetEncoding(array('go.x' => 100, 'go.y' => 101)));
178    }
179   
180    function testImageSubmitButtonWithAdditionalData() {
181        $form = &new SimpleForm(new SimpleFormTag(array()), $this->page('htp://host'));
182        $form->addWidget(new SimpleImageSubmitTag(array(
183                'type' => 'image',
184                'src' => 'source.jpg',
185                'name' => 'go',
186                'alt' => 'Go!')));
187        $this->assertEqual(
188                $form->submitImage(new SimpleByLabel('Go!'), 100, 101, array('a' => 'A')),
189                new SimpleGetEncoding(array('go.x' => 100, 'go.y' => 101, 'a' => 'A')));
190    }
191   
192    function testButtonTag() {
193        $form = &new SimpleForm(new SimpleFormTag(array()), $this->page('http://host'));
194        $widget = &new SimpleButtonTag(
195                array('type' => 'submit', 'name' => 'go', 'value' => 'Go', 'id' => '9'));
196        $widget->addContent('Go!');
197        $form->addWidget($widget);
198        $this->assertTrue($form->hasSubmit(new SimpleByName('go')));
199        $this->assertTrue($form->hasSubmit(new SimpleByLabel('Go!')));
200        $this->assertEqual(
201                $form->submitButton(new SimpleByName('go')),
202                new SimpleGetEncoding(array('go' => 'Go')));
203        $this->assertEqual(
204                $form->submitButton(new SimpleByLabel('Go!')),
205                new SimpleGetEncoding(array('go' => 'Go')));
206        $this->assertEqual(
207                $form->submitButton(new SimpleById(9)),
208                new SimpleGetEncoding(array('go' => 'Go')));
209    }
210   
211    function testMultipleFieldsWithSameNameSubmitted() {
212        $form = &new SimpleForm(new SimpleFormTag(array()), $this->page('htp://host'));
213        $input = &new SimpleTextTag(array('name' => 'elements[]', 'value' => '1'));
214        $form->addWidget($input);
215        $input = &new SimpleTextTag(array('name' => 'elements[]', 'value' => '2'));
216        $form->addWidget($input);
217        $form->setField(new SimpleByLabelOrName('elements[]'), '3', 1);
218        $form->setField(new SimpleByLabelOrName('elements[]'), '4', 2);
219                $submit = $form->submit();
220        $this->assertEqual(count($submit->_request), 2);
221        $this->assertIdentical($submit->_request[0], new SimpleEncodedPair('elements[]', '3'));
222        $this->assertIdentical($submit->_request[1], new SimpleEncodedPair('elements[]', '4'));
223    }
224   
225    function testSingleSelectFieldSubmitted() {
226        $form = &new SimpleForm(new SimpleFormTag(array()), $this->page('htp://host'));
227        $select = &new SimpleSelectionTag(array('name' => 'a'));
228        $select->addTag(new SimpleOptionTag(
229                array('value' => 'aaa', 'selected' => '')));
230        $form->addWidget($select);
231        $this->assertIdentical(
232                $form->submit(),
233                new SimpleGetEncoding(array('a' => 'aaa')));
234    }
235   
236    function testSingleSelectFieldSubmittedWithPost() {
237        $form = &new SimpleForm(new SimpleFormTag(array('method' => 'post')), $this->page('htp://host'));
238        $select = &new SimpleSelectionTag(array('name' => 'a'));
239        $select->addTag(new SimpleOptionTag(
240                array('value' => 'aaa', 'selected' => '')));
241        $form->addWidget($select);
242        $this->assertIdentical(
243                $form->submit(),
244                new SimplePostEncoding(array('a' => 'aaa')));
245    }
246   
247    function testUnchecked() {
248        $form = &new SimpleForm(new SimpleFormTag(array()), $this->page('htp://host'));
249        $form->addWidget(new SimpleCheckboxTag(
250                array('name' => 'me', 'type' => 'checkbox')));
251        $this->assertIdentical($form->getValue(new SimpleByName('me')), false);
252        $this->assertTrue($form->setField(new SimpleByName('me'), 'on'));
253        $this->assertEqual($form->getValue(new SimpleByName('me')), 'on');
254        $this->assertFalse($form->setField(new SimpleByName('me'), 'other'));
255        $this->assertEqual($form->getValue(new SimpleByName('me')), 'on');
256    }
257   
258    function testChecked() {
259        $form = &new SimpleForm(new SimpleFormTag(array()), $this->page('htp://host'));
260        $form->addWidget(new SimpleCheckboxTag(
261                array('name' => 'me', 'value' => 'a', 'type' => 'checkbox', 'checked' => '')));
262        $this->assertIdentical($form->getValue(new SimpleByName('me')), 'a');
263        $this->assertTrue($form->setField(new SimpleByName('me'), 'a'));
264        $this->assertEqual($form->getValue(new SimpleByName('me')), 'a');
265        $this->assertTrue($form->setField(new SimpleByName('me'), false));
266        $this->assertEqual($form->getValue(new SimpleByName('me')), false);
267    }
268   
269    function testSingleUncheckedRadioButton() {
270        $form = &new SimpleForm(new SimpleFormTag(array()), $this->page('htp://host'));
271        $form->addWidget(new SimpleRadioButtonTag(
272                array('name' => 'me', 'value' => 'a', 'type' => 'radio')));
273        $this->assertIdentical($form->getValue(new SimpleByName('me')), false);
274        $this->assertTrue($form->setField(new SimpleByName('me'), 'a'));
275        $this->assertEqual($form->getValue(new SimpleByName('me')), 'a');
276    }
277   
278    function testSingleCheckedRadioButton() {
279        $form = &new SimpleForm(new SimpleFormTag(array()), $this->page('htp://host'));
280        $form->addWidget(new SimpleRadioButtonTag(
281                array('name' => 'me', 'value' => 'a', 'type' => 'radio', 'checked' => '')));
282        $this->assertIdentical($form->getValue(new SimpleByName('me')), 'a');
283        $this->assertFalse($form->setField(new SimpleByName('me'), 'other'));
284    }
285   
286    function testUncheckedRadioButtons() {
287        $form = &new SimpleForm(new SimpleFormTag(array()), $this->page('htp://host'));
288        $form->addWidget(new SimpleRadioButtonTag(
289                array('name' => 'me', 'value' => 'a', 'type' => 'radio')));
290        $form->addWidget(new SimpleRadioButtonTag(
291                array('name' => 'me', 'value' => 'b', 'type' => 'radio')));
292        $this->assertIdentical($form->getValue(new SimpleByName('me')), false);
293        $this->assertTrue($form->setField(new SimpleByName('me'), 'a'));
294        $this->assertIdentical($form->getValue(new SimpleByName('me')), 'a');
295        $this->assertTrue($form->setField(new SimpleByName('me'), 'b'));
296        $this->assertIdentical($form->getValue(new SimpleByName('me')), 'b');
297        $this->assertFalse($form->setField(new SimpleByName('me'), 'c'));
298        $this->assertIdentical($form->getValue(new SimpleByName('me')), 'b');
299    }
300   
301    function testCheckedRadioButtons() {
302        $form = &new SimpleForm(new SimpleFormTag(array()), $this->page('htp://host'));
303        $form->addWidget(new SimpleRadioButtonTag(
304                array('name' => 'me', 'value' => 'a', 'type' => 'radio')));
305        $form->addWidget(new SimpleRadioButtonTag(
306                array('name' => 'me', 'value' => 'b', 'type' => 'radio', 'checked' => '')));
307        $this->assertIdentical($form->getValue(new SimpleByName('me')), 'b');
308        $this->assertTrue($form->setField(new SimpleByName('me'), 'a'));
309        $this->assertIdentical($form->getValue(new SimpleByName('me')), 'a');
310    }
311   
312    function testMultipleFieldsWithSameKey() {
313        $form = &new SimpleForm(new SimpleFormTag(array()),  $this->page('htp://host'));
314        $form->addWidget(new SimpleCheckboxTag(
315                array('name' => 'a', 'type' => 'checkbox', 'value' => 'me')));
316        $form->addWidget(new SimpleCheckboxTag(
317                array('name' => 'a', 'type' => 'checkbox', 'value' => 'you')));
318        $this->assertIdentical($form->getValue(new SimpleByName('a')), false);
319        $this->assertTrue($form->setField(new SimpleByName('a'), 'me'));
320        $this->assertIdentical($form->getValue(new SimpleByName('a')), 'me');
321    }
322}
323?>
Note: See TracBrowser for help on using the repository browser.