/*
* Copyright 2017 Nokia Solutions and Networks
* Licensed under the Apache License, Version 2.0,
* see license.txt file for details.
*/
package org.robotframework.ide.eclipse.main.plugin.launch;
import static org.assertj.core.api.Assertions.assertThat;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.verifyNoMoreInteractions;
import java.util.Collection;
import java.util.Optional;
import org.eclipse.ui.services.IDisposable;
import org.junit.Test;
import org.robotframework.ide.eclipse.main.plugin.launch.RobotTestExecutionService.RobotTestExecutionListener;
import org.robotframework.ide.eclipse.main.plugin.launch.RobotTestExecutionService.RobotTestsLaunch;
public class RobotTestExecutionServiceTest {
@Test
public void thereIsNoLastLaunch_whenThereWereNoLaunches() {
final RobotTestExecutionService service = new RobotTestExecutionService();
assertThat(service.getLastLaunch().isPresent()).isFalse();
}
@Test
public void thereIsLastLaunch_whenSingleTestsWerePerformed() {
final RobotTestExecutionService service = new RobotTestExecutionService();
final RobotTestsLaunch launch = service.testExecutionStarting();
assertThat(service.getLastLaunch().get()).isSameAs(launch);
}
@Test
public void thereIsLastLaunch_whenManyTestsWerePerformed() {
final RobotTestExecutionService service = new RobotTestExecutionService();
for (int i = 0; i < 20; i++) {
service.testExecutionStarting();
}
final RobotTestsLaunch launch = service.testExecutionStarting();
assertThat(service.getLastLaunch().get()).isSameAs(launch);
}
@Test
public void olderLaunchesAreRemovedAndDisposed_whenExecutionHistoryExceedsLimit() {
final RobotTestExecutionService service = new RobotTestExecutionService();
final RobotTestsLaunch oldestLaunch = service.testExecutionStarting();
oldestLaunch.getExecutionData(ExecutionData.class, ExecutionData::new);
service.testExecutionEnded(oldestLaunch);
for (int i = 0; i < RobotTestExecutionService.LAUNCHES_HISTORY_LIMIT; i++) {
final RobotTestsLaunch launch = service.testExecutionStarting();
service.testExecutionEnded(launch);
}
final Collection<RobotTestsLaunch> launchesHistory = service.getLaunches();
assertThat(launchesHistory).hasSize(RobotTestExecutionService.LAUNCHES_HISTORY_LIMIT);
assertThat(launchesHistory).doesNotContain(oldestLaunch);
final Optional<ExecutionData> oldestData = oldestLaunch.getExecutionData(ExecutionData.class);
assertThat(oldestData.isPresent()).isFalse();
}
@Test
public void listenerIsNotified_whenNewLaunchIsStarting() {
final RobotTestExecutionListener listener = mock(RobotTestExecutionListener.class);
final RobotTestExecutionService service = new RobotTestExecutionService();
service.addExecutionListener(listener);
final RobotTestsLaunch launch1 = service.testExecutionStarting();
final RobotTestsLaunch launch2 = service.testExecutionStarting();
service.removeExecutionListener(listener);
service.testExecutionStarting();
verify(listener).executionStarting(launch1);
verify(listener).executionStarting(launch2);
verifyNoMoreInteractions(listener);
}
private static class ExecutionData implements IDisposable {
@Override
public void dispose() {
// nothing to do
}
}
}