PageRenderTime 23ms CodeModel.GetById 22ms RepoModel.GetById 0ms app.codeStats 0ms

/tests/Zend/InputFilter/FactoryTest.php

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