package com.twelvemonkeys.util.convert; import com.twelvemonkeys.lang.Validate; import org.junit.Ignore; import org.junit.Test; import java.io.File; import java.net.URI; import static org.junit.Assert.*; /** * DefaultConverterTestCase * <p/> * * @author <a href="mailto:harald.kuhr@gmail.com">Harald Kuhr</a> * @author last modified by $Author: haku $ * @version $Id: //depot/branches/personal/haraldk/twelvemonkeys/release-2/twelvemonkeys-core/src/test/java/com/twelvemonkeys/util/convert/DefaultConverterTestCase.java#1 $ */ public class DefaultConverterTestCase extends PropertyConverterAbstractTestCase { protected PropertyConverter makePropertyConverter() { return new DefaultConverter(); } protected Conversion[] getTestConversions() { //noinspection BooleanConstructorCall return new Conversion[] { // Booleans new Conversion("true", Boolean.TRUE), new Conversion("TRUE", Boolean.TRUE, null, "true"), new Conversion("false", Boolean.FALSE), new Conversion("FALSE", false, null, "false"), new Conversion("2", 2), // Stupid but valid new Conversion("fooBar", "fooBar"), //new Conversion("fooBar", new StringBuilder("fooBar")), - StringBuilder does not impl equals()... // Stupid test class that reveres chars new Conversion("fooBar", new FooBar("fooBar")), // String array tests new Conversion("foo, bar, baz", new String[] {"foo", "bar", "baz"}), new Conversion("foo", new String[] {"foo"}), new Conversion("foo;bar; baz", new String[] {"foo", "bar", "baz"}, "; ", "foo; bar; baz"), // Native array tests new Conversion("1, 2, 3", new int[] {1, 2, 3}), new Conversion("-1, 42, 0", new long[] {-1, 42, 0}), new Conversion("true, true, false", new boolean[] {true, true, false}), new Conversion(".3, 4E7, .97", new float[] {.3f, 4e7f, .97f}, ", ", "0.3, 4.0E7, 0.97"), // Object array test new Conversion("foo, bar", new FooBar[] {new FooBar("foo"), new FooBar("bar")}), new Conversion("/temp, /usr/local/bin".replace('/', File.separatorChar), new File[] {new File("/temp"), new File("/usr/local/bin")}), new Conversion("file:/temp, http://java.net/", new URI[] {URI.create("file:/temp"), URI.create("http://java.net/")}), // TODO: More tests }; } @Test public void testConvertBooleanPrimitive() { PropertyConverter converter = makePropertyConverter(); assertTrue((Boolean) converter.toObject("true", boolean.class, null)); assertFalse((Boolean) converter.toObject("FalsE", Boolean.TYPE, null)); } @Test public void testConvertShortPrimitive() { PropertyConverter converter = makePropertyConverter(); assertEquals(1, (short) (Short) converter.toObject("1", short.class, null)); assertEquals(-2, (short) (Short) converter.toObject("-2", Short.TYPE, null)); } @Test public void testConvertIntPrimitive() { PropertyConverter converter = makePropertyConverter(); assertEquals(1, (int) (Integer) converter.toObject("1", int.class, null)); assertEquals(-2, (int) (Integer) converter.toObject("-2", Integer.TYPE, null)); } @Test public void testConvertLongPrimitive() { PropertyConverter converter = makePropertyConverter(); assertEquals(Long.MAX_VALUE, (long) (Long) converter.toObject("9223372036854775807", long.class, null)); assertEquals(-2, (long) (Long) converter.toObject("-2", Long.TYPE, null)); } @Test public void testConvertBytePrimitive() { PropertyConverter converter = makePropertyConverter(); assertEquals(1, (byte) (Byte) converter.toObject("1", byte.class, null)); assertEquals(-2, (byte) (Byte) converter.toObject("-2", Byte.TYPE, null)); } @Test public void testConvertFloatPrimitive() { PropertyConverter converter = makePropertyConverter(); assertEquals(1f, (Float) converter.toObject("1.0", float.class, null), 0); assertEquals(-2.3456f, (Float) converter.toObject("-2.3456", Float.TYPE, null), 0); } @Test public void testConvertDoublePrimitive() { PropertyConverter converter = makePropertyConverter(); assertEquals(1d, (Double) converter.toObject("1.0", double.class, null), 0); assertEquals(-2.3456, (Double) converter.toObject("-2.3456", Double.TYPE, null), 0); } @Ignore("Known issue. Why would anyone do something like this?") @Test public void testConvertCharPrimitive() { PropertyConverter converter = makePropertyConverter(); assertEquals('A', (char) (Character) converter.toObject("A", char.class, null)); assertEquals('Z', (char) (Character) converter.toObject("Z", Character.TYPE, null)); } public static class FooBar { private final String bar; public FooBar(String pFoo) { Validate.notNull(pFoo, "foo"); bar = reverse(pFoo); } private String reverse(String pFoo) { StringBuilder buffer = new StringBuilder(pFoo.length()); for (int i = pFoo.length() - 1; i >= 0; i--) { buffer.append(pFoo.charAt(i)); } return buffer.toString(); } public String toString() { return reverse(bar); } public boolean equals(Object obj) { return obj == this || (obj != null && obj.getClass() == getClass() && ((FooBar) obj).bar.equals(bar)); } public int hashCode() { return 7 * bar.hashCode(); } } }