From bdd686229c5cb281646703f5f1d054413d010393 Mon Sep 17 00:00:00 2001 From: "Sean C. Sullivan" Date: Sat, 7 Sep 2019 17:00:03 -0700 Subject: [PATCH 1/7] [scala][client] add Scala reserved words test --- .../scalaakka/ScalaAkkaClientCodegenTest.java | 55 ++++++++++++-- .../resources/3_0/scala_reserved_words.yaml | 71 +++++++++++++++++++ 2 files changed, 122 insertions(+), 4 deletions(-) create mode 100644 modules/openapi-generator/src/test/resources/3_0/scala_reserved_words.yaml diff --git a/modules/openapi-generator/src/test/java/org/openapitools/codegen/scalaakka/ScalaAkkaClientCodegenTest.java b/modules/openapi-generator/src/test/java/org/openapitools/codegen/scalaakka/ScalaAkkaClientCodegenTest.java index 25a861ba8a1f..c792aece8f11 100644 --- a/modules/openapi-generator/src/test/java/org/openapitools/codegen/scalaakka/ScalaAkkaClientCodegenTest.java +++ b/modules/openapi-generator/src/test/java/org/openapitools/codegen/scalaakka/ScalaAkkaClientCodegenTest.java @@ -21,14 +21,17 @@ import io.swagger.v3.oas.models.OpenAPI; import io.swagger.v3.oas.models.media.*; import io.swagger.v3.parser.util.SchemaTypeUtil; -import org.openapitools.codegen.CodegenModel; -import org.openapitools.codegen.CodegenProperty; -import org.openapitools.codegen.DefaultCodegen; -import org.openapitools.codegen.TestUtils; +import org.openapitools.codegen.*; +import org.openapitools.codegen.config.CodegenConfigurator; import org.openapitools.codegen.languages.ScalaAkkaClientCodegen; import org.testng.Assert; import org.testng.annotations.Test; +import java.io.File; +import java.nio.file.Files; +import java.util.HashMap; +import java.util.Map; + public class ScalaAkkaClientCodegenTest { private ScalaAkkaClientCodegen scalaAkkaClientCodegen; @@ -276,4 +279,48 @@ public void mapModelTest() { Assert.assertEquals(Sets.intersection(cm.imports, Sets.newHashSet("Map", "Children")).size(), 1); } + @Test(description = "verify handling of Scala reserved words") + public void scalaReservedWordTest() throws Exception { + Map properties = new HashMap<>(); + + File output = Files.createTempDirectory("test").toFile(); + output.deleteOnExit(); + + final DefaultCodegen codegen = new ScalaAkkaClientCodegen(); + + final CodegenConfigurator configurator = new CodegenConfigurator() + .setGeneratorName(codegen.getName()) + .setAdditionalProperties(properties) + .setInputSpec("src/test/resources/3_0/scala_reserved_words.yaml") + .setOutputDir(output.getAbsolutePath().replace("\\", "/")); + + final ClientOptInput clientOptInput = configurator.toClientOptInput(); + MockDefaultGenerator generator = new MockDefaultGenerator(); + generator.opts(clientOptInput).generate(); + + Map generatedFiles = generator.getFiles(); + Assert.assertEquals(generatedFiles.size(), 13); + + final String someObjFilename = output.getAbsolutePath() + "/src/main/scala/org/openapitools/client/model/SomeObj.scala"; + final String someObjFileContents = generatedFiles.get(someObjFilename); + Assert.assertTrue(someObjFileContents.contains("package org.openapitools.client.model")); + Assert.assertTrue(someObjFileContents.contains("case class SomeObj")); + Assert.assertTrue(someObjFileContents.contains("id: Option[Long] = None,")); + Assert.assertTrue(someObjFileContents.contains("name: Option[String] = None,")); + Assert.assertTrue(someObjFileContents.contains("`val`: Option[String] = None,")); + Assert.assertTrue(someObjFileContents.contains("`var`: Option[String] = None,")); + Assert.assertTrue(someObjFileContents.contains("`class`: Option[String] = None,")); + Assert.assertTrue(someObjFileContents.contains("`trait`: Option[String] = None,")); + Assert.assertTrue(someObjFileContents.contains("`object`: Option[String] = None,")); + Assert.assertTrue(someObjFileContents.contains("`try`: Option[String] = None,")); + Assert.assertTrue(someObjFileContents.contains("`catch`: Option[String] = None,")); + Assert.assertTrue(someObjFileContents.contains("`finally`: Option[String] = None,")); + Assert.assertTrue(someObjFileContents.contains("`def`: Option[String] = None,")); + Assert.assertTrue(someObjFileContents.contains("`for`: Option[String] = None,")); + Assert.assertTrue(someObjFileContents.contains("`implicit`: Option[String] = None,")); + Assert.assertTrue(someObjFileContents.contains("`match`: Option[String] = None,")); + Assert.assertTrue(someObjFileContents.contains("`case`: Option[String] = None,")); + Assert.assertTrue(someObjFileContents.contains("`type`: Option[String] = None,")); + Assert.assertTrue(someObjFileContents.contains("foobar: Option[Boolean] = None")); + } } diff --git a/modules/openapi-generator/src/test/resources/3_0/scala_reserved_words.yaml b/modules/openapi-generator/src/test/resources/3_0/scala_reserved_words.yaml new file mode 100644 index 000000000000..7833ab53f7b8 --- /dev/null +++ b/modules/openapi-generator/src/test/resources/3_0/scala_reserved_words.yaml @@ -0,0 +1,71 @@ +openapi: 3.0.1 +info: + title: ping some object + version: '1.0' +servers: + - url: 'http://localhost:8082/' +paths: + /ping: + post: + operationId: postPing + tags: + - ping + requestBody: + content: + 'application/json': + schema: + $ref: "#/components/schemas/SomeObj" + responses: + '200': + description: OK + content: + 'application/json': + schema: + $ref: "#/components/schemas/SomeObj" +components: + schemas: + SomeObj: + type: object + properties: + $_type: + type: string + # using 'enum' & 'default' for '$_type' is a work-around until constants are supported + # See https://github.com/OAI/OpenAPI-Specification/issues/1313 + enum: + - SomeObjIdentifier + default: SomeObjIdentifier + id: + type: integer + format: int64 + name: + type: string + val: + type: string + var: + type: string + class: + type: string + trait: + type: string + object: + type: string + try: + type: string + catch: + type: string + finally: + type: string + def: + type: string + for: + type: string + implicit: + type: string + match: + type: string + case: + type: string + type: + type: string + foobar: + type: boolean From a9608e01576cafd609cd79e2556cc7e30bab710c Mon Sep 17 00:00:00 2001 From: "Sean C. Sullivan" Date: Sat, 7 Sep 2019 18:16:59 -0700 Subject: [PATCH 2/7] fix filesystem path in [ScalaAkkaClientCodegenTest] --- .../codegen/scalaakka/ScalaAkkaClientCodegenTest.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/modules/openapi-generator/src/test/java/org/openapitools/codegen/scalaakka/ScalaAkkaClientCodegenTest.java b/modules/openapi-generator/src/test/java/org/openapitools/codegen/scalaakka/ScalaAkkaClientCodegenTest.java index c792aece8f11..4e86f9a66a85 100644 --- a/modules/openapi-generator/src/test/java/org/openapitools/codegen/scalaakka/ScalaAkkaClientCodegenTest.java +++ b/modules/openapi-generator/src/test/java/org/openapitools/codegen/scalaakka/ScalaAkkaClientCodegenTest.java @@ -301,7 +301,7 @@ public void scalaReservedWordTest() throws Exception { Map generatedFiles = generator.getFiles(); Assert.assertEquals(generatedFiles.size(), 13); - final String someObjFilename = output.getAbsolutePath() + "/src/main/scala/org/openapitools/client/model/SomeObj.scala"; + final String someObjFilename = new File(output, "src/main/scala/org/openapitools/client/model/SomeObj.scala").getAbsolutePath().replace("\\", "/"); final String someObjFileContents = generatedFiles.get(someObjFilename); Assert.assertTrue(someObjFileContents.contains("package org.openapitools.client.model")); Assert.assertTrue(someObjFileContents.contains("case class SomeObj")); From 52b78319d5facb28661ac11d1c3e5e4336641f45 Mon Sep 17 00:00:00 2001 From: "Sean C. Sullivan" Date: Sat, 7 Sep 2019 18:32:41 -0700 Subject: [PATCH 3/7] add additional reserved words in scala_reserved_words.yaml --- .../codegen/scalaakka/ScalaAkkaClientCodegenTest.java | 3 +++ .../src/test/resources/3_0/scala_reserved_words.yaml | 6 ++++++ 2 files changed, 9 insertions(+) diff --git a/modules/openapi-generator/src/test/java/org/openapitools/codegen/scalaakka/ScalaAkkaClientCodegenTest.java b/modules/openapi-generator/src/test/java/org/openapitools/codegen/scalaakka/ScalaAkkaClientCodegenTest.java index 4e86f9a66a85..48345d7cd197 100644 --- a/modules/openapi-generator/src/test/java/org/openapitools/codegen/scalaakka/ScalaAkkaClientCodegenTest.java +++ b/modules/openapi-generator/src/test/java/org/openapitools/codegen/scalaakka/ScalaAkkaClientCodegenTest.java @@ -320,6 +320,9 @@ public void scalaReservedWordTest() throws Exception { Assert.assertTrue(someObjFileContents.contains("`implicit`: Option[String] = None,")); Assert.assertTrue(someObjFileContents.contains("`match`: Option[String] = None,")); Assert.assertTrue(someObjFileContents.contains("`case`: Option[String] = None,")); + Assert.assertTrue(someObjFileContents.contains("`import`: Option[String] = None,")); + Assert.assertTrue(someObjFileContents.contains("`lazy`: Option[String] = None,")); + Assert.assertTrue(someObjFileContents.contains("`private`: Option[String] = None,")); Assert.assertTrue(someObjFileContents.contains("`type`: Option[String] = None,")); Assert.assertTrue(someObjFileContents.contains("foobar: Option[Boolean] = None")); } diff --git a/modules/openapi-generator/src/test/resources/3_0/scala_reserved_words.yaml b/modules/openapi-generator/src/test/resources/3_0/scala_reserved_words.yaml index 7833ab53f7b8..547b89ba22b3 100644 --- a/modules/openapi-generator/src/test/resources/3_0/scala_reserved_words.yaml +++ b/modules/openapi-generator/src/test/resources/3_0/scala_reserved_words.yaml @@ -65,6 +65,12 @@ components: type: string case: type: string + import: + type: string + lazy: + type: string + private: + type: string type: type: string foobar: From 3e8fce63d54fb7672143fd34eb2b9db7846ad532 Mon Sep 17 00:00:00 2001 From: "Sean C. Sullivan" Date: Sat, 7 Sep 2019 18:39:32 -0700 Subject: [PATCH 4/7] ScalaAkkaClientCodegenTest: set mainPackage --- .../codegen/scalaakka/ScalaAkkaClientCodegenTest.java | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/modules/openapi-generator/src/test/java/org/openapitools/codegen/scalaakka/ScalaAkkaClientCodegenTest.java b/modules/openapi-generator/src/test/java/org/openapitools/codegen/scalaakka/ScalaAkkaClientCodegenTest.java index 48345d7cd197..45073effa0e6 100644 --- a/modules/openapi-generator/src/test/java/org/openapitools/codegen/scalaakka/ScalaAkkaClientCodegenTest.java +++ b/modules/openapi-generator/src/test/java/org/openapitools/codegen/scalaakka/ScalaAkkaClientCodegenTest.java @@ -282,6 +282,7 @@ public void mapModelTest() { @Test(description = "verify handling of Scala reserved words") public void scalaReservedWordTest() throws Exception { Map properties = new HashMap<>(); + properties.put("mainPackage", "hello.world"); File output = Files.createTempDirectory("test").toFile(); output.deleteOnExit(); @@ -301,9 +302,9 @@ public void scalaReservedWordTest() throws Exception { Map generatedFiles = generator.getFiles(); Assert.assertEquals(generatedFiles.size(), 13); - final String someObjFilename = new File(output, "src/main/scala/org/openapitools/client/model/SomeObj.scala").getAbsolutePath().replace("\\", "/"); + final String someObjFilename = new File(output, "src/main/scala/hello/world/model/SomeObj.scala").getAbsolutePath().replace("\\", "/"); final String someObjFileContents = generatedFiles.get(someObjFilename); - Assert.assertTrue(someObjFileContents.contains("package org.openapitools.client.model")); + Assert.assertTrue(someObjFileContents.contains("package hello.world.model")); Assert.assertTrue(someObjFileContents.contains("case class SomeObj")); Assert.assertTrue(someObjFileContents.contains("id: Option[Long] = None,")); Assert.assertTrue(someObjFileContents.contains("name: Option[String] = None,")); From ecd934123b9849964739cb87aa99128a8ccb6461 Mon Sep 17 00:00:00 2001 From: "Sean C. Sullivan" Date: Sat, 7 Sep 2019 18:49:30 -0700 Subject: [PATCH 5/7] scala_reserved_words.yaml: declare 'required' fields --- .../scalaakka/ScalaAkkaClientCodegenTest.java | 12 ++++++------ .../src/test/resources/3_0/scala_reserved_words.yaml | 7 +++++++ 2 files changed, 13 insertions(+), 6 deletions(-) diff --git a/modules/openapi-generator/src/test/java/org/openapitools/codegen/scalaakka/ScalaAkkaClientCodegenTest.java b/modules/openapi-generator/src/test/java/org/openapitools/codegen/scalaakka/ScalaAkkaClientCodegenTest.java index 45073effa0e6..2b0b85f87755 100644 --- a/modules/openapi-generator/src/test/java/org/openapitools/codegen/scalaakka/ScalaAkkaClientCodegenTest.java +++ b/modules/openapi-generator/src/test/java/org/openapitools/codegen/scalaakka/ScalaAkkaClientCodegenTest.java @@ -306,25 +306,25 @@ public void scalaReservedWordTest() throws Exception { final String someObjFileContents = generatedFiles.get(someObjFilename); Assert.assertTrue(someObjFileContents.contains("package hello.world.model")); Assert.assertTrue(someObjFileContents.contains("case class SomeObj")); - Assert.assertTrue(someObjFileContents.contains("id: Option[Long] = None,")); + Assert.assertTrue(someObjFileContents.contains("id: Long,")); Assert.assertTrue(someObjFileContents.contains("name: Option[String] = None,")); Assert.assertTrue(someObjFileContents.contains("`val`: Option[String] = None,")); Assert.assertTrue(someObjFileContents.contains("`var`: Option[String] = None,")); Assert.assertTrue(someObjFileContents.contains("`class`: Option[String] = None,")); Assert.assertTrue(someObjFileContents.contains("`trait`: Option[String] = None,")); Assert.assertTrue(someObjFileContents.contains("`object`: Option[String] = None,")); - Assert.assertTrue(someObjFileContents.contains("`try`: Option[String] = None,")); - Assert.assertTrue(someObjFileContents.contains("`catch`: Option[String] = None,")); - Assert.assertTrue(someObjFileContents.contains("`finally`: Option[String] = None,")); + Assert.assertTrue(someObjFileContents.contains("`try`: String,")); + Assert.assertTrue(someObjFileContents.contains("`catch`: String,")); + Assert.assertTrue(someObjFileContents.contains("`finally`: String,")); Assert.assertTrue(someObjFileContents.contains("`def`: Option[String] = None,")); Assert.assertTrue(someObjFileContents.contains("`for`: Option[String] = None,")); Assert.assertTrue(someObjFileContents.contains("`implicit`: Option[String] = None,")); Assert.assertTrue(someObjFileContents.contains("`match`: Option[String] = None,")); Assert.assertTrue(someObjFileContents.contains("`case`: Option[String] = None,")); Assert.assertTrue(someObjFileContents.contains("`import`: Option[String] = None,")); - Assert.assertTrue(someObjFileContents.contains("`lazy`: Option[String] = None,")); + Assert.assertTrue(someObjFileContents.contains("`lazy`: String,")); Assert.assertTrue(someObjFileContents.contains("`private`: Option[String] = None,")); Assert.assertTrue(someObjFileContents.contains("`type`: Option[String] = None,")); - Assert.assertTrue(someObjFileContents.contains("foobar: Option[Boolean] = None")); + Assert.assertTrue(someObjFileContents.contains("foobar: Boolean")); } } diff --git a/modules/openapi-generator/src/test/resources/3_0/scala_reserved_words.yaml b/modules/openapi-generator/src/test/resources/3_0/scala_reserved_words.yaml index 547b89ba22b3..8eb0885bd8b1 100644 --- a/modules/openapi-generator/src/test/resources/3_0/scala_reserved_words.yaml +++ b/modules/openapi-generator/src/test/resources/3_0/scala_reserved_words.yaml @@ -75,3 +75,10 @@ components: type: string foobar: type: boolean + required: + - id + - try + - catch + - finally + - lazy + - foobar From 85c833437a78c10536ed42a9b62f1dc87b0647b8 Mon Sep 17 00:00:00 2001 From: "Sean C. Sullivan" Date: Sat, 7 Sep 2019 19:47:30 -0700 Subject: [PATCH 6/7] rename test method --- .../codegen/scalaakka/ScalaAkkaClientCodegenTest.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/modules/openapi-generator/src/test/java/org/openapitools/codegen/scalaakka/ScalaAkkaClientCodegenTest.java b/modules/openapi-generator/src/test/java/org/openapitools/codegen/scalaakka/ScalaAkkaClientCodegenTest.java index 2b0b85f87755..92544f1955d2 100644 --- a/modules/openapi-generator/src/test/java/org/openapitools/codegen/scalaakka/ScalaAkkaClientCodegenTest.java +++ b/modules/openapi-generator/src/test/java/org/openapitools/codegen/scalaakka/ScalaAkkaClientCodegenTest.java @@ -280,7 +280,7 @@ public void mapModelTest() { } @Test(description = "verify handling of Scala reserved words") - public void scalaReservedWordTest() throws Exception { + public void codeGenerationTest() throws Exception { Map properties = new HashMap<>(); properties.put("mainPackage", "hello.world"); From b22a4cd65ff89ebaa7f2ff56a51865604ed40cc6 Mon Sep 17 00:00:00 2001 From: "Sean C. Sullivan" Date: Sat, 7 Sep 2019 19:51:07 -0700 Subject: [PATCH 7/7] tweak test description --- .../codegen/scalaakka/ScalaAkkaClientCodegenTest.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/modules/openapi-generator/src/test/java/org/openapitools/codegen/scalaakka/ScalaAkkaClientCodegenTest.java b/modules/openapi-generator/src/test/java/org/openapitools/codegen/scalaakka/ScalaAkkaClientCodegenTest.java index 92544f1955d2..40dd7b39253a 100644 --- a/modules/openapi-generator/src/test/java/org/openapitools/codegen/scalaakka/ScalaAkkaClientCodegenTest.java +++ b/modules/openapi-generator/src/test/java/org/openapitools/codegen/scalaakka/ScalaAkkaClientCodegenTest.java @@ -279,7 +279,7 @@ public void mapModelTest() { Assert.assertEquals(Sets.intersection(cm.imports, Sets.newHashSet("Map", "Children")).size(), 1); } - @Test(description = "verify handling of Scala reserved words") + @Test(description = "validate codegen output") public void codeGenerationTest() throws Exception { Map properties = new HashMap<>(); properties.put("mainPackage", "hello.world");