package com.sandwich.koan.runner;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertTrue;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.Map;
import org.junit.Test;
import com.sandwich.koan.cmdline.CommandLineArgument;
import com.sandwich.koan.cmdline.CommandLineArgumentBuilder;
import com.sandwich.koan.constant.ArgumentType;
public class AppLauncherTest {
@Test
public void testNecessityOfAddingRunKoansCommandLineArgument_addsIfNoArgsPresent(){ //default target
Map<ArgumentType, CommandLineArgument> args = new CommandLineArgumentBuilder();
assertArgsContains(true, args, ArgumentType.RUN_KOANS);
}
@Test
public void testNecessityOfAddingRunKoansCommandLineArgument_ifClassArgIsPresent(){
Map<ArgumentType, CommandLineArgument> args = new CommandLineArgumentBuilder(Object.class.getName());
assertArgsContains(true, args, ArgumentType.RUN_KOANS, ArgumentType.CLASS_ARG);
}
@Test
public void testNecessityOfAddingRunKoansCommandLineArgument_doesntIfClassArgIsntPresent(){
List<ArgumentType> types = new ArrayList<ArgumentType>(Arrays.asList(ArgumentType.values()));
assertTrue(types.remove(ArgumentType.CLASS_ARG));
assertTrue(types.remove(ArgumentType.DEBUG));
assertTrue(types.remove(ArgumentType.RUN_KOANS));
for(ArgumentType type : types){
Map<ArgumentType, CommandLineArgument> args = new CommandLineArgumentBuilder(type.args().iterator().next());
assertArgsContains(false, args, ArgumentType.RUN_KOANS);
assertArgsContains(true, args, type);
}
}
private static void assertArgsContains(
boolean shouldContain, Map<ArgumentType, CommandLineArgument> args, ArgumentType...types) {
if(shouldContain){
assertEquals("expected arguments of a certain length, but found those built were of a differing size",
types.length, args.size());
}
for(ArgumentType type : types){
assertEquals("the arguments built should"
+ (shouldContain ? "" : "n't")
+ " contain the type: "+type, shouldContain, args.containsKey(type));
}
}
}