@@ -135,6 +135,53 @@ public function testTypesYamlTest(): void
135135 }
136136 }
137137
138+ #[DataProvider('provideAlternativeTypeNotations ' )]
139+ public function testTypesStringWithAlternativeChars (string $ separator ): void
140+ {
141+ $ expectedTypes = ['pass-fail ' , 'interactive ' ];
142+ $ typesAsString = implode ($ separator , $ expectedTypes );
143+ $ specVersion = 'draft ' ;
144+ $ yaml = <<<YAML
145+ name: test
146+ problem_format_version: $ specVersion
147+ type: $ typesAsString
148+ YAML ;
149+
150+ $ messages = [];
151+ $ validationMode = 'xxx ' ;
152+ $ problem = new Problem ();
153+
154+ $ ret = ImportProblemService::parseYaml ($ yaml , $ messages , $ validationMode , PropertyAccess::createPropertyAccessor (), $ problem );
155+ $ messageString = var_export ($ messages , true );
156+ $ this ->assertTrue ($ ret , 'Parsing failed for type: ' . $ typesAsString . ', messages: ' . $ messageString );
157+ $ problemTypes = $ problem ->getTypesAsStringArray ();
158+ $ this ->assertEquals (
159+ $ expectedTypes , $ problemTypes ,
160+ 'Found: " ' . implode (' ' , $ problemTypes ) . '" vs Expected: " ' . implode (' ' , $ expectedTypes ) . '" '
161+ );
162+ }
163+
164+ /**
165+ * @param string[] $expectedTypes
166+ */
167+ #[DataProvider('provideAlternativeArrayNotations ' )]
168+ public function testTypesSequenceStrings (string $ yaml , array $ expectedTypes ): void
169+ {
170+ $ messages = [];
171+ $ validationMode = 'xxx ' ;
172+ $ problem = new Problem ();
173+ $ typesAsString = implode (', ' , $ expectedTypes );
174+
175+ $ ret = ImportProblemService::parseYaml ($ yaml , $ messages , $ validationMode , PropertyAccess::createPropertyAccessor (), $ problem );
176+ $ messageString = var_export ($ messages , true );
177+ $ this ->assertTrue ($ ret , 'Parsing failed for type: ' . $ typesAsString . ', messages: ' . $ messageString );
178+ $ problemTypes = $ problem ->getTypesAsStringArray ();
179+ $ this ->assertEquals (
180+ $ expectedTypes , $ problemTypes ,
181+ 'Found: " ' . implode (' ' , $ problemTypes ) . '" vs Expected: " ' . implode (' ' , $ expectedTypes ) . '" '
182+ );
183+ }
184+
138185 public function testUnknownProblemType (): void
139186 {
140187 $ yaml = <<<YAML
@@ -796,4 +843,51 @@ public static function problemSpecVersionProvider(): Generator
796843 yield ['icpc-legacy ' ];
797844 yield ['2025-09 ' ];
798845 }
846+
847+
848+ public static function provideAlternativeTypeNotations (): Generator
849+ {
850+ yield ["\t" ];
851+ yield [", " ];
852+ yield ["; " ];
853+ }
854+
855+ public static function provideAlternativeArrayNotations (): Generator
856+ {
857+ $ specVersion = 'draft ' ;
858+ $ yamlBasic = <<<YAML
859+ name: test
860+ problem_format_version: $ specVersion
861+ YAML ;
862+ $ simpleArray = <<<YAML
863+ $ yamlBasic
864+ type:
865+ - pass-fail
866+ YAML ;
867+ $ mappedArray = <<<YAML
868+ $ yamlBasic
869+ type:
870+ pass-fail: pass-fail
871+ YAML ;
872+ $ oneLineArray = <<<YAML
873+ $ yamlBasic
874+ type: [pass-fail]
875+ YAML ;
876+ $ malformedArray = <<<YAML
877+ $ yamlBasic
878+ type: [pass-fail, [multi-pass, interactive]]
879+ YAML ;
880+ $ combinedStringArray = <<<YAML
881+ $ yamlBasic
882+ type:
883+ - pass-fail
884+ - multi-pass, interactive
885+ YAML ;
886+
887+ foreach ([$ simpleArray , $ mappedArray , $ oneLineArray ] as $ yamlFile ) {
888+ yield [$ yamlFile , ['pass-fail ' ]];
889+ }
890+ yield [$ malformedArray , ['pass-fail ' , 'multi-pass ' , 'interactive ' ]];
891+ yield [$ combinedStringArray , ['pass-fail ' , 'multi-pass ' , 'interactive ' ]];
892+ }
799893}
0 commit comments