Skip to content

Commit 4d068c9

Browse files
author
Christian Achatz
committed
ID#347: added unit tests for validation listener tags.
1 parent 689cad4 commit 4d068c9

File tree

2 files changed

+115
-3
lines changed

2 files changed

+115
-3
lines changed

tests/suites/tools/form/taglib/HtmlFormTagTest.php

Lines changed: 114 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,8 @@
4141

4242
class HtmlFormTagTest extends TestCase {
4343

44+
const LISTENER_ERROR_MESSAGE = 'Fields must be filled with 3 to 16 characters!';
45+
4446
/**
4547
* Tests form which is not sent.
4648
*/
@@ -1080,4 +1082,116 @@ public function testGetTagClass() {
10801082
$form->getTagClass('not-existing:tag');
10811083
}
10821084

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 &lt;form:error /&gt; 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+
10831197
}

tools/form/validator/EMailValidator.php

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -33,9 +33,7 @@
3333
class EMailValidator extends TextFieldValidator {
3434

3535
public function validate($input) {
36-
$validator = new EMailValidatorImpl();
37-
38-
return $validator->isValid($input);
36+
return (new EMailValidatorImpl())->isValid($input);
3937
}
4038

4139
}

0 commit comments

Comments
 (0)