form.php 7.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236
  1. <?php
  2. /**
  3. * Part of the Fuel framework.
  4. *
  5. * @package Fuel
  6. * @version 1.5
  7. * @author Fuel Development Team
  8. * @license MIT License
  9. * @copyright 2010 - 2013 Fuel Development Team
  10. * @link http://fuelphp.com
  11. */
  12. namespace Fuel\Core;
  13. /**
  14. * Form class tests
  15. *
  16. * @group Core
  17. * @group Form
  18. */
  19. class Test_Form extends TestCase
  20. {
  21. protected function setUp()
  22. {
  23. Config::load('form');
  24. Config::set('form', array(
  25. 'prep_value' => true,
  26. 'auto_id' => true,
  27. 'auto_id_prefix' => 'form_',
  28. 'form_method' => 'post',
  29. 'form_template' => "\n\t\t{open}\n\t\t<table>\n{fields}\n\t\t</table>\n\t\t{close}\n",
  30. 'fieldset_template' => "\n\t\t<tr><td colspan=\"2\">{open}<table>\n{fields}</table></td></tr>\n\t\t{close}\n",
  31. 'field_template' => "\t\t<tr>\n\t\t\t<td class=\"{error_class}\">{label}{required}</td>\n\t\t\t<td class=\"{error_class}\">{field} <span>{description}</span> {error_msg}</td>\n\t\t</tr>\n",
  32. 'multi_field_template' => "\t\t<tr>\n\t\t\t<td class=\"{error_class}\">{group_label}{required}</td>\n\t\t\t<td class=\"{error_class}\">{fields}\n\t\t\t\t{field} {label}<br />\n{fields}<span>{description}</span>\t\t\t{error_msg}\n\t\t\t</td>\n\t\t</tr>\n",
  33. 'error_template' => '<span>{error_msg}</span>',
  34. 'required_mark' => '*',
  35. 'inline_errors' => false,
  36. 'error_class' => 'validation_error',
  37. ));
  38. }
  39. /**
  40. * Tests Form::input()
  41. *
  42. * test for data prepping
  43. *
  44. * @test
  45. */
  46. public function test_input_prep()
  47. {
  48. $output = Form::input('name', '"H&M"');
  49. $expected = '<input name="name" value="&quot;H&amp;M&quot;" type="text" id="form_name" />';
  50. $this->assertEquals($expected, $output);
  51. $output = Form::input('name', '');
  52. $expected = '<input name="name" value="" type="text" id="form_name" />';
  53. $this->assertEquals($expected, $output);
  54. $output = Form::input('name', "0");
  55. $expected = '<input name="name" value="0" type="text" id="form_name" />';
  56. $this->assertEquals($expected, $output);
  57. $output = Form::input('name', 0);
  58. $expected = '<input name="name" value="0" type="text" id="form_name" />';
  59. $this->assertEquals($expected, $output);
  60. $output = Form::input('name', 1);
  61. $expected = '<input name="name" value="1" type="text" id="form_name" />';
  62. $this->assertEquals($expected, $output);
  63. $output = Form::input('name', 10);
  64. $expected = '<input name="name" value="10" type="text" id="form_name" />';
  65. $this->assertEquals($expected, $output);
  66. $output = Form::input('name', true);
  67. $expected = '<input name="name" value="1" type="text" id="form_name" />';
  68. $this->assertEquals($expected, $output);
  69. $output = Form::input('name', false);
  70. $expected = '<input name="name" value="" type="text" id="form_name" />';
  71. $this->assertEquals($expected, $output);
  72. $output = Form::input('name', null);
  73. $expected = '<input name="name" value="" type="text" id="form_name" />';
  74. $this->assertEquals($expected, $output);
  75. }
  76. /**
  77. * Tests Form::input()
  78. *
  79. * test for dont_prep
  80. *
  81. * @test
  82. */
  83. public function test_input_dont_prep()
  84. {
  85. $output = Form::input('name', '&quot;&#39;H&amp;M&#39;&quot;', array('dont_prep' => true));
  86. $expected = '<input name="name" value="&quot;&#39;H&amp;M&#39;&quot;" type="text" id="form_name" />';
  87. $this->assertEquals($expected, $output);
  88. $output = Form::input('name', '', array('dont_prep' => true));
  89. $expected = '<input name="name" value="" type="text" id="form_name" />';
  90. $this->assertEquals($expected, $output);
  91. $output = Form::input('name', "0", array('dont_prep' => true));
  92. $expected = '<input name="name" value="0" type="text" id="form_name" />';
  93. $this->assertEquals($expected, $output);
  94. $output = Form::input('name', 0, array('dont_prep' => true));
  95. $expected = '<input name="name" value="0" type="text" id="form_name" />';
  96. $this->assertEquals($expected, $output);
  97. $output = Form::input('name', 1, array('dont_prep' => true));
  98. $expected = '<input name="name" value="1" type="text" id="form_name" />';
  99. $this->assertEquals($expected, $output);
  100. $output = Form::input('name', 10, array('dont_prep' => true));
  101. $expected = '<input name="name" value="10" type="text" id="form_name" />';
  102. $this->assertEquals($expected, $output);
  103. $output = Form::input('name', true, array('dont_prep' => true));
  104. $expected = '<input name="name" value="1" type="text" id="form_name" />';
  105. $this->assertEquals($expected, $output);
  106. $output = Form::input('name', false, array('dont_prep' => true));
  107. $expected = '<input name="name" value="" type="text" id="form_name" />';
  108. $this->assertEquals($expected, $output);
  109. $output = Form::input('name', null, array('dont_prep' => true));
  110. $expected = '<input name="name" value="" type="text" id="form_name" />';
  111. $this->assertEquals($expected, $output);
  112. }
  113. /**
  114. * Tests Form::textarea()
  115. *
  116. * test for data prepping
  117. *
  118. * @test
  119. */
  120. public function test_textarea_prep()
  121. {
  122. $output = Form::textarea('name', '"H&M"');
  123. $expected = '<textarea name="name" id="form_name">&quot;H&amp;M&quot;</textarea>';
  124. $this->assertEquals($expected, $output);
  125. }
  126. /**
  127. * Tests Form::textarea()
  128. *
  129. * test for dont_prep
  130. *
  131. * @test
  132. */
  133. public function test_textarea_dont_prep()
  134. {
  135. $output = Form::textarea('name', '&quot;&#39;H&amp;M&#39;&quot;', array('dont_prep' => true));
  136. $expected = '<textarea name="name" id="form_name">&quot;&#39;H&amp;M&#39;&quot;</textarea>';
  137. $this->assertEquals($expected, $output);
  138. }
  139. /**
  140. * Tests Form::select()
  141. *
  142. * test for data prepping
  143. *
  144. * @test
  145. */
  146. public function test_select_prep()
  147. {
  148. $output = Form::select('fieldname', null,
  149. array(
  150. 'key_H&M' => 'val_H&M',
  151. 'key_""' => 'val_""',
  152. )
  153. );
  154. $expected = '<select name="fieldname" id="form_fieldname">'.PHP_EOL
  155. .' <option value="key_H&amp;M" style="text-indent: 0px;">val_H&amp;M</option>'.PHP_EOL
  156. .' <option value="key_&quot;&quot;" style="text-indent: 0px;">val_&quot;&quot;</option>'.PHP_EOL
  157. .'</select>';
  158. $this->assertEquals($expected, $output);
  159. }
  160. /**
  161. * Tests Form::prep_value()
  162. *
  163. * @test
  164. */
  165. public function test_prep_value()
  166. {
  167. $output = Form::prep_value('<"H&M">');
  168. $expected = '&lt;&quot;H&amp;M&quot;&gt;';
  169. $this->assertEquals($expected, $output);
  170. }
  171. /**
  172. * Tests Form::select()
  173. *
  174. * test for dont_prep
  175. *
  176. * @test
  177. */
  178. public function test_select_dont_prep()
  179. {
  180. $output = Form::select('fieldname', null,
  181. array(
  182. 'key_H&amp;M' => 'val_H&amp;M',
  183. 'key_&quot;&#39;&quot;' => 'val_&quot;&#39;&quot;',
  184. ),
  185. array(
  186. 'dont_prep' => true,
  187. )
  188. );
  189. $expected = '<select name="fieldname" id="form_fieldname">'.PHP_EOL
  190. .' <option value="key_H&amp;M" style="text-indent: 0px;">val_H&amp;M</option>'.PHP_EOL
  191. .' <option value="key_&quot;&#39;&quot;" style="text-indent: 0px;">val_&quot;&#39;&quot;</option>'.PHP_EOL
  192. .'</select>';
  193. $this->assertEquals($expected, $output);
  194. }
  195. /**
  196. * Tests Form::prep_value()
  197. *
  198. * test of invalid string
  199. *
  200. * @test
  201. */
  202. public function test_prep_value_invalid_utf8()
  203. {
  204. // 6 byte UTF-8 string, which is invalid now
  205. $utf8_string = "\xFC\x84\x80\x80\x80\x80";
  206. $output = Form::prep_value($utf8_string);
  207. $expected = '';
  208. $this->assertEquals($expected, $output);
  209. }
  210. }