@@ -342,7 +342,61 @@ public void testRegularExpressionOpenAPISchemaVersion3() {
342342 // added to test fix for issue #6675
343343 // removed because "/^[\\pattern\\d{3}$/i" is invalid regex because [ is not escaped and there is no closing ]
344344 // Assert.assertEquals(op.allParams.get(6).pattern, "/^[\\pattern\\d{3}$/i");
345+ // alternation_with_forward_slash '/ax$|/bx$'
346+ Assert .assertEquals (op .allParams .get (7 ).pattern , "/\\ /ax$|\\ /bx$/" );
347+ Assert .assertEquals (op .allParams .get (7 ).vendorExtensions .get ("x-regex" ), "\\ /ax$|\\ /bx$" );
348+ Assert .assertEquals (op .allParams .get (7 ).vendorExtensions .get ("x-modifiers" ), Collections .emptyList ());
349+ }
350+
351+ @ Test (description = "test regex patterns starting with forward slash (e.g. URL paths)" )
352+ public void testRegularExpressionStartingWithSlash () {
353+ final PythonClientCodegen codegen = new PythonClientCodegen ();
345354
355+ Schema <?> singleSlashSchema = new StringSchema ().pattern ("/v1" );
356+ CodegenProperty singleSlash = codegen .fromProperty ("single_slash" , singleSlashSchema , false );
357+ codegen .postProcessModelProperty (null , singleSlash );
358+ Assert .assertEquals (singleSlash .pattern , "/\\ /v1/" );
359+ Assert .assertEquals (singleSlash .vendorExtensions .get ("x-regex" ), "\\ /v1" );
360+ Assert .assertEquals (singleSlash .vendorExtensions .get ("x-modifiers" ), Collections .emptyList ());
361+
362+ Schema <?> pathSchema = new StringSchema ().pattern ("/health_question_definition/[0-9]+" );
363+ CodegenProperty pathProp = codegen .fromProperty ("path_pattern" , pathSchema , false );
364+ codegen .postProcessModelProperty (null , pathProp );
365+ Assert .assertEquals (pathProp .pattern , "/\\ /health_question_definition\\ /[0-9]+/" );
366+ Assert .assertEquals (pathProp .vendorExtensions .get ("x-regex" ), "\\ /health_question_definition\\ /[0-9]+" );
367+ Assert .assertEquals (pathProp .vendorExtensions .get ("x-modifiers" ), Collections .emptyList ());
368+
369+ Schema <?> multiSlashWithModifierLetters = new StringSchema ().pattern ("/api/v1/users" );
370+ CodegenProperty multiSlashPath = codegen .fromProperty ("multi_slash_path" , multiSlashWithModifierLetters , false );
371+ codegen .postProcessModelProperty (null , multiSlashPath );
372+ Assert .assertEquals (multiSlashPath .pattern , "/\\ /api\\ /v1\\ /users/" );
373+ Assert .assertEquals (multiSlashPath .vendorExtensions .get ("x-regex" ), "\\ /api\\ /v1\\ /users" );
374+ Assert .assertEquals (multiSlashPath .vendorExtensions .get ("x-modifiers" ), Collections .emptyList ());
375+
376+ Schema <?> perlModifierSchema = new StringSchema ().pattern ("/^image_\\ d{1,3}$/i" );
377+ CodegenProperty perlModifierProp = codegen .fromProperty ("perl_modifier" , perlModifierSchema , false );
378+ codegen .postProcessModelProperty (null , perlModifierProp );
379+ Assert .assertEquals (perlModifierProp .pattern , "/^image_\\ d{1,3}$/i" );
380+ Assert .assertEquals (perlModifierProp .vendorExtensions .get ("x-regex" ), "^image_\\ d{1,3}$" );
381+ Assert .assertEquals (perlModifierProp .vendorExtensions .get ("x-modifiers" ), Collections .singletonList ("IGNORECASE" ));
382+
383+ Schema <?> perlGlobalSchema = new StringSchema ().pattern ("/[0-9]{10}/g" );
384+ CodegenProperty perlGlobalProp = codegen .fromProperty ("perl_global" , perlGlobalSchema , false );
385+ codegen .postProcessModelProperty (null , perlGlobalProp );
386+ Assert .assertEquals (perlGlobalProp .pattern , "/[0-9]{10}/g" );
387+ Assert .assertEquals (perlGlobalProp .vendorExtensions .get ("x-regex" ), "[0-9]{10}" );
388+ Assert .assertEquals (perlGlobalProp .vendorExtensions .get ("x-modifiers" ), Collections .emptyList ());
389+
390+ Schema <?> escapedBackslashBeforeSlashSchema = new StringSchema ().pattern ("a\\ \\ /b" );
391+ CodegenProperty escapedBackslashProp = codegen .fromProperty ("escaped_backslash" , escapedBackslashBeforeSlashSchema , false );
392+ codegen .postProcessModelProperty (null , escapedBackslashProp );
393+ Assert .assertEquals (escapedBackslashProp .pattern , "/a\\ \\ \\ /b/" );
394+ Assert .assertEquals (escapedBackslashProp .vendorExtensions .get ("x-regex" ), "a\\ \\ \\ /b" );
395+ Assert .assertEquals (escapedBackslashProp .vendorExtensions .get ("x-modifiers" ), Collections .emptyList ());
396+
397+ Assert .assertEquals (codegen .patternCorrection ("/health_question_definition/[0-9]+" ), "/health_question_definition/[0-9]+" );
398+ Assert .assertEquals (codegen .patternCorrection ("/api/v1/" ), "/api/v1/" );
399+ Assert .assertEquals (codegen .patternCorrection ("/^image_\\ d{1,3}$/i" ), "^image_\\ d{1,3}$" );
346400 }
347401
348402
0 commit comments