use of org.gradle.groovy.scripts.Script in project gradle by gradle.
the class DefaultScriptRunnerFactoryTest method wrapsExecutionExceptionAndRestoresStateWhenScriptFails.
@Test
public void wrapsExecutionExceptionAndRestoresStateWhenScriptFails() {
final RuntimeException failure = new RuntimeException();
ScriptRunner<?, Void> scriptRunner = factory.create(compiledScriptMock, scriptSourceDummy, classLoaderDummy);
expectScriptInstantiated();
context.checking(new Expectations() {
{
Sequence sequence = context.sequence("seq");
allowing(compiledScriptMock).getRunDoesSomething();
will(returnValue(true));
one(scriptExecutionListenerMock).scriptClassLoaded(scriptSourceDummy, Script.class);
inSequence(sequence);
one(scriptMock).init(target, scriptServices);
inSequence(sequence);
one(standardOutputCaptureMock).start();
inSequence(sequence);
one(scriptMock).run();
inSequence(sequence);
will(throwException(failure));
one(standardOutputCaptureMock).stop();
inSequence(sequence);
}
});
ClassLoader originalClassLoader = Thread.currentThread().getContextClassLoader();
assertThat(originalClassLoader, not(sameInstance(classLoaderDummy)));
try {
scriptRunner.run(target, scriptServices);
fail();
} catch (GradleScriptException e) {
assertThat(e.getMessage(), equalTo("A problem occurred evaluating <script-to-string>."));
assertThat(e.getCause(), sameInstance((Throwable) failure));
}
assertThat(Thread.currentThread().getContextClassLoader(), sameInstance(originalClassLoader));
}
Aggregations