package org.testory.plumbing.im.wildcard;
import static org.junit.Assert.assertNotSame;
import static org.junit.Assert.assertTrue;
import static org.junit.Assert.fail;
import static org.testory.plumbing.im.wildcard.Tokenizer.tokenizer;
import java.util.AbstractList;
import java.util.ArrayList;
import java.util.List;
import org.junit.Before;
import org.junit.Test;
import org.testory.plumbing.PlumbingException;
public class TestTokenizer {
private Tokenizer tokenizer;
@Before
public void before() {
tokenizer = tokenizer();
}
@Test
public void supports_normal_classes() {
assertSupports(List.class);
assertSupports(ArrayList.class);
assertSupports(AbstractList.class);
assertSupports(Object.class);
assertSupports(String.class);
}
@Test
public void supports_arrays() {
assertSupports(Object[].class);
assertSupports(String[].class);
assertSupports(int[].class);
assertSupports(Object[][][].class);
assertSupports(String[][][].class);
assertSupports(int[][][].class);
}
@Test
public void supports_wrappers() {
assertSupports(Integer.class);
assertSupports(Void.class);
}
@Test
public void support_primitives_by_boxing() {
assertTrue(Integer.class.isInstance(tokenizer.token(int.class)));
assertNotSame(tokenizer.token(int.class), tokenizer.token(int.class));
assertTrue(Void.class.isInstance(tokenizer.token(void.class)));
assertNotSame(tokenizer.token(void.class), tokenizer.token(void.class));
}
@Test
public void null_cannot_be_type() {
try {
tokenizer.token(null);
fail();
} catch (PlumbingException e) {}
}
private void assertSupports(Class<?> type) {
String message = type.toString();
assertTrue(message, type.isInstance(tokenizer.token(type)));
assertNotSame(message, tokenizer.token(type), tokenizer.token(type));
}
}