package org.fluentlenium.adapter; import org.fluentlenium.core.FluentDriver; import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; import org.mockito.Mock; import org.mockito.runners.MockitoJUnitRunner; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; import java.util.concurrent.TimeUnit; import static org.assertj.core.api.Assertions.assertThat; @RunWith(MockitoJUnitRunner.class) public class DriverContainerTest { @Mock private FluentDriver driver1; @Mock private FluentDriver driver2; private ExecutorService executor; private FluentControlContainer threadLocalContainer; private FluentControlContainer defaultContainer; @Before public void before() { executor = Executors.newSingleThreadExecutor(); threadLocalContainer = new ThreadLocalFluentControlContainer(); defaultContainer = new DefaultFluentControlContainer(); } @Test public void testDriverContainer() throws InterruptedException { defaultContainer.setFluentControl(driver1); threadLocalContainer.setFluentControl(driver1); assertThat(defaultContainer.getFluentControl()).isSameAs(driver1); assertThat(threadLocalContainer.getFluentControl()).isSameAs(driver1); defaultContainer.setFluentControl(null); threadLocalContainer.setFluentControl(null); assertThat(defaultContainer.getFluentControl()).isNull(); assertThat(threadLocalContainer.getFluentControl()).isNull(); defaultContainer.setFluentControl(driver2); threadLocalContainer.setFluentControl(driver2); assertThat(defaultContainer.getFluentControl()).isSameAs(driver2); assertThat(threadLocalContainer.getFluentControl()).isSameAs(driver2); executor.execute(new Runnable() { @Override public void run() { assertThat(defaultContainer.getFluentControl()).isSameAs(driver2); assertThat(threadLocalContainer.getFluentControl()).isNull(); defaultContainer.setFluentControl(driver1); threadLocalContainer.setFluentControl(driver1); assertThat(defaultContainer.getFluentControl()).isSameAs(driver1); assertThat(threadLocalContainer.getFluentControl()).isSameAs(driver1); } }); executor.shutdown(); executor.awaitTermination(1L, TimeUnit.MINUTES); assertThat(defaultContainer.getFluentControl()).isSameAs(driver1); assertThat(threadLocalContainer.getFluentControl()).isSameAs(driver2); } }