@@ -2075,15 +2075,7 @@ private static Map<String, File> generateFromContract(
20752075 .setOutputDir (output .toString ());
20762076 consumer .accept (configurator );
20772077 return new DefaultGenerator ().opts (configurator .toClientOptInput ()).generate ()
2078- .stream ().collect (Collectors .toMap (JavaClientCodegenTest ::getUniqueName , Function .identity ()));
2079- }
2080-
2081- private static String getUniqueName (File file ) {
2082- String name = file .getName ();
2083- if ("package-info.java" .equals (name )) {
2084- return file .getParentFile ().getName () + "/" + name ;
2085- }
2086- return name ;
2078+ .stream ().collect (Collectors .toMap (File ::getName , Function .identity ()));
20872079 }
20882080
20892081 @ Test
@@ -4219,56 +4211,83 @@ public void testFeignHc5CustomTemplateDirIsPreserved() {
42194211 "feign-hc5 must preserve a user-provided templateDir and not overwrite it with 'feign'" );
42204212 }
42214213
4222- @ DataProvider (name = "jspecifyLibraries" )
4223- public Object [][] jspecifyLibraries () {
4224- return new Object [][]{
4225- {"restclient" },
4226- {"webclient" },
4227- {"resttemplate" },
4228- {"native" }
4229- };
4230- }
4231-
4232- @ Test (dataProvider = "jspecifyLibraries" )
4233- public void testJspecify (String library ) throws IOException {
4234- final Map <String , File > files = generateFromContract ("src/test/resources/3_0/java/jspecify.yaml" , library ,
4235- Map .of (USE_JSPECIFY , true ,
4236- "containerDefaultToNull" , true
4237- ),
4238- codegenConfigurator ->
4239- codegenConfigurator
4240- .setValidateSpec (false )
4241- .addTypeMapping ("OffsetDateTime" , "java.time.Instant" )
4242- .addTypeMapping ("BigDecimal" , "java.math.BigDecimal" ));
4243-
4244- assertThat (files .get ("pom.xml" )).content ()
4245- .contains (
4246- "<groupId>org.jspecify</groupId>" ,
4247- "<artifactId>jspecify</artifactId>" ,
4248- "<version>1.0.0</version>" );
4249- JavaFileAssert .assertThat (files .get ("Foo.java" ))
4250- .fileContains (
4251- "import org.jspecify.annotations.Nullable;" ,
4252- "private java.time.@Nullable Instant dt;" ,
4253- "setDt(java.time.@Nullable Instant dt)" ,
4254- "dt(java.time.@Nullable Instant dt)" ,
4255- "setBinary(@Nullable File binary)" ,
4256- "public @Nullable File getBinary()" ,
4257- "List<java.time.@Nullable Instant> getListOfDt()" ,
4258- "setListOfDt(List<java.time.@Nullable Instant> listOfDt)"
4259- );
4260- if (!RESTTEMPLATE .equals (library )) {
4261- JavaFileAssert .assertThat (files .get ("DefaultApi.java" ))
4262- .fileContains (
4263- "import org.jspecify.annotations.Nullable;" ,
4264- "(java.time.@Nullable Instant dtParam, java.time.@Nullable Instant dtQuery, java.time.@Nullable Instant dtCookie)"
4265- );
4266- }
4267- JavaFileAssert .assertThat (files .get ("api/package-info.java" ))
4268- .fileContains ("@org.jspecify.annotations.NullMarked" );
4269- JavaFileAssert .assertThat (files .get ("model/package-info.java" ))
4270- .fileContains ("@org.jspecify.annotations.NullMarked" );
4271- JavaFileAssert .assertThat (files .get ("client/package-info.java" ))
4272- .fileContains ("@org.jspecify.annotations.NullMarked" );
4273- }
4214+ // @Test(description = "Regression test for multipart/form-data list handling in restclient ApiClient to avoid IndexOutOfBoundsException on empty lists")
4215+ // public void testRestClientMultipartFormParamsGuardAgainstEmptyLists() {
4216+ // final Path output = newTempFolder();
4217+ // final CodegenConfigurator configurator = new CodegenConfigurator()
4218+ // .setGeneratorName(JAVA_GENERATOR)
4219+ // .setLibrary(JavaClientCodegen.RESTCLIENT)
4220+ // .setAdditionalProperties(Map.of(CodegenConstants.API_PACKAGE, "xyz.abcdef.api"))
4221+ // .setInputSpec("src/test/resources/3_0/form-multipart-binary-array.yaml")
4222+ // .setOutputDir(output.toString().replace("\\", "/"));
4223+ //
4224+ // List<File> files = new DefaultGenerator().opts(configurator.toClientOptInput()).generate();
4225+ //
4226+ // validateJavaSourceFiles(files);
4227+ //
4228+ // assertFileContains(
4229+ // output.resolve("src/main/java/xyz/abcdef/ApiClient.java"),
4230+ // "if (v instanceof java.util.ArrayList && !v.isEmpty()) {",
4231+ // "first.getClass().isEnum()"
4232+ // );
4233+ //
4234+ // TestUtils.assertFileNotContains(
4235+ // output.resolve("src/main/java/xyz/abcdef/ApiClient.java"),
4236+ // "if (v instanceof java.util.ArrayList) {",
4237+ // "o.getClass().getEnumConstants() != null"
4238+ // );
4239+ // }
4240+
4241+ // @DataProvider(name = "jspecifyLibraries")
4242+ // public Object[][] jspecifyLibraries() {
4243+ // return new Object[][]{
4244+ // {"restclient"},
4245+ // {"webclient"},
4246+ // {"resttemplate"},
4247+ // {"native"}
4248+ // };
4249+ // }
4250+ //
4251+ // @Test(dataProvider = "jspecifyLibraries")
4252+ // public void testJspecify(String library) throws IOException {
4253+ // final Map<String, File> files = generateFromContract("src/test/resources/3_0/java/jspecify.yaml", library,
4254+ // Map.of(USE_JSPECIFY, true,
4255+ // "containerDefaultToNull", true
4256+ // ),
4257+ // codegenConfigurator ->
4258+ // codegenConfigurator
4259+ // .setValidateSpec(false)
4260+ // .addTypeMapping("OffsetDateTime", "java.time.Instant")
4261+ // .addTypeMapping("BigDecimal", "java.math.BigDecimal"));
4262+ //
4263+ // assertThat(files.get("pom.xml")).content()
4264+ // .contains(
4265+ // "<groupId>org.jspecify</groupId>",
4266+ // "<artifactId>jspecify</artifactId>",
4267+ // "<version>1.0.0</version>");
4268+ // JavaFileAssert.assertThat(files.get("Foo.java"))
4269+ // .fileContains(
4270+ // "import org.jspecify.annotations.Nullable;",
4271+ // "private java.time.@Nullable Instant dt;",
4272+ // "setDt(java.time.@Nullable Instant dt)",
4273+ // "dt(java.time.@Nullable Instant dt)",
4274+ // "setBinary(@Nullable File binary)",
4275+ // "public @Nullable File getBinary()",
4276+ // "List<java.time.@Nullable Instant> getListOfDt()",
4277+ // "setListOfDt(List<java.time.@Nullable Instant> listOfDt)"
4278+ // );
4279+ // if (!RESTTEMPLATE.equals(library)) {
4280+ // JavaFileAssert.assertThat(files.get("DefaultApi.java"))
4281+ // .fileContains(
4282+ // "import org.jspecify.annotations.Nullable;",
4283+ // "(java.time.@Nullable Instant dtParam, java.time.@Nullable Instant dtQuery, java.time.@Nullable Instant dtCookie)"
4284+ // );
4285+ // }
4286+ // JavaFileAssert.assertThat(files.get("api/package-info.java"))
4287+ // .fileContains("@org.jspecify.annotations.NullMarked");
4288+ // JavaFileAssert.assertThat(files.get("model/package-info.java"))
4289+ // .fileContains("@org.jspecify.annotations.NullMarked");
4290+ // JavaFileAssert.assertThat(files.get("client/package-info.java"))
4291+ // .fileContains("@org.jspecify.annotations.NullMarked");
4292+ // }
42744293}
0 commit comments