1 package tests.jfun.yan; 2 3 import tests.jfun.yan.tck.BaseContainerTestCase; 4 import jfun.yan.*; 5 import jfun.yan.containers.DefaultContainer; 6 import jfun.yan.containers.ProxyContainer; 7 import junit.framework.TestSuite; 8 9 import java.util.Map ; 10 import java.util.HashMap ; 11 import java.io.IOException ; 12 import java.awt.event.ActionListener ; 13 import java.awt.event.ActionEvent ; 14 15 19 public class BaseProxyContainerTestCase 20 extends BaseContainerTestCase { 21 22 public static void main(String [] args){ 23 Utils.runTest(suite()); 24 } 25 private static TestSuite suite(){ 26 return new TestSuite(BaseProxyContainerTestCase.class); 27 } 28 29 public void testInstanceIsNotAutomaticallyHidden() { 30 Container pc = createImplementationHidingPicoContainer(); 31 pc.registerValue(Map .class, new HashMap ()); 32 final String s1 = "unused component just for coverage"; 33 pc.registerValue(s1); 34 final String s2 = "hello"; 35 pc.registerComponent("mark", 36 Components.value(s2).singleton().guard().subsume(String .class) 37 .subsume(CharSequence .class)); 38 Map map = (Map ) pc.getInstance(Map .class); 39 pc.verify(); 40 assertNotNull(map); 41 assertTrue(map instanceof HashMap ); 42 assertSame(s1, pc.getInstance(String .class)); 43 assertSame(s2, pc.getInstance("mark")); 44 assertSame(s1, pc.getInstance(String .class)); 45 assertSame(s2, pc.getInstance("mark")); 46 } 47 48 protected Container createImplementationHidingPicoContainer(){ 49 return new ProxyContainer(); 50 } 51 52 53 public void testImplementaionIsAutomaticallyHidden() { 54 Container pc = createImplementationHidingPicoContainer(); 55 pc.registerConstructor(Map .class, HashMap .class, null); 56 Map map = (Map ) pc.getInstance(Map .class); 57 assertNotNull(map); 58 assertFalse(map instanceof HashMap ); 59 } 60 61 public void testNonInterfaceImplementaionIsAutomaticallyHidden() { 62 Container pc = createImplementationHidingPicoContainer(); 63 pc.registerConstructor(HashMap .class, HashMap .class, null); 64 Map map = (Map ) pc.getInstance(HashMap .class); 65 assertNotNull(map); 66 assertTrue(map instanceof HashMap ); 67 } 68 69 public void testNonInterfaceImplementaionWithParametersIsAutomaticallyHidden() { 70 Container pc = createImplementationHidingPicoContainer(); 71 pc.registerConstructor(HashMap .class, HashMap .class, 72 null); 73 Map map = (Map ) pc.getInstance(HashMap .class); 74 assertNotNull(map); 75 assertTrue(map instanceof HashMap ); 76 } 77 78 79 public void testImplementaionWithParametersIsAutomaticallyHidden() { 80 Container pc = createImplementationHidingPicoContainer(); 81 pc.registerConstructor(Map .class, HashMap .class, 82 null); 83 Map map = (Map ) pc.getInstance(Map .class); 84 assertNotNull(map); 85 assertFalse(map instanceof HashMap ); 86 } 87 98 public void testExceptionThrowingFromHiddenComponent() { 99 Container pc = createImplementationHidingPicoContainer(); 100 pc.registerConstructor(ActionListener .class, Burp.class); 101 try { 102 ActionListener ac = (ActionListener ) pc.getInstance(ActionListener .class); 103 ac.actionPerformed(null); 104 fail("Oh no."); 105 } catch (RuntimeException e) { 106 assertEquals("woohoo", e.getMessage()); 107 } 108 } 109 public void testProxyAsObject(){ 110 final Container yan = createYanContainer(); 111 yan.registerConstructor(String .class, (Class [])null); 112 final Component c = yan.getComponentOfType(CharSequence .class); 113 assertEquals(c, c); 114 final Object s1 = yan.getInstanceOfType(CharSequence .class); 115 final Object s2 = yan.getInstanceOfType(CharSequence .class); 116 assertEquals(s1, s2); 117 final HashMap map = new HashMap (); 118 map.put(s1, s2); 119 assertEquals(s2, map.get(s1)); 120 } 121 public static class Burp implements ActionListener { 122 123 public void actionPerformed(ActionEvent e) { 124 throw new RuntimeException ("woohoo"); 125 } 126 } 127 protected Container getContainerImpl(){ 128 return new ProxyContainer(); 129 } 130 public interface Man { 131 int getEndurance(); 132 } 133 public interface Woman { 134 Man getMan(); 135 } 136 public static class Husband implements Man { 137 public final Woman woman; 138 139 public Husband(Woman woman) { 140 this.woman = woman; 141 } 142 143 public int getEndurance() { 144 return 10; 145 } 146 } 147 public static class Wife implements Woman { 148 public final Man man; 149 150 public Wife(Man man) { 151 this.man = man; 152 } 153 154 public Man getMan() { 155 return man; 156 } 157 } 158 public class Superman implements Man { 159 public int getEndurance() { 160 return 1000; 161 } 162 } 163 public void testCircularDependency(){ 164 final Container yan = createYanContainer(); 165 yan.registerConstructor(Woman.class, Wife.class); 166 yan.registerConstructor(Man.class, Husband.class); 167 Woman woman = (Woman) yan.getInstance(Woman.class); 168 assertEquals(10, woman.getMan().getEndurance()); 169 Man superman = new Superman(); 170 assertTrue(Proxies.setProxyImplementation(woman.getMan(), superman)); 172 assertEquals(1000, woman.getMan().getEndurance()); 173 try{ 174 Proxies.setProxyImplementation(woman, "abc"); 175 fail("should have failed"); 176 } 177 catch(IllegalArgumentException e){ 178 assertEquals("object of type java.lang.String is not an instance of tests.jfun.yan.BaseProxyContainerTestCase$Woman", 179 e.getMessage()); 180 } 181 assertFalse(Proxies.setProxyImplementation(superman, superman)); 182 } 183 } 184 | Popular Tags |