package cucumber.runtime.groovy;
import cucumber.runtime.io.ResourceLoader;
import org.codehaus.groovy.runtime.MethodClosure;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.Mock;
import org.mockito.runners.MockitoJUnitRunner;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNull;
@RunWith(MockitoJUnitRunner.class)
public class GroovyBackendTest {
@Mock
ResourceLoader resourceLoader;
GroovyBackend backend;
@Before
public void setUp() throws Exception {
backend = new GroovyBackend(resourceLoader);
}
@Test
public void should_build_world_by_calling_the_closure() {
backend.registerWorld(new MethodClosure(this, "worldClosureCall"));
backend.buildWorld();
GroovyWorld groovyWorld = backend.getGroovyWorld();
assertEquals(1, groovyWorld.worldsCount());
}
@Test
public void should_build_world_object_even_if_closure_world_was_not_added() {
assertNull(backend.getGroovyWorld());
backend.buildWorld();
assertEquals(0, backend.getGroovyWorld().worldsCount());
}
@Test
public void should_clean_up_worlds_after_dispose() {
backend.registerWorld(new MethodClosure(this, "worldClosureCall"));
backend.buildWorld();
backend.disposeWorld();
assertNull(backend.getGroovyWorld());
}
@SuppressWarnings("UnusedDeclaration")
private AnotherCustomWorld worldClosureCall() {
return new AnotherCustomWorld();
}
}