Add imports support in closures
This commit is contained in:
parent
261126d58b
commit
493bb8fd91
6 changed files with 237 additions and 171 deletions
|
@ -2,11 +2,21 @@ package pl.touk.mockserver.server
|
|||
|
||||
import com.sun.net.httpserver.HttpExchange
|
||||
import groovy.util.logging.Slf4j
|
||||
import pl.touk.mockserver.api.common.ImportAlias
|
||||
import pl.touk.mockserver.api.request.AddMock
|
||||
import pl.touk.mockserver.api.request.MockServerRequest
|
||||
import pl.touk.mockserver.api.request.PeekMock
|
||||
import pl.touk.mockserver.api.request.RemoveMock
|
||||
import pl.touk.mockserver.api.response.*
|
||||
import pl.touk.mockserver.api.response.ExceptionOccured
|
||||
import pl.touk.mockserver.api.response.MockAdded
|
||||
import pl.touk.mockserver.api.response.MockEventReport
|
||||
import pl.touk.mockserver.api.response.MockPeeked
|
||||
import pl.touk.mockserver.api.response.MockRemoved
|
||||
import pl.touk.mockserver.api.response.MockReport
|
||||
import pl.touk.mockserver.api.response.MockRequestReport
|
||||
import pl.touk.mockserver.api.response.MockResponseReport
|
||||
import pl.touk.mockserver.api.response.Mocks
|
||||
import pl.touk.mockserver.api.response.Parameter
|
||||
|
||||
import javax.xml.bind.JAXBContext
|
||||
import java.util.concurrent.ConcurrentHashMap
|
||||
|
@ -65,7 +75,8 @@ class HttpMockServer {
|
|||
soap: it.soap,
|
||||
method: it.method,
|
||||
statusCode: it.statusCode as int,
|
||||
schema: it.schema
|
||||
schema: it.schema,
|
||||
imports: it.imports.collect { new ImportAlias(alias: it.key, fullClassName: it.value) }
|
||||
)
|
||||
}
|
||||
)
|
||||
|
@ -90,6 +101,7 @@ class HttpMockServer {
|
|||
|
||||
private static Mock mockFromRequest(AddMock request) {
|
||||
Mock mock = new Mock(request.name, request.path, request.port)
|
||||
mock.imports = request.imports?.collectEntries { [(it.alias): it.fullClassName] } ?: [:]
|
||||
mock.predicate = request.predicate
|
||||
mock.response = request.response
|
||||
mock.soap = request.soap
|
||||
|
|
|
@ -3,6 +3,8 @@ package pl.touk.mockserver.server
|
|||
import groovy.transform.EqualsAndHashCode
|
||||
import groovy.transform.PackageScope
|
||||
import groovy.util.logging.Slf4j
|
||||
import org.codehaus.groovy.control.CompilerConfiguration
|
||||
import org.codehaus.groovy.control.customizers.ImportCustomizer
|
||||
import pl.touk.mockserver.api.common.Method
|
||||
|
||||
import javax.xml.XMLConstants
|
||||
|
@ -31,6 +33,7 @@ class Mock implements Comparable<Mock> {
|
|||
final List<MockEvent> history = new CopyOnWriteArrayList<>()
|
||||
String schema
|
||||
private Validator validator
|
||||
Map<String, String> imports = [:]
|
||||
|
||||
Mock(String name, String path, int port) {
|
||||
if (!(name)) {
|
||||
|
@ -88,7 +91,13 @@ class Mock implements Comparable<Mock> {
|
|||
if (predicate ==~ /(?m).*System\s*\.\s*exit\s*\(.*/) {
|
||||
throw new RuntimeException('System.exit is forbidden')
|
||||
}
|
||||
GroovyShell sh = new GroovyShell(this.class.classLoader);
|
||||
CompilerConfiguration compilerConfiguration = new CompilerConfiguration()
|
||||
ImportCustomizer customizer = new ImportCustomizer()
|
||||
imports.each {
|
||||
customizer.addImport(it.key, it.value)
|
||||
}
|
||||
compilerConfiguration.addCompilationCustomizers(customizer)
|
||||
GroovyShell sh = new GroovyShell(this.class.classLoader, compilerConfiguration);
|
||||
return sh.evaluate(predicate) as Closure
|
||||
}
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue