Skip to content

Commit 462682c

Browse files
committed
Merge branch '3.1.x' into 3.2.x
2 parents db1301e + bda33c3 commit 462682c

File tree

1 file changed

+30
-12
lines changed

1 file changed

+30
-12
lines changed

grails-plugin-testing/src/main/groovy/org/grails/compiler/injection/test/IntegrationTestMixinTransformation.groovy

Lines changed: 30 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -5,17 +5,19 @@ import grails.test.mixin.integration.Integration
55
import groovy.transform.CompileStatic
66
import org.codehaus.groovy.ast.*
77
import org.codehaus.groovy.ast.expr.*
8-
import org.codehaus.groovy.ast.stmt.BlockStatement
9-
import org.codehaus.groovy.ast.stmt.ExpressionStatement
8+
import org.codehaus.groovy.ast.stmt.*
109
import org.codehaus.groovy.control.CompilePhase
1110
import org.codehaus.groovy.control.SourceUnit
11+
import org.codehaus.groovy.syntax.Token
12+
import org.codehaus.groovy.syntax.Types
1213
import org.codehaus.groovy.transform.ASTTransformation
1314
import org.codehaus.groovy.transform.GroovyASTTransformation
1415
import org.grails.compiler.injection.GrailsASTUtils
1516
import org.grails.io.support.MainClassFinder
1617
import org.grails.test.context.junit4.GrailsJunit4ClassRunner
1718
import org.grails.test.context.junit4.GrailsTestConfiguration
1819
import org.junit.runner.RunWith
20+
import org.springframework.beans.factory.annotation.Autowired
1921
import org.springframework.beans.factory.annotation.Value
2022
import org.springframework.beans.factory.config.AutowireCapableBeanFactory
2123
import org.springframework.boot.test.IntegrationTest
@@ -168,20 +170,36 @@ class IntegrationTestMixinTransformation implements ASTTransformation {
168170

169171
protected void enhanceGebSpecWithPort(ClassNode classNode) {
170172
if (GrailsASTUtils.isSubclassOf(classNode, "geb.spock.GebSpec")) {
171-
def integerClassNode = ClassHelper.make(Integer)
172-
def param = new Parameter(integerClassNode, "port")
173-
def setterBody = new BlockStatement()
173+
def contextPathParameter = new Parameter(ClassHelper.make(String), 'serverContextPath')
174+
def cpValueAnnotation = new AnnotationNode(ClassHelper.make(Value))
175+
cpValueAnnotation.setMember('value', new ConstantExpression('${server.contextPath:/}'))
176+
contextPathParameter.addAnnotation(cpValueAnnotation)
177+
178+
def serverPortParameter = new Parameter(ClassHelper.make(Integer.TYPE), 'serverPort')
179+
def spValueAnnotation = new AnnotationNode(ClassHelper.make(Value))
180+
spValueAnnotation.setMember('value', new ConstantExpression('${local.server.port}'))
181+
serverPortParameter.addAnnotation(spValueAnnotation)
182+
183+
Expression urlExpression = new GStringExpression('http://localhost:${serverPort}${serverContextPath}', [new ConstantExpression('http://localhost:'), new ConstantExpression(""), new ConstantExpression("")], [new VariableExpression('serverPort'), new VariableExpression('serverContextPath')] as List<Expression>)
184+
185+
Expression baseUrlVariableExpression = new VariableExpression('$baseUrl', ClassHelper.make(String))
186+
Expression declareBaseUrlExpression = new DeclarationExpression(baseUrlVariableExpression, Token.newSymbol(Types.EQUALS, 0, 0), new MethodCallExpression(urlExpression, 'toString', new ArgumentListExpression()))
187+
188+
Expression constantSlashExpression = new ConstantExpression('/')
189+
Expression endsWithMethodCall = new MethodCallExpression(baseUrlVariableExpression, 'endsWith', new ArgumentListExpression(constantSlashExpression))
190+
Expression appendSlashExpression = new BinaryExpression(baseUrlVariableExpression, Token.newSymbol(Types.PLUS_EQUAL, 0, 0), constantSlashExpression)
191+
Statement ifUrlEndsWithSlashStatement = new IfStatement(new BooleanExpression(endsWithMethodCall), new EmptyStatement(), new ExpressionStatement(appendSlashExpression))
192+
def methodBody = new BlockStatement()
193+
methodBody.addStatement(new ExpressionStatement(declareBaseUrlExpression))
194+
methodBody.addStatement(ifUrlEndsWithSlashStatement)
174195
def systemClassExpression = new ClassExpression(ClassHelper.make(System))
175196
def args = new ArgumentListExpression()
176197
args.addExpression(new ConstantExpression("geb.build.baseUrl"))
177-
args.addExpression(new GStringExpression('http://localhost:${port}', [new ConstantExpression("http://localhost:"), new ConstantExpression("")], [new VariableExpression(param)] as List<Expression>))
178-
setterBody.addStatement(new ExpressionStatement(new MethodCallExpression(systemClassExpression, "setProperty", args)))
179-
def method = new MethodNode("setGebPort", Modifier.PUBLIC, ClassHelper.VOID_TYPE, [param] as Parameter[], null, setterBody)
180-
def valueAnnotation = new AnnotationNode(ClassHelper.make(Value))
181-
valueAnnotation.setMember("value", new ConstantExpression('${local.server.port}'))
182-
method.addAnnotation(valueAnnotation)
198+
args.addExpression(baseUrlVariableExpression)
199+
methodBody.addStatement(new ExpressionStatement(new MethodCallExpression(systemClassExpression, "setProperty", args)))
200+
def method = new MethodNode("configureGebBaseUrl", Modifier.PUBLIC, ClassHelper.VOID_TYPE, [contextPathParameter, serverPortParameter] as Parameter[], null, methodBody)
201+
method.addAnnotation(new AnnotationNode(ClassHelper.make(Autowired)))
183202
classNode.addMethod(method)
184203
}
185204
}
186-
187205
}

0 commit comments

Comments
 (0)