Skip to content

Commit 87eb1c9

Browse files
Improving configureGebBaseUrl
This should generate a method like this: @Autowired public void configureGebBaseUrl(@value("${server.contextPath:/}") String serverContextPath, @value("${local.server.port}") int serverPort) { String $baseUrl = "http://localhost:${serverPort}${serverContextPath}".toString() if(!$baseUrl.endsWith("/")) { $baseUrl += "/" } System.setProperty("geb.build.baseUrl", $baseUrl) } Working on #10306
1 parent 46436e3 commit 87eb1c9

File tree

1 file changed

+18
-6
lines changed

1 file changed

+18
-6
lines changed

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

Lines changed: 18 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -5,10 +5,11 @@ 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
@@ -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

Comments
 (0)