Skip to content

Commit

Permalink
Merge pull request #29 from GoNZooo/r.kotlin-basic-tests
Browse files Browse the repository at this point in the history
testing(kt): add kotlin tests for "basic" suite of tests
  • Loading branch information
GoNZooo authored Oct 14, 2022
2 parents bbadd18 + 6f12729 commit 0339289
Show file tree
Hide file tree
Showing 17 changed files with 314 additions and 11 deletions.
6 changes: 6 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,11 @@
# Changelog

## 2.2.1

### Fixes

- Added trailing newline in Kotlin output

## 2.2.0

### Added
Expand Down
2 changes: 1 addition & 1 deletion gotyno-hs.cabal
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ cabal-version: 1.12
-- see: https://github.com/sol/hpack

name: gotyno-hs
version: 2.2.0
version: 2.2.1
synopsis: A type definition compiler supporting multiple output languages.
description: Compiles type definitions into F#, TypeScript and Python, with validators, decoders and encoders.
category: Compiler
Expand Down
2 changes: 1 addition & 1 deletion package.yaml
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
name: gotyno-hs
version: 2.2.0
version: 2.2.1
synopsis: A type definition compiler supporting multiple output languages.
description: Compiles type definitions into F#, TypeScript and Python, with validators, decoders and encoders.
license: BSD2
Expand Down
2 changes: 1 addition & 1 deletion src/CodeGeneration/Kotlin.hs
Original file line number Diff line number Diff line change
Expand Up @@ -50,7 +50,7 @@ outputModule module' =
moduleClassOutput,
definitionOutput,
"\n",
"}"
"}\n"
]

modulePrelude :: Text
Expand Down
54 changes: 51 additions & 3 deletions test/ParsingSpec.hs
Original file line number Diff line number Diff line change
Expand Up @@ -50,7 +50,14 @@ data PythonReferenceOutput = PythonReferenceOutput
}

data KotlinReferenceOutput = KotlinReferenceOutput
{ basic :: !Text,
{ basicStruct :: !Text,
basicUnion :: !Text,
genericStruct :: !Text,
genericUnion :: !Text,
basicEnumeration :: !Text,
basicImport :: !Text,
basicOptional :: !Text,
basic :: !Text,
import' :: !Text,
hasGeneric :: !Text,
generics :: !Text,
Expand Down Expand Up @@ -121,12 +128,33 @@ fSharpReferenceOutput = do

kotlinReferenceOutput :: IO KotlinReferenceOutput
kotlinReferenceOutput = do
basicStruct <- basicStructReferenceOutput "kt"
basicUnion <- basicUnionReferenceOutput "kt"
genericStruct <- genericStructReferenceOutput "kt"
genericUnion <- genericUnionReferenceOutput "kt"
basicEnumeration <- basicEnumerationReferenceOutput "kt"
basicImport <- basicImportReferenceOutput "kt"
basicOptional <- basicOptionalReferenceOutput "kt"
basic <- basicReferenceOutput "kt"
import' <- importReferenceOutput "kt"
hasGeneric <- hasGenericReferenceOutput "kt"
generics <- genericsReferenceOutput "kt"
gitHub <- gitHubReferenceOutput "kt"
pure KotlinReferenceOutput {basic, import', hasGeneric, generics, gitHub}
pure
KotlinReferenceOutput
{ basicStruct,
basicUnion,
genericStruct,
genericUnion,
basicEnumeration,
basicImport,
basicOptional,
basic,
import',
hasGeneric,
generics,
gitHub
}

dLangReferenceOutput :: IO DLangReferenceOutput
dLangReferenceOutput = do
Expand Down Expand Up @@ -236,7 +264,20 @@ spec
(HaskellReferenceOutput hsBasic hsImport hsHasGeneric hsGenerics hsGitHub)
(FSharpReferenceOutput fsBasic fsImport fsHasGeneric fsGenerics fsGitHub)
(PythonReferenceOutput pyPython pyBasic pyGenerics)
(KotlinReferenceOutput ktBasic ktImport ktHasGeneric ktGenerics ktGitHub)
( KotlinReferenceOutput
ktBasicStruct
ktBasicUnion
ktGenericStruct
ktGenericUnion
ktBasicEnumeration
ktBasicImport
ktBasicOptional
ktBasic
ktImport
ktHasGeneric
ktGenerics
ktGitHub
)
( DLangReferenceOutput
dBasicStruct
dBasicUnion
Expand Down Expand Up @@ -555,43 +596,50 @@ spec
basicStructModule <-
(getRight >>> PartialList.head) <$> parseModules ["examples/basicStruct.gotyno"]
TypeScript.outputModule basicStructModule `shouldBe` tsBasicStruct
Kotlin.outputModule basicStructModule `shouldBe` ktBasicStruct
DLang.outputModule basicStructModule `shouldBe` dBasicStruct

it "Mirrors reference output for `basicUnion.gotyno`" $ do
basicUnionModule <-
(getRight >>> PartialList.head) <$> parseModules ["examples/basicUnion.gotyno"]
TypeScript.outputModule basicUnionModule `shouldBe` tsBasicUnion
Kotlin.outputModule basicUnionModule `shouldBe` ktBasicUnion
DLang.outputModule basicUnionModule `shouldBe` dBasicUnion

it "Mirrors reference output for `genericStruct.gotyno`" $ do
genericStructModule <-
(getRight >>> PartialList.head) <$> parseModules ["examples/genericStruct.gotyno"]
TypeScript.outputModule genericStructModule `shouldBe` tsGenericStruct
Kotlin.outputModule genericStructModule `shouldBe` ktGenericStruct
DLang.outputModule genericStructModule `shouldBe` dGenericStruct

it "Mirrors reference output for `genericUnion.gotyno`" $ do
genericUnionModule <-
(getRight >>> PartialList.head) <$> parseModules ["examples/genericUnion.gotyno"]
TypeScript.outputModule genericUnionModule `shouldBe` tsGenericUnion
Kotlin.outputModule genericUnionModule `shouldBe` ktGenericUnion
DLang.outputModule genericUnionModule `shouldBe` dGenericUnion

it "Mirrors reference output for `basicEnumeration.gotyno`" $ do
enumerationModule <-
(getRight >>> PartialList.head) <$> parseModules ["examples/basicEnumeration.gotyno"]
TypeScript.outputModule enumerationModule `shouldBe` tsBasicEnumeration
Kotlin.outputModule enumerationModule `shouldBe` ktBasicEnumeration
DLang.outputModule enumerationModule `shouldBe` dBasicEnumeration

it "Mirrors reference output for `basicImport.gotyno`" $ do
basicImportModule <-
(getRight >>> PartialList.last)
<$> parseModules ["examples/basicStruct.gotyno", "examples/basicImport.gotyno"]
TypeScript.outputModule basicImportModule `shouldBe` tsBasicImport
Kotlin.outputModule basicImportModule `shouldBe` ktBasicImport
DLang.outputModule basicImportModule `shouldBe` dBasicImport

it "Mirrors reference output for `basicOptional.gotyno`" $ do
basicOptionalModule <-
(getRight >>> PartialList.head) <$> parseModules ["examples/basicOptional.gotyno"]
TypeScript.outputModule basicOptionalModule `shouldBe` tsBasicOptional
Kotlin.outputModule basicOptionalModule `shouldBe` ktBasicOptional
DLang.outputModule basicOptionalModule `shouldBe` dBasicOptional

it "Mirrors reference output for `basic.gotyno`" $ do
Expand Down
2 changes: 1 addition & 1 deletion test/reference-output/basic.kt
Original file line number Diff line number Diff line change
Expand Up @@ -232,4 +232,4 @@ sealed class EmbeddedEvent : java.io.Serializable {
}
}
}
}
}
31 changes: 31 additions & 0 deletions test/reference-output/basicEnumeration.kt
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
package org.gotynoOutput

