Extracted framework configuration to enum

This commit is contained in:
Jakub Kubrynski
2015-02-21 12:48:31 +01:00
parent 3cd8525160
commit e521511e00
5 changed files with 37 additions and 24 deletions

View File

@@ -16,25 +16,16 @@ class ClassBuilder {
private final List<String> staticImports = []
private final List<String> rules = []
private final List<MethodBuilder> methods = []
private final String modifier
private final String suffix
private final TestFramework lang
private ClassBuilder(String className, String packageName, String baseClass, TestFramework lang) {
this.lang = lang
if (baseClass) {
imports << baseClass
}
this.baseClass = NamesUtil.afterLastDot(baseClass)
this.packageName = packageName
this.className = className
switch (lang) {
case TestFramework.JUNIT:
modifier = "public "
suffix = ";"
break
case TestFramework.SPOCK:
modifier = ""
suffix = ""
}
}
static ClassBuilder createClass(String className, String classPackage, AccurestConfigProperties properties) {
@@ -70,24 +61,24 @@ class ClassBuilder {
String build() {
BlockBuilder clazz = new BlockBuilder("\t")
.addLine("package $packageName$suffix")
.addLine("package $packageName$lang.lineSuffix")
.addEmptyLine()
imports.sort().each {
clazz.addLine("import $it$suffix")
clazz.addLine("import $it$lang.lineSuffix")
}
if (!imports.empty) {
clazz.addEmptyLine()
}
staticImports.sort().each {
clazz.addLine("import static $it$suffix")
clazz.addLine("import static $it$lang.lineSuffix")
}
if (!staticImports.empty) {
clazz.addEmptyLine()
}
def classLine = "${modifier}class $className"
def classLine = "${lang.classModifier}class $className"
if (baseClass) {
classLine += " extends $baseClass"
}
@@ -97,7 +88,7 @@ class ClassBuilder {
clazz.startBlock()
rules.sort().each {
clazz.addLine("@Rule")
clazz.addLine("public $it ${NamesUtil.camelCase(it)} = new $it()$suffix")
clazz.addLine("public $it ${NamesUtil.camelCase(it)} = new $it()$lang.lineSuffix")
}
clazz.endBlock()
if (!rules.empty) {

View File

@@ -26,14 +26,10 @@ class MethodBuilder {
}
void appendTo(BlockBuilder blockBuilder) {
String modifier
if (lang == TestFramework.JUNIT) {
blockBuilder.addLine('@Test')
modifier = "public void "
} else {
modifier = "def "
}
blockBuilder.addLine(modifier + "$methodName() {")
blockBuilder.addLine(lang.methodModifier + "$methodName() {")
new SpockMethodBodyBuilder(stubContent).appendTo(blockBuilder)
blockBuilder.addLine('}')
}

View File

@@ -4,5 +4,27 @@ package io.coderate.accurest.config
* @author Jakub Kubrynski
*/
enum TestFramework {
JUNIT, SPOCK
JUNIT("public ", "public void ", ";"), SPOCK("", "def ", "")
private final String classModifier
private final String methodModifier
private final String lineSuffix
TestFramework(String classModifier, String methodModifier, String lineSuffix) {
this.classModifier = classModifier
this.lineSuffix = lineSuffix
this.methodModifier = methodModifier
}
String getClassModifier() {
return classModifier
}
String getMethodModifier() {
return methodModifier
}
String getLineSuffix() {
return lineSuffix
}
}

View File

@@ -7,9 +7,11 @@ import io.coderate.accurest.config.TestMode
class MainTest {
public static void main(String[] args) {
AccurestConfigProperties properties = new AccurestConfigProperties(stubsBaseDirectory: '/home/devel/workspace/accurest/accurest-core/src/main/resources/stubs',
AccurestConfigProperties properties = new AccurestConfigProperties(
stubsBaseDirectory: '/home/devel/projects/codearte/accurest/accurest-core/src/main/resources/stubs',
generatedTestSourcesDir: '/tmp/accurest',
targetFramework: TestFramework.SPOCK, testMode: TestMode.MOCKMVC, basePackageForTests: 'io.test',
staticImports: ['com.pupablada.Test.*'], imports: ['org.innapypa.Test'], ignoredFiles: ["**/different/some.json", "**/other"])
staticImports: ['com.pupablada.Test.*'], imports: ['org.innapypa.Test'], ignoredFiles: ["**/other"])
println new TestGenerator(properties).generate()
}
}

View File

@@ -5,11 +5,13 @@ import io.coderate.accurest.TestGenerator
import io.coderate.accurest.config.AccurestConfigProperties
import org.gradle.api.DefaultTask
import org.gradle.api.GradleException
import org.gradle.api.tasks.InputDirectory
import org.gradle.api.tasks.OutputDirectory
import org.gradle.api.tasks.TaskAction
class GenerateServerTestsTask extends DefaultTask {
@InputDirectory File groovyDslDir
@OutputDirectory File generatedTestSourcesDir
//TODO: How to deal with @Input*, @Output* and that domain object?