@@ -133,6 +133,53 @@ public function testTypesYamlTest(): void
133133 }
134134 }
135135
136+ #[DataProvider('provideAlternativeTypeNotations ' )]
137+ public function testTypesStringWithAlternativeChars (string $ separator ): void
138+ {
139+ $ expectedTypes = ['pass-fail ' , 'interactive ' ];
140+ $ typesAsString = implode ($ separator , $ expectedTypes );
141+ $ specVersion = 'draft ' ;
142+ $ yaml = <<<YAML
143+ name: test
144+ problem_format_version: $ specVersion
145+ type: $ typesAsString
146+ YAML ;
147+
148+ $ messages = [];
149+ $ validationMode = 'xxx ' ;
150+ $ problem = new Problem ();
151+
152+ $ ret = ImportProblemService::parseYaml ($ yaml , $ messages , $ validationMode , PropertyAccess::createPropertyAccessor (), $ problem );
153+ $ messageString = var_export ($ messages , true );
154+ $ this ->assertTrue ($ ret , 'Parsing failed for type: ' . $ typesAsString . ', messages: ' . $ messageString );
155+ $ problemTypes = $ problem ->getTypesAsStringArray ();
156+ $ this ->assertEquals (
157+ $ expectedTypes , $ problemTypes ,
158+ 'Found: " ' . implode (' ' , $ problemTypes ) . '" vs Expected: " ' . implode (' ' , $ expectedTypes ) . '" '
159+ );
160+ }
161+
162+ /**
163+ * @param string[] $expectedTypes
164+ */
165+ #[DataProvider('provideAlternativeArrayNotations ' )]
166+ public function testTypesSequenceStrings (string $ yaml , array $ expectedTypes ): void
167+ {
168+ $ messages = [];
169+ $ validationMode = 'xxx ' ;
170+ $ problem = new Problem ();
171+ $ typesAsString = implode (', ' , $ expectedTypes );
172+
173+ $ ret = ImportProblemService::parseYaml ($ yaml , $ messages , $ validationMode , PropertyAccess::createPropertyAccessor (), $ problem );
174+ $ messageString = var_export ($ messages , true );
175+ $ this ->assertTrue ($ ret , 'Parsing failed for type: ' . $ typesAsString . ', messages: ' . $ messageString );
176+ $ problemTypes = $ problem ->getTypesAsStringArray ();
177+ $ this ->assertEquals (
178+ $ expectedTypes , $ problemTypes ,
179+ 'Found: " ' . implode (' ' , $ problemTypes ) . '" vs Expected: " ' . implode (' ' , $ expectedTypes ) . '" '
180+ );
181+ }
182+
136183 public function testUnknownProblemType (): void
137184 {
138185 $ yaml = <<<YAML
@@ -721,4 +768,51 @@ public static function problemSpecVersionProvider(): Generator
721768 yield ['icpc-legacy ' ];
722769 yield ['2025-09 ' ];
723770 }
771+
772+
773+ public static function provideAlternativeTypeNotations (): Generator
774+ {
775+ yield ["\t" ];
776+ yield [", " ];
777+ yield ["; " ];
778+ }
779+
780+ public static function provideAlternativeArrayNotations (): Generator
781+ {
782+ $ specVersion = 'draft ' ;
783+ $ yamlBasic = <<<YAML
784+ name: test
785+ problem_format_version: $ specVersion
786+ YAML ;
787+ $ simpleArray = <<<YAML
788+ $ yamlBasic
789+ type:
790+ - pass-fail
791+ YAML ;
792+ $ mappedArray = <<<YAML
793+ $ yamlBasic
794+ type:
795+ pass-fail: pass-fail
796+ YAML ;
797+ $ oneLineArray = <<<YAML
798+ $ yamlBasic
799+ type: [pass-fail]
800+ YAML ;
801+ $ malformedArray = <<<YAML
802+ $ yamlBasic
803+ type: [pass-fail, [multi-pass, interactive]]
804+ YAML ;
805+ $ combinedStringArray = <<<YAML
806+ $ yamlBasic
807+ type:
808+ - pass-fail
809+ - multi-pass, interactive
810+ YAML ;
811+
812+ foreach ([$ simpleArray , $ mappedArray , $ oneLineArray ] as $ yamlFile ) {
813+ yield [$ yamlFile , ['pass-fail ' ]];
814+ }
815+ yield [$ malformedArray , ['pass-fail ' , 'multi-pass ' , 'interactive ' ]];
816+ yield [$ combinedStringArray , ['pass-fail ' , 'multi-pass ' , 'interactive ' ]];
817+ }
724818}
0 commit comments