import com.fasterxml.jackson.annotation.*
import com.fasterxml.jackson.module.kotlin.*
import com.fasterxml.jackson.databind.annotation.*
import com.fasterxml.jackson.databind.*
import com.fasterxml.jackson.core.*
import com.fasterxml.jackson.databind.deser.std.*
import java.text.ParseException
import java.math.BigInteger
import kotlinx.serialization.Serializable

class BasicEnumeration {
enum class StringValues(val data: String) : java.io.Serializable {
@JsonProperty("first") FIRST("first"),
@JsonProperty("second") SECOND("second"),
@JsonProperty("Third") THIRD("Third"),
@JsonProperty("Fourth") FOURTH("Fourth");

companion object {}
}

enum class IntValues(val data: Int) : java.io.Serializable {
@JsonProperty(1) FIRST(1),
@JsonProperty(2) SECOND(2),
@JsonProperty(3) THIRD(3),
@JsonProperty(4) FOURTH(4);

companion object {}
}
}
35 changes: 35 additions & 0 deletions test/reference-output/basicImport.kt
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
package org.gotynoOutput

import com.fasterxml.jackson.annotation.*
import com.fasterxml.jackson.module.kotlin.*
import com.fasterxml.jackson.databind.annotation.*
import com.fasterxml.jackson.databind.*
import com.fasterxml.jackson.core.*
import com.fasterxml.jackson.databind.deser.std.*
import java.text.ParseException
import java.math.BigInteger
import kotlinx.serialization.Serializable

import org.gotynoOutput.BasicStruct

class BasicImport {
@Serializable
data class StructUsingImport(
@get:JsonProperty("field")
val field: BasicStruct.BasicStruct
) : java.io.Serializable

@Serializable
@JsonTypeInfo(
use = JsonTypeInfo.Id.NAME,
include = JsonTypeInfo.As.EXISTING_PROPERTY,
property = "type"
)
sealed class UnionUsingImport : java.io.Serializable {
@Serializable
@JsonTypeName("ConstructorWithPayload")
data class ConstructorWithPayload(val data: BasicStruct.BasicStruct) : UnionUsingImport(), java.io.Serializable {
val type = "ConstructorWithPayload"
}
}
}
49 changes: 49 additions & 0 deletions test/reference-output/basicOptional.kt
Original file line number Diff line number Diff line change
@@ -0,0 +1,49 @@
package org.gotynoOutput

