@@ -5,10 +5,11 @@ import grails.test.mixin.integration.Integration
55import groovy.transform.CompileStatic
66import org.codehaus.groovy.ast.*
77import 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.*
109import org.codehaus.groovy.control.CompilePhase
1110import org.codehaus.groovy.control.SourceUnit
11+ import org.codehaus.groovy.syntax.Token
12+ import org.codehaus.groovy.syntax.Types
1213import org.codehaus.groovy.transform.ASTTransformation
1314import org.codehaus.groovy.transform.GroovyASTTransformation
1415import org.grails.compiler.injection.GrailsASTUtils
@@ -179,13 +180,24 @@ class IntegrationTestMixinTransformation implements ASTTransformation {
179180 spValueAnnotation. setMember(' value' , new ConstantExpression (' ${local.server.port}' ))
180181 serverPortParameter. addAnnotation(spValueAnnotation)
181182
182- def setterBody = new BlockStatement ()
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)
183195 def systemClassExpression = new ClassExpression (ClassHelper . make(System ))
184196 def args = new ArgumentListExpression ()
185197 args. addExpression(new ConstantExpression (" geb.build.baseUrl" ))
186- args. addExpression(new GStringExpression ( ' http://localhost:${serverPort}${serverContextPath} ' , [ new ConstantExpression ( ' http://localhost: ' ), new ConstantExpression ( " " ), new ConstantExpression ( " " )], [ new VariableExpression ( ' serverPort ' ), new VariableExpression ( ' serverContextPath ' )] as List< Expression > ) )
187- setterBody . addStatement(new ExpressionStatement (new MethodCallExpression (systemClassExpression, " setProperty" , args)))
188- def method = new MethodNode (" configureGebBaseUrl" , Modifier . PUBLIC , ClassHelper . VOID_TYPE , [contextPathParameter, serverPortParameter] as Parameter [], null , setterBody )
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 )
189201 method. addAnnotation(new AnnotationNode (ClassHelper . make(Autowired )))
190202 classNode. addMethod(method)
191203 }
0 commit comments