From 5deb73a72b1b8998e677c2d3f2480e627782d54e Mon Sep 17 00:00:00 2001 From: Justin Black Date: Tue, 5 Dec 2023 22:11:19 -0800 Subject: [PATCH 1/5] Adds examples for date, date-time, number --- .../components/schemas/ComposedOneOfDifferentTypes.md | 2 +- .../java/docs/components/schemas/DateTimeTest.md | 2 +- .../docs/components/schemas/DateTimeWithValidations.md | 2 +- .../java/docs/components/schemas/DateWithValidations.md | 2 +- .../petstore/java/docs/components/schemas/FormatTest.md | 8 ++++---- .../MixedPropertiesAndAdditionalPropertiesClass.md | 4 ++-- .../petstore/java/docs/components/schemas/Money.md | 2 +- .../petstore/java/docs/components/schemas/MyObjectDto.md | 2 +- .../java/docs/components/schemas/NullableClass.md | 4 ++-- .../components/schemas/ObjectWithDecimalProperties.md | 6 +++--- .../petstore/java/docs/components/schemas/Order.md | 2 +- .../petstore/java/docs/components/schemas/UUIDString.md | 2 +- .../content/applicationxwwwformurlencoded/Schema.md | 6 +++--- .../codegen/generators/DefaultGenerator.java | 9 +++++++++ 14 files changed, 31 insertions(+), 22 deletions(-) diff --git a/samples/client/petstore/java/docs/components/schemas/ComposedOneOfDifferentTypes.md b/samples/client/petstore/java/docs/components/schemas/ComposedOneOfDifferentTypes.md index a8bbc13f586..2e551a37515 100644 --- a/samples/client/petstore/java/docs/components/schemas/ComposedOneOfDifferentTypes.md +++ b/samples/client/petstore/java/docs/components/schemas/ComposedOneOfDifferentTypes.md @@ -66,7 +66,7 @@ static final SchemaConfiguration configuration = new SchemaConfiguration(JsonSch // String validation String validatedPayload = ComposedOneOfDifferentTypes.Schema6.validate( - "a", + "1970-01-01T00:00:00.00Z", configuration ); ``` diff --git a/samples/client/petstore/java/docs/components/schemas/DateTimeTest.md b/samples/client/petstore/java/docs/components/schemas/DateTimeTest.md index 3172f15a9a3..9bd059e4c11 100644 --- a/samples/client/petstore/java/docs/components/schemas/DateTimeTest.md +++ b/samples/client/petstore/java/docs/components/schemas/DateTimeTest.md @@ -32,7 +32,7 @@ static final SchemaConfiguration configuration = new SchemaConfiguration(JsonSch // String validation String validatedPayload = DateTimeTest.DateTimeTest1.validate( - "a", + "1970-01-01T00:00:00.00Z", configuration ); ``` diff --git a/samples/client/petstore/java/docs/components/schemas/DateTimeWithValidations.md b/samples/client/petstore/java/docs/components/schemas/DateTimeWithValidations.md index 6cac29cd870..445ba7f0f77 100644 --- a/samples/client/petstore/java/docs/components/schemas/DateTimeWithValidations.md +++ b/samples/client/petstore/java/docs/components/schemas/DateTimeWithValidations.md @@ -32,7 +32,7 @@ static final SchemaConfiguration configuration = new SchemaConfiguration(JsonSch // String validation String validatedPayload = DateTimeWithValidations.DateTimeWithValidations1.validate( - "a", + "1970-01-01T00:00:00.00Z", configuration ); ``` diff --git a/samples/client/petstore/java/docs/components/schemas/DateWithValidations.md b/samples/client/petstore/java/docs/components/schemas/DateWithValidations.md index bbfc50e149c..7133efb5e79 100644 --- a/samples/client/petstore/java/docs/components/schemas/DateWithValidations.md +++ b/samples/client/petstore/java/docs/components/schemas/DateWithValidations.md @@ -32,7 +32,7 @@ static final SchemaConfiguration configuration = new SchemaConfiguration(JsonSch // String validation String validatedPayload = DateWithValidations.DateWithValidations1.validate( - "a", + "2020-12-13", configuration ); ``` diff --git a/samples/client/petstore/java/docs/components/schemas/FormatTest.md b/samples/client/petstore/java/docs/components/schemas/FormatTest.md index 1d32ebc2582..4be742def09 100644 --- a/samples/client/petstore/java/docs/components/schemas/FormatTest.md +++ b/samples/client/petstore/java/docs/components/schemas/FormatTest.md @@ -64,7 +64,7 @@ FormatTest.FormatTestMap validatedPayload = ), new AbstractMap.SimpleEntry<>( "date", - "a" + "2020-12-13" ), new AbstractMap.SimpleEntry<>( "number", @@ -122,15 +122,15 @@ FormatTest.FormatTestMap validatedPayload = ), new AbstractMap.SimpleEntry<>( "dateTime", - "a" + "1970-01-01T00:00:00.00Z" ), new AbstractMap.SimpleEntry<>( "uuid", - "a" + "046b6c7f-0b8a-43b9-b35d-6489e6daee91" ), new AbstractMap.SimpleEntry<>( "uuidNoExample", - "a" + "046b6c7f-0b8a-43b9-b35d-6489e6daee91" ), new AbstractMap.SimpleEntry<>( "pattern_with_digits", diff --git a/samples/client/petstore/java/docs/components/schemas/MixedPropertiesAndAdditionalPropertiesClass.md b/samples/client/petstore/java/docs/components/schemas/MixedPropertiesAndAdditionalPropertiesClass.md index 3297521353b..ad7399025e8 100644 --- a/samples/client/petstore/java/docs/components/schemas/MixedPropertiesAndAdditionalPropertiesClass.md +++ b/samples/client/petstore/java/docs/components/schemas/MixedPropertiesAndAdditionalPropertiesClass.md @@ -41,11 +41,11 @@ MixedPropertiesAndAdditionalPropertiesClass.MixedPropertiesAndAdditionalProperti MapMaker.makeMap( new AbstractMap.SimpleEntry<>( "uuid", - "a" + "046b6c7f-0b8a-43b9-b35d-6489e6daee91" ), new AbstractMap.SimpleEntry<>( "dateTime", - "a" + "1970-01-01T00:00:00.00Z" ), new AbstractMap.SimpleEntry<>( "map", diff --git a/samples/client/petstore/java/docs/components/schemas/Money.md b/samples/client/petstore/java/docs/components/schemas/Money.md index ab8abb1490a..85ef2ecf70c 100644 --- a/samples/client/petstore/java/docs/components/schemas/Money.md +++ b/samples/client/petstore/java/docs/components/schemas/Money.md @@ -39,7 +39,7 @@ Money.MoneyMap validatedPayload = MapMaker.makeMap( new AbstractMap.SimpleEntry<>( "amount", - "a" + "3.14" ), new AbstractMap.SimpleEntry<>( "currency", diff --git a/samples/client/petstore/java/docs/components/schemas/MyObjectDto.md b/samples/client/petstore/java/docs/components/schemas/MyObjectDto.md index 6a6855d139e..e42f31b55f8 100644 --- a/samples/client/petstore/java/docs/components/schemas/MyObjectDto.md +++ b/samples/client/petstore/java/docs/components/schemas/MyObjectDto.md @@ -39,7 +39,7 @@ MyObjectDto.MyObjectDtoMap validatedPayload = MapMaker.makeMap( new AbstractMap.SimpleEntry<>( "id", - "a" + "046b6c7f-0b8a-43b9-b35d-6489e6daee91" ) ), configuration diff --git a/samples/client/petstore/java/docs/components/schemas/NullableClass.md b/samples/client/petstore/java/docs/components/schemas/NullableClass.md index 34d6dbd6965..bab3b176ed4 100644 --- a/samples/client/petstore/java/docs/components/schemas/NullableClass.md +++ b/samples/client/petstore/java/docs/components/schemas/NullableClass.md @@ -762,7 +762,7 @@ Void validatedPayload = NullableClass.DatetimeProp.validate( // String validation String validatedPayload = NullableClass.DatetimeProp.validate( - "a", + "1970-01-01T00:00:00.00Z", configuration ); ``` @@ -807,7 +807,7 @@ Void validatedPayload = NullableClass.DateProp.validate( // String validation String validatedPayload = NullableClass.DateProp.validate( - "a", + "2020-12-13", configuration ); ``` diff --git a/samples/client/petstore/java/docs/components/schemas/ObjectWithDecimalProperties.md b/samples/client/petstore/java/docs/components/schemas/ObjectWithDecimalProperties.md index 0121001332b..5d5ac3f2c28 100644 --- a/samples/client/petstore/java/docs/components/schemas/ObjectWithDecimalProperties.md +++ b/samples/client/petstore/java/docs/components/schemas/ObjectWithDecimalProperties.md @@ -38,18 +38,18 @@ ObjectWithDecimalProperties.ObjectWithDecimalPropertiesMap validatedPayload = MapMaker.makeMap( new AbstractMap.SimpleEntry<>( "length", - "a" + "3.14" ), new AbstractMap.SimpleEntry<>( "width", - "a" + "3.14" ), new AbstractMap.SimpleEntry<>( "cost", MapMaker.makeMap( new AbstractMap.SimpleEntry<>( "amount", - "a" + "3.14" ), new AbstractMap.SimpleEntry<>( "currency", diff --git a/samples/client/petstore/java/docs/components/schemas/Order.md b/samples/client/petstore/java/docs/components/schemas/Order.md index f683e2535bc..50c612f5748 100644 --- a/samples/client/petstore/java/docs/components/schemas/Order.md +++ b/samples/client/petstore/java/docs/components/schemas/Order.md @@ -55,7 +55,7 @@ Order.OrderMap validatedPayload = ), new AbstractMap.SimpleEntry<>( "shipDate", - "a" + "1970-01-01T00:00:00.00Z" ), new AbstractMap.SimpleEntry<>( "status", diff --git a/samples/client/petstore/java/docs/components/schemas/UUIDString.md b/samples/client/petstore/java/docs/components/schemas/UUIDString.md index ad9596b6b7b..68c962eeba8 100644 --- a/samples/client/petstore/java/docs/components/schemas/UUIDString.md +++ b/samples/client/petstore/java/docs/components/schemas/UUIDString.md @@ -32,7 +32,7 @@ static final SchemaConfiguration configuration = new SchemaConfiguration(JsonSch // String validation String validatedPayload = UUIDString.UUIDString1.validate( - "a", + "046b6c7f-0b8a-43b9-b35d-6489e6daee91", configuration ); ``` diff --git a/samples/client/petstore/java/docs/paths/fake/post/requestbody/content/applicationxwwwformurlencoded/Schema.md b/samples/client/petstore/java/docs/paths/fake/post/requestbody/content/applicationxwwwformurlencoded/Schema.md index 907ffede2a5..a53450d2d96 100644 --- a/samples/client/petstore/java/docs/paths/fake/post/requestbody/content/applicationxwwwformurlencoded/Schema.md +++ b/samples/client/petstore/java/docs/paths/fake/post/requestbody/content/applicationxwwwformurlencoded/Schema.md @@ -91,11 +91,11 @@ Schema.SchemaMap validatedPayload = ), new AbstractMap.SimpleEntry<>( "date", - "a" + "2020-12-13" ), new AbstractMap.SimpleEntry<>( "dateTime", - "a" + "1970-01-01T00:00:00.00Z" ), new AbstractMap.SimpleEntry<>( "password", @@ -243,7 +243,7 @@ static final SchemaConfiguration configuration = new SchemaConfiguration(JsonSch // String validation String validatedPayload = Schema.DateTime.validate( - "a", + "1970-01-01T00:00:00.00Z", configuration ); ``` diff --git a/src/main/java/org/openapijsonschematools/codegen/generators/DefaultGenerator.java b/src/main/java/org/openapijsonschematools/codegen/generators/DefaultGenerator.java index e1ad7a0316f..cf38d461ba1 100644 --- a/src/main/java/org/openapijsonschematools/codegen/generators/DefaultGenerator.java +++ b/src/main/java/org/openapijsonschematools/codegen/generators/DefaultGenerator.java @@ -2325,6 +2325,15 @@ private Object getStringFromSchema(CodegenSchema schema) { } } // todo handle not const or not enum here + if ("date".equals(schema.format)) { + return "2020-12-13"; + } else if ("date-time".equals(schema.format)) { + return "1970-01-01T00:00:00.00Z"; + } else if ("number".equals(schema.format)) { + return "3.14"; + } else if ("uuid".equals(schema.format)) { + return "046b6c7f-0b8a-43b9-b35d-6489e6daee91"; + } return "a"; } From b0f69bcb8a83b32e22e24f473ad59a04bb6a7c6a Mon Sep 17 00:00:00 2001 From: Justin Black Date: Tue, 5 Dec 2023 22:19:55 -0800 Subject: [PATCH 2/5] Adds pattern example generation --- .../java/docs/components/schemas/Apple.md | 8 +++--- .../schemas/ComposedOneOfDifferentTypes.md | 2 +- .../schemas/DateTimeWithValidations.md | 2 +- .../components/schemas/DateWithValidations.md | 2 +- .../docs/components/schemas/FormatTest.md | 12 ++++---- .../applicationxwwwformurlencoded/Schema.md | 8 +++--- .../codegen/generators/DefaultGenerator.java | 28 +++++++++++++++++++ 7 files changed, 45 insertions(+), 17 deletions(-) diff --git a/samples/client/petstore/java/docs/components/schemas/Apple.md b/samples/client/petstore/java/docs/components/schemas/Apple.md index 607953a001a..df8170fedad 100644 --- a/samples/client/petstore/java/docs/components/schemas/Apple.md +++ b/samples/client/petstore/java/docs/components/schemas/Apple.md @@ -45,11 +45,11 @@ Apple.AppleMap validatedPayload = MapMaker.makeMap( new AbstractMap.SimpleEntry<>( "cultivar", - "a" + "\ziEEpmVvrKlTttzGFqCEG" ), new AbstractMap.SimpleEntry<>( "origin", - "a" + "\ziEEpmVvrKlTttzGFqCEG" ) ), configuration @@ -114,7 +114,7 @@ static final SchemaConfiguration configuration = new SchemaConfiguration(JsonSch // String validation String validatedPayload = Apple.Origin.validate( - "a", + "\ziEEpmVvrKlTttzGFqCEG", configuration ); ``` @@ -152,7 +152,7 @@ static final SchemaConfiguration configuration = new SchemaConfiguration(JsonSch // String validation String validatedPayload = Apple.Cultivar.validate( - "a", + "\ziEEpmVvrKlTttzGFqCEG", configuration ); ``` diff --git a/samples/client/petstore/java/docs/components/schemas/ComposedOneOfDifferentTypes.md b/samples/client/petstore/java/docs/components/schemas/ComposedOneOfDifferentTypes.md index 2e551a37515..b2b881f9ddc 100644 --- a/samples/client/petstore/java/docs/components/schemas/ComposedOneOfDifferentTypes.md +++ b/samples/client/petstore/java/docs/components/schemas/ComposedOneOfDifferentTypes.md @@ -66,7 +66,7 @@ static final SchemaConfiguration configuration = new SchemaConfiguration(JsonSch // String validation String validatedPayload = ComposedOneOfDifferentTypes.Schema6.validate( - "1970-01-01T00:00:00.00Z", + "2020jUR,rZ#UM/?R,Fp^l6$ARj", configuration ); ``` diff --git a/samples/client/petstore/java/docs/components/schemas/DateTimeWithValidations.md b/samples/client/petstore/java/docs/components/schemas/DateTimeWithValidations.md index 445ba7f0f77..5f5b555c143 100644 --- a/samples/client/petstore/java/docs/components/schemas/DateTimeWithValidations.md +++ b/samples/client/petstore/java/docs/components/schemas/DateTimeWithValidations.md @@ -32,7 +32,7 @@ static final SchemaConfiguration configuration = new SchemaConfiguration(JsonSch // String validation String validatedPayload = DateTimeWithValidations.DateTimeWithValidations1.validate( - "1970-01-01T00:00:00.00Z", + "2020jUR,rZ#UM/?R,Fp^l6$ARj", configuration ); ``` diff --git a/samples/client/petstore/java/docs/components/schemas/DateWithValidations.md b/samples/client/petstore/java/docs/components/schemas/DateWithValidations.md index 7133efb5e79..3ff9737a603 100644 --- a/samples/client/petstore/java/docs/components/schemas/DateWithValidations.md +++ b/samples/client/petstore/java/docs/components/schemas/DateWithValidations.md @@ -32,7 +32,7 @@ static final SchemaConfiguration configuration = new SchemaConfiguration(JsonSch // String validation String validatedPayload = DateWithValidations.DateWithValidations1.validate( - "2020-12-13", + "2020jUR,rZ#UM/?R,Fp^l6$ARj", configuration ); ``` diff --git a/samples/client/petstore/java/docs/components/schemas/FormatTest.md b/samples/client/petstore/java/docs/components/schemas/FormatTest.md index 4be742def09..34084c62da7 100644 --- a/samples/client/petstore/java/docs/components/schemas/FormatTest.md +++ b/samples/client/petstore/java/docs/components/schemas/FormatTest.md @@ -114,7 +114,7 @@ FormatTest.FormatTestMap validatedPayload = ), new AbstractMap.SimpleEntry<>( "string", - "a" + "A" ), new AbstractMap.SimpleEntry<>( "binary", @@ -134,11 +134,11 @@ FormatTest.FormatTestMap validatedPayload = ), new AbstractMap.SimpleEntry<>( "pattern_with_digits", - "a" + "\dddddddddd" ), new AbstractMap.SimpleEntry<>( "pattern_with_digits_and_delimiter", - "a" + "IMage_\dd" ), new AbstractMap.SimpleEntry<>( "noneProp", @@ -251,7 +251,7 @@ static final SchemaConfiguration configuration = new SchemaConfiguration(JsonSch // String validation String validatedPayload = FormatTest.PatternWithDigitsAndDelimiter.validate( - "a", + "IMage_\dd", configuration ); ``` @@ -292,7 +292,7 @@ static final SchemaConfiguration configuration = new SchemaConfiguration(JsonSch // String validation String validatedPayload = FormatTest.PatternWithDigits.validate( - "a", + "\dddddddddd", configuration ); ``` @@ -420,7 +420,7 @@ static final SchemaConfiguration configuration = new SchemaConfiguration(JsonSch // String validation String validatedPayload = FormatTest.StringSchema.validate( - "a", + "A", configuration ); ``` diff --git a/samples/client/petstore/java/docs/paths/fake/post/requestbody/content/applicationxwwwformurlencoded/Schema.md b/samples/client/petstore/java/docs/paths/fake/post/requestbody/content/applicationxwwwformurlencoded/Schema.md index a53450d2d96..52ecb1e88c9 100644 --- a/samples/client/petstore/java/docs/paths/fake/post/requestbody/content/applicationxwwwformurlencoded/Schema.md +++ b/samples/client/petstore/java/docs/paths/fake/post/requestbody/content/applicationxwwwformurlencoded/Schema.md @@ -63,7 +63,7 @@ Schema.SchemaMap validatedPayload = ), new AbstractMap.SimpleEntry<>( "pattern_without_delimiter", - "a" + "AUR,rZ#UM/?R,Fp^l6$ARjbhJk C>" ), new AbstractMap.SimpleEntry<>( "integer", @@ -83,7 +83,7 @@ Schema.SchemaMap validatedPayload = ), new AbstractMap.SimpleEntry<>( "string", - "a" + "A" ), new AbstractMap.SimpleEntry<>( "binary", @@ -315,7 +315,7 @@ static final SchemaConfiguration configuration = new SchemaConfiguration(JsonSch // String validation String validatedPayload = Schema.PatternWithoutDelimiter.validate( - "a", + "AUR,rZ#UM/?R,Fp^l6$ARjbhJk C>", configuration ); ``` @@ -356,7 +356,7 @@ static final SchemaConfiguration configuration = new SchemaConfiguration(JsonSch // String validation String validatedPayload = Schema.StringSchema.validate( - "a", + "A", configuration ); ``` diff --git a/src/main/java/org/openapijsonschematools/codegen/generators/DefaultGenerator.java b/src/main/java/org/openapijsonschematools/codegen/generators/DefaultGenerator.java index cf38d461ba1..c34e5d3a28f 100644 --- a/src/main/java/org/openapijsonschematools/codegen/generators/DefaultGenerator.java +++ b/src/main/java/org/openapijsonschematools/codegen/generators/DefaultGenerator.java @@ -20,6 +20,9 @@ import com.github.benmanes.caffeine.cache.Cache; import com.github.benmanes.caffeine.cache.Caffeine; import com.github.benmanes.caffeine.cache.Ticker; +import com.github.curiousoddman.rgxgen.RgxGen; +import com.github.curiousoddman.rgxgen.config.RgxGenOption; +import com.github.curiousoddman.rgxgen.config.RgxGenProperties; import com.google.common.collect.ImmutableMap; import com.samskivert.mustache.Mustache; import com.samskivert.mustache.Mustache.Compiler; @@ -2312,6 +2315,28 @@ private Object getNumberFromSchema(CodegenSchema schema) { } } + private String getPatternExample(CodegenPatternInfo patternInfo) { + String extractedPattern = patternInfo.pattern; + LinkedHashSet regexFlags = patternInfo.flags; + /* + RxGen does not support our ECMA dialect https://github.com/curious-odd-man/RgxGen/issues/56 + So strip off the leading / and trailing / and turn on ignore case if we have it + */ + RgxGen rgxGen; + if (regexFlags != null && regexFlags.contains("i")) { + rgxGen = new RgxGen(extractedPattern); + RgxGenProperties properties = new RgxGenProperties(); + RgxGenOption.CASE_INSENSITIVE.setInProperties(properties, true); + rgxGen.setProperties(properties); + } else { + rgxGen = new RgxGen(extractedPattern); + } + + // this seed makes it so if we have [a-z] we pick a + Random random = new Random(18); + return rgxGen.generate(random); + } + private Object getStringFromSchema(CodegenSchema schema) { if (schema.enumInfo != null && schema.enumInfo.typeToValues.containsKey("string")) { for(EnumValue enumValue: schema.enumInfo.typeToValues.get("string")) { @@ -2325,6 +2350,9 @@ private Object getStringFromSchema(CodegenSchema schema) { } } // todo handle not const or not enum here + if (schema.patternInfo != null) { + return getPatternExample(schema.patternInfo); + } if ("date".equals(schema.format)) { return "2020-12-13"; } else if ("date-time".equals(schema.format)) { From f427033b6dfec2460ed1eb2543b581d9d802cfc7 Mon Sep 17 00:00:00 2001 From: Justin Black Date: Wed, 6 Dec 2023 11:29:16 -0800 Subject: [PATCH 3/5] Pattern code fixed --- .../java/docs/components/schemas/Apple.md | 8 +++---- .../docs/components/schemas/FormatTest.md | 8 +++---- .../codegen/generators/DefaultGenerator.java | 15 +++++++++---- .../generators/JavaClientGenerator.java | 21 ++++++++++-------- .../generators/PythonClientGenerator.java | 22 +++++++++++-------- .../openapimodels/CodegenPatternInfo.java | 4 ++-- .../schemas/SchemaClass/_pattern.hbs | 4 ++-- .../schemas/schema_cls/__pattern_info.hbs | 2 +- 8 files changed, 49 insertions(+), 35 deletions(-) diff --git a/samples/client/petstore/java/docs/components/schemas/Apple.md b/samples/client/petstore/java/docs/components/schemas/Apple.md index df8170fedad..6d084be531a 100644 --- a/samples/client/petstore/java/docs/components/schemas/Apple.md +++ b/samples/client/petstore/java/docs/components/schemas/Apple.md @@ -45,11 +45,11 @@ Apple.AppleMap validatedPayload = MapMaker.makeMap( new AbstractMap.SimpleEntry<>( "cultivar", - "\ziEEpmVvrKlTttzGFqCEG" + "IaQn EaqioxT oASzjxaSH" ), new AbstractMap.SimpleEntry<>( "origin", - "\ziEEpmVvrKlTttzGFqCEG" + "IaQn EaqioxT oASzjxaSH" ) ), configuration @@ -114,7 +114,7 @@ static final SchemaConfiguration configuration = new SchemaConfiguration(JsonSch // String validation String validatedPayload = Apple.Origin.validate( - "\ziEEpmVvrKlTttzGFqCEG", + "IaQn EaqioxT oASzjxaSH", configuration ); ``` @@ -152,7 +152,7 @@ static final SchemaConfiguration configuration = new SchemaConfiguration(JsonSch // String validation String validatedPayload = Apple.Cultivar.validate( - "\ziEEpmVvrKlTttzGFqCEG", + "IaQn EaqioxT oASzjxaSH", configuration ); ``` diff --git a/samples/client/petstore/java/docs/components/schemas/FormatTest.md b/samples/client/petstore/java/docs/components/schemas/FormatTest.md index 34084c62da7..d0a3c52565a 100644 --- a/samples/client/petstore/java/docs/components/schemas/FormatTest.md +++ b/samples/client/petstore/java/docs/components/schemas/FormatTest.md @@ -134,11 +134,11 @@ FormatTest.FormatTestMap validatedPayload = ), new AbstractMap.SimpleEntry<>( "pattern_with_digits", - "\dddddddddd" + "0480728880" ), new AbstractMap.SimpleEntry<>( "pattern_with_digits_and_delimiter", - "IMage_\dd" + "IMage_88" ), new AbstractMap.SimpleEntry<>( "noneProp", @@ -251,7 +251,7 @@ static final SchemaConfiguration configuration = new SchemaConfiguration(JsonSch // String validation String validatedPayload = FormatTest.PatternWithDigitsAndDelimiter.validate( - "IMage_\dd", + "IMage_88", configuration ); ``` @@ -292,7 +292,7 @@ static final SchemaConfiguration configuration = new SchemaConfiguration(JsonSch // String validation String validatedPayload = FormatTest.PatternWithDigits.validate( - "\dddddddddd", + "0480728880", configuration ); ``` diff --git a/src/main/java/org/openapijsonschematools/codegen/generators/DefaultGenerator.java b/src/main/java/org/openapijsonschematools/codegen/generators/DefaultGenerator.java index c34e5d3a28f..afd9d21dabb 100644 --- a/src/main/java/org/openapijsonschematools/codegen/generators/DefaultGenerator.java +++ b/src/main/java/org/openapijsonschematools/codegen/generators/DefaultGenerator.java @@ -2316,7 +2316,7 @@ private Object getNumberFromSchema(CodegenSchema schema) { } private String getPatternExample(CodegenPatternInfo patternInfo) { - String extractedPattern = patternInfo.pattern; + String extractedPattern = patternInfo.pattern.original; LinkedHashSet regexFlags = patternInfo.flags; /* RxGen does not support our ECMA dialect https://github.com/curious-odd-man/RgxGen/issues/56 @@ -2334,7 +2334,8 @@ private String getPatternExample(CodegenPatternInfo patternInfo) { // this seed makes it so if we have [a-z] we pick a Random random = new Random(18); - return rgxGen.generate(random); + String result = rgxGen.generate(random); + return result; } private Object getStringFromSchema(CodegenSchema schema) { @@ -4704,7 +4705,10 @@ protected EnumInfo getEnumInfo(ArrayList values, Schema schema, String c */ public CodegenPatternInfo addRegularExpressionDelimiter(String pattern) { if (StringUtils.isEmpty(pattern)) { - return new CodegenPatternInfo(pattern, null); + return new CodegenPatternInfo( + new CodegenText(pattern, escapeUnsafeCharacters(pattern)), + null + ); } String usedPattern = pattern; @@ -4712,7 +4716,10 @@ public CodegenPatternInfo addRegularExpressionDelimiter(String pattern) { usedPattern = "/" + pattern.replaceAll("/", "\\\\/") + "/"; } - return new CodegenPatternInfo(usedPattern, null); + return new CodegenPatternInfo( + new CodegenText(usedPattern, escapeUnsafeCharacters(usedPattern)), + null + ); } /** diff --git a/src/main/java/org/openapijsonschematools/codegen/generators/JavaClientGenerator.java b/src/main/java/org/openapijsonschematools/codegen/generators/JavaClientGenerator.java index 61fae27802d..aca972d4008 100644 --- a/src/main/java/org/openapijsonschematools/codegen/generators/JavaClientGenerator.java +++ b/src/main/java/org/openapijsonschematools/codegen/generators/JavaClientGenerator.java @@ -35,6 +35,7 @@ import org.openapijsonschematools.codegen.generators.openapimodels.CodegenResponse; import org.openapijsonschematools.codegen.generators.openapimodels.CodegenSchema; import org.openapijsonschematools.codegen.generators.openapimodels.CodegenSecurityScheme; +import org.openapijsonschematools.codegen.generators.openapimodels.CodegenText; import org.openapijsonschematools.codegen.generators.openapimodels.EnumInfo; import org.openapijsonschematools.codegen.templating.HandlebarsEngineAdapter; import org.openapijsonschematools.codegen.templating.SupportingFile; @@ -1846,28 +1847,30 @@ public CodegenPatternInfo getPatternInfo(String pattern) { if (pattern == null) { return null; } - String usedPattern = escapeUnsafeCharacters(pattern); - Matcher m = patternRegex.matcher(usedPattern); + Matcher m = patternRegex.matcher(pattern); if (m.find()) { int groupCount = m.groupCount(); - if (groupCount == 1) { - // only pattern found + boolean patternWithNoFlags = groupCount == 1; + boolean patternWithFlags = groupCount == 2; + if (patternWithNoFlags) { String isolatedPattern = m.group(1); - return new CodegenPatternInfo(isolatedPattern, null); - } else if (groupCount == 2) { - // patterns and flag found + CodegenText usedPattern = new CodegenText(isolatedPattern, escapeUnsafeCharacters(isolatedPattern)); + return new CodegenPatternInfo(usedPattern, null); + } else if (patternWithFlags) { String isolatedPattern = m.group(1); + CodegenText usedPattern = new CodegenText(isolatedPattern, escapeUnsafeCharacters(isolatedPattern)); String foundFlags = m.group(2); if (foundFlags.isEmpty()) { - return new CodegenPatternInfo(isolatedPattern, null); + return new CodegenPatternInfo(usedPattern, null); } LinkedHashSet flags = new LinkedHashSet<>(); for (Character c: foundFlags.toCharArray()) { flags.add(c.toString()); } - return new CodegenPatternInfo(isolatedPattern, flags); + return new CodegenPatternInfo(usedPattern, flags); } } + CodegenText usedPattern = new CodegenText(pattern, escapeUnsafeCharacters(pattern)); return new CodegenPatternInfo(usedPattern, null); } } diff --git a/src/main/java/org/openapijsonschematools/codegen/generators/PythonClientGenerator.java b/src/main/java/org/openapijsonschematools/codegen/generators/PythonClientGenerator.java index c958accd51f..936f77e3e7a 100644 --- a/src/main/java/org/openapijsonschematools/codegen/generators/PythonClientGenerator.java +++ b/src/main/java/org/openapijsonschematools/codegen/generators/PythonClientGenerator.java @@ -33,6 +33,7 @@ import org.openapijsonschematools.codegen.generators.openapimodels.CodegenDiscriminator; import org.openapijsonschematools.codegen.generators.openapimodels.CodegenPatternInfo; import org.openapijsonschematools.codegen.generators.openapimodels.CodegenSchema; +import org.openapijsonschematools.codegen.generators.openapimodels.CodegenText; import org.openapijsonschematools.codegen.templating.MustacheEngineAdapter; import org.openapijsonschematools.codegen.templating.SupportingFile; import org.openapijsonschematools.codegen.generators.generatormetadata.features.DataTypeFeature; @@ -1476,7 +1477,7 @@ private String toExampleValueRecursive(String modelName, Schema schema, Object o } else if (StringUtils.isNotBlank(schema.getPattern())) { String pattern = schema.getPattern(); CodegenPatternInfo results = getPatternInfo(pattern); - String extractedPattern = results.pattern; + String extractedPattern = results.pattern.original; LinkedHashSet regexFlags = results.flags; /* RxGen does not support our ECMA dialect https://github.com/curious-odd-man/RgxGen/issues/56 @@ -1789,25 +1790,28 @@ public CodegenPatternInfo getPatternInfo(String pattern) { Matcher m = patternRegex.matcher(pattern); if (m.find()) { int groupCount = m.groupCount(); - if (groupCount == 1) { - // only pattern found + boolean patternWithNoFlags = groupCount == 1; + boolean patternWithFlags = groupCount == 2; + if (patternWithNoFlags) { String isolatedPattern = m.group(1); - return new CodegenPatternInfo(isolatedPattern, null); - } else if (groupCount == 2) { - // patterns and flag found + CodegenText usedPattern = new CodegenText(isolatedPattern, escapeUnsafeCharacters(isolatedPattern)); + return new CodegenPatternInfo(usedPattern, null); + } else if (patternWithFlags) { String isolatedPattern = m.group(1); + CodegenText usedPattern = new CodegenText(isolatedPattern, escapeUnsafeCharacters(isolatedPattern)); String foundFlags = m.group(2); if (foundFlags.isEmpty()) { - return new CodegenPatternInfo(isolatedPattern, null); + return new CodegenPatternInfo(usedPattern, null); } LinkedHashSet flags = new LinkedHashSet<>(); for (Character c: foundFlags.toCharArray()) { flags.add(c.toString()); } - return new CodegenPatternInfo(isolatedPattern, flags); + return new CodegenPatternInfo(usedPattern, flags); } } - return new CodegenPatternInfo(pattern, null); + CodegenText usedPattern = new CodegenText(pattern, escapeUnsafeCharacters(pattern)); + return new CodegenPatternInfo(usedPattern, null); } @Override diff --git a/src/main/java/org/openapijsonschematools/codegen/generators/openapimodels/CodegenPatternInfo.java b/src/main/java/org/openapijsonschematools/codegen/generators/openapimodels/CodegenPatternInfo.java index 18e8754847f..ac6ff278d46 100644 --- a/src/main/java/org/openapijsonschematools/codegen/generators/openapimodels/CodegenPatternInfo.java +++ b/src/main/java/org/openapijsonschematools/codegen/generators/openapimodels/CodegenPatternInfo.java @@ -3,10 +3,10 @@ import java.util.LinkedHashSet; public class CodegenPatternInfo { - public final String pattern; + public final CodegenText pattern; public final LinkedHashSet flags; - public CodegenPatternInfo(String pattern, LinkedHashSet flags) { + public CodegenPatternInfo(CodegenText pattern, LinkedHashSet flags) { this.pattern = pattern; this.flags = flags; } diff --git a/src/main/resources/java/src/main/java/packagename/components/schemas/SchemaClass/_pattern.hbs b/src/main/resources/java/src/main/java/packagename/components/schemas/SchemaClass/_pattern.hbs index 2000e5a7f91..5a54caf1da6 100644 --- a/src/main/resources/java/src/main/java/packagename/components/schemas/SchemaClass/_pattern.hbs +++ b/src/main/resources/java/src/main/java/packagename/components/schemas/SchemaClass/_pattern.hbs @@ -1,7 +1,7 @@ {{#if forDocs}}     new KeywordEntry("pattern", new PatternValidator(
{{~#with patternInfo}} -        "{{{pattern}}}"{{#if flags}},{{/if}}
+        "{{{pattern.codeEscaped}}}"{{#if flags}},{{/if}}
{{~#if flags}} {{#eq flags.size 1}}         {{#each flags}}Pattern.{{#eq this "i"}}CASE_INSENSITIVE{{/eq}}{{#eq this "m"}}MULTILINE{{/eq}}{{#eq this "s"}}DOTALL{{/eq}}{{#eq this "u"}}UNICODE_CHARACTER_CLASS{{/eq}}{{/each}}
@@ -29,7 +29,7 @@ {{~else}} new KeywordEntry("pattern", new PatternValidator(Pattern.compile( {{#with patternInfo}} - "{{{pattern}}}"{{#if flags}},{{/if}} + "{{{pattern.codeEscaped}}}"{{#if flags}},{{/if}} {{#if flags}} {{#eq flags.size 1}} {{#each flags}}Pattern.{{#eq this "i"}}CASE_INSENSITIVE{{/eq}}{{#eq this "m"}}MULTILINE{{/eq}}{{#eq this "s"}}DOTALL{{/eq}}{{#eq this "u"}}UNICODE_CHARACTER_CLASS{{/eq}}{{/each}} diff --git a/src/main/resources/python/components/schemas/schema_cls/__pattern_info.hbs b/src/main/resources/python/components/schemas/schema_cls/__pattern_info.hbs index ed5deb2358f..e0cec22e51d 100644 --- a/src/main/resources/python/components/schemas/schema_cls/__pattern_info.hbs +++ b/src/main/resources/python/components/schemas/schema_cls/__pattern_info.hbs @@ -1,6 +1,6 @@ {{#if propertyName}}{{propertyName}}: schemas.PatternInfo = {{/if}}schemas.PatternInfo( {{#with patternInfo}} - pattern=r'{{{pattern}}}'{{#if flags}},{{/if}} # noqa: E501 + pattern=r'{{{pattern.original}}}'{{#if flags}},{{/if}} # noqa: E501 {{#if flags}} {{#eq flags.size 1}} flags={{#each flags}}re.{{#eq this "i"}}I{{/eq}}{{#eq this "m"}}M{{/eq}}{{#eq this "s"}}S{{/eq}}{{#eq this "u"}}U{{/eq}}{{/each}}, From 9483a91864cd28f501c256bb0a322786acb1799a Mon Sep 17 00:00:00 2001 From: Justin Black Date: Wed, 6 Dec 2023 11:41:48 -0800 Subject: [PATCH 4/5] Sample template updated --- .../packagename/components/schemas/docschema_codeSample.hbs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/resources/java/src/main/java/packagename/components/schemas/docschema_codeSample.hbs b/src/main/resources/java/src/main/java/packagename/components/schemas/docschema_codeSample.hbs index 2d2c9563e01..76c9874a8c0 100644 --- a/src/main/resources/java/src/main/java/packagename/components/schemas/docschema_codeSample.hbs +++ b/src/main/resources/java/src/main/java/packagename/components/schemas/docschema_codeSample.hbs @@ -54,7 +54,7 @@ int validatedPayload = {{../../../containerJsonPathPiece.camelCase}}.{{../jsonPa {{#eq @key "number"}} {{#eq ../format "int64"}} // long validation -Number validatedPayload = {{../../../containerJsonPathPiece.camelCase}}.{{../jsonPathPiece.camelCase}}.validate( +long validatedPayload = {{../../../containerJsonPathPiece.camelCase}}.{{../jsonPathPiece.camelCase}}.validate( {{else}} {{#eq ../format "float"}} // float validation From 60388638d9afe2a5b0cbee4881c6ed9445dd5d6c Mon Sep 17 00:00:00 2001 From: Justin Black Date: Wed, 6 Dec 2023 12:06:05 -0800 Subject: [PATCH 5/5] Fixes java tests --- .../codegen/generators/DefaultGenerator.java | 78 ++++++++++++------- .../generators/JavaClientGenerator.java | 58 -------------- .../generators/PythonClientGenerator.java | 58 -------------- .../DefaultGeneratorRunnerTest.java | 8 +- .../generators/PythonClientGeneratorTest.java | 4 +- 5 files changed, 54 insertions(+), 152 deletions(-) diff --git a/src/main/java/org/openapijsonschematools/codegen/generators/DefaultGenerator.java b/src/main/java/org/openapijsonschematools/codegen/generators/DefaultGenerator.java index afd9d21dabb..9acbc0e6c2d 100644 --- a/src/main/java/org/openapijsonschematools/codegen/generators/DefaultGenerator.java +++ b/src/main/java/org/openapijsonschematools/codegen/generators/DefaultGenerator.java @@ -149,6 +149,7 @@ public class DefaultGenerator implements Generator { protected String requestBodiesIdentifier = "request_bodies"; protected String securitySchemesIdentifier = "security_schemes"; protected String requestBodyIdentifier = "request_body"; + private final Pattern patternRegex = Pattern.compile("^/?(.+?)/?([simu]{0,4})$"); @@ -1012,17 +1013,60 @@ public void setAllowUnicodeIdentifiers(Boolean allowUnicodeIdentifiers) { } /** - * Return the regular expression/JSON schema pattern h... * + * Notes: + * RgxGen does not support our ECMA dialect + * ... + * So strip off the leading / and trailing / and turn on ignore case if we have it + * + * json schema test cases omit the leading and trailing /s, so make sure that the regex allows that + * + * Flags: + * ... + * d hasIndices: indicates that the result of a regular expression match should contain the start and end indices of the substrings of each capture group + * g global: the regular expression should be tested against all possible matches in a string + * i ignoreCase: case should be ignored while attempting a match in a string + * m multiline: a multiline input string should be treated as multiple lines + * s dotAll: the dot special character (.) should additionally match 4 line terminator ("newline") characters in a string + * u unicode: enables various Unicode-related features such as unicode code point escapes + * y sticky: the regex attempts to match the target string only from the index indicated by the lastIndex property + * + * Python flags: + * ... + * i, m, s u + * * @param pattern the pattern (regular expression) - * @return properly-escaped pattern + * @return the resultant regex for python */ @Override public CodegenPatternInfo getPatternInfo(String pattern) { if (pattern == null) { return null; } - return addRegularExpressionDelimiter(escapeText(pattern)); + Matcher m = patternRegex.matcher(pattern); + if (m.find()) { + int groupCount = m.groupCount(); + boolean patternWithNoFlags = groupCount == 1; + boolean patternWithFlags = groupCount == 2; + if (patternWithNoFlags) { + String isolatedPattern = m.group(1); + CodegenText usedPattern = new CodegenText(isolatedPattern, escapeUnsafeCharacters(isolatedPattern)); + return new CodegenPatternInfo(usedPattern, null); + } else if (patternWithFlags) { + String isolatedPattern = m.group(1); + CodegenText usedPattern = new CodegenText(isolatedPattern, escapeUnsafeCharacters(isolatedPattern)); + String foundFlags = m.group(2); + if (foundFlags.isEmpty()) { + return new CodegenPatternInfo(usedPattern, null); + } + LinkedHashSet flags = new LinkedHashSet<>(); + for (Character c: foundFlags.toCharArray()) { + flags.add(c.toString()); + } + return new CodegenPatternInfo(usedPattern, flags); + } + } + CodegenText usedPattern = new CodegenText(pattern, escapeUnsafeCharacters(pattern)); + return new CodegenPatternInfo(usedPattern, null); } /** @@ -4696,32 +4740,6 @@ protected EnumInfo getEnumInfo(ArrayList values, Schema schema, String c return new EnumInfo(enumValueToName, typeToValues, jsonPathPiece); } - /** - * If the pattern misses the delimiter, add "/" to the beginning and end - * Otherwise, return the original pattern - * - * @param pattern the pattern (regular expression) - * @return the pattern with delimiter - */ - public CodegenPatternInfo addRegularExpressionDelimiter(String pattern) { - if (StringUtils.isEmpty(pattern)) { - return new CodegenPatternInfo( - new CodegenText(pattern, escapeUnsafeCharacters(pattern)), - null - ); - } - - String usedPattern = pattern; - if (!pattern.matches("^/.*")) { - usedPattern = "/" + pattern.replaceAll("/", "\\\\/") + "/"; - } - - return new CodegenPatternInfo( - new CodegenText(usedPattern, escapeUnsafeCharacters(usedPattern)), - null - ); - } - /** * reads propertyKey from additionalProperties, converts it to a boolean and * writes it back to additionalProperties to be usable as a boolean in diff --git a/src/main/java/org/openapijsonschematools/codegen/generators/JavaClientGenerator.java b/src/main/java/org/openapijsonschematools/codegen/generators/JavaClientGenerator.java index aca972d4008..0992b261b43 100644 --- a/src/main/java/org/openapijsonschematools/codegen/generators/JavaClientGenerator.java +++ b/src/main/java/org/openapijsonschematools/codegen/generators/JavaClientGenerator.java @@ -139,7 +139,6 @@ public class JavaClientGenerator extends AbstractJavaGenerator protected Map mpRestClientVersions = new HashMap<>(); protected boolean useSingleRequestParameter = false; protected HashMap schemaJsonPathToModelName = new HashMap<>(); - private final Pattern patternRegex = Pattern.compile("^/?(.+?)/?([simu]{0,4})$"); private static class MpRestClientVersion { public final String rootPackage; @@ -1816,61 +1815,4 @@ public String getTestFilepath(String jsonPath) { .collect(Collectors.toList()); return String.join(File.separator, finalPathPieces); } - - /** - * Notes: - * RgxGen does not support our ECMA dialect - * ... - * So strip off the leading / and trailing / and turn on ignore case if we have it - * - * json schema test cases omit the leading and trailing /s, so make sure that the regex allows that - * - * Flags: - * ... - * d hasIndices: indicates that the result of a regular expression match should contain the start and end indices of the substrings of each capture group - * g global: the regular expression should be tested against all possible matches in a string - * i ignoreCase: case should be ignored while attempting a match in a string - * m multiline: a multiline input string should be treated as multiple lines - * s dotAll: the dot special character (.) should additionally match 4 line terminator ("newline") characters in a string - * u unicode: enables various Unicode-related features such as unicode code point escapes - * y sticky: the regex attempts to match the target string only from the index indicated by the lastIndex property - * - * Python flags: - * ... - * i, m, s u - * - * @param pattern the pattern (regular expression) - * @return the resultant regex for python - */ - @Override - public CodegenPatternInfo getPatternInfo(String pattern) { - if (pattern == null) { - return null; - } - Matcher m = patternRegex.matcher(pattern); - if (m.find()) { - int groupCount = m.groupCount(); - boolean patternWithNoFlags = groupCount == 1; - boolean patternWithFlags = groupCount == 2; - if (patternWithNoFlags) { - String isolatedPattern = m.group(1); - CodegenText usedPattern = new CodegenText(isolatedPattern, escapeUnsafeCharacters(isolatedPattern)); - return new CodegenPatternInfo(usedPattern, null); - } else if (patternWithFlags) { - String isolatedPattern = m.group(1); - CodegenText usedPattern = new CodegenText(isolatedPattern, escapeUnsafeCharacters(isolatedPattern)); - String foundFlags = m.group(2); - if (foundFlags.isEmpty()) { - return new CodegenPatternInfo(usedPattern, null); - } - LinkedHashSet flags = new LinkedHashSet<>(); - for (Character c: foundFlags.toCharArray()) { - flags.add(c.toString()); - } - return new CodegenPatternInfo(usedPattern, flags); - } - } - CodegenText usedPattern = new CodegenText(pattern, escapeUnsafeCharacters(pattern)); - return new CodegenPatternInfo(usedPattern, null); - } } diff --git a/src/main/java/org/openapijsonschematools/codegen/generators/PythonClientGenerator.java b/src/main/java/org/openapijsonschematools/codegen/generators/PythonClientGenerator.java index 936f77e3e7a..fe20384462c 100644 --- a/src/main/java/org/openapijsonschematools/codegen/generators/PythonClientGenerator.java +++ b/src/main/java/org/openapijsonschematools/codegen/generators/PythonClientGenerator.java @@ -80,7 +80,6 @@ public class PythonClientGenerator extends AbstractPythonGenerator { // nose is a python testing framework, we use pytest if USE_NOSE is unset public static final String USE_NOSE = "useNose"; public static final String RECURSION_LIMIT = "recursionLimit"; - private final Pattern patternRegex = Pattern.compile("^/?(.+?)/?([simu]{0,4})$"); protected String packageUrl; protected String apiDocPath = "docs/apis/tags/"; @@ -1757,63 +1756,6 @@ protected Map getModelNameToSchemaCache() { return modelNameToSchemaCache; } - /** - * Notes: - * RgxGen does not support our ECMA dialect - * ... - * So strip off the leading / and trailing / and turn on ignore case if we have it - * - * json schema test cases omit the leading and trailing /s, so make sure that the regex allows that - * - * Flags: - * ... - * d hasIndices: indicates that the result of a regular expression match should contain the start and end indices of the substrings of each capture group - * g global: the regular expression should be tested against all possible matches in a string - * i ignoreCase: case should be ignored while attempting a match in a string - * m multiline: a multiline input string should be treated as multiple lines - * s dotAll: the dot special character (.) should additionally match 4 line terminator ("newline") characters in a string - * u unicode: enables various Unicode-related features such as unicode code point escapes - * y sticky: the regex attempts to match the target string only from the index indicated by the lastIndex property - * - * Python flags: - * ... - * i, m, s u - * - * @param pattern the pattern (regular expression) - * @return the resultant regex for python - */ - @Override - public CodegenPatternInfo getPatternInfo(String pattern) { - if (pattern == null) { - return null; - } - Matcher m = patternRegex.matcher(pattern); - if (m.find()) { - int groupCount = m.groupCount(); - boolean patternWithNoFlags = groupCount == 1; - boolean patternWithFlags = groupCount == 2; - if (patternWithNoFlags) { - String isolatedPattern = m.group(1); - CodegenText usedPattern = new CodegenText(isolatedPattern, escapeUnsafeCharacters(isolatedPattern)); - return new CodegenPatternInfo(usedPattern, null); - } else if (patternWithFlags) { - String isolatedPattern = m.group(1); - CodegenText usedPattern = new CodegenText(isolatedPattern, escapeUnsafeCharacters(isolatedPattern)); - String foundFlags = m.group(2); - if (foundFlags.isEmpty()) { - return new CodegenPatternInfo(usedPattern, null); - } - LinkedHashSet flags = new LinkedHashSet<>(); - for (Character c: foundFlags.toCharArray()) { - flags.add(c.toString()); - } - return new CodegenPatternInfo(usedPattern, flags); - } - } - CodegenText usedPattern = new CodegenText(pattern, escapeUnsafeCharacters(pattern)); - return new CodegenPatternInfo(usedPattern, null); - } - @Override public GeneratorType getTag() { return GeneratorType.CLIENT; diff --git a/src/test/java/org/openapijsonschematools/codegen/generatorrunner/DefaultGeneratorRunnerTest.java b/src/test/java/org/openapijsonschematools/codegen/generatorrunner/DefaultGeneratorRunnerTest.java index b096e780a4b..896f92e7878 100644 --- a/src/test/java/org/openapijsonschematools/codegen/generatorrunner/DefaultGeneratorRunnerTest.java +++ b/src/test/java/org/openapijsonschematools/codegen/generatorrunner/DefaultGeneratorRunnerTest.java @@ -342,7 +342,7 @@ public void testRefModelValidationProperties() { String expectedPattern = "^\\d{3}-\\d{2}-\\d{4}$"; // NOTE: double-escaped regex for when the value is intended to be dumped in template into a String location. - String escapedPattern = config.getPatternInfo(expectedPattern).pattern; + String escapedPattern = config.getPatternInfo(expectedPattern).pattern.original; Schema stringRegex = openAPI.getComponents().getSchemas().get("StringRegex"); // Sanity check. @@ -358,7 +358,7 @@ public void testRefModelValidationProperties() { "#/components/schemas/A", "#/components/schemas/A" ); - Assert.assertEquals(stringRegexProperty.patternInfo.pattern, escapedPattern); + Assert.assertEquals(stringRegexProperty.patternInfo.pattern.original, escapedPattern); config.fromSchema( openAPI.getComponents().getSchemas().get("StringRegex"), @@ -378,13 +378,13 @@ public void testRefModelValidationProperties() { body, "#/paths/~1fake~1StringRegex/post/requestBody"); CodegenKey ck = config.getKey("*/*", "misc"); - Assert.assertEquals(codegenParameter.content.get(ck).schema.refInfo.ref.patternInfo.pattern, escapedPattern); + Assert.assertEquals(codegenParameter.content.get(ck).schema.refInfo.ref.patternInfo.pattern.original, escapedPattern); // Validate when converting to response ApiResponse response = operation.getResponses().get("200"); CodegenResponse codegenResponse = config.fromResponse(response, "#/paths/~1fake~1StringRegex/post/responses/200"); - Assert.assertEquals(codegenResponse.content.get(ck).schema.refInfo.ref.patternInfo.pattern, escapedPattern); + Assert.assertEquals(codegenResponse.content.get(ck).schema.refInfo.ref.patternInfo.pattern.original, escapedPattern); } @Test diff --git a/src/test/java/org/openapijsonschematools/codegen/generators/PythonClientGeneratorTest.java b/src/test/java/org/openapijsonschematools/codegen/generators/PythonClientGeneratorTest.java index e54458e1559..81169b9d5b2 100644 --- a/src/test/java/org/openapijsonschematools/codegen/generators/PythonClientGeneratorTest.java +++ b/src/test/java/org/openapijsonschematools/codegen/generators/PythonClientGeneratorTest.java @@ -186,7 +186,7 @@ public void testRegexWithoutTrailingSlashWorks() { "#/components/schemas/" + modelName ); String expectedRegexPattern = "[a-fA-F0-9]{8}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{12}"; - Assert.assertEquals(cm.patternInfo.pattern, expectedRegexPattern); + Assert.assertEquals(cm.patternInfo.pattern.original, expectedRegexPattern); Assert.assertNull(cm.patternInfo.flags); } @@ -205,7 +205,7 @@ public void testRegexWithMultipleFlagsWorks() { "#/components/schemas/" + modelName ); String expectedRegexPattern = "a."; - Assert.assertEquals(cm.patternInfo.pattern, expectedRegexPattern); + Assert.assertEquals(cm.patternInfo.pattern.original, expectedRegexPattern); Assert.assertEquals(cm.patternInfo.flags, new LinkedHashSet<>(Arrays.asList("s", "i", "m"))); }