001    package org.picocontainer.converters;
002    
003    import org.junit.Test;
004    
005    import javax.swing.JPanel;
006    import java.io.File;
007    import java.net.MalformedURLException;
008    import java.net.URL;
009    
010    import static junit.framework.Assert.assertFalse;
011    import static junit.framework.Assert.assertTrue;
012    import static org.junit.Assert.assertEquals;
013    
014    public class BuiltInConverterTestCase {
015        BuiltInConverters bic = new BuiltInConverters();
016    
017        @Test
018        public void canConvertAllPrimitiveTypes() {
019            assertTrue(bic.canConvert(Integer.class));
020            assertTrue(bic.canConvert(Integer.TYPE));
021            assertTrue(bic.canConvert(Long.class));
022            assertTrue(bic.canConvert(Long.TYPE));
023            assertTrue(bic.canConvert(Byte.class));
024            assertTrue(bic.canConvert(Byte.TYPE));
025            assertTrue(bic.canConvert(Double.class));
026            assertTrue(bic.canConvert(Double.TYPE));
027            assertTrue(bic.canConvert(Float.class));
028            assertTrue(bic.canConvert(Float.TYPE));
029            assertTrue(bic.canConvert(Character.class));
030            assertTrue(bic.canConvert(Character.TYPE));
031            assertTrue(bic.canConvert(Short.class));
032            assertTrue(bic.canConvert(Short.TYPE));
033            assertTrue(bic.canConvert(Boolean.class));
034            assertTrue(bic.canConvert(Boolean.TYPE));
035    
036            assertEquals(12, bic.convert("12", Integer.class));
037            assertEquals(12, bic.convert("12", Integer.TYPE));
038            assertEquals(12345678901L, bic.convert("12345678901",Long.TYPE));
039            assertEquals(12345678901L, bic.convert("12345678901",Long.class));
040            assertEquals((byte)12, bic.convert("12", Byte.class));
041            assertEquals((byte)12, bic.convert("12", Byte.TYPE));
042            assertEquals(2.22, bic.convert("2.22", Double.class));
043            assertEquals(2.22, bic.convert("2.22", Double.TYPE));
044            assertEquals(1.11F, bic.convert("1.11", Float.class));
045            assertEquals(1.11F, bic.convert("1.11", Float.TYPE));
046            assertEquals('a', bic.convert("a", Character.class));
047            assertEquals('a', bic.convert("a", Character.TYPE));
048            assertEquals((short)12, bic.convert("12", Short.class));
049            assertEquals((short)12, bic.convert("12", Short.TYPE));
050            assertEquals(Boolean.TRUE, bic.convert("TRUE", Boolean.class));
051            assertEquals(true, bic.convert("TRUE", Boolean.TYPE));
052        }
053    
054        
055        @Test
056        public void canConvertFileAndURL() throws MalformedURLException {
057            assertTrue(bic.canConvert(File.class));
058            assertTrue(bic.canConvert(URL.class));
059            assertEquals(new File("c:\\foo"), bic.convert("c:\\foo", File.class));
060            assertEquals(new URL("http://example.com"), bic.convert("http://example.com", URL.class));
061        }
062    
063        @Test
064        public void canAddCustomConverter() {
065            bic.addConverter(new JPanelConverter(), JPanel.class);
066            assertTrue(bic.convert("anything", JPanel.class) instanceof JPanel);
067        }
068    
069        @SuppressWarnings("serial")
070        @Test
071        public void canSupplementBuiltInConverters() {
072            assertFalse(bic.canConvert(JPanel.class));
073    
074            BuiltInConverters bicWithJPanel = new BuiltInConverters() {
075                @Override
076                protected void addBuiltInConverters() {
077                    super.addBuiltInConverters();
078                    super.addConverter(new JPanelConverter(), JPanel.class);
079                }
080            };
081            assertEquals(Boolean.TRUE, bicWithJPanel.convert("TRUE", Boolean.class));
082            assertTrue(bicWithJPanel.convert("anything", JPanel.class) instanceof JPanel);
083    
084        }
085    
086        private static class JPanelConverter implements Converter<JPanel> {
087            public JPanel convert(String paramValue) {
088                return new JPanel();
089            }
090        }
091        
092        
093    }