blob: 09e2db8f8eb29f19baf506e61d47c2b1db76e085 [file] [log] [blame]
/**
* Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership. The ASF licenses this file to you under the Apache License, Version
* 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions
* and limitations under the License.
*/
package org.apache.storm.command;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.junit.Test;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.fail;
public class TestCLI {
@Test
public void testSimple() throws Exception {
Map<String, Object> values = CLI.opt("a", "aa", null)
.opt("b", "bb", 1, CLI.AS_INT)
.opt("c", "cc", 1, CLI.AS_INT, CLI.FIRST_WINS)
.opt("d", "dd", null, CLI.AS_STRING, CLI.INTO_LIST)
.opt("e", "ee", null, CLI.AS_INT)
.opt("f", "ff", null, new PairParse(), CLI.INTO_MAP)
.arg("A")
.arg("B", CLI.AS_INT)
.parse("-a100", "--aa", "200", "-c2", "-b", "50", "--cc", "100", "A-VALUE", "1", "2", "3", "-b40",
"-d1", "-d2", "-d3"
, "-f", "key1=value1", "-f", "key2=value2");
assertEquals(8, values.size());
assertEquals("200", (String) values.get("a"));
assertEquals((Integer) 40, (Integer) values.get("b"));
assertEquals((Integer) 2, (Integer) values.get("c"));
assertEquals(null, values.get("e"));
List<String> d = (List<String>) values.get("d");
assertEquals(3, d.size());
assertEquals("1", d.get(0));
assertEquals("2", d.get(1));
assertEquals("3", d.get(2));
List<String> A = (List<String>) values.get("A");
assertEquals(1, A.size());
assertEquals("A-VALUE", A.get(0));
List<Integer> B = (List<Integer>) values.get("B");
assertEquals(3, B.size());
assertEquals((Integer) 1, B.get(0));
assertEquals((Integer) 2, B.get(1));
assertEquals((Integer) 3, B.get(2));
Map<String, String> f = (Map<String, String>) values.get("f");
assertEquals(2, f.size());
assertEquals("value1", f.get("key1"));
assertEquals("value2", f.get("key2"));
}
@Test
public void testOptional() throws Exception {
Map<String, Object> values = CLI.optionalArg("A", CLI.LAST_WINS)
.parse("TEST");
assertEquals(1, values.size());
assertEquals("TEST", values.get("A"));
values = CLI.optionalArg("A", CLI.LAST_WINS)
.parse();
assertEquals(1, values.size());
assertEquals(null, values.get("A"));
values = CLI.optionalArg("A", CLI.LAST_WINS)
.parse("THIS", "IS", "A", "TEST");
assertEquals(1, values.size());
assertEquals("TEST", values.get("A"));
values = CLI.arg("A", CLI.LAST_WINS)
.optionalArg("B", CLI.LAST_WINS)
.parse("THIS", "IS", "A", "TEST");
assertEquals(2, values.size());
assertEquals("THIS", values.get("A"));
assertEquals("TEST", values.get("B"));
}
@Test
public void argAfterOptional() throws Exception {
try {
CLI.optionalArg("A", CLI.LAST_WINS)
.arg("B");
fail("Expected an exception to be thrown by now");
} catch (IllegalStateException is) {
//Expected
}
}
private static final class PairParse implements CLI.Parse {
@Override
public Object parse(String value) {
Map<String, String> result = new HashMap<>();
String[] splits = value.split("=");
result.put(splits[0], splits[1]);
return result;
}
}
}