    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    }