package rabbitescape.engine.util;
import static org.hamcrest.MatcherAssert.*;
import static org.hamcrest.CoreMatchers.*;
import org.junit.Test;
public class TestCommandLineOption
{
@Test
public void Parse_options_short_form()
{
CommandLineOption present = new CommandLineOption( "--present", false );
CommandLineOption notPresent = new CommandLineOption( "--not-present", false );
CommandLineOption withParam = new CommandLineOption( "--with-param", true );
String[] args = "-p -w 0".split( " " );
CommandLineOptionSet.parse( args, present, notPresent, withParam );
assertThat( present.isPresent(), is( true ) );
assertThat( notPresent.isPresent(), is( false ) );
assertThat( withParam.isPresent(), is( true ) );
assertThat( withParam.getValue(), equalTo( "0" ) );
}
@Test
public void Parse_options_long_form()
{
CommandLineOption present = new CommandLineOption( "--present", false );
CommandLineOption notPresent = new CommandLineOption( "--not-present", false );
CommandLineOption withParam = new CommandLineOption( "--with-param", true );
String[] args = "--present --with-param 0".split( " " );
CommandLineOptionSet.parse( args, present, notPresent, withParam );
assertThat( present.isPresent(), is( true ) );
assertThat( notPresent.isPresent(), is( false ) );
assertThat( withParam.isPresent(), is( true ) );
assertThat( withParam.getValue(), equalTo( "0" ) );
}
@Test( expected = CommandLineOption.UnknownOption.class )
public void Unknown_option_throws_exception()
{
CommandLineOption present = new CommandLineOption( "--present", false );
String[] args = "-p --you-what".split( " " );
CommandLineOptionSet.parse( args, present );
}
@Test( expected = CommandLineOption.OptionRequiresParameter.class )
public void Missing_parameter_throws_exception_last_arg()
{
CommandLineOption needsParam = new CommandLineOption( "--needs-param", true );
String[] args = "-n".split( " " );
CommandLineOptionSet.parse( args, needsParam );
}
@Test( expected = CommandLineOption.OptionRequiresParameter.class )
public void Missing_parameter_throws_exception()
{
CommandLineOption needsParam = new CommandLineOption( "--needs-param", true );
CommandLineOption bob = new CommandLineOption( "--bob", false );
String[] args = "-n -b".split( " " );
CommandLineOptionSet.parse( args, bob, needsParam );
}
@Test ( expected = CommandLineOption.OptionDoesNotTakeParameter.class )
public void Option_does_not_take_parameter()
{
CommandLineOption begin = new CommandLineOption( "--begin", false );
String[] args = "--begin0".split( " " );
CommandLineOptionSet.parse( args, begin );
}
@Test
public void Concatenated_parameters()
{
CommandLineOption begin = new CommandLineOption( "--begin", true );
CommandLineOption end = new CommandLineOption( "--end", true );
String[] args = "--begin0 -e100".split( " " );
CommandLineOptionSet.parse( args, begin, end );
assertThat( begin.getValue(), equalTo( "0" ) );
assertThat( end.getValue(), equalTo( "100" ) );
}
@Test
public void Concatenated_parameters_with_equals()
{
CommandLineOption begin = new CommandLineOption( "--begin", true );
CommandLineOption end = new CommandLineOption( "--end", true );
String[] args = "--begin=0 -e=100".split( " " );
CommandLineOptionSet.parse( args, begin, end );
assertThat( begin.getValue(), equalTo( "0" ) );
assertThat( end.getValue(), equalTo( "100" ) );
}
@Test( expected = java.lang.AssertionError.class )
public void Assertion_for_duplicate_short_form()
{
CommandLineOption test = new CommandLineOption( "--test", false );
CommandLineOption template = new CommandLineOption( "--template", true );
String[] args = "-t --template foo.rel".split( " " );
// AssertionError here as both --test and --template can be -t.
CommandLineOptionSet.parse( args, test, template );
}
}