PageRenderTime 40ms CodeModel.GetById 9ms RepoModel.GetById 1ms app.codeStats 0ms

/tests/Zend/InputFilter/FactoryTest.php

https://github.com/shevron/zf2
PHP | 351 lines | 323 code | 20 blank | 8 comment | 3 complexity | 046cbcdf5ade1e718653b07dae0969f1 MD5 | raw file
  1. <?php
  2. /**
  3. * Zend Framework (http://framework.zend.com/)
  4. *
  5. * @link http://github.com/zendframework/zf2 for the canonical source repository
  6. * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
  7. * @license http://framework.zend.com/license/new-bsd New BSD License
  8. * @package Zend_InputFilter
  9. */
  10. namespace ZendTest\InputFilter;
  11. use PHPUnit_Framework_TestCase as TestCase;
  12. use Zend\Filter;
  13. use Zend\InputFilter\Factory;
  14. use Zend\InputFilter\Input;
  15. use Zend\InputFilter\InputFilter;
  16. use Zend\Validator;
  17. class FactoryTest extends TestCase
  18. {
  19. public function testFactoryDoesNotComposeFilterChainByDefault()
  20. {
  21. $factory = new Factory();
  22. $this->assertNull($factory->getDefaultFilterChain());
  23. }
  24. public function testFactoryDoesNotComposeValidatorChainByDefault()
  25. {
  26. $factory = new Factory();
  27. $this->assertNull($factory->getDefaultValidatorChain());
  28. }
  29. public function testFactoryAllowsInjectingFilterChain()
  30. {
  31. $factory = new Factory();
  32. $filterChain = new Filter\FilterChain();
  33. $factory->setDefaultFilterChain($filterChain);
  34. $this->assertSame($filterChain, $factory->getDefaultFilterChain());
  35. }
  36. public function testFactoryAllowsInjectingValidatorChain()
  37. {
  38. $factory = new Factory();
  39. $validatorChain = new Validator\ValidatorChain();
  40. $factory->setDefaultValidatorChain($validatorChain);
  41. $this->assertSame($validatorChain, $factory->getDefaultValidatorChain());
  42. }
  43. public function testFactoryUsesComposedFilterChainWhenCreatingNewInputObjects()
  44. {
  45. $factory = new Factory();
  46. $filterChain = new Filter\FilterChain();
  47. $pluginManager = new Filter\FilterPluginManager();
  48. $filterChain->setPluginManager($pluginManager);
  49. $factory->setDefaultFilterChain($filterChain);
  50. $input = $factory->createInput(array(
  51. 'name' => 'foo',
  52. ));
  53. $this->assertInstanceOf('Zend\InputFilter\InputInterface', $input);
  54. $inputFilterChain = $input->getFilterChain();
  55. $this->assertNotSame($filterChain, $inputFilterChain);
  56. $this->assertSame($pluginManager, $inputFilterChain->getPluginManager());
  57. }
  58. public function testFactoryUsesComposedValidatorChainWhenCreatingNewInputObjects()
  59. {
  60. $factory = new Factory();
  61. $validatorChain = new Validator\ValidatorChain();
  62. $validatorPlugins = new Validator\ValidatorPluginManager();
  63. $validatorChain->setPluginManager($validatorPlugins);
  64. $factory->setDefaultValidatorChain($validatorChain);
  65. $input = $factory->createInput(array(
  66. 'name' => 'foo',
  67. ));
  68. $this->assertInstanceOf('Zend\InputFilter\InputInterface', $input);
  69. $inputValidatorChain = $input->getValidatorChain();
  70. $this->assertNotSame($validatorChain, $inputValidatorChain);
  71. $this->assertSame($validatorPlugins, $inputValidatorChain->getPluginManager());
  72. }
  73. public function testFactoryInjectsComposedFilterAndValidatorChainsIntoInputObjectsWhenCreatingNewInputFilterObjects()
  74. {
  75. $factory = new Factory();
  76. $filterPlugins = new Filter\FilterPluginManager();
  77. $validatorPlugins = new Validator\ValidatorPluginManager();
  78. $filterChain = new Filter\FilterChain();
  79. $validatorChain = new Validator\ValidatorChain();
  80. $filterChain->setPluginManager($filterPlugins);
  81. $validatorChain->setPluginManager($validatorPlugins);
  82. $factory->setDefaultFilterChain($filterChain);
  83. $factory->setDefaultValidatorChain($validatorChain);
  84. $inputFilter = $factory->createInputFilter(array(
  85. 'foo' => array(
  86. 'name' => 'foo',
  87. ),
  88. ));
  89. $this->assertInstanceOf('Zend\InputFilter\InputFilterInterface', $inputFilter);
  90. $this->assertEquals(1, count($inputFilter));
  91. $input = $inputFilter->get('foo');
  92. $this->assertInstanceOf('Zend\InputFilter\InputInterface', $input);
  93. $inputFilterChain = $input->getFilterChain();
  94. $inputValidatorChain = $input->getValidatorChain();
  95. $this->assertSame($filterPlugins, $inputFilterChain->getPluginManager());
  96. $this->assertSame($validatorPlugins, $inputValidatorChain->getPluginManager());
  97. }
  98. public function testFactoryWillCreateInputWithSuggestedFilters()
  99. {
  100. $factory = new Factory();
  101. $htmlEntities = new Filter\HtmlEntities();
  102. $input = $factory->createInput(array(
  103. 'name' => 'foo',
  104. 'filters' => array(
  105. array(
  106. 'name' => 'string_trim',
  107. ),
  108. $htmlEntities,
  109. array(
  110. 'name' => 'string_to_lower',
  111. 'options' => array(
  112. 'encoding' => 'ISO-8859-1',
  113. ),
  114. ),
  115. ),
  116. ));
  117. $this->assertInstanceOf('Zend\InputFilter\InputInterface', $input);
  118. $this->assertEquals('foo', $input->getName());
  119. $chain = $input->getFilterChain();
  120. $index = 0;
  121. foreach ($chain as $filter) {
  122. switch ($index) {
  123. case 0:
  124. $this->assertInstanceOf('Zend\Filter\StringTrim', $filter);
  125. break;
  126. case 1:
  127. $this->assertSame($htmlEntities, $filter);
  128. break;
  129. case 2:
  130. $this->assertInstanceOf('Zend\Filter\StringToLower', $filter);
  131. $this->assertEquals('ISO-8859-1', $filter->getEncoding());
  132. break;
  133. default:
  134. $this->fail('Found more filters than expected');
  135. }
  136. $index++;
  137. }
  138. }
  139. public function testFactoryWillCreateInputWithSuggestedValidators()
  140. {
  141. $factory = new Factory();
  142. $digits = new Validator\Digits();
  143. $input = $factory->createInput(array(
  144. 'name' => 'foo',
  145. 'validators' => array(
  146. array(
  147. 'name' => 'not_empty',
  148. ),
  149. $digits,
  150. array(
  151. 'name' => 'string_length',
  152. 'options' => array(
  153. 'min' => 3,
  154. 'max' => 5,
  155. ),
  156. ),
  157. ),
  158. ));
  159. $this->assertInstanceOf('Zend\InputFilter\InputInterface', $input);
  160. $this->assertEquals('foo', $input->getName());
  161. $chain = $input->getValidatorChain();
  162. $index = 0;
  163. foreach ($chain as $validator) {
  164. switch ($index) {
  165. case 0:
  166. $this->assertInstanceOf('Zend\Validator\NotEmpty', $validator);
  167. break;
  168. case 1:
  169. $this->assertSame($digits, $validator);
  170. break;
  171. case 2:
  172. $this->assertInstanceOf('Zend\Validator\StringLength', $validator);
  173. $this->assertEquals(3, $validator->getMin());
  174. $this->assertEquals(5, $validator->getMax());
  175. break;
  176. default:
  177. $this->fail('Found more validators than expected');
  178. }
  179. $index++;
  180. }
  181. }
  182. public function testFactoryWillCreateInputWithSuggestedRequiredFlagAndImpliesAllowEmptyFlag()
  183. {
  184. $factory = new Factory();
  185. $input = $factory->createInput(array(
  186. 'name' => 'foo',
  187. 'required' => false,
  188. ));
  189. $this->assertInstanceOf('Zend\InputFilter\InputInterface', $input);
  190. $this->assertFalse($input->isRequired());
  191. $this->assertTrue($input->allowEmpty());
  192. }
  193. public function testFactoryWillCreateInputWithSuggestedRequiredFlagAndAlternativeAllowEmptyFlag()
  194. {
  195. $factory = new Factory();
  196. $input = $factory->createInput(array(
  197. 'name' => 'foo',
  198. 'required' => false,
  199. 'allow_empty' => false,
  200. ));
  201. $this->assertInstanceOf('Zend\InputFilter\InputInterface', $input);
  202. $this->assertFalse($input->isRequired());
  203. $this->assertFalse($input->allowEmpty());
  204. }
  205. public function testFactoryWillCreateInputWithSuggestedAllowEmptyFlagAndImpliesRequiredFlag()
  206. {
  207. $factory = new Factory();
  208. $input = $factory->createInput(array(
  209. 'name' => 'foo',
  210. 'allow_empty' => true,
  211. ));
  212. $this->assertInstanceOf('Zend\InputFilter\InputInterface', $input);
  213. $this->assertTrue($input->allowEmpty());
  214. $this->assertFalse($input->isRequired());
  215. }
  216. public function testFactoryWillCreateInputWithSuggestedName()
  217. {
  218. $factory = new Factory();
  219. $input = $factory->createInput(array(
  220. 'name' => 'foo',
  221. ));
  222. $this->assertInstanceOf('Zend\InputFilter\InputInterface', $input);
  223. $this->assertEquals('foo', $input->getName());
  224. }
  225. public function testFactoryWillCreateInputFilterAndAllInputObjectsFromGivenConfiguration()
  226. {
  227. $factory = new Factory();
  228. $inputFilter = $factory->createInputFilter(array(
  229. 'foo' => array(
  230. 'name' => 'foo',
  231. 'required' => false,
  232. 'validators' => array(
  233. array(
  234. 'name' => 'not_empty',
  235. ),
  236. array(
  237. 'name' => 'string_length',
  238. 'options' => array(
  239. 'min' => 3,
  240. 'max' => 5,
  241. ),
  242. ),
  243. ),
  244. ),
  245. 'bar' => array(
  246. 'allow_empty' => true,
  247. 'filters' => array(
  248. array(
  249. 'name' => 'string_trim',
  250. ),
  251. array(
  252. 'name' => 'string_to_lower',
  253. 'options' => array(
  254. 'encoding' => 'ISO-8859-1',
  255. ),
  256. ),
  257. ),
  258. ),
  259. 'baz' => array(
  260. 'type' => 'Zend\InputFilter\InputFilter',
  261. 'foo' => array(
  262. 'name' => 'foo',
  263. 'required' => false,
  264. 'validators' => array(
  265. array(
  266. 'name' => 'not_empty',
  267. ),
  268. array(
  269. 'name' => 'string_length',
  270. 'options' => array(
  271. 'min' => 3,
  272. 'max' => 5,
  273. ),
  274. ),
  275. ),
  276. ),
  277. 'bar' => array(
  278. 'allow_empty' => true,
  279. 'filters' => array(
  280. array(
  281. 'name' => 'string_trim',
  282. ),
  283. array(
  284. 'name' => 'string_to_lower',
  285. 'options' => array(
  286. 'encoding' => 'ISO-8859-1',
  287. ),
  288. ),
  289. ),
  290. ),
  291. ),
  292. 'bat' => array(
  293. 'type' => 'ZendTest\InputFilter\TestAsset\CustomInput',
  294. 'name' => 'bat',
  295. ),
  296. ));
  297. $this->assertInstanceOf('Zend\InputFilter\InputFilter', $inputFilter);
  298. $this->assertEquals(4, count($inputFilter));
  299. foreach (array('foo', 'bar', 'baz', 'bat') as $name) {
  300. $input = $inputFilter->get($name);
  301. switch ($name) {
  302. case 'foo':
  303. $this->assertInstanceOf('Zend\InputFilter\Input', $input);
  304. $this->assertFalse($input->isRequired());
  305. $this->assertEquals(2, count($input->getValidatorChain()));
  306. break;
  307. case 'bar':
  308. $this->assertInstanceOf('Zend\InputFilter\Input', $input);
  309. $this->assertTrue($input->allowEmpty());
  310. $this->assertEquals(2, count($input->getFilterChain()));
  311. break;
  312. case 'baz':
  313. $this->assertInstanceOf('Zend\InputFilter\InputFilter', $input);
  314. $this->assertEquals(2, count($input));
  315. $foo = $input->get('foo');
  316. $this->assertInstanceOf('Zend\InputFilter\Input', $foo);
  317. $this->assertFalse($foo->isRequired());
  318. $this->assertEquals(2, count($foo->getValidatorChain()));
  319. $bar = $input->get('bar');
  320. $this->assertInstanceOf('Zend\InputFilter\Input', $bar);
  321. $this->assertTrue($bar->allowEmpty());
  322. $this->assertEquals(2, count($bar->getFilterChain()));
  323. break;
  324. case 'bat':
  325. $this->assertInstanceOf('ZendTest\InputFilter\TestAsset\CustomInput', $input);
  326. $this->assertEquals('bat', $input->getName());
  327. break;
  328. }
  329. }
  330. }
  331. }