blob: d11d616ad74619e2ce7b9a20b95a280a33f33f60 [file] [log] [blame]
David Woodsf3ac71e2015-03-16 20:00:21 -07001<?php
2
3class Form_validation_test extends CI_TestCase {
David Woods64af3bb2015-03-18 10:09:26 -07004
5 public function set_up()
6 {
7 $_SERVER['REQUEST_METHOD'] = 'POST';
8
9 // Create a mock loader since load->helper() looks in the wrong directories for unit tests,
10 // We'll use CI_TestCase->helper() instead
David Woods5b884732015-03-18 10:37:35 -070011 $loader = $this->getMock('CI_Loader', array('helper'));
Andrey Andreev3e2045b2015-03-26 12:34:38 +020012
David Woods64af3bb2015-03-18 10:09:26 -070013 // Same applies for lang
David Woods5b884732015-03-18 10:37:35 -070014 $lang = $this->getMock('CI_Lang', array('load'));
David Woodsdc1ae6b2015-03-16 23:36:54 -070015
David Woods64af3bb2015-03-18 10:09:26 -070016 $this->ci_set_config('charset', 'UTF-8');
17 $utf8 = new Mock_Core_Utf8();
18 $security = new Mock_Core_Security();
19 $input = new Mock_Core_Input($security, $utf8);
David Woodsdc1ae6b2015-03-16 23:36:54 -070020
David Woods64af3bb2015-03-18 10:09:26 -070021 $this->ci_instance_var('lang', $lang);
22 $this->ci_instance_var('load', $loader);
23 $this->ci_instance_var('input', $input);
David Woodsdc1ae6b2015-03-16 23:36:54 -070024
David Woods64af3bb2015-03-18 10:09:26 -070025 $this->lang('form_validation');
26 $this->helper('form');
27
28 $this->form_validation = new CI_Form_validation();
29 }
30
Andrey Andreev7243d0b2016-03-12 11:40:34 +020031 public function test_empty_array_input()
32 {
33 $this->assertFalse(
34 $this->run_rules(
35 array(array('field' => 'foo', 'label' => 'Foo Label', 'rules' => 'required')),
36 array('foo' => array())
37 )
38 );
39 }
40
David Woods64af3bb2015-03-18 10:09:26 -070041 public function test_rule_required()
42 {
David Woodscf776712015-03-22 15:55:16 -070043 $rules = array(array('field' => 'foo', 'label' => 'foo_label', 'rules' => 'required'));
44 $this->assertTrue($this->run_rules($rules, array('foo' => 'bar')));
David Woods64af3bb2015-03-18 10:09:26 -070045
David Woodscf776712015-03-22 15:55:16 -070046 $this->assertFalse($this->run_rules($rules, array('foo' => '')));
47 $this->assertFalse($this->run_rules($rules, array('foo' => ' ')));
David Woods64af3bb2015-03-18 10:09:26 -070048 }
49
50 public function test_rule_matches()
Andrey Andreev3e2045b2015-03-26 12:34:38 +020051 {
David Woodscf776712015-03-22 15:55:16 -070052 $rules = array(
53 array('field' => 'foo', 'label' => 'label', 'rules' => 'required'),
Andrey Andreev3e2045b2015-03-26 12:34:38 +020054 array('field' => 'bar', 'label' => 'label2', 'rules' => 'matches[foo]')
55 );
David Woodscf776712015-03-22 15:55:16 -070056 $values_base = array('foo' => 'sample');
David Woods64af3bb2015-03-18 10:09:26 -070057
Andrey Andreev3e2045b2015-03-26 12:34:38 +020058 $this->assertTrue($this->run_rules($rules, array_merge($values_base, array('bar' => 'sample'))));
59
Andrey Andreev0fae6252016-05-17 13:46:55 +030060 $this->assertFalse($this->run_rules($rules, array_merge($values_base, array('bar' => ''))));
Andrey Andreev3e2045b2015-03-26 12:34:38 +020061 $this->assertFalse($this->run_rules($rules, array_merge($values_base, array('bar' => 'Sample'))));
62 $this->assertFalse($this->run_rules($rules, array_merge($values_base, array('bar' => ' sample'))));
David Woods64af3bb2015-03-18 10:09:26 -070063 }
64
65 public function test_rule_differs()
Andrey Andreev3e2045b2015-03-26 12:34:38 +020066 {
David Woodscf776712015-03-22 15:55:16 -070067 $rules = array(
68 array('field' => 'foo', 'label' => 'label', 'rules' => 'required'),
Andrey Andreev3e2045b2015-03-26 12:34:38 +020069 array('field' => 'bar', 'label' => 'label2', 'rules' => 'differs[foo]')
70 );
David Woodscf776712015-03-22 15:55:16 -070071 $values_base = array('foo' => 'sample');
David Woods64af3bb2015-03-18 10:09:26 -070072
Andrey Andreev3e2045b2015-03-26 12:34:38 +020073 $this->assertTrue($this->run_rules($rules, array_merge($values_base, array('bar' => 'does_not_match'))));
74 $this->assertTrue($this->run_rules($rules, array_merge($values_base, array('bar' => 'Sample'))));
75 $this->assertTrue($this->run_rules($rules, array_merge($values_base, array('bar' => ' sample'))));
76
77 $this->assertFalse($this->run_rules($rules, array_merge($values_base, array('bar' => 'sample'))));
David Woods64af3bb2015-03-18 10:09:26 -070078 }
79
80 public function test_rule_min_length()
Andrey Andreev3e2045b2015-03-26 12:34:38 +020081 {
David Woods317cad92015-03-20 22:32:24 -070082 $this->assertTrue($this->form_validation->min_length('12345', '5'));
Andrey Andreev3e2045b2015-03-26 12:34:38 +020083 $this->assertTrue($this->form_validation->min_length('test', '0'));
David Woods64af3bb2015-03-18 10:09:26 -070084
David Woods317cad92015-03-20 22:32:24 -070085 $this->assertFalse($this->form_validation->min_length('123', '4'));
86 $this->assertFalse($this->form_validation->min_length('should_fail', 'A'));
87 $this->assertFalse($this->form_validation->min_length('', '4'));
David Woods64af3bb2015-03-18 10:09:26 -070088 }
89
90 public function test_rule_max_length()
Andrey Andreev3e2045b2015-03-26 12:34:38 +020091 {
David Woods317cad92015-03-20 22:32:24 -070092 $this->assertTrue($this->form_validation->max_length('', '4'));
93 $this->assertTrue($this->form_validation->max_length('1234', '4'));
David Woods64af3bb2015-03-18 10:09:26 -070094
David Woods317cad92015-03-20 22:32:24 -070095 $this->assertFalse($this->form_validation->max_length('12345', '4'));
96 $this->assertFalse($this->form_validation->max_length('should_fail', 'A'));
David Woods64af3bb2015-03-18 10:09:26 -070097 }
98
99 public function test_rule_exact_length()
Andrey Andreev3e2045b2015-03-26 12:34:38 +0200100 {
101 $this->assertTrue($this->form_validation->exact_length('1234', '4'));
David Woods64af3bb2015-03-18 10:09:26 -0700102
David Woods317cad92015-03-20 22:32:24 -0700103 $this->assertFalse($this->form_validation->exact_length('', '3'));
104 $this->assertFalse($this->form_validation->exact_length('12345', '4'));
105 $this->assertFalse($this->form_validation->exact_length('123', '4'));
106 $this->assertFalse($this->form_validation->exact_length('should_fail', 'A'));
David Woods64af3bb2015-03-18 10:09:26 -0700107 }
108
109 public function test_rule_greater_than()
110 {
David Woods317cad92015-03-20 22:32:24 -0700111 $this->assertTrue($this->form_validation->greater_than('-10', '-11'));
112 $this->assertTrue($this->form_validation->greater_than('10', '9'));
David Woods64af3bb2015-03-18 10:09:26 -0700113
David Woods317cad92015-03-20 22:32:24 -0700114 $this->assertFalse($this->form_validation->greater_than('10', '10'));
115 $this->assertFalse($this->form_validation->greater_than('10', 'a'));
116 $this->assertFalse($this->form_validation->greater_than('10a', '10'));
David Woods64af3bb2015-03-18 10:09:26 -0700117 }
118
119 public function test_rule_greater_than_equal_to()
Andrey Andreev3e2045b2015-03-26 12:34:38 +0200120 {
121 $this->assertTrue($this->form_validation->greater_than_equal_to('0', '0'));
David Woods317cad92015-03-20 22:32:24 -0700122 $this->assertTrue($this->form_validation->greater_than_equal_to('1', '0'));
David Woods64af3bb2015-03-18 10:09:26 -0700123
Andrey Andreev3e2045b2015-03-26 12:34:38 +0200124 $this->assertFalse($this->form_validation->greater_than_equal_to('-1', '0'));
David Woods317cad92015-03-20 22:32:24 -0700125 $this->assertFalse($this->form_validation->greater_than_equal_to('10a', '0'));
David Woods64af3bb2015-03-18 10:09:26 -0700126 }
127
128 public function test_rule_less_than()
Andrey Andreev3e2045b2015-03-26 12:34:38 +0200129 {
David Woods317cad92015-03-20 22:32:24 -0700130 $this->assertTrue($this->form_validation->less_than('4', '5'));
131 $this->assertTrue($this->form_validation->less_than('-1', '0'));
David Woods64af3bb2015-03-18 10:09:26 -0700132
David Woods317cad92015-03-20 22:32:24 -0700133 $this->assertFalse($this->form_validation->less_than('4', '4'));
Andrey Andreev3e2045b2015-03-26 12:34:38 +0200134 $this->assertFalse($this->form_validation->less_than('10a', '5'));
David Woods64af3bb2015-03-18 10:09:26 -0700135 }
136
137 public function test_rule_less_than_equal_to()
Andrey Andreev3e2045b2015-03-26 12:34:38 +0200138 {
David Woods317cad92015-03-20 22:32:24 -0700139 $this->assertTrue($this->form_validation->less_than_equal_to('-1', '0'));
140 $this->assertTrue($this->form_validation->less_than_equal_to('-1', '-1'));
141 $this->assertTrue($this->form_validation->less_than_equal_to('4', '4'));
David Woods64af3bb2015-03-18 10:09:26 -0700142
David Woods317cad92015-03-20 22:32:24 -0700143 $this->assertFalse($this->form_validation->less_than_equal_to('0', '-1'));
Andrey Andreev3e2045b2015-03-26 12:34:38 +0200144 $this->assertFalse($this->form_validation->less_than_equal_to('10a', '0'));
David Woods64af3bb2015-03-18 10:09:26 -0700145 }
146
147 public function test_rule_in_list()
Andrey Andreev3e2045b2015-03-26 12:34:38 +0200148 {
David Woods317cad92015-03-20 22:32:24 -0700149 $this->assertTrue($this->form_validation->in_list('red', 'red,Blue,123'));
150 $this->assertTrue($this->form_validation->in_list('Blue', 'red,Blue,123'));
151 $this->assertTrue($this->form_validation->in_list('123', 'red,Blue,123'));
David Woods64af3bb2015-03-18 10:09:26 -0700152
David Woods317cad92015-03-20 22:32:24 -0700153 $this->assertFalse($this->form_validation->in_list('Red', 'red,Blue,123'));
154 $this->assertFalse($this->form_validation->in_list(' red', 'red,Blue,123'));
155 $this->assertFalse($this->form_validation->in_list('1234', 'red,Blue,123'));
David Woods64af3bb2015-03-18 10:09:26 -0700156 }
157
158 public function test_rule_alpha()
Andrey Andreev3e2045b2015-03-26 12:34:38 +0200159 {
David Woods317cad92015-03-20 22:32:24 -0700160 $this->assertTrue($this->form_validation->alpha('abcdefghijklmnopqrstuvwxyzABCDEFGHLIJKLMNOPQRSTUVWXYZ'));
David Woods64af3bb2015-03-18 10:09:26 -0700161
David Woods317cad92015-03-20 22:32:24 -0700162 $this->assertFalse($this->form_validation->alpha('abcdefghijklmnopqrstuvwxyzABCDEFGHLIJKLMNOPQRSTUVWXYZ '));
163 $this->assertFalse($this->form_validation->alpha('abcdefghijklmnopqrstuvwxyzABCDEFGHLIJKLMNOPQRSTUVWXYZ1'));
164 $this->assertFalse($this->form_validation->alpha('abcdefghijklmnopqrstuvwxyzABCDEFGHLIJKLMNOPQRSTUVWXYZ*'));
David Woods64af3bb2015-03-18 10:09:26 -0700165 }
166
167 public function test_rule_alpha_numeric()
Andrey Andreev3e2045b2015-03-26 12:34:38 +0200168 {
David Woods317cad92015-03-20 22:32:24 -0700169 $this->assertTrue($this->form_validation->alpha_numeric('abcdefghijklmnopqrstuvwxyzABCDEFGHLIJKLMNOPQRSTUVWXYZ0123456789'));
David Woods64af3bb2015-03-18 10:09:26 -0700170
David Woods317cad92015-03-20 22:32:24 -0700171 $this->assertFalse($this->form_validation->alpha_numeric('abcdefghijklmnopqrstuvwxyzABCDEFGHLIJKLMNOPQRSTUVWXYZ0123456789\ '));
172 $this->assertFalse($this->form_validation->alpha_numeric('abcdefghijklmnopqrstuvwxyzABCDEFGHLIJKLMNOPQRSTUVWXYZ0123456789_'));
David Woods64af3bb2015-03-18 10:09:26 -0700173 }
174
175 public function test_rule_alpha_numeric_spaces()
Andrey Andreev3e2045b2015-03-26 12:34:38 +0200176 {
David Woods317cad92015-03-20 22:32:24 -0700177 $this->assertTrue($this->form_validation->alpha_numeric_spaces(' abcdefghijklmnopqrstuvwxyzABCDEFGHLIJKLMNOPQRSTUVWXYZ0123456789'));
David Woods64af3bb2015-03-18 10:09:26 -0700178
David Woods317cad92015-03-20 22:32:24 -0700179 $this->assertFalse($this->form_validation->alpha_numeric_spaces(' abcdefghijklmnopqrstuvwxyzABCDEFGHLIJKLMNOPQRSTUVWXYZ0123456789_'));
David Woods64af3bb2015-03-18 10:09:26 -0700180 }
181
182 public function test_rule_alpha_dash()
Andrey Andreev3e2045b2015-03-26 12:34:38 +0200183 {
David Woods317cad92015-03-20 22:32:24 -0700184 $this->assertTrue($this->form_validation->alpha_dash('abcdefghijklmnopqrstuvwxyzABCDEFGHLIJKLMNOPQRSTUVWXYZ0123456789-_'));
David Woods64af3bb2015-03-18 10:09:26 -0700185
David Woods317cad92015-03-20 22:32:24 -0700186 $this->assertFalse($this->form_validation->alpha_dash('abcdefghijklmnopqrstuvwxyzABCDEFGHLIJKLMNOPQRSTUVWXYZ0123456789-_\ '));
David Woods64af3bb2015-03-18 10:09:26 -0700187 }
188
189 public function test_rule_numeric()
Andrey Andreev3e2045b2015-03-26 12:34:38 +0200190 {
David Woods317cad92015-03-20 22:32:24 -0700191 $this->assertTrue($this->form_validation->numeric('0'));
192 $this->assertTrue($this->form_validation->numeric('12314'));
193 $this->assertTrue($this->form_validation->numeric('-42'));
David Woods64af3bb2015-03-18 10:09:26 -0700194
David Woods317cad92015-03-20 22:32:24 -0700195 $this->assertFalse($this->form_validation->numeric('123a'));
196 $this->assertFalse($this->form_validation->numeric('--1'));
David Woods64af3bb2015-03-18 10:09:26 -0700197 }
198
199 public function test_rule_integer()
Andrey Andreev3e2045b2015-03-26 12:34:38 +0200200 {
David Woods317cad92015-03-20 22:32:24 -0700201 $this->assertTrue($this->form_validation->integer('0'));
202 $this->assertTrue($this->form_validation->integer('42'));
203 $this->assertTrue($this->form_validation->integer('-1'));
David Woods64af3bb2015-03-18 10:09:26 -0700204
David Woods317cad92015-03-20 22:32:24 -0700205 $this->assertFalse($this->form_validation->integer('124a'));
206 $this->assertFalse($this->form_validation->integer('1.9'));
207 $this->assertFalse($this->form_validation->integer('--1'));
David Woods64af3bb2015-03-18 10:09:26 -0700208 }
209
210 public function test_rule_decimal()
Andrey Andreev3e2045b2015-03-26 12:34:38 +0200211 {
David Woods317cad92015-03-20 22:32:24 -0700212 $this->assertTrue($this->form_validation->decimal('1.0'));
213 $this->assertTrue($this->form_validation->decimal('-0.98'));
David Woods64af3bb2015-03-18 10:09:26 -0700214
David Woods317cad92015-03-20 22:32:24 -0700215 $this->assertFalse($this->form_validation->decimal('0'));
216 $this->assertFalse($this->form_validation->decimal('1.0a'));
217 $this->assertFalse($this->form_validation->decimal('-i'));
218 $this->assertFalse($this->form_validation->decimal('--1'));
David Woods64af3bb2015-03-18 10:09:26 -0700219 }
220
221 public function test_rule_is_natural()
Andrey Andreev3e2045b2015-03-26 12:34:38 +0200222 {
David Woods317cad92015-03-20 22:32:24 -0700223 $this->assertTrue($this->form_validation->is_natural('0'));
224 $this->assertTrue($this->form_validation->is_natural('12'));
David Woods64af3bb2015-03-18 10:09:26 -0700225
David Woods317cad92015-03-20 22:32:24 -0700226 $this->assertFalse($this->form_validation->is_natural('42a'));
227 $this->assertFalse($this->form_validation->is_natural('-1'));
David Woods64af3bb2015-03-18 10:09:26 -0700228 }
229
230 public function test_rule_is_natural_no_zero()
Andrey Andreev3e2045b2015-03-26 12:34:38 +0200231 {
David Woods317cad92015-03-20 22:32:24 -0700232 $this->assertTrue($this->form_validation->is_natural_no_zero('42'));
David Woods64af3bb2015-03-18 10:09:26 -0700233
David Woods317cad92015-03-20 22:32:24 -0700234 $this->assertFalse($this->form_validation->is_natural_no_zero('0'));
235 $this->assertFalse($this->form_validation->is_natural_no_zero('42a'));
236 $this->assertFalse($this->form_validation->is_natural_no_zero('-1'));
David Woods64af3bb2015-03-18 10:09:26 -0700237 }
238
239 public function test_rule_valid_url()
Andrey Andreev3e2045b2015-03-26 12:34:38 +0200240 {
David Woods317cad92015-03-20 22:32:24 -0700241 $this->assertTrue($this->form_validation->valid_url('www.codeigniter.com'));
Andrey Andreev700dbad2016-01-11 12:51:46 +0200242 $this->assertTrue($this->form_validation->valid_url('http://codeigniter.com'));
Andrey Andreev3e2045b2015-03-26 12:34:38 +0200243
Andrey Andreev391d3392016-01-30 22:43:41 +0200244 // https://bugs.php.net/bug.php?id=51192
245 $this->assertTrue($this->form_validation->valid_url('http://accept-dashes.tld'));
246 $this->assertFalse($this->form_validation->valid_url('http://reject_underscores.tld'));
247
248 // https://github.com/bcit-ci/CodeIgniter/issues/4415
249 $this->assertTrue($this->form_validation->valid_url('http://[::1]/ipv6'));
250
David Woods317cad92015-03-20 22:32:24 -0700251 $this->assertFalse($this->form_validation->valid_url('htt://www.codeIgniter.com'));
252 $this->assertFalse($this->form_validation->valid_url(''));
253 $this->assertFalse($this->form_validation->valid_url('code igniter'));
David Woods64af3bb2015-03-18 10:09:26 -0700254 }
255
256 public function test_rule_valid_email()
Andrey Andreev3e2045b2015-03-26 12:34:38 +0200257 {
David Woods317cad92015-03-20 22:32:24 -0700258 $this->assertTrue($this->form_validation->valid_email('email@sample.com'));
David Woods64af3bb2015-03-18 10:09:26 -0700259
David Woods317cad92015-03-20 22:32:24 -0700260 $this->assertFalse($this->form_validation->valid_email('valid_email', '@sample.com'));
David Woods64af3bb2015-03-18 10:09:26 -0700261 }
262
263 public function test_rule_valid_emails()
Andrey Andreev3e2045b2015-03-26 12:34:38 +0200264 {
David Woods317cad92015-03-20 22:32:24 -0700265 $this->assertTrue($this->form_validation->valid_emails('1@sample.com,2@sample.com'));
266 $this->assertTrue($this->form_validation->valid_emails('email@sample.com'));
David Woods64af3bb2015-03-18 10:09:26 -0700267
David Woods5bc1dc52015-03-27 22:41:58 -0700268 $this->assertFalse($this->form_validation->valid_emails('valid_email', '@sample.com'));
David Woods317cad92015-03-20 22:32:24 -0700269 $this->assertFalse($this->form_validation->valid_emails('@sample.com,2@sample.com,validemail@email.ca'));
David Woods64af3bb2015-03-18 10:09:26 -0700270 }
271
272 public function test_rule_valid_ip()
Andrey Andreev3e2045b2015-03-26 12:34:38 +0200273 {
David Woods317cad92015-03-20 22:32:24 -0700274 $this->assertTrue($this->form_validation->valid_ip('127.0.0.1'));
275 $this->assertTrue($this->form_validation->valid_ip('127.0.0.1', 'ipv4'));
276 $this->assertTrue($this->form_validation->valid_ip('2001:0db8:85a3:0000:0000:8a2e:0370:7334'));
277 $this->assertTrue($this->form_validation->valid_ip('2001:0db8:85a3:0000:0000:8a2e:0370:7334', 'ipv6'));
David Woods64af3bb2015-03-18 10:09:26 -0700278
David Woods317cad92015-03-20 22:32:24 -0700279 $this->assertFalse($this->form_validation->valid_ip('2001:0db8:85a3:0000:0000:8a2e:0370:7334', 'ipv4'));
280 $this->assertFalse($this->form_validation->valid_ip('127.0.0.1', 'ipv6'));
281 $this->assertFalse($this->form_validation->valid_ip('H001:0db8:85a3:0000:0000:8a2e:0370:7334'));
282 $this->assertFalse($this->form_validation->valid_ip('127.0.0.259'));
David Woods64af3bb2015-03-18 10:09:26 -0700283 }
284
285 public function test_rule_valid_base64()
Andrey Andreev3e2045b2015-03-26 12:34:38 +0200286 {
David Woods317cad92015-03-20 22:32:24 -0700287 $this->assertTrue($this->form_validation->valid_base64(base64_encode('string')));
David Woods5b884732015-03-18 10:37:35 -0700288
David Woods317cad92015-03-20 22:32:24 -0700289 $this->assertFalse($this->form_validation->valid_base64('FA08GG'));
290 }
Andrey Andreev3e2045b2015-03-26 12:34:38 +0200291
David Woods317cad92015-03-20 22:32:24 -0700292 public function test_set_data()
293 {
294 // Reset test environment
Andrey Andreev3e2045b2015-03-26 12:34:38 +0200295 $_POST = array();
David Woods317cad92015-03-20 22:32:24 -0700296 $this->form_validation->reset_validation();
David Woods317cad92015-03-20 22:32:24 -0700297 $data = array('field' => 'some_data');
298 $this->form_validation->set_data($data);
299 $this->form_validation->set_rules('field', 'label', 'required');
300 $this->assertTrue($this->form_validation->run());
Andrey Andreev3e2045b2015-03-26 12:34:38 +0200301
David Woods317cad92015-03-20 22:32:24 -0700302 // Test with empty array
303 $_POST = array();
David Woods317cad92015-03-20 22:32:24 -0700304 $this->form_validation->reset_validation();
David Woodscf776712015-03-22 15:55:16 -0700305 $data = array('field' => 'some_data');
David Woods317cad92015-03-20 22:32:24 -0700306 $this->form_validation->set_data($data);
David Woodscf776712015-03-22 15:55:16 -0700307 // This should do nothing. Old data will still be used
308 $this->form_validation->set_data(array());
David Woods317cad92015-03-20 22:32:24 -0700309 $this->form_validation->set_rules('field', 'label', 'required');
Andrey Andreev3e2045b2015-03-26 12:34:38 +0200310 $this->assertTrue($this->form_validation->run());
David Woods317cad92015-03-20 22:32:24 -0700311 }
Andrey Andreev3e2045b2015-03-26 12:34:38 +0200312
David Woods317cad92015-03-20 22:32:24 -0700313 public function test_set_message()
314 {
315 // Reset test environment
316 $_POST = array();
317 $this->form_validation->reset_validation();
318 $err_message = 'What a terrible error!';
319 $rules = array(
320 array(
321 'field' => 'req_field',
322 'label' => 'label',
323 'rules' => 'required'
324 )
325 );
326 $errorless_data = array('req_field' => 'some text');
327 $erroneous_data = array('req_field' => '');
Andrey Andreev3e2045b2015-03-26 12:34:38 +0200328
David Woods317cad92015-03-20 22:32:24 -0700329 $this->form_validation->set_message('required', $err_message);
330 $this->form_validation->set_data($erroneous_data);
Andrey Andreev3e2045b2015-03-26 12:34:38 +0200331 $this->form_validation->set_rules($rules);
David Woods317cad92015-03-20 22:32:24 -0700332 $this->form_validation->run();
David Woodsc6ac5592015-03-31 20:19:39 -0700333 $this->assertEquals('<p>'.$err_message.'</p>', $this->form_validation->error('req_field'));
Andrey Andreev3e2045b2015-03-26 12:34:38 +0200334
David Woods317cad92015-03-20 22:32:24 -0700335 $this->form_validation->reset_validation();
336 $this->form_validation->set_message('required', $err_message);
337 $this->form_validation->set_data($errorless_data);
338 $this->form_validation->set_rules($rules);
339 $this->form_validation->run();
Andrey Andreev3e2045b2015-03-26 12:34:38 +0200340 $this->assertEquals('', $this->form_validation->error('req_field'));
David Woods64af3bb2015-03-18 10:09:26 -0700341 }
342
David Woods5bc1dc52015-03-27 22:41:58 -0700343 public function test_set_error_delimiters()
344 {
345 $this->form_validation->reset_validation();
346 $prefix = '<div class="error">';
347 $suffix = '</div>';
348 $this->form_validation->set_error_delimiters($prefix, $suffix);
349 $this->form_validation->set_rules('foo', 'label', 'required');
350 $_POST = array('foo' => '');
351 $this->form_validation->run();
352 $error_msg = $this->form_validation->error('foo');
353
354 $this->assertTrue(strrpos($error_msg, $prefix) === 0);
355 $this->assertTrue(strrpos($error_msg, $suffix, -strlen($suffix)) === (strlen($error_msg) - strlen($suffix)));
356 }
357
358 public function test_error_array()
359 {
360 $this->form_validation->reset_validation();
361 $error_message = 'What a terrible error!';
362 $this->form_validation->set_message('required', $error_message);
363 $this->form_validation->set_rules('foo', 'label', 'required');
364 $_POST = array('foo' => '');
365 $this->form_validation->run();
David Woodsc6ac5592015-03-31 20:19:39 -0700366 $error_array = $this->form_validation->error_array();
367 $this->assertEquals($error_message, $error_array['foo']);
David Woods5bc1dc52015-03-27 22:41:58 -0700368 }
369
370 public function test_error_string()
371 {
372 $this->form_validation->reset_validation();
373 $error_message = 'What a terrible error!';
374 $prefix_default = '<foo>';
375 $suffix_default = '</foo>';
376 $prefix_test = '<bar>';
377 $suffix_test = '</bar>';
378 $this->form_validation->set_error_delimiters($prefix_default, $suffix_default);
379 $this->form_validation->set_message('required', $error_message);
380 $this->form_validation->set_rules('foo', 'label', 'required');
381 $_POST = array('foo' => '');
382 $this->form_validation->run();
383
David Woodsc6ac5592015-03-31 20:19:39 -0700384 $this->assertEquals($prefix_default.$error_message.$suffix_default."\n", $this->form_validation->error_string());
385 $this->assertEquals($prefix_test.$error_message.$suffix_default."\n", $this->form_validation->error_string($prefix_test, ''));
386 $this->assertEquals($prefix_default.$error_message.$suffix_test."\n", $this->form_validation->error_string('', $suffix_test));
387 $this->assertEquals($prefix_test.$error_message.$suffix_test."\n", $this->form_validation->error_string($prefix_test, $suffix_test));
388
David Woods5bc1dc52015-03-27 22:41:58 -0700389 $this->form_validation->reset_validation();
390 $this->form_validation->set_rules('foo', 'label', 'required');
391 $_POST = array('foo' => 'bar');
392 $this->form_validation->run();
David Woodsc6ac5592015-03-31 20:19:39 -0700393 $this->assertEquals('', $this->form_validation->error_string());
David Woods5bc1dc52015-03-27 22:41:58 -0700394 }
395
396 public function test_run()
397 {
398 // form_validation->run() is tested in many of the other unit tests
399 // This test will only test run(group='') when group is not empty
400 $config = array(
401 'pass' => array(
402 array(
403 'field' => 'username',
404 'label' => 'user',
405 'rules' => 'alpha_numeric'
406 )
407 ),
408 'fail' => array(
409 array(
410 'field' => 'username',
411 'label' => 'user',
412 'rules' => 'alpha'
413 )
414 )
415 );
416 $_POST = array('username' => 'foo42');
417 $form_validation = new CI_Form_validation($config);
418 $this->assertTrue($form_validation->run('pass'));
David Woodsc6ac5592015-03-31 20:19:39 -0700419
420 $form_validation = new CI_Form_validation($config);
David Woods5bc1dc52015-03-27 22:41:58 -0700421 $this->assertFalse($form_validation->run('fail'));
422 }
David Woodsc6ac5592015-03-31 20:19:39 -0700423
David Woods5bc1dc52015-03-27 22:41:58 -0700424 public function test_has_rule()
425 {
426 $this->form_validation->reset_validation();
427 $this->form_validation->set_rules('foo', 'label', 'required');
David Woodsc6ac5592015-03-31 20:19:39 -0700428
David Woods5bc1dc52015-03-27 22:41:58 -0700429 $this->assertTrue($this->form_validation->has_rule('foo'));
430 $this->assertFalse($this->form_validation->has_rule('bar'));
431 }
David Woodsc6ac5592015-03-31 20:19:39 -0700432
David Woods5bc1dc52015-03-27 22:41:58 -0700433 public function test_set_value()
434 {
435 $this->form_validation->reset_validation();
436 $default = 'default';
437 $this->form_validation->set_rules('foo', 'label', 'required');
438 $this->form_validation->set_rules('bar[]', 'label', 'required');
David Woodsc6ac5592015-03-31 20:19:39 -0700439
David Woods5bc1dc52015-03-27 22:41:58 -0700440 // No post data yet: should return the default value provided
441 $this->assertEquals($default, $this->form_validation->set_value('foo', $default));
442 $_POST = array('foo' => 'foo', 'bar' => array('bar1', 'bar2'));
443 $this->form_validation->run();
444 $this->assertEquals('foo', $this->form_validation->set_value('foo', $default));
445 $this->assertEquals('bar1', $this->form_validation->set_value('bar[]', $default));
446 $this->assertEquals('bar2', $this->form_validation->set_value('bar[]', $default));
447 }
Andrey Andreev2e9ae002015-04-01 14:45:16 +0300448
David Woods4b02f1d2015-03-29 22:46:14 -0700449 public function test_set_select()
450 {
451 // Test 1: No options selected
Andrey Andreev2e9ae002015-04-01 14:45:16 +0300452 $this->form_validation->reset_validation();
David Woods4b02f1d2015-03-29 22:46:14 -0700453 $_POST = array();
454 $this->form_validation->run();
Andrey Andreev2e9ae002015-04-01 14:45:16 +0300455
456 $this->assertEquals('', $this->form_validation->set_select('select', 'foo'));
David Woods4b02f1d2015-03-29 22:46:14 -0700457 $this->assertEquals(' selected="selected"', $this->form_validation->set_select('select', 'bar', TRUE));
Andrey Andreev2e9ae002015-04-01 14:45:16 +0300458
David Woods4b02f1d2015-03-29 22:46:14 -0700459 // Test 2: 1 option selected
460 $this->form_validation->reset_validation();
461 $this->form_validation->set_rules('select', 'label', 'alpha_numeric');
462 $_POST = array('select' => 'foo');
463 $this->form_validation->run();
Andrey Andreev2e9ae002015-04-01 14:45:16 +0300464
David Woods4b02f1d2015-03-29 22:46:14 -0700465 $this->assertEquals(' selected="selected"', $this->form_validation->set_select('select', 'foo'));
466 $this->assertEquals(' selected="selected"', $this->form_validation->set_select('select', 'foo', TRUE));
467 $this->assertEquals('', $this->form_validation->set_select('select', 'bar'));
468 $this->assertEquals('', $this->form_validation->set_select('select', 'bar', TRUE));
Andrey Andreev2e9ae002015-04-01 14:45:16 +0300469
David Woods4b02f1d2015-03-29 22:46:14 -0700470 // Test 3: Multiple options selected
471 $this->form_validation->reset_validation();
David Woods29704f82015-03-30 10:37:57 -0700472 $this->form_validation->set_rules('select[]', 'label', 'alpha_numeric');
David Woods4b02f1d2015-03-29 22:46:14 -0700473 $_POST = array('select' => array('foo', 'bar'));
474 $this->form_validation->run();
Andrey Andreev2e9ae002015-04-01 14:45:16 +0300475
David Woods29704f82015-03-30 10:37:57 -0700476 $this->assertEquals(' selected="selected"', $this->form_validation->set_select('select[]', 'foo'));
477 $this->assertEquals(' selected="selected"', $this->form_validation->set_select('select[]', 'foo', TRUE));
478 $this->assertEquals(' selected="selected"', $this->form_validation->set_select('select[]', 'bar'));
479 $this->assertEquals(' selected="selected"', $this->form_validation->set_select('select[]', 'bar', TRUE));
480 $this->assertEquals('', $this->form_validation->set_select('select[]', 'foobar'));
481 $this->assertEquals('', $this->form_validation->set_select('select[]', 'foobar', TRUE));
David Woods4b02f1d2015-03-29 22:46:14 -0700482 }
Andrey Andreev2e9ae002015-04-01 14:45:16 +0300483
David Woods4b02f1d2015-03-29 22:46:14 -0700484 public function test_set_radio()
485 {
486 // Test 1: No options selected
Andrey Andreev2e9ae002015-04-01 14:45:16 +0300487 $this->form_validation->reset_validation();
David Woods4b02f1d2015-03-29 22:46:14 -0700488 $_POST = array();
489 $this->form_validation->run();
Andrey Andreev2e9ae002015-04-01 14:45:16 +0300490
David Woods4b02f1d2015-03-29 22:46:14 -0700491 $this->assertEquals('', $this->form_validation->set_radio('select', 'foo'));
David Woods29704f82015-03-30 10:37:57 -0700492 // Default should only work when no rules are set
David Woods4b02f1d2015-03-29 22:46:14 -0700493 $this->assertEquals(' checked="checked"', $this->form_validation->set_radio('select', 'bar', TRUE));
Andrey Andreev2e9ae002015-04-01 14:45:16 +0300494
David Woods4b02f1d2015-03-29 22:46:14 -0700495 // Test 2: 1 option selected
496 $this->form_validation->reset_validation();
497 $this->form_validation->set_rules('select', 'label', 'alpha_numeric');
498 $_POST = array('select' => 'foo');
499 $this->form_validation->run();
Andrey Andreev2e9ae002015-04-01 14:45:16 +0300500
David Woods4b02f1d2015-03-29 22:46:14 -0700501 $this->assertEquals(' checked="checked"', $this->form_validation->set_radio('select', 'foo'));
502 $this->assertEquals(' checked="checked"', $this->form_validation->set_radio('select', 'foo', TRUE));
503 $this->assertEquals('', $this->form_validation->set_radio('select', 'bar'));
504 $this->assertEquals('', $this->form_validation->set_radio('select', 'bar', TRUE));
Andrey Andreev2e9ae002015-04-01 14:45:16 +0300505
David Woods4b02f1d2015-03-29 22:46:14 -0700506 // Test 3: Multiple options checked
507 $this->form_validation->reset_validation();
David Woods29704f82015-03-30 10:37:57 -0700508 $this->form_validation->set_rules('select[]', 'label', 'alpha_numeric');
David Woods4b02f1d2015-03-29 22:46:14 -0700509 $_POST = array('select' => array('foo', 'bar'));
510 $this->form_validation->run();
Andrey Andreev2e9ae002015-04-01 14:45:16 +0300511
David Woods29704f82015-03-30 10:37:57 -0700512 $this->assertEquals(' checked="checked"', $this->form_validation->set_radio('select[]', 'foo'));
513 $this->assertEquals(' checked="checked"', $this->form_validation->set_radio('select[]', 'foo', TRUE));
514 $this->assertEquals(' checked="checked"', $this->form_validation->set_radio('select[]', 'bar'));
515 $this->assertEquals(' checked="checked"', $this->form_validation->set_radio('select[]', 'bar', TRUE));
516 $this->assertEquals('', $this->form_validation->set_radio('select[]', 'foobar'));
517 $this->assertEquals('', $this->form_validation->set_radio('select[]', 'foobar', TRUE));
David Woods4b02f1d2015-03-29 22:46:14 -0700518 }
Andrey Andreev2e9ae002015-04-01 14:45:16 +0300519
David Woods4b02f1d2015-03-29 22:46:14 -0700520 public function test_set_checkbox()
521 {
522 // Test 1: No options selected
Andrey Andreev2e9ae002015-04-01 14:45:16 +0300523 $this->form_validation->reset_validation();
David Woods4b02f1d2015-03-29 22:46:14 -0700524 $_POST = array();
525 $this->form_validation->run();
Andrey Andreev2e9ae002015-04-01 14:45:16 +0300526
527 $this->assertEquals('', $this->form_validation->set_checkbox('select', 'foo'));
David Woods4b02f1d2015-03-29 22:46:14 -0700528 $this->assertEquals(' checked="checked"', $this->form_validation->set_checkbox('select', 'bar', TRUE));
Andrey Andreev2e9ae002015-04-01 14:45:16 +0300529
David Woods4b02f1d2015-03-29 22:46:14 -0700530 // Test 2: 1 option selected
531 $this->form_validation->reset_validation();
532 $this->form_validation->set_rules('select', 'label', 'alpha_numeric');
533 $_POST = array('select' => 'foo');
534 $this->form_validation->run();
Andrey Andreev2e9ae002015-04-01 14:45:16 +0300535
David Woods4b02f1d2015-03-29 22:46:14 -0700536 $this->assertEquals(' checked="checked"', $this->form_validation->set_checkbox('select', 'foo'));
537 $this->assertEquals(' checked="checked"', $this->form_validation->set_checkbox('select', 'foo', TRUE));
538 $this->assertEquals('', $this->form_validation->set_checkbox('select', 'bar'));
539 $this->assertEquals('', $this->form_validation->set_checkbox('select', 'bar', TRUE));
Andrey Andreev2e9ae002015-04-01 14:45:16 +0300540
David Woods4b02f1d2015-03-29 22:46:14 -0700541 // Test 3: Multiple options selected
542 $this->form_validation->reset_validation();
David Woods29704f82015-03-30 10:37:57 -0700543 $this->form_validation->set_rules('select[]', 'label', 'alpha_numeric');
David Woods4b02f1d2015-03-29 22:46:14 -0700544 $_POST = array('select' => array('foo', 'bar'));
545 $this->form_validation->run();
Andrey Andreev2e9ae002015-04-01 14:45:16 +0300546
David Woods29704f82015-03-30 10:37:57 -0700547 $this->assertEquals(' checked="checked"', $this->form_validation->set_checkbox('select[]', 'foo'));
548 $this->assertEquals(' checked="checked"', $this->form_validation->set_checkbox('select[]', 'foo', TRUE));
549 $this->assertEquals(' checked="checked"', $this->form_validation->set_checkbox('select[]', 'bar'));
550 $this->assertEquals(' checked="checked"', $this->form_validation->set_checkbox('select[]', 'bar', TRUE));
551 $this->assertEquals('', $this->form_validation->set_checkbox('select[]', 'foobar'));
552 $this->assertEquals('', $this->form_validation->set_checkbox('select[]', 'foobar', TRUE));
David Woods4b02f1d2015-03-29 22:46:14 -0700553 }
Andrey Andreev2e9ae002015-04-01 14:45:16 +0300554
David Woods4b02f1d2015-03-29 22:46:14 -0700555 public function test_regex_match()
556 {
557 $regex = '/f[a-zA-Z]+/';
558 $this->assertTrue($this->form_validation->regex_match('foo', $regex));
Andrey Andreev2e9ae002015-04-01 14:45:16 +0300559 $this->assertFalse($this->form_validation->regex_match('bar', $regex));
David Woods4b02f1d2015-03-29 22:46:14 -0700560 }
Andrey Andreev2e9ae002015-04-01 14:45:16 +0300561
David Woods4b02f1d2015-03-29 22:46:14 -0700562 public function test_prep_for_form()
563 {
564 $this->form_validation->reset_validation();
David Woodsc6ac5592015-03-31 20:19:39 -0700565 $error_msg_unprepped = '<error =\'foobar\'">';
566 $error_msg_prepped = '&lt;error =&#39;foobar&#39;&quot;&gt;';
567 $this->form_validation->set_rules('foo', 'label', 'required', array('required' => $error_msg_unprepped));
David Woods4b02f1d2015-03-29 22:46:14 -0700568 $_POST = array('foo' => '');
569 $this->form_validation->run();
David Woodsc6ac5592015-03-31 20:19:39 -0700570 $error_arr = $this->form_validation->error_array();
571
David Woods4b02f1d2015-03-29 22:46:14 -0700572 $this->assertEquals('', $this->form_validation->prep_for_form(''));
David Woodsc6ac5592015-03-31 20:19:39 -0700573 $this->assertEquals(array('foo' => $error_msg_prepped), $this->form_validation->prep_for_form($error_arr));
David Woods4b02f1d2015-03-29 22:46:14 -0700574 }
Andrey Andreev2e9ae002015-04-01 14:45:16 +0300575
David Woods4b02f1d2015-03-29 22:46:14 -0700576 public function test_prep_url()
577 {
578 $this->assertEquals('', $this->form_validation->prep_url(''));
579 $this->assertEquals('http://codeigniter.com', $this->form_validation->prep_url('codeigniter.com'));
580 $this->assertEquals('https://codeigniter.com', $this->form_validation->prep_url('https://codeigniter.com'));
581 $this->assertEquals('http://codeigniter.com', $this->form_validation->prep_url('http://codeigniter.com'));
582 $this->assertEquals('http://www.codeigniter.com', $this->form_validation->prep_url('www.codeigniter.com'));
583 }
Andrey Andreev2e9ae002015-04-01 14:45:16 +0300584
David Woods4b02f1d2015-03-29 22:46:14 -0700585 public function test_encode_php_tags()
586 {
587 $this->assertEquals("&lt;?php", $this->form_validation->encode_php_tags('<?php'));
588 $this->assertEquals('?&gt;', $this->form_validation->encode_php_tags('?>'));
589 }
Andrey Andreev2e9ae002015-04-01 14:45:16 +0300590
Andrey Andreev3e2045b2015-03-26 12:34:38 +0200591 /**
592 * Run rules
593 *
594 * Helper method to set rules and run them at once, not
595 * an actual test case.
596 */
David Woodscf776712015-03-22 15:55:16 -0700597 public function run_rules($rules, $values)
David Woods64af3bb2015-03-18 10:09:26 -0700598 {
David Woods64af3bb2015-03-18 10:09:26 -0700599 $this->form_validation->reset_validation();
David Woodscf776712015-03-22 15:55:16 -0700600 $_POST = array();
David Woods5b884732015-03-18 10:37:35 -0700601
David Woodscf776712015-03-22 15:55:16 -0700602 $this->form_validation->set_rules($rules);
603 foreach ($values as $field => $value)
604 {
605 $_POST[$field] = $value;
606 }
Andrey Andreev3e2045b2015-03-26 12:34:38 +0200607
David Woods64af3bb2015-03-18 10:09:26 -0700608 return $this->form_validation->run();
609 }
David Woodsf3ac71e2015-03-16 20:00:21 -0700610}