001 /*****************************************************************************
002 * Copyright (C) NanoContainer Organization. All rights reserved. *
003 * ------------------------------------------------------------------------- *
004 * The software in this package is published under the terms of the BSD *
005 * style license a copy of which has been included with this distribution in *
006 * the LICENSE.txt file. *
007 * *
008 * Original code by *
009 *****************************************************************************/
010 package org.nanocontainer.reflection;
011
012 import junit.framework.TestCase;
013
014 import java.io.File;
015
016 public class StringToObjectConverterTestCase extends TestCase {
017 private StringToObjectConverter converter = new StringToObjectConverter();
018
019 public void testConvertsToString() {
020 assertEquals("hello", converter.convertTo(String.class, "hello"));
021 assertEquals("", converter.convertTo(String.class, ""));
022 }
023
024 public void testConvertsToInts() {
025 assertEquals(new Integer(22), converter.convertTo(Integer.class, "22"));
026 assertEquals(new Integer(-9), converter.convertTo(Integer.class, "-9"));
027 }
028
029 public void testConvertsToLong() {
030 assertEquals(new Long(123456789012L), converter.convertTo(Long.class, "123456789012"));
031 assertEquals(new Long(-123456789012L), converter.convertTo(Long.class, "-123456789012"));
032 assertEquals(new Long(0), converter.convertTo(Long.class, "0"));
033 }
034
035 public void testConvertsToBooleanUsingBestGuess() {
036 assertEquals(Boolean.TRUE, converter.convertTo(Boolean.class, "t"));
037 assertEquals(Boolean.TRUE, converter.convertTo(Boolean.class, "true"));
038 assertEquals(Boolean.TRUE, converter.convertTo(Boolean.class, "T"));
039 assertEquals(Boolean.TRUE, converter.convertTo(Boolean.class, "TRUE"));
040 assertEquals(Boolean.TRUE, converter.convertTo(Boolean.class, "1"));
041 assertEquals(Boolean.TRUE, converter.convertTo(Boolean.class, "yes"));
042 assertEquals(Boolean.TRUE, converter.convertTo(Boolean.class, "Yo!"));
043
044 assertEquals(Boolean.FALSE, converter.convertTo(Boolean.class, "f"));
045 assertEquals(Boolean.FALSE, converter.convertTo(Boolean.class, "false"));
046 assertEquals(Boolean.FALSE, converter.convertTo(Boolean.class, "FALSE"));
047 assertEquals(Boolean.FALSE, converter.convertTo(Boolean.class, "0"));
048 assertEquals(Boolean.FALSE, converter.convertTo(Boolean.class, "no"));
049 assertEquals(Boolean.FALSE, converter.convertTo(Boolean.class, "nada!"));
050 assertEquals(Boolean.FALSE, converter.convertTo(Boolean.class, ""));
051 assertEquals(Boolean.FALSE, converter.convertTo(Boolean.class, "I'm a lumberjack and I'm okay"));
052 }
053
054 public void testCustomConversionsCanBeRegistered() {
055 converter.register(File.class, new Converter() {
056 public Object convert(String in) {
057 return new File(in);
058 }
059 });
060 assertEquals("hello", converter.convertTo(String.class, "hello"));
061 assertEquals(new File("hello"), converter.convertTo(File.class, "hello"));
062 }
063
064 public void testNullsMapToDefaultValues() {
065 assertNull(converter.convertTo(String.class, null));
066 assertEquals(new Integer(0), converter.convertTo(Integer.class, null));
067 assertEquals(new Long(0), converter.convertTo(Long.class, null));
068 assertEquals(Boolean.FALSE, converter.convertTo(Boolean.class, null));
069 }
070
071 public void testExceptionThrownIfConverterNotRegistered() {
072 try {
073 converter.convertTo(File.class, "hello");
074 fail("Should have thrown exception");
075 } catch (InvalidConversionException e) {
076 // good
077 }
078 }
079
080 public void testDodgyFormatThrowExceptions() {
081 try {
082 converter.convertTo(Integer.class, "fooo");
083 fail("Should have thrown exception");
084 } catch (NumberFormatException e) {
085 // good
086 }
087 }
088
089 }