|
41 | 41 |
|
42 | 42 | class HtmlFormTagTest extends TestCase {
|
43 | 43 |
|
| 44 | + const LISTENER_ERROR_MESSAGE = 'Fields must be filled with 3 to 16 characters!'; |
| 45 | + |
44 | 46 | /**
|
45 | 47 | * Tests form which is not sent.
|
46 | 48 | */
|
@@ -1080,4 +1082,116 @@ public function testGetTagClass() {
|
1080 | 1082 | $form->getTagClass('not-existing:tag');
|
1081 | 1083 | }
|
1082 | 1084 |
|
| 1085 | + /** |
| 1086 | + * ID#347: test simple single-field listener for single control. |
| 1087 | + */ |
| 1088 | + public function testValidationListener1() { |
| 1089 | + |
| 1090 | + $_POST = ['submit' => 'submit']; |
| 1091 | + $_REQUEST = []; |
| 1092 | + |
| 1093 | + $form = new HtmlFormTag(); |
| 1094 | + |
| 1095 | + // inject parent object to make recursive selection work |
| 1096 | + $doc = new Document(); |
| 1097 | + $form->setParent($doc); |
| 1098 | + |
| 1099 | + $form->setAttribute('name', 'foo'); |
| 1100 | + $form->setContent('<form:listener control="first-name">' . self::LISTENER_ERROR_MESSAGE . '</form:listener> |
| 1101 | +<form:text name="first-name" /> |
| 1102 | +<form:button name="submit" value="submit"/> |
| 1103 | +<form:addvalidator class="APF\tools\form\validator\TextLengthValidator" button="submit" control="first-name"/>'); |
| 1104 | + $form->onParseTime(); |
| 1105 | + $form->onAfterAppend(); |
| 1106 | + |
| 1107 | + $this->assertFalse($form->isValid()); |
| 1108 | + |
| 1109 | + $html = $form->transformForm(); |
| 1110 | + |
| 1111 | + $this->assertContains(self::LISTENER_ERROR_MESSAGE, $html); |
| 1112 | + $this->assertEquals(1, substr_count($html, self::LISTENER_ERROR_MESSAGE)); |
| 1113 | + } |
| 1114 | + |
| 1115 | + /** |
| 1116 | + * ID#347: test single-field listener setup using different messages per validator. |
| 1117 | + */ |
| 1118 | + public function testValidationListener2() { |
| 1119 | + |
| 1120 | + $_POST = ['submit' => 'submit']; |
| 1121 | + $_REQUEST = []; |
| 1122 | + |
| 1123 | + $form = new HtmlFormTag(); |
| 1124 | + |
| 1125 | + // inject parent object to make recursive selection work |
| 1126 | + $doc = new Document(); |
| 1127 | + $form->setParent($doc); |
| 1128 | + |
| 1129 | + $form->setAttribute('name', 'foo'); |
| 1130 | + $form->setContent('<form:listener control="e-mail" validator="APF\tools\form\validator\TextLengthValidator">' . self::LISTENER_ERROR_MESSAGE . '</form:listener> |
| 1131 | +<form:listener control="e-mail" validator="APF\tools\form\validator\EMailValidator">' . self::LISTENER_ERROR_MESSAGE . '</form:listener> |
| 1132 | +<form:text name="e-mail" /> |
| 1133 | +<form:button name="submit" value="submit"/> |
| 1134 | +<form:addvalidator class="APF\tools\form\validator\EMailValidator" button="submit" control="e-mail" type="special"/>'); |
| 1135 | + $form->onParseTime(); |
| 1136 | + $form->onAfterAppend(); |
| 1137 | + |
| 1138 | + $this->assertFalse($form->isValid()); |
| 1139 | + |
| 1140 | + $html = $form->transformForm(); |
| 1141 | + |
| 1142 | + $this->assertContains(self::LISTENER_ERROR_MESSAGE, $html); |
| 1143 | + $this->assertEquals(1, substr_count($html, self::LISTENER_ERROR_MESSAGE)); |
| 1144 | + } |
| 1145 | + |
| 1146 | + /** |
| 1147 | + * ID#347: test multi-field listener setup with simple and specific validator setup. At the same time, test |
| 1148 | + * usage of listeners within <form:error /> tags. |
| 1149 | + */ |
| 1150 | + public function testValidationListener3() { |
| 1151 | + |
| 1152 | + $_POST = ['submit' => 'submit']; |
| 1153 | + $_REQUEST = []; |
| 1154 | + |
| 1155 | + $form = new HtmlFormTag(); |
| 1156 | + |
| 1157 | + // inject parent object to make recursive selection work |
| 1158 | + $doc = new Document(); |
| 1159 | + $form->setParent($doc); |
| 1160 | + |
| 1161 | + $genericErrorMessage = 'Invalid e-mail!'; |
| 1162 | + $syntaxInvalidErrorMessage = 'Syntax of e-mail invalid!'; |
| 1163 | + |
| 1164 | + $form->setAttribute('name', 'foo'); |
| 1165 | + $form->setContent('<form:error> |
| 1166 | + <form:listener validator="APF\tools\form\validator\TextLengthValidator">' . self::LISTENER_ERROR_MESSAGE . '</form:listener> |
| 1167 | + <form:listener control="e-mail">' . $genericErrorMessage . '</form:listener> |
| 1168 | + <form:listener control="e-mail" validator="APF\tools\form\validator\EMailValidator">' . $syntaxInvalidErrorMessage . '</form:listener> |
| 1169 | +</form:error> |
| 1170 | +<form:text name="first-name" /> |
| 1171 | +<form:text name="last-name" /> |
| 1172 | +<form:text name="e-mail" /> |
| 1173 | +<form:button name="submit" value="submit"/> |
| 1174 | +<form:addvalidator class="APF\tools\form\validator\TextLengthValidator" button="submit" control="first-name|last-name" type="generic"/> |
| 1175 | +<form:addvalidator class="APF\tools\form\validator\TextLengthValidator" button="submit" control="e-mail" /> |
| 1176 | +<form:addvalidator class="APF\tools\form\validator\EMailValidator" button="submit" control="e-mail" type="special"/>'); |
| 1177 | + $form->onParseTime(); |
| 1178 | + $form->onAfterAppend(); |
| 1179 | + |
| 1180 | + $this->assertFalse($form->isValid()); |
| 1181 | + |
| 1182 | + $html = $form->transformForm(); |
| 1183 | + |
| 1184 | + // generic text length validator should trigger listener bound to the TextLengthValidator |
| 1185 | + $this->assertContains(self::LISTENER_ERROR_MESSAGE, $html); |
| 1186 | + $this->assertEquals(1, substr_count($html, self::LISTENER_ERROR_MESSAGE)); |
| 1187 | + |
| 1188 | + // "normal" text length validator on e-mail field should trigger standard field-based listener |
| 1189 | + $this->assertContains($genericErrorMessage, $html); |
| 1190 | + $this->assertEquals(1, substr_count($html, $genericErrorMessage)); |
| 1191 | + |
| 1192 | + // "special" e-mail validator on e-mail field should trigger special validator-based listener |
| 1193 | + $this->assertContains($syntaxInvalidErrorMessage, $html); |
| 1194 | + $this->assertEquals(1, substr_count($html, $syntaxInvalidErrorMessage)); |
| 1195 | + } |
| 1196 | + |
1083 | 1197 | }
|
0 commit comments