Added support for junit rules

This commit is contained in:
Jakub Kubrynski
2014-12-06 23:21:43 +01:00
parent 7d48847e9a
commit aaa51302fd
8 changed files with 84 additions and 26 deletions

View File

@@ -1,2 +1,3 @@
accurest
========
Accurate REST
=============
Consumer Driven Contracts verifier for Java

View File

@@ -4,8 +4,8 @@
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>eu.codearte.contract-keeper</groupId>
<artifactId>contract-keeper</artifactId>
<groupId>eu.codearte.accurest</groupId>
<artifactId>accurest</artifactId>
<version>1.0.0-SNAPSHOT</version>
<properties>

View File

@@ -0,0 +1,19 @@
package eu.coderate.accurest
import static eu.coderate.accurest.builder.ClassBuilder.createClass
import static eu.coderate.accurest.builder.MethodBuilder.createVoidMethod
class Generator {
public static void main(String[] args) {
print createClass('MyTest', 'io.test', "com.test.BaseClass")
.addImport('org.junit.Test')
.addImport('org.junit.Rule')
.addStaticImport('org.hamcrest.Matchers.*')
.addStaticImport('com.jayway.restassured.RestAssured.*')
.addStaticImport('com.jayway.restassured.matcher.RestAssuredMatchers.*')
.addRule('com.test.MyRule')
.addMethod(createVoidMethod('shouldInvokeService'))
.build()
}
}

View File

@@ -1,4 +1,4 @@
package eu.coderate.ck.builder
package eu.coderate.accurest.builder
import groovy.transform.PackageScope

View File

@@ -1,4 +1,6 @@
package eu.coderate.ck.builder
package eu.coderate.accurest.builder
import eu.coderate.accurest.util.NamesUtil
/**
* @author Jakub Kubrynski
@@ -7,17 +9,27 @@ class ClassBuilder {
private final String className
private final String packageName
private final String baseClass
private final List<String> imports = []
private final List<String> staticImports = []
private final List<String> rules = []
private final List<MethodBuilder> methods = []
private ClassBuilder(String className, String packageName) {
private ClassBuilder(String className, String packageName, String baseClass) {
if (baseClass) {
imports << baseClass
}
this.baseClass = NamesUtil.getName(baseClass)
this.packageName = packageName
this.className = className
}
static ClassBuilder createClass(String className, String packageName) {
return new ClassBuilder(className, packageName)
return createClass(className, packageName, null)
}
static ClassBuilder createClass(String className, String packageName, String baseClass) {
return new ClassBuilder(className, packageName, baseClass)
}
ClassBuilder addImport(String importToAdd) {
@@ -35,20 +47,40 @@ class ClassBuilder {
return this
}
ClassBuilder addRule(String ruleClass) {
imports << ruleClass
rules << NamesUtil.getName(ruleClass)
return this
}
String build() {
BlockBuilder clazz = new BlockBuilder(" ")
.addLine("package $packageName;")
.addEmptyLine()
imports.sort().each {
clazz.addLine("import $it;")
}
clazz.addEmptyLine()
staticImports.sort().each {
clazz.addLine("static import $it;")
}
clazz.addEmptyLine()
clazz.addLine("public class $className {")
def classLine = "public class $className"
if (baseClass) {
classLine += " extends $baseClass"
}
clazz.addLine(classLine + ' {')
clazz.addEmptyLine()
clazz.startBlock()
rules.sort().each {
clazz.addLine("@Rule")
clazz.addLine("public " + it + " " + NamesUtil.fieldName(it) + " = new $it();")
}
clazz.endBlock()
clazz.addEmptyLine()
methods.each {

View File

@@ -1,4 +1,4 @@
package eu.coderate.ck.builder
package eu.coderate.accurest.builder
/**
* @author Jakub Kubrynski

View File

@@ -0,0 +1,22 @@
package eu.coderate.accurest.util
/**
* @author Jakub Kubrynski
*/
class NamesUtil {
static String getName(String qualifiedName) {
if (qualifiedName?.indexOf('.') > -1) {
return qualifiedName.substring(qualifiedName.lastIndexOf('.')+1)
}
return qualifiedName
}
static String fieldName(String className) {
if (className) {
return className
}
String name = getName(className)
String firstChar = name.charAt(0).toLowerCase() as String
return firstChar + name.substring(1)
}
}

View File

@@ -1,16 +0,0 @@
package eu.coderate.ck
import static eu.coderate.ck.builder.ClassBuilder.createClass
import static eu.coderate.ck.builder.MethodBuilder.createVoidMethod
class Generator {
public static void main(String[] args) {
print createClass('MyTest', 'io.test')
.addImport('org.junit.Test')
.addStaticImport('org.hamcrest.CoreMatchers.*')
.addStaticImport('com.jayway.restassured.RestAssured.*')
.addMethod(createVoidMethod('shouldInvokeService'))
.build()
}
}