1 package com.atlassian.core.test.util;
2
3 import junit.framework.TestCase;
4 import com.atlassian.core.util.collection.EasyList;
5
6 import java.sql.SQLException;
7
8 public class TestDuckTypeProxy extends TestCase
9 {
10 public interface MyInterface
11 {
12 String getString();
13 Long getLong();
14 Integer getInteger();
15 String get(String string);
16 String get(Integer integer);
17 String getStuffed() throws SQLException;
18 }
19
20 public void testProxyReturns() throws Exception
21 {
22 Object obj = new Object()
23 {
24 public String getString()
25 {
26 return "who's you're daddy?";
27 }
28 };
29 MyInterface impl = (MyInterface) DuckTypeProxy.getProxy(MyInterface.class, EasyList.build(obj), DuckTypeProxy.THROW);
30 assertEquals("who's you're daddy?", impl.getString());
31 }
32
33 public void testProxyThrows() throws Exception
34 {
35 MyInterface impl = (MyInterface) DuckTypeProxy.getProxy(MyInterface.class, EasyList.build(new Object()), DuckTypeProxy.THROW);
36 try
37 {
38 impl.getString();
39 fail("should have thrown USOE");
40 }
41 catch (UnsupportedOperationException yay)
42 {
43 }
44 }
45
46 public void testProxyThrowsTarget() throws Exception
47 {
48 Object obj = new Object()
49 {
50 public String getStuffed() throws SQLException
51 {
52 throw new SQLException("bad, bad, bad");
53 }
54 };
55 MyInterface impl = (MyInterface) DuckTypeProxy.getProxy(MyInterface.class, EasyList.build(obj));
56 try
57 {
58 impl.getStuffed();
59 fail("should have thrown USOE");
60 }
61 catch (SQLException yay)
62 {
63 }
64 }
65
66 public void testProxyDelegatesToSecond() throws Exception
67 {
68 Object obj = new Object()
69 {
70 public String getString()
71 {
72 return "who's you're daddy?";
73 }
74 };
75 MyInterface impl = (MyInterface) DuckTypeProxy.getProxy(MyInterface.class, EasyList.build(new Object(), obj), DuckTypeProxy.THROW);
76 assertEquals("who's you're daddy?", impl.getString());
77 }
78
79 public void testNotNullParameter() throws Exception
80 {
81 Object obj = new Object()
82 {
83 public String get(String string)
84 {
85 return "how about: " + string;
86 }
87 };
88 MyInterface impl = (MyInterface) DuckTypeProxy.getProxy(MyInterface.class, EasyList.build(obj), DuckTypeProxy.THROW);
89 assertEquals("how about: me", impl.get("me"));
90 }
91
92 public void testNullParameter() throws Exception
93 {
94 Object obj = new Object()
95 {
96 public String get(String string)
97 {
98 return "how about: " + string;
99 }
100 };
101 MyInterface impl = (MyInterface) DuckTypeProxy.getProxy(MyInterface.class, EasyList.build(obj), DuckTypeProxy.THROW);
102 assertEquals("how about: null", impl.get((String) null));
103 }
104 }