001 package org.picocontainer.converters; 002 003 import org.junit.Test; 004 import org.picocontainer.Converters; 005 import org.picocontainer.DefaultPicoContainer; 006 import org.picocontainer.PicoContainer; 007 import org.picocontainer.containers.CompositePicoContainer; 008 import org.picocontainer.containers.EmptyPicoContainer; 009 010 import static junit.framework.Assert.assertTrue; 011 import static org.junit.Assert.assertEquals; 012 import static org.junit.Assert.assertFalse; 013 014 public class ConverterTestCase { 015 016 @Test 017 public void builtInConversionByDefault() { 018 DefaultPicoContainer dpc = new DefaultPicoContainer(); 019 assertTrue(dpc.getConverters() instanceof BuiltInConverters); 020 } 021 022 @Test 023 public void canOverrideConverter() { 024 DefaultPicoContainer dpc = new DefaultPicoContainer() { 025 @Override 026 public Converters getConverters() { 027 return new BuiltInConverters() { 028 @Override 029 protected void addBuiltInConverters() { 030 addConverter(new MyConverter(), Boolean.class); 031 032 } 033 }; 034 } 035 }; 036 037 //Verify use of MyConverter instead of usual BooleanConverter 038 int oldInvocationCount = MyConverter.invocationCount; 039 dpc.getConverters().convert("true", Boolean.class); 040 assertEquals(oldInvocationCount + 1, MyConverter.invocationCount); 041 } 042 043 @Test 044 public void parentContainerSuppliesByDefault() { 045 PicoContainer parent = new DefaultPicoContainer() { 046 @Override 047 public Converters getConverters() { 048 return new BuiltInConverters() { 049 @Override 050 protected void addBuiltInConverters() { 051 addConverter(new MyConverter(), Boolean.class); 052 053 } 054 }; 055 } 056 }; 057 DefaultPicoContainer dpc = new DefaultPicoContainer(parent); 058 //Verify use of MyConverter instead of usual 059 int oldInvocationCount = MyConverter.invocationCount; 060 dpc.getConverters().convert("true", Boolean.class); 061 assertEquals(oldInvocationCount + 1, MyConverter.invocationCount); 062 } 063 064 @Test 065 public void parentContainerDoesNotSuppliesByDefaultIfItIsNotAConversion() { 066 PicoContainer parent = new EmptyPicoContainer(); 067 DefaultPicoContainer dpc = new DefaultPicoContainer(parent); 068 assertTrue(dpc.getConverters() instanceof BuiltInConverters); 069 } 070 071 @Test 072 public void compositesPossible() { 073 PicoContainer one = new DefaultPicoContainer() { 074 @Override 075 public Converters getConverters() { 076 return new BuiltInConverters() { 077 @Override 078 protected void addBuiltInConverters() { 079 addConverter(new BooleanConverter(), Boolean.class); 080 081 } 082 }; 083 } 084 }; 085 PicoContainer two = new DefaultPicoContainer() { 086 @Override 087 public Converters getConverters() { 088 return new BuiltInConverters() { 089 @Override 090 protected void addBuiltInConverters() { 091 addConverter(new ShortConverter(), Short.class); 092 093 } 094 }; 095 } 096 }; 097 CompositePicoContainer compositePC = new CompositePicoContainer(one, two); 098 Converters converter = compositePC.getConverters(); 099 assertFalse(converter.canConvert(Character.class)); 100 assertTrue(converter.canConvert(Short.class)); 101 assertTrue(converter.canConvert(Boolean.class)); 102 assertEquals(null, converter.convert("a", Character.class)); 103 assertEquals((short)12, converter.convert("12", Short.class)); 104 assertEquals(Boolean.TRUE, converter.convert("TRUE", Boolean.class)); 105 106 } 107 108 109 public static class MyConverter extends BooleanConverter { 110 public static int invocationCount = 0; 111 112 /** 113 * {@inheritDoc} 114 * @see org.picocontainer.converters.BooleanConverter#convert(java.lang.String) 115 */ 116 @Override 117 public Boolean convert(String paramValue) { 118 invocationCount++; 119 return super.convert(paramValue); 120 } 121 } 122 123 }