@@ -19,7 +19,8 @@ class EnumMapTest extends TestCase
19
19
public function testBasic ()
20
20
{
21
21
$ enumMap = new EnumMap ('MabeEnumTest\TestAsset\EnumWithoutDefaultValue ' );
22
-
22
+ $ this ->assertSame ('MabeEnumTest\TestAsset\EnumWithoutDefaultValue ' , $ enumMap ->getEnumClass ());
23
+
23
24
$ enum1 = EnumWithoutDefaultValue::ONE ();
24
25
$ value1 = 'value2 ' ;
25
26
@@ -113,4 +114,92 @@ public function testIterate()
113
114
$ this ->assertSame (0 , $ enumMap ->key ());
114
115
$ this ->assertSame ($ enum1 , $ enumMap ->current ());
115
116
}
117
+
118
+ public function testIterateWithFlags ()
119
+ {
120
+ $ enumMap = new EnumMap (
121
+ 'MabeEnumTest\TestAsset\EnumWithoutDefaultValue ' ,
122
+ EnumMap::KEY_AS_INDEX | EnumMap::CURRENT_AS_ENUM
123
+ );
124
+
125
+ $ enumMap ->attach (EnumWithoutDefaultValue::TWO (), 'first ' );
126
+ $ enumMap ->attach (EnumWithoutDefaultValue::ONE (), 'second ' );
127
+
128
+ // EnumMap::KEY_AS_INDEX | EnumMap::CURRENT_AS_ENUM (first)
129
+ $ this ->assertSame (EnumMap::KEY_AS_INDEX | EnumMap::CURRENT_AS_ENUM , $ enumMap ->getFlags ());
130
+
131
+ $ enumMap ->rewind ();
132
+ $ this ->assertSame (0 , $ enumMap ->key ());
133
+ $ this ->assertSame (EnumWithoutDefaultValue::TWO (), $ enumMap ->current ());
134
+
135
+ $ enumMap ->next ();
136
+ $ this ->assertSame (1 , $ enumMap ->key ());
137
+ $ this ->assertSame (EnumWithoutDefaultValue::ONE (), $ enumMap ->current ());
138
+
139
+ // EnumMap::KEY_AS_NAME | EnumMap::CURRENT_AS_DATA
140
+ $ enumMap ->setFlags (EnumMap::KEY_AS_NAME | EnumMap::CURRENT_AS_DATA );
141
+ $ this ->assertSame (EnumMap::KEY_AS_NAME | EnumMap::CURRENT_AS_DATA , $ enumMap ->getFlags ());
142
+
143
+ $ enumMap ->rewind ();
144
+ $ this ->assertSame ('TWO ' , $ enumMap ->key ());
145
+ $ this ->assertSame ('first ' , $ enumMap ->current ());
146
+
147
+ $ enumMap ->next ();
148
+ $ this ->assertSame ('ONE ' , $ enumMap ->key ());
149
+ $ this ->assertSame ('second ' , $ enumMap ->current ());
150
+
151
+ // EnumMap::KEY_AS_VALUE | EnumMap::CURRENT_AS_ORDINAL
152
+ $ enumMap ->setFlags (EnumMap::KEY_AS_VALUE | EnumMap::CURRENT_AS_ORDINAL );
153
+ $ this ->assertSame (EnumMap::KEY_AS_VALUE | EnumMap::CURRENT_AS_ORDINAL , $ enumMap ->getFlags ());
154
+
155
+ $ enumMap ->rewind ();
156
+ $ this ->assertSame (2 , $ enumMap ->key ());
157
+ $ this ->assertSame (1 , $ enumMap ->current ());
158
+
159
+ $ enumMap ->next ();
160
+ $ this ->assertSame (1 , $ enumMap ->key ());
161
+ $ this ->assertSame (0 , $ enumMap ->current ());
162
+
163
+ // EnumMap::KEY_AS_ORDINAL | EnumMap::CURRENT_AS_VALUE
164
+ $ enumMap ->setFlags (EnumMap::KEY_AS_ORDINAL | EnumMap::CURRENT_AS_VALUE );
165
+ $ this ->assertSame (EnumMap::KEY_AS_ORDINAL | EnumMap::CURRENT_AS_VALUE , $ enumMap ->getFlags ());
166
+
167
+ $ enumMap ->rewind ();
168
+ $ this ->assertSame (1 , $ enumMap ->key ());
169
+ $ this ->assertSame (2 , $ enumMap ->current ());
170
+
171
+ $ enumMap ->next ();
172
+ $ this ->assertSame (0 , $ enumMap ->key ());
173
+ $ this ->assertSame (1 , $ enumMap ->current ());
174
+
175
+ // only change current flag to EnumMap::CURRENT_AS_NAME
176
+ $ enumMap ->setFlags (EnumMap::CURRENT_AS_NAME );
177
+ $ this ->assertSame (EnumMap::KEY_AS_ORDINAL | EnumMap::CURRENT_AS_NAME , $ enumMap ->getFlags ());
178
+
179
+ $ enumMap ->rewind ();
180
+ $ this ->assertSame (1 , $ enumMap ->key ());
181
+ $ this ->assertSame ('TWO ' , $ enumMap ->current ());
182
+
183
+ $ enumMap ->next ();
184
+ $ this ->assertSame (0 , $ enumMap ->key ());
185
+ $ this ->assertSame ('ONE ' , $ enumMap ->current ());
186
+
187
+ // only change key flag to EnumMap::NAME_AS_NAME
188
+ $ enumMap ->setFlags (EnumMap::KEY_AS_NAME );
189
+ $ this ->assertSame (EnumMap::KEY_AS_NAME | EnumMap::CURRENT_AS_NAME , $ enumMap ->getFlags ());
190
+
191
+ $ enumMap ->rewind ();
192
+ $ this ->assertSame ('TWO ' , $ enumMap ->key ());
193
+ $ this ->assertSame ('TWO ' , $ enumMap ->current ());
194
+
195
+ $ enumMap ->next ();
196
+ $ this ->assertSame ('ONE ' , $ enumMap ->key ());
197
+ $ this ->assertSame ('ONE ' , $ enumMap ->current ());
198
+ }
199
+
200
+ public function testConstructThrowsInvalidArgumentExceptionIfEnumClassDoesNotExtendBaseEnum ()
201
+ {
202
+ $ this ->setExpectedException ('InvalidArgumentException ' );
203
+ new EnumMap ('stdClass ' );
204
+ }
116
205
}
0 commit comments