From 4a93090ccc691e9f52868487b2955ec91babd4df Mon Sep 17 00:00:00 2001 From: Marcin Grzejszczak Date: Tue, 28 Mar 2017 14:41:51 +0200 Subject: [PATCH] Adding an option to override file extension (#255) without this change it's impossible to change the generated file extension with this change you can do it. E.g. provide your own test generator that will store files in `.php` file fixes #253 --- .../cloud/contract/verifier/FileSaver.groovy | 17 +++++++++++------ .../contract/verifier/TestGenerator.groovy | 2 +- .../verifier/builder/JavaTestGenerator.groovy | 5 +++++ .../verifier/builder/SingleTestGenerator.groovy | 10 +++++++--- .../verifier/config/TestFramework.groovy | 7 ++++--- 5 files changed, 28 insertions(+), 13 deletions(-) diff --git a/spring-cloud-contract-verifier/src/main/groovy/org/springframework/cloud/contract/verifier/FileSaver.groovy b/spring-cloud-contract-verifier/src/main/groovy/org/springframework/cloud/contract/verifier/FileSaver.groovy index b479fb18d0..536e35c42a 100644 --- a/spring-cloud-contract-verifier/src/main/groovy/org/springframework/cloud/contract/verifier/FileSaver.groovy +++ b/spring-cloud-contract-verifier/src/main/groovy/org/springframework/cloud/contract/verifier/FileSaver.groovy @@ -17,8 +17,10 @@ package org.springframework.cloud.contract.verifier import groovy.transform.CompileStatic +import groovy.transform.PackageScope import groovy.util.logging.Slf4j -import org.springframework.cloud.contract.verifier.config.TestFramework +import org.springframework.cloud.contract.verifier.builder.SingleTestGenerator +import org.springframework.cloud.contract.verifier.config.ContractVerifierConfigProperties import java.nio.file.Files import java.nio.file.Path @@ -30,22 +32,25 @@ import static org.springframework.cloud.contract.verifier.util.NamesUtil.capital import static org.springframework.cloud.contract.verifier.util.NamesUtil.packageToDirectory @CompileStatic +@PackageScope @Slf4j class FileSaver { - File targetDirectory - TestFramework framework + private final File targetDirectory + private final SingleTestGenerator generator + private final ContractVerifierConfigProperties properties - FileSaver(File targetDirectory, TestFramework framework) { + FileSaver(File targetDirectory, SingleTestGenerator generator, ContractVerifierConfigProperties properties) { this.targetDirectory = targetDirectory - this.framework = framework + this.generator = generator + this.properties = properties } void saveClassFile(String fileName, String basePackageClass, String includedDirectoryRelativePath, byte[] classBytes) { Path testBaseDir = Paths.get(targetDirectory.absolutePath, packageToDirectory(basePackageClass), beforeLast(includedDirectoryRelativePath, File.separator)) Files.createDirectories(testBaseDir) - Path classPath = Paths.get(testBaseDir.toString(), capitalize(fileName) + framework.classExtension).toAbsolutePath() + Path classPath = Paths.get(testBaseDir.toString(), capitalize(fileName) + generator.fileExtension(this.properties)).toAbsolutePath() log.info("Creating new class file [$classPath]") Files.write(classPath, classBytes, StandardOpenOption.CREATE, StandardOpenOption.TRUNCATE_EXISTING) } diff --git a/spring-cloud-contract-verifier/src/main/groovy/org/springframework/cloud/contract/verifier/TestGenerator.groovy b/spring-cloud-contract-verifier/src/main/groovy/org/springframework/cloud/contract/verifier/TestGenerator.groovy index 30e2efbe98..e3a34c2bbc 100755 --- a/spring-cloud-contract-verifier/src/main/groovy/org/springframework/cloud/contract/verifier/TestGenerator.groovy +++ b/spring-cloud-contract-verifier/src/main/groovy/org/springframework/cloud/contract/verifier/TestGenerator.groovy @@ -48,7 +48,7 @@ class TestGenerator { TestGenerator(ContractVerifierConfigProperties configProperties) { this(configProperties, singleTestGenerator(), - new FileSaver(configProperties.generatedTestSourcesDir, configProperties.targetFramework)) + new FileSaver(configProperties.generatedTestSourcesDir, singleTestGenerator(), configProperties)) } private static SingleTestGenerator singleTestGenerator() { diff --git a/spring-cloud-contract-verifier/src/main/groovy/org/springframework/cloud/contract/verifier/builder/JavaTestGenerator.groovy b/spring-cloud-contract-verifier/src/main/groovy/org/springframework/cloud/contract/verifier/builder/JavaTestGenerator.groovy index b375556fe4..6ab0756926 100644 --- a/spring-cloud-contract-verifier/src/main/groovy/org/springframework/cloud/contract/verifier/builder/JavaTestGenerator.groovy +++ b/spring-cloud-contract-verifier/src/main/groovy/org/springframework/cloud/contract/verifier/builder/JavaTestGenerator.groovy @@ -109,6 +109,11 @@ class JavaTestGenerator implements SingleTestGenerator { return clazz.build() } + @Override + String fileExtension(ContractVerifierConfigProperties properties) { + return properties.targetFramework.classExtension + } + private Map mapContractsToTheirTestTypes(Collection listOfFiles) { Map dsls = [:] listOfFiles.each { ContractMetadata metadata -> diff --git a/spring-cloud-contract-verifier/src/main/groovy/org/springframework/cloud/contract/verifier/builder/SingleTestGenerator.groovy b/spring-cloud-contract-verifier/src/main/groovy/org/springframework/cloud/contract/verifier/builder/SingleTestGenerator.groovy index 3339e9b2b2..8a2c032baa 100644 --- a/spring-cloud-contract-verifier/src/main/groovy/org/springframework/cloud/contract/verifier/builder/SingleTestGenerator.groovy +++ b/spring-cloud-contract-verifier/src/main/groovy/org/springframework/cloud/contract/verifier/builder/SingleTestGenerator.groovy @@ -16,16 +16,13 @@ package org.springframework.cloud.contract.verifier.builder -import groovy.transform.CompileStatic import org.springframework.cloud.contract.verifier.config.ContractVerifierConfigProperties import org.springframework.cloud.contract.verifier.file.ContractMetadata - /** * Builds a single test. * * @since 1.1.0 */ -@CompileStatic interface SingleTestGenerator { /** @@ -41,4 +38,11 @@ interface SingleTestGenerator { */ String buildClass(ContractVerifierConfigProperties properties, Collection listOfFiles, String className, String classPackage, String includedDirectoryRelativePath) + + /** + * Extension that should be appended to the generated test class. E.g. {@code .java} or {@code .php} + * + * @param properties - properties passed to the plugin + */ + String fileExtension(ContractVerifierConfigProperties properties) } diff --git a/spring-cloud-contract-verifier/src/main/groovy/org/springframework/cloud/contract/verifier/config/TestFramework.groovy b/spring-cloud-contract-verifier/src/main/groovy/org/springframework/cloud/contract/verifier/config/TestFramework.groovy index a7d44dd3a1..c223bcb6db 100644 --- a/spring-cloud-contract-verifier/src/main/groovy/org/springframework/cloud/contract/verifier/config/TestFramework.groovy +++ b/spring-cloud-contract-verifier/src/main/groovy/org/springframework/cloud/contract/verifier/config/TestFramework.groovy @@ -25,13 +25,14 @@ package org.springframework.cloud.contract.verifier.config */ enum TestFramework { JUNIT("public ", "public void ", ";", ".java", "Test", "org.junit.Ignore", ["org.junit.FixMethodOrder", "org.junit.runners.MethodSorters"], "@FixMethodOrder(MethodSorters.NAME_ASCENDING)"), - SPOCK("", "def ", "", ".groovy", "Spec", "spock.lang.Ignore", ["spock.lang.Stepwise"], "@Stepwise") + SPOCK("", "def ", "", ".groovy", "Spec", "spock.lang.Ignore", ["spock.lang.Stepwise"], "@Stepwise"), + CUSTOM("", "", "", "", "", "", [], "") private final String classModifier private final String methodModifier private final String lineSuffix - private final String classExtension; - private final String classNameSuffix; + private final String classExtension + private final String classNameSuffix private final String ignoreClass private final List orderAnnotationImports private final String orderAnnotation