package com.twitter.common.args.parsers;
import java.io.IOException;
import java.lang.reflect.Type;
import com.google.common.collect.ImmutableMap;
import com.google.common.collect.ImmutableMultimap;
import com.google.common.collect.Multimap;
import com.google.common.reflect.TypeToken;
import org.junit.Before;
import org.junit.Test;
import com.twitter.common.args.ParserOracle;
import com.twitter.common.args.Parsers;
import com.twitter.common.quantity.Amount;
import com.twitter.common.quantity.Time;
import com.twitter.common.quantity.Unit;
import static org.junit.Assert.assertEquals;
public class MultimapParserTest {
private MultimapParser parser = new MultimapParser();
private ParserOracle parserOracle;
@Before
public void init() throws IOException {
parserOracle =
new Parsers(
ImmutableMap.of(
String.class, new StringParser(),
Integer.class, new IntegerParser(),
Unit.class, new UnitParser(),
Amount.class, new AmountParser()));
}
private Multimap<?, ?> parse(Type multimapType, String raw) {
return parser.parse(parserOracle, multimapType, raw);
}
@Test
public void testParseSingletonMultimap() {
assertEquals(
ImmutableMultimap.of("k", "v"),
parse(new TypeToken<Multimap<String, String>>() { }.getType(), "k=v"));
assertEquals(
ImmutableMultimap.of("k", 1),
parse(new TypeToken<Multimap<String, Integer>>() { }.getType(), "k=1"));
assertEquals(
ImmutableMultimap.of("k", Amount.of(2, Time.SECONDS)),
parse(new TypeToken<Multimap<String, Amount<Integer, Time>>>() { }.getType(), "k=2secs"));
}
@Test
public void testParseMultivaluedSingletonMultimap() {
assertEquals(
ImmutableMultimap.of("k", "v1", "k", "v2"),
parse(new TypeToken<Multimap<String, String>>() { }.getType(), "k=v1,k=v2"));
}
@Test
public void testParseMultivaluedMultimap() {
assertEquals(
ImmutableMultimap.of(
"k1", "v1.1",
"k1", "v1.2",
"k2", "v2.1",
"k2", "v2.2",
"k2", "v2.3"),
parse(
new TypeToken<Multimap<String, String>>() { }.getType(),
"k1=v1.1,k1=v1.2,k2=v2.1,k2=v2.2,k2=v2.3"));
}
}