From 30ba8ce6398b0fe693a5fa2dfbb01ba89c623f56 Mon Sep 17 00:00:00 2001 From: Jakub Kubrynski Date: Tue, 27 Jan 2015 16:19:27 +0100 Subject: [PATCH] Configuration contains additional imports that should be added to generated classes --- .../io/coderate/accurest/TestGenerator.groovy | 60 ++++++++++--------- .../accurest/builder/ClassBuilder.groovy | 15 +++-- .../config/AccurestConfigProperties.groovy | 11 ++-- .../plugin/AccurestGradlePlugin.groovy | 10 ++-- 4 files changed, 49 insertions(+), 47 deletions(-) rename accurest-gradle-plugin/src/main/groovy/io/codearte/accurest/plugin/AccurestPluginExtension.groovy => accurest-core/src/main/groovy/io/coderate/accurest/config/AccurestConfigProperties.groovy (60%) diff --git a/accurest-core/src/main/groovy/io/coderate/accurest/TestGenerator.groovy b/accurest-core/src/main/groovy/io/coderate/accurest/TestGenerator.groovy index 34847cad64..e786a9c0a8 100644 --- a/accurest-core/src/main/groovy/io/coderate/accurest/TestGenerator.groovy +++ b/accurest-core/src/main/groovy/io/coderate/accurest/TestGenerator.groovy @@ -1,6 +1,7 @@ package io.coderate.accurest import io.coderate.accurest.builder.ClassBuilder +import io.coderate.accurest.config.AccurestConfigProperties import io.coderate.accurest.config.TestFramework import io.coderate.accurest.config.TestMode import io.coderate.accurest.util.NamesUtil @@ -16,44 +17,31 @@ import static io.coderate.accurest.builder.MethodBuilder.createTestMethod */ class TestGenerator { - private final String stubsBaseDirectory - private final String basePackageForTests - private final String baseClassForTests - private final String ruleClassForTests - private final TestFramework lang private final String targetDirectory - private final TestMode testMode + private final AccurestConfigProperties configProperties + private final String stubsBaseDirectory - TestGenerator(String stubsBaseDirectory, String basePackageForTests, String baseClassForTests, - String ruleClassForTests, TestFramework testFramework, TestMode testMode, String targetDirectory) { - this.testMode = testMode - this.targetDirectory = targetDirectory - File stubsResource = new File(stubsBaseDirectory) + TestGenerator(AccurestConfigProperties accurestConfigProperties) { + this.configProperties = accurestConfigProperties + this.targetDirectory = accurestConfigProperties.generatedTestSourcesDir + File stubsResource = new File(accurestConfigProperties.stubsBaseDirectory) if (stubsResource == null) { - throw new IllegalStateException("Stubs directory not found under " + stubsBaseDirectory) + throw new IllegalStateException("Stubs directory not found under " + accurestConfigProperties.stubsBaseDirectory) } this.stubsBaseDirectory = stubsResource.path - this.basePackageForTests = basePackageForTests - if (testFramework == 'Spock' && !baseClassForTests) { - this.baseClassForTests = 'spock.lang.Specification' - } else { - this.baseClassForTests = baseClassForTests - } - this.ruleClassForTests = ruleClassForTests - this.lang = testFramework } public void generate() { List files = new File(stubsBaseDirectory).listFiles() files.grep({ File file -> file.isDirectory() && containsStubs(file) }).each { - def testBaseDir = Paths.get(targetDirectory, NamesUtil.packageToDirectory(basePackageForTests)) + def testBaseDir = Paths.get(targetDirectory, NamesUtil.packageToDirectory(configProperties.basePackageForTests)) Files.createDirectories(testBaseDir) Files.write(Paths.get(testBaseDir.toString(), NamesUtil.capitalize(it.name) + getTestClassExtension()), addClass(it).bytes) } } private String getTestClassExtension() { - return lang == TestFramework.SPOCK ? '.groovy' : '.java' + return configProperties.targetFramework == TestFramework.SPOCK ? '.groovy' : '.java' } boolean containsStubs(File file) { @@ -66,32 +54,46 @@ class TestGenerator { } private String addClass(File directory) { - ClassBuilder clazz = createClass(NamesUtil.capitalize(NamesUtil.afterLast(directory.path, '/')), basePackageForTests, baseClassForTests, lang) + ClassBuilder clazz = createClass(NamesUtil.capitalize(NamesUtil.afterLast(directory.path, '/')), configProperties) - if (testMode == TestMode.MOCKMVC) { + if (configProperties.imports) { + configProperties.imports.each { + clazz.addImport(it) + } + } + + if (configProperties.staticImports) { + configProperties.staticImports.each { + clazz.addStaticImport(it) + } + } + + if (configProperties.testMode == TestMode.MOCKMVC) { clazz.addStaticImport('com.jayway.restassured.module.mockmvc.RestAssuredMockMvc.*') } else { clazz.addStaticImport('com.jayway.restassured.RestAssured.*') } - if (lang == TestFramework.JUNIT) { + if (configProperties.targetFramework == TestFramework.JUNIT) { clazz.addImport('org.junit.Test') } else { clazz.addImport('groovy.json.JsonSlurper') } - if (ruleClassForTests) { + if (configProperties.ruleClassForTests) { clazz.addImport('org.junit.Rule') - .addRule(ruleClassForTests) + .addRule(configProperties.ruleClassForTests) } directory.listFiles().each { - clazz.addMethod(createTestMethod(it, lang)) + clazz.addMethod(createTestMethod(it, configProperties.targetFramework)) } return clazz.build() } public static void main(String[] args) { - new TestGenerator('/home/devel/projects/codearte/accurest/accurest-core/src/main/resources/stubs', 'io.test', '', '', TestFramework.SPOCK, TestMode.MOCKMVC, "").generate() + AccurestConfigProperties properties = new AccurestConfigProperties(stubsBaseDirectory: '/home/devel/projects/codearte/accurest/accurest-core/src/main/resources/stubs', + targetFramework: TestFramework.SPOCK, testMode: TestMode.MOCKMVC, basePackageForTests: 'io.test', staticImports: ['com.pupablada.Test.*'], imports: ['org.innapypa.Test']) + new TestGenerator(properties).generate() } } \ No newline at end of file diff --git a/accurest-core/src/main/groovy/io/coderate/accurest/builder/ClassBuilder.groovy b/accurest-core/src/main/groovy/io/coderate/accurest/builder/ClassBuilder.groovy index 7e368f8490..7abb630741 100644 --- a/accurest-core/src/main/groovy/io/coderate/accurest/builder/ClassBuilder.groovy +++ b/accurest-core/src/main/groovy/io/coderate/accurest/builder/ClassBuilder.groovy @@ -1,5 +1,6 @@ package io.coderate.accurest.builder +import io.coderate.accurest.config.AccurestConfigProperties import io.coderate.accurest.config.TestFramework import io.coderate.accurest.util.NamesUtil @@ -36,12 +37,14 @@ class ClassBuilder { } } - static ClassBuilder createClass(String className, String packageName, TestFramework lang) { - return createClass(className, packageName, null, lang) - } - - static ClassBuilder createClass(String className, String packageName, String baseClass, TestFramework lang) { - return new ClassBuilder(className, packageName, baseClass, lang) + static ClassBuilder createClass(String className, AccurestConfigProperties properties) { + String baseClassForTests + if (properties.targetFramework == TestFramework.SPOCK && !properties.baseClassForTests) { + baseClassForTests = 'spock.lang.Specification' + } else { + baseClassForTests = properties.baseClassForTests + } + return new ClassBuilder(className, properties.basePackageForTests, baseClassForTests, properties.targetFramework) } ClassBuilder addImport(String importToAdd) { diff --git a/accurest-gradle-plugin/src/main/groovy/io/codearte/accurest/plugin/AccurestPluginExtension.groovy b/accurest-core/src/main/groovy/io/coderate/accurest/config/AccurestConfigProperties.groovy similarity index 60% rename from accurest-gradle-plugin/src/main/groovy/io/codearte/accurest/plugin/AccurestPluginExtension.groovy rename to accurest-core/src/main/groovy/io/coderate/accurest/config/AccurestConfigProperties.groovy index 970834d9cb..eb677b16b5 100644 --- a/accurest-gradle-plugin/src/main/groovy/io/codearte/accurest/plugin/AccurestPluginExtension.groovy +++ b/accurest-core/src/main/groovy/io/coderate/accurest/config/AccurestConfigProperties.groovy @@ -1,17 +1,16 @@ -package io.codearte.accurest.plugin - -import io.coderate.accurest.config.TestFramework -import io.coderate.accurest.config.TestMode +package io.coderate.accurest.config /** * @author Jakub Kubrynski */ -class AccurestPluginExtension { +class AccurestConfigProperties { TestFramework targetFramework = TestFramework.SPOCK - TestMode testMode = TestMode.EXPLICIT + TestMode testMode = TestMode.MOCKMVC String stubsBaseDirectory = 'mappings' String basePackageForTests = 'io.codearte.accurest.tests' String baseClassForTests String ruleClassForTests String generatedTestSourcesDir = 'build/generated-sources/accurest' + String[] imports = [] + String[] staticImports = [] } diff --git a/accurest-gradle-plugin/src/main/groovy/io/codearte/accurest/plugin/AccurestGradlePlugin.groovy b/accurest-gradle-plugin/src/main/groovy/io/codearte/accurest/plugin/AccurestGradlePlugin.groovy index 38f5567c29..c27b13870d 100644 --- a/accurest-gradle-plugin/src/main/groovy/io/codearte/accurest/plugin/AccurestGradlePlugin.groovy +++ b/accurest-gradle-plugin/src/main/groovy/io/codearte/accurest/plugin/AccurestGradlePlugin.groovy @@ -1,6 +1,7 @@ package io.codearte.accurest.plugin import io.coderate.accurest.TestGenerator +import io.coderate.accurest.config.AccurestConfigProperties import org.gradle.api.Plugin import org.gradle.api.Project @@ -15,7 +16,7 @@ class AccurestGradlePlugin implements Plugin { @Override void apply(Project project) { - AccurestPluginExtension extension = project.extensions.create('accurest', AccurestPluginExtension) + AccurestConfigProperties extension = project.extensions.create('accurest', AccurestConfigProperties) project.compileTestGroovy.dependsOn(TASK_NAME) @@ -27,11 +28,8 @@ class AccurestGradlePlugin implements Plugin { } try { - String resourceDirectory = project.projectDir.path + '/src/test/resources/' + extension.stubsBaseDirectory - TestGenerator generator = new TestGenerator(resourceDirectory, - extension.basePackageForTests, extension.baseClassForTests, extension.ruleClassForTests, - extension.targetFramework, extension.testMode, - extension.generatedTestSourcesDir) + extension.stubsBaseDirectory = project.projectDir.path + '/src/test/resources/' + extension.stubsBaseDirectory + TestGenerator generator = new TestGenerator(extension) generator.generate() } catch (IllegalStateException e) { project.logger.error("Accurest Plugin: {}", e.getMessage())