8
8
use Symfony \Component \Form \Guess \Guess ;
9
9
use Symfony \Component \Form \Guess \TypeGuess ;
10
10
use Symfony \Component \Form \Test \TypeTestCase ;
11
+ use Symfony \Component \Validator \Constraints \Compound ;
11
12
use Symfony \Component \Validator \Mapping \ClassMetadata ;
12
13
use Symfony \Component \Validator \Mapping \Factory \MetadataFactoryInterface ;
13
14
use Yokai \EnumBundle \EnumRegistry ;
@@ -26,7 +27,8 @@ class EnumTypeGuesserTest extends TypeTestCase
26
27
27
28
const TEST_CLASS = EnumTypeGuesserTest_TestClass::class;
28
29
29
- const TEST_PROPERTY = 'property ' ;
30
+ const TEST_PROPERTY_DIRECT = 'direct ' ;
31
+ const TEST_PROPERTY_COMPOUND = 'compound ' ;
30
32
31
33
/**
32
34
* @var EnumTypeGuesser
@@ -56,7 +58,15 @@ protected function setUp(): void
56
58
$ this ->enumRegistry ->get (GenderEnum::class)->willReturn (new GenderEnum );
57
59
58
60
$ this ->metadata = new ClassMetadata (self ::TEST_CLASS );
59
- $ this ->metadata ->addPropertyConstraint (self ::TEST_PROPERTY , new Enum (['enum ' => GenderEnum::class]));
61
+ $ this ->metadata ->addPropertyConstraint (self ::TEST_PROPERTY_DIRECT , new Enum (['enum ' => GenderEnum::class]));
62
+ if (class_exists (Compound::class)) {
63
+ $ this ->metadata ->addPropertyConstraint (self ::TEST_PROPERTY_COMPOUND , new class extends Compound {
64
+ protected function getConstraints (array $ options ): array
65
+ {
66
+ return [new Enum (['enum ' => GenderEnum::class])];
67
+ }
68
+ });
69
+ }
60
70
$ this ->metadataFactory = $ this ->prophesize (MetadataFactoryInterface::class);
61
71
$ this ->metadataFactory ->getMetadataFor (self ::TEST_CLASS )
62
72
->willReturn ($ this ->metadata );
@@ -66,7 +76,7 @@ protected function setUp(): void
66
76
parent ::setUp ();
67
77
}
68
78
69
- public function testGuessType (): void
79
+ public function testGuessTypeDirect (): void
70
80
{
71
81
$ guess = new TypeGuess (
72
82
EnumType::class,
@@ -77,33 +87,51 @@ public function testGuessType(): void
77
87
Guess::HIGH_CONFIDENCE
78
88
);
79
89
80
- $ this ->assertEquals ($ guess , $ this ->guesser ->guessType (self ::TEST_CLASS , self ::TEST_PROPERTY ));
90
+ $ this ->assertEquals ($ guess , $ this ->guesser ->guessType (self ::TEST_CLASS , self ::TEST_PROPERTY_DIRECT ));
91
+ }
92
+
93
+ public function testGuessTypeCompound (): void
94
+ {
95
+ if (!class_exists (Compound::class)) {
96
+ $ this ->markTestSkipped ();
97
+ }
98
+
99
+ $ guess = new TypeGuess (
100
+ EnumType::class,
101
+ [
102
+ 'enum ' => GenderEnum::class,
103
+ 'multiple ' => false ,
104
+ ],
105
+ Guess::HIGH_CONFIDENCE
106
+ );
107
+
108
+ $ this ->assertEquals ($ guess , $ this ->guesser ->guessType (self ::TEST_CLASS , self ::TEST_PROPERTY_COMPOUND ));
81
109
}
82
110
83
111
public function testGuessRequired (): void
84
112
{
85
- $ this ->assertNull ($ this ->guesser ->guessRequired (self ::TEST_CLASS , self ::TEST_PROPERTY ));
113
+ $ this ->assertNull ($ this ->guesser ->guessRequired (self ::TEST_CLASS , self ::TEST_PROPERTY_DIRECT ));
86
114
}
87
115
88
116
public function testGuessMaxLength (): void
89
117
{
90
- $ this ->assertNull ($ this ->guesser ->guessMaxLength (self ::TEST_CLASS , self ::TEST_PROPERTY ));
118
+ $ this ->assertNull ($ this ->guesser ->guessMaxLength (self ::TEST_CLASS , self ::TEST_PROPERTY_DIRECT ));
91
119
}
92
120
93
121
public function testGuessPattern (): void
94
122
{
95
- $ this ->assertNull ($ this ->guesser ->guessPattern (self ::TEST_CLASS , self ::TEST_PROPERTY ));
123
+ $ this ->assertNull ($ this ->guesser ->guessPattern (self ::TEST_CLASS , self ::TEST_PROPERTY_DIRECT ));
96
124
}
97
125
98
126
public function testCreateForm (): void
99
127
{
100
128
$ class = self ::TEST_CLASS ;
101
129
$ form = $ this ->factory ->create (FormType::class, new $ class , ['data_class ' => $ class ])
102
- ->add (self ::TEST_PROPERTY );
130
+ ->add (self ::TEST_PROPERTY_DIRECT );
103
131
104
132
$ this ->assertEquals (
105
133
['Male ' => 'male ' , 'Female ' => 'female ' ],
106
- $ form ->get (self ::TEST_PROPERTY )->getConfig ()->getOption ('choices ' )
134
+ $ form ->get (self ::TEST_PROPERTY_DIRECT )->getConfig ()->getOption ('choices ' )
107
135
);
108
136
}
109
137
@@ -117,5 +145,6 @@ protected function getExtensions(): array
117
145
118
146
class EnumTypeGuesserTest_TestClass
119
147
{
120
- public $ property ;
148
+ public $ direct ;
149
+ public $ compound ;
121
150
}
0 commit comments