import com.fasterxml.jackson.annotation.*
import com.fasterxml.jackson.module.kotlin.*
import com.fasterxml.jackson.databind.annotation.*
import com.fasterxml.jackson.databind.*
import com.fasterxml.jackson.core.*
import com.fasterxml.jackson.databind.deser.std.*
import java.text.ParseException
import java.math.BigInteger
import kotlinx.serialization.Serializable

class BasicOptional {
@Serializable
data class HasOptionalString(
@get:JsonProperty("stringField")
val stringField: String?,
@get:JsonProperty("optionalArrayField")
val optionalArrayField: ArrayList<Int>?,
@get:JsonProperty("arrayOfOptionalField")
val arrayOfOptionalField: ArrayList<Int?>
) : java.io.Serializable

@Serializable
@JsonTypeInfo(
use = JsonTypeInfo.Id.NAME,
include = JsonTypeInfo.As.EXISTING_PROPERTY,
property = "type"
)
sealed class HasOptionalConstructor : java.io.Serializable {
@Serializable
@JsonTypeName("DoesNot")
data class DoesNot(val data: Int) : HasOptionalConstructor(), java.io.Serializable {
val type = "DoesNot"
}

@Serializable
@JsonTypeName("Does")
data class Does(val data: Int?) : HasOptionalConstructor(), java.io.Serializable {
val type = "Does"
}

@Serializable
@JsonTypeName("HasOptionalStruct")
data class HasOptionalStruct(val data: HasOptionalString?) : HasOptionalConstructor(), java.io.Serializable {
val type = "HasOptionalStruct"
}
}
}
21 changes: 21 additions & 0 deletions test/reference-output/basicStruct.kt
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
package org.gotynoOutput

import com.fasterxml.jackson.annotation.*
import com.fasterxml.jackson.module.kotlin.*
import com.fasterxml.jackson.databind.annotation.*
import com.fasterxml.jackson.databind.*
import com.fasterxml.jackson.core.*
import com.fasterxml.jackson.databind.deser.std.*
import java.text.ParseException
import java.math.BigInteger
import kotlinx.serialization.Serializable

class BasicStruct {
@Serializable
data class BasicStruct(
@get:JsonProperty("field1")
val field1: Int,
@get:JsonProperty("field2")
val field2: String
) : java.io.Serializable
}
53 changes: 53 additions & 0 deletions test/reference-output/basicUnion.kt
Original file line number Diff line number Diff line change
@@ -0,0 +1,53 @@
package org.gotynoOutput

import com.fasterxml.jackson.annotation.*
import com.fasterxml.jackson.module.kotlin.*
import com.fasterxml.jackson.databind.annotation.*
import com.fasterxml.jackson.databind.*
import com.fasterxml.jackson.core.*
import com.fasterxml.jackson.databind.deser.std.*
import java.text.ParseException
import java.math.BigInteger
import kotlinx.serialization.Serializable

class BasicUnion {
@Serializable
data class PayloadStruct(
@get:JsonProperty("field1")
val field1: Int
) : java.io.Serializable

@Serializable
@JsonTypeInfo(
use = JsonTypeInfo.Id.NAME,
include = JsonTypeInfo.As.EXISTING_PROPERTY,
property = "type"
)
sealed class BasicUnion : java.io.Serializable {
@Serializable
@JsonTypeName("HasStringPayload")
data class HasStringPayload(val data: String) : BasicUnion(), java.io.Serializable {
val type = "HasStringPayload"
}

@Serializable
@JsonTypeName("HasPayload")
data class HasPayload(val data: PayloadStruct) : BasicUnion(), java.io.Serializable {
val type = "HasPayload"
}

@Serializable
@JsonTypeName("HasNoPayload")
class HasNoPayload : BasicUnion(), java.io.Serializable {
val type = "HasNoPayload"

override fun equals(other: Any?): Boolean {
return other is HasNoPayload
}

override fun hashCode(): Int {
return 0
}
}
}
}
19 changes: 19 additions & 0 deletions test/reference-output/genericStruct.kt
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
package org.gotynoOutput

import com.fasterxml.jackson.annotation.*
import com.fasterxml.jackson.module.kotlin.*
import com.fasterxml.jackson.databind.annotation.*
import com.fasterxml.jackson.databind.*
import com.fasterxml.jackson.core.*
import com.fasterxml.jackson.databind.deser.std.*
import java.text.ParseException
import java.math.BigInteger
import kotlinx.serialization.Serializable

class GenericStruct {
@Serializable
data class GenericStruct<T>(
@get:JsonProperty("field")
val field: T
) : java.io.Serializable
}
Loading

0 comments on commit 0339289

Please sign in to comment.