1   /*
2    * Licensed to the Apache Software Foundation (ASF) under one or more
3    * contributor license agreements.  See the NOTICE file distributed with
4    * this work for additional information regarding copyright ownership.
5    * The ASF licenses this file to You under the Apache License, Version 2.0
6    * (the "License"); you may not use this file except in compliance with
7    * the License.  You may obtain a copy of the License at
8    * 
9    *      http://www.apache.org/licenses/LICENSE-2.0
10   * 
11   * Unless required by applicable law or agreed to in writing, software
12   * distributed under the License is distributed on an "AS IS" BASIS,
13   * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14   * See the License for the specific language governing permissions and
15   * limitations under the License.
16   */
17  
18  //
19  // Log4j uses the JUnit framework for internal unit testing. JUnit
20  // available from
21  //
22  //     http://www.junit.org
23  
24  
25  package org.apache.log4j.or;
26  
27  
28  
29  import junit.framework.TestCase;
30  import junit.framework.TestSuite;
31  import junit.framework.Test;
32  
33  import java.io.Serializable;
34  
35  
36  /**
37     Unit test the {@link ObjectRenderer}.
38     @author Ceki Gülcü
39     @since 1.0 */
40  public class ORTestCase extends TestCase {
41  
42    static UTObjectRenderer aor;
43    static UTObjectRenderer bor;
44    static UTObjectRenderer xor;
45    static UTObjectRenderer yor;
46  
47    static UTObjectRenderer oor;
48    static UTObjectRenderer nor;
49    static UTObjectRenderer ior;
50    static UTObjectRenderer cor;
51    static UTObjectRenderer sor;
52  
53  
54  
55    public ORTestCase(String name) {
56      super(name);
57    }
58  
59  
60    public
61    void setUp() {
62      aor = new UTObjectRenderer("A");
63      bor = new UTObjectRenderer("B");
64      xor = new UTObjectRenderer("X");    
65      yor = new UTObjectRenderer("Y");    
66  
67      oor = new UTObjectRenderer("Object");
68      nor = new UTObjectRenderer("Number");
69      ior = new UTObjectRenderer("Integer");
70      cor = new UTObjectRenderer("Comparable");
71      sor = new UTObjectRenderer("Serializable");
72    }
73  
74    // Add: no renderer
75    // Expect: defaultRenderer
76    public
77    void test1() {
78      RendererMap map = new RendererMap();
79      ObjectRenderer dr = map.getDefaultRenderer();
80      ObjectRenderer r = map.get(Integer.class);
81      assertEquals(r, dr);
82    }
83  
84    // Add: Integer renderer
85    // Expect: Integer renderer
86    public
87    void test2() {
88      RendererMap map = new RendererMap();
89      map.put(Integer.class, ior);
90      ObjectRenderer r = map.get(Integer.class);
91      assertEquals(r, ior);
92  
93    }
94  
95    // Add: Number renderer
96    // Expect: Number
97    public
98    void test3() {
99      RendererMap map = new RendererMap();
100     map.put(Number.class, ior);
101     ObjectRenderer r = map.get(Integer.class);
102     assertEquals(r, ior);
103   }
104 
105   // Add: Object renderer
106   // Result: Object
107   public
108   void test4() {
109     RendererMap map = new RendererMap();
110     map.put(Object.class, oor);
111     ObjectRenderer r = map.get(Integer.class);
112     assertEquals(r, oor);
113   }
114 
115   // Add: Object, Number, Integer
116   // Expect: Integer
117   public
118   void test5() {
119     RendererMap map = new RendererMap();
120 
121     map.put(Object.class, oor);
122     map.put(Number.class, nor);
123     map.put(Integer.class, ior);
124 
125     ObjectRenderer r = map.get(Integer.class);
126     assertEquals(r, ior);
127   }
128 
129   // Add: Object, Number
130   // Expect: Number
131   public
132   void test6() {
133     RendererMap map = new RendererMap();
134 
135     map.put(Object.class, oor);
136     map.put(Number.class, nor);
137  
138     ObjectRenderer r = map.get(Integer.class);
139     assertEquals(r, nor);
140   }
141 
142   // Add: Comparable
143   // Expect: Comparable
144   public
145   void test7() throws Exception {
146     RendererMap map = new RendererMap();
147     Class comparable = null; 
148     try {
149         comparable = Class.forName("java.lang.Comparable");
150     } catch(Exception ex) {
151         //  likely JDK 1.1
152         return;
153     }
154     map.put(comparable, cor);
155     ObjectRenderer r = map.get(Integer.class);
156     assertEquals(r, cor);
157   }
158 
159 
160   // Add: Serializable
161   // Expect: Serializablee
162   public
163   void test8() {
164     RendererMap map = new RendererMap();
165     map.put(Serializable.class, sor); 
166     ObjectRenderer r = map.get(Integer.class);
167     assertEquals(r, sor);
168   }
169 
170   // Add: Y
171   // Expect: Y
172   public
173   void test9() {
174     RendererMap map = new RendererMap();
175     map.put(Y.class, yor); 
176     ObjectRenderer r = map.get(B.class);
177     assertEquals(r, yor);
178   }
179 
180   // Add: X
181   // Expect: X
182   public
183   void test10() {
184     RendererMap map = new RendererMap();
185     map.put(X.class, xor); 
186     ObjectRenderer r = map.get(B.class);
187     assertEquals(r, xor);
188   }
189 
190 
191 
192 
193   public
194   static
195   Test suite() {
196     TestSuite suite = new TestSuite();
197     suite.addTest(new ORTestCase("test1"));
198     suite.addTest(new ORTestCase("test2"));
199     suite.addTest(new ORTestCase("test3"));
200     suite.addTest(new ORTestCase("test4"));
201     suite.addTest(new ORTestCase("test5"));
202     suite.addTest(new ORTestCase("test6"));
203     suite.addTest(new ORTestCase("test7"));
204     suite.addTest(new ORTestCase("test8"));
205     suite.addTest(new ORTestCase("test9"));
206     suite.addTest(new ORTestCase("test10"));
207     return suite;
208   }
209 
210 
211 
212 }
213 
214 class UTObjectRenderer implements ObjectRenderer {
215   
216   String name;
217 
218   UTObjectRenderer(String name) {
219     this.name = name;
220   }
221 
222   public
223   String doRender(Object o) {
224     return name;
225   }
226 
227   public
228   String toString() {
229     return("UTObjectRenderer: "+name);
230   }
231 }
232 
233 
234 interface X  {
235 }
236 
237 interface Y extends X {
238 }
239 
240 
241 class A implements Y  {
242 }
243 
244 class B extends A  {
245 }