@@ -132,6 +132,53 @@ public function testTypesYamlTest(): void
132132 }
133133 }
134134
135+ #[DataProvider('provideAlternativeTypeNotations ' )]
136+ public function testTypesStringWithAlternativeChars (string $ separator ): void
137+ {
138+ $ expectedTypes = ['pass-fail ' , 'interactive ' ];
139+ $ typesAsString = implode ($ separator , $ expectedTypes );
140+ $ specVersion = 'draft ' ;
141+ $ yaml = <<<YAML
142+ name: test
143+ problem_format_version: $ specVersion
144+ type: $ typesAsString
145+ YAML ;
146+
147+ $ messages = [];
148+ $ validationMode = 'xxx ' ;
149+ $ problem = new Problem ();
150+
151+ $ ret = ImportProblemService::parseYaml ($ yaml , $ messages , $ validationMode , PropertyAccess::createPropertyAccessor (), $ problem );
152+ $ messageString = var_export ($ messages , true );
153+ $ this ->assertTrue ($ ret , 'Parsing failed for type: ' . $ typesAsString . ', messages: ' . $ messageString );
154+ $ problemTypes = $ problem ->getTypesAsStringArray ();
155+ $ this ->assertEquals (
156+ $ expectedTypes , $ problemTypes ,
157+ 'Found: " ' . implode (' ' , $ problemTypes ) . '" vs Expected: " ' . implode (' ' , $ expectedTypes ) . '" '
158+ );
159+ }
160+
161+ /**
162+ * @param string[] $expectedTypes
163+ */
164+ #[DataProvider('provideAlternativeArrayNotations ' )]
165+ public function testTypesSequenceStrings (string $ yaml , array $ expectedTypes ): void
166+ {
167+ $ messages = [];
168+ $ validationMode = 'xxx ' ;
169+ $ problem = new Problem ();
170+ $ typesAsString = implode (', ' , $ expectedTypes );
171+
172+ $ ret = ImportProblemService::parseYaml ($ yaml , $ messages , $ validationMode , PropertyAccess::createPropertyAccessor (), $ problem );
173+ $ messageString = var_export ($ messages , true );
174+ $ this ->assertTrue ($ ret , 'Parsing failed for type: ' . $ typesAsString . ', messages: ' . $ messageString );
175+ $ problemTypes = $ problem ->getTypesAsStringArray ();
176+ $ this ->assertEquals (
177+ $ expectedTypes , $ problemTypes ,
178+ 'Found: " ' . implode (' ' , $ problemTypes ) . '" vs Expected: " ' . implode (' ' , $ expectedTypes ) . '" '
179+ );
180+ }
181+
135182 public function testUnknownProblemType (): void
136183 {
137184 $ yaml = <<<YAML
@@ -684,4 +731,51 @@ public static function problemSpecVersionProvider(): Generator
684731 yield ['icpc-legacy ' ];
685732 yield ['2025-09 ' ];
686733 }
734+
735+
736+ public static function provideAlternativeTypeNotations (): Generator
737+ {
738+ yield ["\t" ];
739+ yield [", " ];
740+ yield ["; " ];
741+ }
742+
743+ public static function provideAlternativeArrayNotations (): Generator
744+ {
745+ $ specVersion = 'draft ' ;
746+ $ yamlBasic = <<<YAML
747+ name: test
748+ problem_format_version: $ specVersion
749+ YAML ;
750+ $ simpleArray = <<<YAML
751+ $ yamlBasic
752+ type:
753+ - pass-fail
754+ YAML ;
755+ $ mappedArray = <<<YAML
756+ $ yamlBasic
757+ type:
758+ pass-fail: pass-fail
759+ YAML ;
760+ $ oneLineArray = <<<YAML
761+ $ yamlBasic
762+ type: [pass-fail]
763+ YAML ;
764+ $ malformedArray = <<<YAML
765+ $ yamlBasic
766+ type: [pass-fail, [multi-pass, interactive]]
767+ YAML ;
768+ $ combinedStringArray = <<<YAML
769+ $ yamlBasic
770+ type:
771+ - pass-fail
772+ - multi-pass, interactive
773+ YAML ;
774+
775+ foreach ([$ simpleArray , $ mappedArray , $ oneLineArray ] as $ yamlFile ) {
776+ yield [$ yamlFile , ['pass-fail ' ]];
777+ }
778+ yield [$ malformedArray , ['pass-fail ' , 'multi-pass ' , 'interactive ' ]];
779+ yield [$ combinedStringArray , ['pass-fail ' , 'multi-pass ' , 'interactive ' ]];
780+ }
687781}
0 commit comments