package org.everrest.core.impl;
import org.everrest.core.LifecycleMethodStrategy;
import org.junit.Test;
import javax.annotation.PostConstruct;
import javax.annotation.PreDestroy;
import java.util.concurrent.atomic.AtomicInteger;
import static org.junit.Assert.assertEquals;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.verify;
public class LifecycleComponentTest {
@Test
public void invokesInitializeMethodWithDefaultLifecycleMethodStrategy() throws Exception {
Resource instance = new Resource();
LifecycleComponent lifecycleComponent = new LifecycleComponent(instance);
lifecycleComponent.initialize();
assertEquals(1, instance.initVisitsCounter.get());
}
@Test
public void invokesDestroyMethodWithDefaultLifecycleMethodStrategy() throws Exception {
Resource instance = new Resource();
LifecycleComponent lifecycleComponent = new LifecycleComponent(instance);
lifecycleComponent.destroy();
assertEquals(1, instance.destroyVisitsCounter.get());
}
@Test
public void invokesInitializeMethodWithCustomLifecycleMethodStrategy() throws Exception {
LifecycleMethodStrategy lifecycleMethodStrategy = mock(LifecycleMethodStrategy.class);
Resource instance = new Resource();
LifecycleComponent lifecycleComponent = new LifecycleComponent(instance, lifecycleMethodStrategy);
lifecycleComponent.initialize();
verify(lifecycleMethodStrategy).invokeInitializeMethods(instance);
}
@Test
public void invokesDestroyMethodWithCustomLifecycleMethodStrategy() throws Exception {
LifecycleMethodStrategy lifecycleMethodStrategy = mock(LifecycleMethodStrategy.class);
Resource instance = new Resource();
LifecycleComponent lifecycleComponent = new LifecycleComponent(instance, lifecycleMethodStrategy);
lifecycleComponent.destroy();
verify(lifecycleMethodStrategy).invokeDestroyMethods(instance);
}
public static class Resource {
private AtomicInteger initVisitsCounter = new AtomicInteger();
private AtomicInteger destroyVisitsCounter = new AtomicInteger();
@PostConstruct
void init() {
initVisitsCounter.incrementAndGet();
}
@PreDestroy
void destroy() {
destroyVisitsCounter.incrementAndGet();
}
}
}