@@ -46,7 +46,7 @@ public function empty_is_valid(): void
4646 }
4747
4848 /**
49- * @dataProvider provideValid_value_constraintsCases
49+ * @dataProvider provideValid_value_constraintsCasesLegacy
5050 *
5151 * @test
5252 */
@@ -59,14 +59,39 @@ public function valid_value_constraints(string $value, PasswordRequirements $con
5959 $ this ->assertNoViolation ();
6060 }
6161
62+ /**
63+ * @return iterable<int, array{0: string, 1: PasswordRequirements}>
64+ */
65+ public static function provideValid_value_constraintsCasesLegacy (): iterable
66+ {
67+ return [
68+ ['test ' , new PasswordRequirements (['minLength ' => 3 ])],
69+ ['1234567 ' , new PasswordRequirements (['requireLetters ' => false ])],
70+ ['1234567 ' , new PasswordRequirements (['requireLetters ' => false ])],
71+ ['aBcDez ' , new PasswordRequirements (['requireCaseDiff ' => true ])],
72+ ['abcdef ' , new PasswordRequirements (['requireNumbers ' => false ])],
73+ ['123456 ' , new PasswordRequirements (['requireLetters ' => false , 'requireNumbers ' => true ])],
74+ ['123456789 ' , new PasswordRequirements (['requireLetters ' => false , 'requireNumbers ' => true ])],
75+ ['abcd12345 ' , new PasswordRequirements (['requireLetters ' => true , 'requireNumbers ' => true ])],
76+ ['1234abc56789 ' , new PasswordRequirements (['requireLetters ' => true , 'requireNumbers ' => true ])],
77+
78+ ['® ' , new PasswordRequirements (['minLength ' => 1 , 'requireLetters ' => false , 'requireSpecialCharacter ' => true ])],
79+ ['» ' , new PasswordRequirements (['minLength ' => 1 , 'requireLetters ' => false , 'requireSpecialCharacter ' => true ])],
80+ ['<> ' , new PasswordRequirements (['minLength ' => 1 , 'requireLetters ' => false , 'requireSpecialCharacter ' => true ])],
81+ ['{} ' , new PasswordRequirements (['minLength ' => 1 , 'requireLetters ' => false , 'requireSpecialCharacter ' => true ])],
82+ ];
83+ }
84+
6285 /**
6386 * @dataProvider provideViolation_value_constraintsCases
6487 *
6588 * @test
6689 *
90+ * @group legacy
91+ *
6792 * @param array<int, array{0: string, 1: PasswordRequirements, 2: array<array-key, mixed>}> $violations
6893 */
69- public function violation_value_constraints (string $ value , PasswordRequirements $ constraint , array $ violations = []): void
94+ public function violation_value_constraints_legacy (string $ value , PasswordRequirements $ constraint , array $ violations = []): void
7095 {
7196 $ this ->value = $ value ;
7297 /** @var ConstraintViolationAssertion $constraintViolationAssertion */
@@ -97,26 +122,40 @@ public function violation_value_constraints(string $value, PasswordRequirements
97122 }
98123
99124 /**
100- * @return iterable<int, array{0: string, 1: PasswordRequirements}>
125+ * @dataProvider provideViolation_value_constraintsCases
126+ *
127+ * @test
128+ *
129+ * @param array<int, array{0: string, 1: PasswordRequirements, 2: array<array-key, mixed>}> $violations
101130 */
102- public static function provideValid_value_constraintsCases ( ): iterable
131+ public function violation_value_constraints ( string $ value , PasswordRequirements $ constraint , array $ violations = [] ): void
103132 {
104- return [
105- ['test ' , new PasswordRequirements (['minLength ' => 3 ])],
106- ['1234567 ' , new PasswordRequirements (['requireLetters ' => false ])],
107- ['1234567 ' , new PasswordRequirements (['requireLetters ' => false ])],
108- ['aBcDez ' , new PasswordRequirements (['requireCaseDiff ' => true ])],
109- ['abcdef ' , new PasswordRequirements (['requireNumbers ' => false ])],
110- ['123456 ' , new PasswordRequirements (['requireLetters ' => false , 'requireNumbers ' => true ])],
111- ['123456789 ' , new PasswordRequirements (['requireLetters ' => false , 'requireNumbers ' => true ])],
112- ['abcd12345 ' , new PasswordRequirements (['requireLetters ' => true , 'requireNumbers ' => true ])],
113- ['1234abc56789 ' , new PasswordRequirements (['requireLetters ' => true , 'requireNumbers ' => true ])],
133+ $ this ->value = $ value ;
134+ /** @var ConstraintViolationAssertion $constraintViolationAssertion */
135+ $ constraintViolationAssertion = null ; // Shut-up PHPStan
114136
115- ['® ' , new PasswordRequirements (['minLength ' => 1 , 'requireLetters ' => false , 'requireSpecialCharacter ' => true ])],
116- ['» ' , new PasswordRequirements (['minLength ' => 1 , 'requireLetters ' => false , 'requireSpecialCharacter ' => true ])],
117- ['<> ' , new PasswordRequirements (['minLength ' => 1 , 'requireLetters ' => false , 'requireSpecialCharacter ' => true ])],
118- ['{} ' , new PasswordRequirements (['minLength ' => 1 , 'requireLetters ' => false , 'requireSpecialCharacter ' => true ])],
119- ];
137+ $ this ->validator ->validate ($ value , $ constraint );
138+
139+ /**
140+ * @var array<int, mixed> $violation
141+ */
142+ foreach ($ violations as $ i => $ violation ) {
143+ if ($ i === 0 ) {
144+ $ constraintViolationAssertion = $ this ->buildViolation ($ violation [0 ])
145+ ->setParameters ($ violation [1 ] ?? [])
146+ ->setInvalidValue ($ value )
147+ ;
148+ } else {
149+ $ constraintViolationAssertion = $ constraintViolationAssertion ->buildNextViolation ($ violation [0 ])
150+ ->setParameters ($ violation [1 ] ?? [])
151+ ->setInvalidValue ($ value )
152+ ;
153+ }
154+
155+ if ($ i == \count ($ violations ) - 1 ) {
156+ $ constraintViolationAssertion ->assertRaised ();
157+ }
158+ }
120159 }
121160
122161 /**
@@ -127,25 +166,48 @@ public static function provideViolation_value_constraintsCases(): iterable
127166 $ constraint = new PasswordRequirements ();
128167
129168 return [
130- ['1 ' , new PasswordRequirements ([ ' minLength ' => 2 , ' requireLetters ' => false ] ), [
169+ ['1 ' , new PasswordRequirements (minLength: 2 , requireLetters: false ), [
131170 [$ constraint ->tooShortMessage , ['{{length}} ' => 2 ]],
132171 ]],
133- ['test ' , new PasswordRequirements ([ ' requireLetters ' => true ] ), [
172+ ['test ' , new PasswordRequirements (requireLetters: true ), [
134173 [$ constraint ->tooShortMessage , ['{{length}} ' => $ constraint ->minLength ]],
135174 ]],
136- ['123456 ' , new PasswordRequirements ([ ' requireLetters ' => true ] ), [
175+ ['123456 ' , new PasswordRequirements (requireLetters: true ), [
137176 [$ constraint ->missingLettersMessage ],
138177 ]],
139- ['abcdez ' , new PasswordRequirements ([ ' requireCaseDiff ' => true ] ), [
178+ ['abcdez ' , new PasswordRequirements (requireCaseDiff: true ), [
140179 [$ constraint ->requireCaseDiffMessage ],
141180 ]],
142- ['!@#$%^&*()- ' , new PasswordRequirements ([ ' requireLetters ' => true , ' requireNumbers ' => true ] ), [
181+ ['!@#$%^&*()- ' , new PasswordRequirements (requireLetters: true , requireNumbers: true ), [
143182 [$ constraint ->missingLettersMessage ],
144183 [$ constraint ->missingNumbersMessage ],
145184 ]],
146- ['aerfghy ' , new PasswordRequirements ([ ' requireLetters ' => false , ' requireSpecialCharacter ' => true ] ), [
185+ ['aerfghy ' , new PasswordRequirements (requireLetters: false , requireSpecialCharacter: true ), [
147186 [$ constraint ->missingSpecialCharacterMessage ],
148187 ]],
149188 ];
150189 }
190+
191+ /**
192+ * @return iterable<int, array{0: string, 1: PasswordRequirements}>
193+ */
194+ public static function provideValid_value_constraintsCases (): iterable
195+ {
196+ return [
197+ ['test ' , new PasswordRequirements (['minLength ' => 3 ])],
198+ ['1234567 ' , new PasswordRequirements (['requireLetters ' => false ])],
199+ ['1234567 ' , new PasswordRequirements (['requireLetters ' => false ])],
200+ ['aBcDez ' , new PasswordRequirements (['requireCaseDiff ' => true ])],
201+ ['abcdef ' , new PasswordRequirements (['requireNumbers ' => false ])],
202+ ['123456 ' , new PasswordRequirements (['requireLetters ' => false , 'requireNumbers ' => true ])],
203+ ['123456789 ' , new PasswordRequirements (['requireLetters ' => false , 'requireNumbers ' => true ])],
204+ ['abcd12345 ' , new PasswordRequirements (['requireLetters ' => true , 'requireNumbers ' => true ])],
205+ ['1234abc56789 ' , new PasswordRequirements (['requireLetters ' => true , 'requireNumbers ' => true ])],
206+
207+ ['® ' , new PasswordRequirements (['minLength ' => 1 , 'requireLetters ' => false , 'requireSpecialCharacter ' => true ])],
208+ ['» ' , new PasswordRequirements (['minLength ' => 1 , 'requireLetters ' => false , 'requireSpecialCharacter ' => true ])],
209+ ['<> ' , new PasswordRequirements (['minLength ' => 1 , 'requireLetters ' => false , 'requireSpecialCharacter ' => true ])],
210+ ['{} ' , new PasswordRequirements (['minLength ' => 1 , 'requireLetters ' => false , 'requireSpecialCharacter ' => true ])],
211+ ];
212+ }
151213}
0 commit comments