@Override public Collection<String> parseMultiple( Args parsedArgs ) { Collection<String> values = parsedArgs.interpretOptions( name, withDefault( defaultValue ), identity() ); for ( String value : values ) { if ( allowedValues.length > 0 ) { List<String> allowed = Arrays.asList( allowedValues ); if ( !allowed.contains( value ) ) { throw new IllegalArgumentException( String.format( "'%s' must be one of [%s], not: %s", name, String.join( ",", allowedValues ), value ) ); } } } return values; } }
@Override public Collection<String> parseMultiple( Args parsedArgs ) { return parsedArgs.interpretOptions( name, mandatory(), identity() ); } }
private static Map<String, String> parseConfigOverrides( Args arguments ) { Collection<Pair<String, String>> options = arguments.interpretOptions( "c", Converters.optional(), s -> { if ( s.contains( "=" ) ) { String[] keyVal = s.split( "=", 2 ); return pair( keyVal[0], keyVal[1] ); } // Shortcut to specify boolean flags ("-c dbms.enableTheFeature") return pair( s, "true" ); } ); Map<String,String> ret = stringMap(); options.forEach( pair -> ret.put( pair.first(), pair.other() ) ); return ret; }
@Test void shouldInterpretMultipleOptionValues() { // GIVEN Collection<Integer> expectedValues = Arrays.asList( 12, 34, 56 ); List<String> argList = new ArrayList<>(); String key = "number"; for ( int value : expectedValues ) { argList.add( "--" + key ); argList.add( String.valueOf( value ) ); } Args args = Args.parse( argList.toArray( new String[argList.size()] ) ); // WHEN assertThrows( IllegalArgumentException.class, () -> args.get( key ) ); Collection<Integer> numbers = args.interpretOptions( key, optional(), toInt() ); // THEN assertEquals( expectedValues, numbers ); }
@Test void shouldReturnEmptyCollectionForOptionalMissingOption() { // Given Args args = Args.withFlags().parse(); // When Collection<String> interpreted = args.interpretOptions( "something", optional(), value -> value ); // Then assertTrue( interpreted.isEmpty() ); }
private static Map<String, String> parseConfigOverrides( Args arguments ) { Collection<Pair<String, String>> options = arguments.interpretOptions( "c", Converters.optional(), s -> { if ( s.contains( "=" ) ) { String[] keyVal = s.split( "=", 2 ); return pair( keyVal[0], keyVal[1] ); } // Shortcut to specify boolean flags ("-c dbms.enableTheFeature") return pair( s, "true" ); } ); Map<String,String> ret = stringMap(); options.forEach( pair -> ret.put( pair.first(), pair.other() ) ); return ret; }