package com.github.sbugat.ec2tools.service.options;
import java.util.ArrayList;
import org.assertj.core.api.Assertions;
import org.assertj.core.util.Arrays;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.InjectMocks;
import org.mockito.runners.MockitoJUnitRunner;
import com.google.common.collect.ImmutableList;
@RunWith(MockitoJUnitRunner.class)
public class ProgramOptionsServiceTest {
private static final String SECTION_1 = "section1";
private static final String SECTION_2 = "section2";
@InjectMocks
private ProgramOptionsService programOptionsService;
@Test(expected = IllegalArgumentException.class)
public void testProcessProgramArgsUnknowOption() {
programOptionsService.processProgramArgs(Arrays.array("-u"));
}
@Test(expected = NullPointerException.class)
public void testProcessProgramArgsNullArgs() {
programOptionsService.processProgramArgs(null);
}
@Test(expected = IllegalArgumentException.class)
public void testProcessProgramArgsNoArgs() {
programOptionsService.processProgramArgs(new String[0]);
}
@Test(expected = IllegalArgumentException.class)
public void testProcessProgramArgsAllExclusiveOptions() {
programOptionsService.processProgramArgs(Arrays.array("-lepc"));
}
@Test(expected = IllegalArgumentException.class)
public void testProcessProgramArgsListExecuteOptions() {
programOptionsService.processProgramArgs(Arrays.array("-le"));
}
@Test(expected = IllegalArgumentException.class)
public void testProcessProgramArgsListPostcheckOptions() {
programOptionsService.processProgramArgs(Arrays.array("-lp"));
}
@Test(expected = IllegalArgumentException.class)
public void testProcessProgramArgsListCheckOptions() {
programOptionsService.processProgramArgs(Arrays.array("-lc"));
}
@Test(expected = IllegalArgumentException.class)
public void testProcessProgramArgsExecutePostcheckOptions() {
programOptionsService.processProgramArgs(Arrays.array("-ep"));
}
@Test(expected = IllegalArgumentException.class)
public void testProcessProgramArgsExecuteCheckOptions() {
programOptionsService.processProgramArgs(Arrays.array("-ec"));
}
@Test(expected = IllegalArgumentException.class)
public void testProcessProgramArgsPostcheckCheckOptions() {
programOptionsService.processProgramArgs(Arrays.array("-pc"));
}
@Test(expected = IllegalArgumentException.class)
public void testProcessProgramArgsExecuteWithoutSection() {
programOptionsService.processProgramArgs(Arrays.array("-e"));
}
@Test(expected = IllegalArgumentException.class)
public void testProcessProgramArgsPostcheckWithoutSection() {
programOptionsService.processProgramArgs(Arrays.array("-p"));
}
@Test(expected = IllegalArgumentException.class)
public void testProcessProgramArgsCheckWithoutSection() {
programOptionsService.processProgramArgs(Arrays.array("-c"));
}
@Test
public void testProcessProgramArgsListOnly() {
Assertions.assertThat(programOptionsService.processProgramArgs(Arrays.array("-l"))).isEqualTo(new ProgramOptions(false, true, false, false, new ArrayList<String>()));
}
@Test
public void testProcessProgramArgsExecuteSections() {
Assertions.assertThat(programOptionsService.processProgramArgs(Arrays.array("-e", "-s", SECTION_1, "-s", SECTION_2))).isEqualTo(new ProgramOptions(true, false, false, false, ImmutableList.of(SECTION_1, SECTION_2)));
}
@Test
public void testProcessProgramArgsCompactExecuteSections() {
Assertions.assertThat(programOptionsService.processProgramArgs(Arrays.array("-es", SECTION_1, "-s", SECTION_2))).isEqualTo(new ProgramOptions(true, false, false, false, ImmutableList.of(SECTION_1, SECTION_2)));
}
@Test
public void testProcessProgramArgsListSections() {
Assertions.assertThat(programOptionsService.processProgramArgs(Arrays.array("-l", "-s", SECTION_1, "-s", SECTION_2))).isEqualTo(new ProgramOptions(false, true, false, false, ImmutableList.of(SECTION_1, SECTION_2)));
}
@Test
public void testProcessProgramArgsCompactListSections() {
Assertions.assertThat(programOptionsService.processProgramArgs(Arrays.array("-ls", SECTION_1, "-s", SECTION_2))).isEqualTo(new ProgramOptions(false, true, false, false, ImmutableList.of(SECTION_1, SECTION_2)));
}
@Test
public void testProcessProgramArgsCheckSections() {
Assertions.assertThat(programOptionsService.processProgramArgs(Arrays.array("-c", "-s", SECTION_1, "-s", SECTION_2))).isEqualTo(new ProgramOptions(false, false, true, false, ImmutableList.of(SECTION_1, SECTION_2)));
}
@Test
public void testProcessProgramArgsCompactCheckSections() {
Assertions.assertThat(programOptionsService.processProgramArgs(Arrays.array("-cs", SECTION_1, "-s", SECTION_2))).isEqualTo(new ProgramOptions(false, false, true, false, ImmutableList.of(SECTION_1, SECTION_2)));
}
@Test
public void testProcessProgramArgsPostcheckSections() {
Assertions.assertThat(programOptionsService.processProgramArgs(Arrays.array("-p", "-s", SECTION_1, "-s", SECTION_2))).isEqualTo(new ProgramOptions(false, false, false, true, ImmutableList.of(SECTION_1, SECTION_2)));
}
@Test
public void testProcessProgramArgsCompactPostcheckSections() {
Assertions.assertThat(programOptionsService.processProgramArgs(Arrays.array("-ps", SECTION_1, "-s", SECTION_2))).isEqualTo(new ProgramOptions(false, false, false, true, ImmutableList.of(SECTION_1, SECTION_2)));
}
@Test(expected = IllegalArgumentException.class)
public void testProcessProgramArgsNonOptionArgument() {
Assertions.assertThat(programOptionsService.processProgramArgs(Arrays.array("-es", SECTION_1, SECTION_2))).isEqualTo(new ProgramOptions(true, false, false, false, ImmutableList.of(SECTION_1, SECTION_2)));
}
}