package joptsimple.examples;
import java.io.File;
import joptsimple.OptionException;
import joptsimple.OptionParser;
import joptsimple.OptionSet;
import joptsimple.OptionSpec;
import org.junit.Rule;
import org.junit.Test;
import org.junit.rules.ExpectedException;
import static joptsimple.examples.Level.*;
import static org.junit.Assert.*;
import static org.junit.rules.ExpectedException.*;
public class DefaultValuesForOptionArgumentsTest {
@Rule public final ExpectedException thrown = none();
@Test
public void allowsSpecificationOfDefaultValues() throws Exception {
File tempDir = new File( System.getProperty( "java.io.tmpdir" ) );
File tempFile = File.createTempFile( "aFile", ".txt" );
OptionParser parser = new OptionParser();
OptionSpec<File> infile =
parser.accepts( "infile" ).withRequiredArg().ofType( File.class ).defaultsTo( tempFile );
OptionSpec<File> outdir =
parser.accepts( "outdir" ).withRequiredArg().ofType( File.class ).defaultsTo( tempDir );
OptionSpec<Integer> bufferSize =
parser.accepts( "buffer-size" ).withOptionalArg().ofType( Integer.class ).defaultsTo( 4096 );
OptionSpec<Level> level =
parser.accepts( "level" ).withOptionalArg().ofType( Level.class ).defaultsTo( INFO );
OptionSpec<Integer> count =
parser.accepts( "count" ).withOptionalArg().ofType( Integer.class ).defaultsTo( 10 );
OptionSet options = parser.parse( "--level", "WARNING", "--count", "--infile", "/etc/passwd" );
assertEquals( new File( "/etc/passwd" ), infile.value( options ) );
assertTrue( options.has( infile ) );
assertTrue( options.hasArgument( infile ) );
assertEquals( tempDir, outdir.value( options ) );
assertFalse( options.has( outdir ) );
assertFalse( options.hasArgument( outdir ) );
assertEquals( Integer.valueOf( 4096 ), bufferSize.value( options ) );
assertFalse( options.has( bufferSize ) );
assertFalse( options.hasArgument( bufferSize ) );
assertEquals( WARNING, level.value( options ) );
assertTrue( options.has( level ) );
assertTrue( options.hasArgument( level ) );
assertEquals( Integer.valueOf( 10 ), count.value( options ) );
assertTrue( options.has( count ) );
assertFalse( options.hasArgument( count ) );
thrown.expect( OptionException.class );
parser.parse( "--outdir" );
}
}