2 // vim: foldmethod=marker
4 * Ethna_ActionForm_Validator_Custom_Test.php
6 * @author Yoshinari Takaoka <takaoka@beatcraft.com>
10 // {{{ Ethna_ActionForm_Validator_Custom_Test
12 * Test Case For Ethna_ActionForm(Custom Validator)
16 class Ethna_ActionForm_Validator_Custom_Test extends Ethna_UnitTestBase
20 $this->af->use_validator_plugin = false;
21 $this->af->clearFormVars();
22 $this->af->form = array();
26 // {{{ checkMailAddress
27 function test_checkMailAddress()
29 // 'required' => true とすると
30 // Ethna_Plugin_Validator_Required の時点で
31 // エラーになる入力があるためここではfalseに
34 'type' => VAR_TYPE_STRING,
36 'custom' => 'checkMailaddress',
38 $this->af->setDef('input', $form_string);
40 $this->af->set('input', 'hoge@fuga.net');
41 $this->af->validate();
42 $this->assertFalse($this->ae->isError('input'));
45 $this->af->set('input', '-hoge@fuga.net');
46 $this->af->validate();
47 $this->assertFalse($this->ae->isError('input'));
50 $this->af->set('input', '.hoge@fuga.net');
51 $this->af->validate();
52 $this->assertFalse($this->ae->isError('input'));
55 $this->af->set('input', '+hoge@fuga.net');
56 $this->af->validate();
57 $this->assertFalse($this->ae->isError('input'));
61 $this->af->set('input', 'hogefuga.et');
62 $this->af->validate();
63 $this->assertTrue($this->ae->isError('input'));
67 $this->af->set('input', '@hogefuga.et');
68 $this->af->validate();
69 $this->assertTrue($this->ae->isError('input'));
73 $this->af->set('input', 'hogefuga.net@');
74 $this->af->validate();
75 $this->assertTrue($this->ae->isError('input'));
79 $this->af->set('input', '%hoge@fuga.net');
80 $this->af->validate();
81 $this->assertTrue($this->ae->isError('input'));
85 $this->af->set('input', 'hoge@fuga.net.');
86 $this->af->validate();
87 $this->assertTrue($this->ae->isError('input'));
92 function test_checkBoolean()
94 // 'required' => true とすると
95 // Ethna_Plugin_Validator_Required の時点で
96 // エラーになる入力があるためここではfalseに
98 $form_boolean = array(
99 'type' => VAR_TYPE_BOOLEAN,
101 'custom' => 'checkBoolean',
103 $this->af->setDef('input', $form_boolean);
105 // HTML フォームから入ってくる値は
107 // @see http://www.php.net/manual/en/types.comparisons.php
108 $this->af->set('input', '0');
109 $this->af->validate();
110 $this->assertFalse($this->ae->isError('input'));
113 $this->af->set('input', '1');
114 $this->af->validate();
115 $this->assertFalse($this->ae->isError('input'));
118 // 空文字列は false と見做すのが仕様
119 $this->af->set('input', '');
120 $this->af->validate();
121 $this->assertFalse($this->ae->isError('input'));
124 // 0,1, 空文字列以外の値は全てエラー
125 $this->af->set('input', 3);
126 $this->af->validate();
127 $this->assertTrue($this->ae->isError('input'));
130 $this->af->set('input', "true");
131 $this->af->validate();
132 $this->assertTrue($this->ae->isError('input'));
135 $this->af->set('input', "false");
136 $this->af->validate();
137 $this->assertTrue($this->ae->isError('input'));
142 function test_checkURL()
144 // 'required' => true とすると
145 // Ethna_Plugin_Validator_Required の時点で
146 // エラーになる入力があるためここではfalseに
149 'type' => VAR_TYPE_STRING,
151 'custom' => 'checkURL',
153 $this->af->setDef('input', $form_url);
155 $this->af->set('input', 'http://uga.net');
156 $this->af->validate();
157 $this->assertFalse($this->ae->isError('input'));
160 $this->af->set('input', 'https://uga.net');
161 $this->af->validate();
162 $this->assertFalse($this->ae->isError('input'));
165 $this->af->set('input', 'ftp://uga.net');
166 $this->af->validate();
167 $this->assertFalse($this->ae->isError('input'));
170 $this->af->set('input', 'http://');
171 $this->af->validate();
172 $this->assertFalse($this->ae->isError('input'));
176 $this->af->set('input', '');
177 $this->af->validate();
178 $this->assertFalse($this->ae->isError('input'));
182 $this->af->set('input', 'http:/');
183 $this->af->validate();
184 $this->assertTrue($this->ae->isError('input'));
188 $this->af->set('input', 'hoge@fuga.net');
189 $this->af->validate();
190 $this->assertTrue($this->ae->isError('input'));
194 // {{{ checkVendorChar
195 function test_checkVendorChar()
197 // 'required' => true とすると
198 // Ethna_Plugin_Validator_Required の時点で
199 // エラーになる入力があるためここではfalseに
201 $form_string = array(
202 'type' => VAR_TYPE_STRING,
204 'custom' => 'checkVendorChar',
206 $this->af->setDef('input', $form_string);
208 $this->af->set('input', 'http://uga.net');
209 $this->af->validate();
210 $this->assertFalse($this->ae->isError('input'));
213 $this->af->set('input', chr(0x00));
214 $this->af->validate();
215 $this->assertFalse($this->ae->isError('input'));
218 $this->af->set('input', chr(0x79));
219 $this->af->validate();
220 $this->assertFalse($this->ae->isError('input'));
223 $this->af->set('input', chr(0x80));
224 $this->af->validate();
225 $this->assertFalse($this->ae->isError('input'));
228 $this->af->set('input', chr(0x8e));
229 $this->af->validate();
230 $this->assertFalse($this->ae->isError('input'));
233 $this->af->set('input', chr(0x8f));
234 $this->af->validate();
235 $this->assertFalse($this->ae->isError('input'));
238 $this->af->set('input', chr(0xae));
239 $this->af->validate();
240 $this->assertFalse($this->ae->isError('input'));
243 $this->af->set('input', chr(0xf8));
244 $this->af->validate();
245 $this->assertFalse($this->ae->isError('input'));
248 $this->af->set('input', chr(0xfd));
249 $this->af->validate();
250 $this->assertFalse($this->ae->isError('input'));
253 /* IBM拡張文字 / NEC選定IBM拡張文字 */
254 //$c == 0xad || ($c >= 0xf9 && $c <= 0xfc)
255 $this->af->set('input', chr(0xad));
256 $this->af->validate();
257 $this->assertTrue($this->ae->isError('input'));
260 $this->af->set('input', chr(0xf9));
261 $this->af->validate();
262 $this->assertTrue($this->ae->isError('input'));
265 $this->af->set('input', chr(0xfa));
266 $this->af->validate();
267 $this->assertTrue($this->ae->isError('input'));
270 $this->af->set('input', chr(0xfc));
271 $this->af->validate();
272 $this->assertTrue($this->ae->isError('input'));