CheckboxTest.php 7.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236
  1. <?php
  2. // Call Zend_Form_Element_CheckboxTest::main() if this source file is executed directly.
  3. if (!defined("PHPUnit_MAIN_METHOD")) {
  4. define("PHPUnit_MAIN_METHOD", "Zend_Form_Element_CheckboxTest::main");
  5. }
  6. require_once dirname(__FILE__) . '/../../../TestHelper.php';
  7. require_once 'Zend/Form/Element/Checkbox.php';
  8. /**
  9. * Test class for Zend_Form_Element_Checkbox
  10. */
  11. class Zend_Form_Element_CheckboxTest extends PHPUnit_Framework_TestCase
  12. {
  13. /**
  14. * Runs the test methods of this class.
  15. *
  16. * @return void
  17. */
  18. public static function main()
  19. {
  20. $suite = new PHPUnit_Framework_TestSuite("Zend_Form_Element_CheckboxTest");
  21. $result = PHPUnit_TextUI_TestRunner::run($suite);
  22. }
  23. /**
  24. * Sets up the fixture, for example, open a network connection.
  25. * This method is called before a test is executed.
  26. *
  27. * @return void
  28. */
  29. public function setUp()
  30. {
  31. $this->element = new Zend_Form_Element_Checkbox('foo');
  32. }
  33. /**
  34. * Tears down the fixture, for example, close a network connection.
  35. * This method is called after a test is executed.
  36. *
  37. * @return void
  38. */
  39. public function tearDown()
  40. {
  41. }
  42. public function getView()
  43. {
  44. require_once 'Zend/View.php';
  45. return new Zend_View();
  46. }
  47. public function testCheckboxElementSubclassesXhtmlElement()
  48. {
  49. $this->assertTrue($this->element instanceof Zend_Form_Element_Xhtml);
  50. }
  51. public function testCheckboxElementInstanceOfBaseElement()
  52. {
  53. $this->assertTrue($this->element instanceof Zend_Form_Element);
  54. }
  55. public function testCheckboxElementUsesCheckboxHelperInViewHelperDecoratorByDefault()
  56. {
  57. $this->_checkZf2794();
  58. $decorator = $this->element->getDecorator('viewHelper');
  59. $this->assertTrue($decorator instanceof Zend_Form_Decorator_ViewHelper);
  60. $decorator->setElement($this->element);
  61. $helper = $decorator->getHelper();
  62. $this->assertEquals('formCheckbox', $helper);
  63. }
  64. public function testCheckedFlagIsFalseByDefault()
  65. {
  66. $this->assertFalse($this->element->checked);
  67. }
  68. public function testCheckedAttributeNotRenderedByDefault()
  69. {
  70. require_once 'Zend/View.php';
  71. $view = new Zend_View();
  72. $html = $this->element->render($view);
  73. $this->assertNotContains('checked="checked"', $html);
  74. }
  75. public function testCheckedAttributeRenderedWhenCheckedFlagTrue()
  76. {
  77. require_once 'Zend/View.php';
  78. $view = new Zend_View();
  79. $this->element->checked = true;
  80. $html = $this->element->render($view);
  81. $this->assertContains('checked="checked"', $html);
  82. }
  83. public function testCheckedValueDefaultsToOne()
  84. {
  85. $this->assertEquals(1, $this->element->getCheckedValue());
  86. }
  87. public function testUncheckedValueDefaultsToZero()
  88. {
  89. $this->assertEquals(0, $this->element->getUncheckedValue());
  90. }
  91. public function testCanSetCheckedValue()
  92. {
  93. $this->testCheckedValueDefaultsToOne();
  94. $this->element->setCheckedValue('foo');
  95. $this->assertEquals('foo', $this->element->getCheckedValue());
  96. }
  97. public function testCanSetUncheckedValue()
  98. {
  99. $this->testUncheckedValueDefaultsToZero();
  100. $this->element->setUncheckedValue('foo');
  101. $this->assertEquals('foo', $this->element->getUncheckedValue());
  102. }
  103. public function testValueInitiallyUncheckedValue()
  104. {
  105. $this->assertEquals($this->element->getUncheckedValue(), $this->element->getValue());
  106. }
  107. public function testSettingValueToCheckedValueSetsWithEquivalentValue()
  108. {
  109. $this->testValueInitiallyUncheckedValue();
  110. $this->element->setValue($this->element->getCheckedValue());
  111. $this->assertEquals($this->element->getCheckedValue(), $this->element->getValue());
  112. }
  113. public function testSettingValueToAnythingOtherThanCheckedValueSetsAsUncheckedValue()
  114. {
  115. $this->testSettingValueToCheckedValueSetsWithEquivalentValue();
  116. $this->element->setValue('bogus');
  117. $this->assertEquals($this->element->getUncheckedValue(), $this->element->getValue());
  118. }
  119. public function testSettingCheckedFlagToTrueSetsValueToCheckedValue()
  120. {
  121. $this->testValueInitiallyUncheckedValue();
  122. $this->element->setChecked(true);
  123. $this->assertEquals($this->element->getCheckedValue(), $this->element->getValue());
  124. }
  125. public function testSettingCheckedFlagToFalseSetsValueToUncheckedValue()
  126. {
  127. $this->testSettingCheckedFlagToTrueSetsValueToCheckedValue();
  128. $this->element->setChecked(false);
  129. $this->assertEquals($this->element->getUncheckedValue(), $this->element->getValue());
  130. }
  131. public function testSettingValueToCheckedValueMarksElementAsChecked()
  132. {
  133. $this->testValueInitiallyUncheckedValue();
  134. $this->element->setValue($this->element->getCheckedValue());
  135. $this->assertTrue($this->element->checked);
  136. }
  137. public function testSettingValueToUncheckedValueMarksElementAsNotChecked()
  138. {
  139. $this->testSettingValueToCheckedValueMarksElementAsChecked();
  140. $this->element->setValue($this->element->getUncheckedValue());
  141. $this->assertFalse($this->element->checked);
  142. }
  143. public function testSetOptionsSetsInitialValueAccordingToCheckedAndUncheckedValues()
  144. {
  145. $options = array(
  146. 'checkedValue' => 'foo',
  147. 'uncheckedValue' => 'bar',
  148. );
  149. $element = new Zend_Form_Element_Checkbox('test', $options);
  150. $this->assertEquals($options['uncheckedValue'], $element->getValue());
  151. }
  152. public function testSetOptionsSetsInitialValueAccordingToSubmittedValues()
  153. {
  154. $options = array(
  155. 'test1' => array(
  156. 'value' => 'foo',
  157. 'checkedValue' => 'foo',
  158. 'uncheckedValue' => 'bar',
  159. ),
  160. 'test2' => array(
  161. 'value' => 'bar',
  162. 'checkedValue' => 'foo',
  163. 'uncheckedValue' => 'bar',
  164. ),
  165. );
  166. foreach ($options as $current) {
  167. $element = new Zend_Form_Element_Checkbox('test', $current);
  168. $this->assertEquals($current['value'], $element->getValue());
  169. $this->assertEquals($current['checkedValue'], $element->getCheckedValue());
  170. $this->assertEquals($current['uncheckedValue'], $element->getUncheckedValue());
  171. }
  172. }
  173. public function testCheckedValueAlwaysRenderedAsCheckboxValue()
  174. {
  175. $this->element->setValue($this->element->getUncheckedValue());
  176. $html = $this->element->render($this->getView());
  177. if (!preg_match_all('/(<input[^>]+>)/', $html, $matches)) {
  178. $this->fail('Unexpected generated HTML: ' . $html);
  179. }
  180. $this->assertEquals(2, count($matches[1]));
  181. foreach ($matches[1] as $element) {
  182. if (strstr($element, 'hidden')) {
  183. $this->assertContains($this->element->getUncheckedValue(), $element);
  184. } else {
  185. $this->assertContains($this->element->getCheckedValue(), $element);
  186. }
  187. }
  188. }
  189. /**
  190. * Used by test methods susceptible to ZF-2794, marks a test as incomplete
  191. *
  192. * @link http://framework.zend.com/issues/browse/ZF-2794
  193. * @return void
  194. */
  195. protected function _checkZf2794()
  196. {
  197. if (strtolower(substr(PHP_OS, 0, 3)) == 'win' && version_compare(PHP_VERSION, '5.1.4', '=')) {
  198. $this->markTestIncomplete('Error occurs for PHP 5.1.4 on Windows');
  199. }
  200. }
  201. }
  202. // Call Zend_Form_Element_CheckboxTest::main() if this source file is executed directly.
  203. if (PHPUnit_MAIN_METHOD == "Zend_Form_Element_CheckboxTest::main") {
  204. Zend_Form_Element_CheckboxTest::main();
  205. }