1   /*
2    * The Apache Software License, Version 1.1
3    *
4    * Copyright (c) 2002 The Apache Software Foundation.  All rights
5    * reserved.
6    *
7    * Redistribution and use in source and binary forms, with or without
8    * modification, are permitted provided that the following conditions
9    * are met:
10   *
11   * 1. Redistributions of source code must retain the above copyright
12   *    notice, this list of conditions and the following disclaimer.
13   *
14   * 2. Redistributions in binary form must reproduce the above copyright
15   *    notice, this list of conditions and the following disclaimer in
16   *    the documentation and/or other materials provided with the
17   *    distribution.
18   *
19   * 3. The end-user documentation included with the redistribution,
20   *    if any, must include the following acknowledgment:
21   *       "This product includes software developed by the
22   *        Apache Software Foundation (http://www.apache.org/)."
23   *    Alternately, this acknowledgment may appear in the software itself,
24   *    if and wherever such third-party acknowledgments normally appear.
25   *
26   * 4. The names "Apache" and "Apache Software Foundation" must
27   *    not be used to endorse or promote products derived from this
28   *    software without prior written permission. For written
29   *    permission, please contact apache@apache.org.
30   *
31   * 5. Products derived from this software may not be called "Apache",
32   *    nor may "Apache" appear in their name, without prior written
33   *    permission of the Apache Software Foundation.
34   *
35   * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
36   * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
37   * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
38   * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
39   * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
40   * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
41   * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
42   * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
43   * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
44   * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
45   * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
46   * SUCH DAMAGE.
47   * ====================================================================
48   *
49   * This software consists of voluntary contributions made by many
50   * individuals on behalf of the Apache Software Foundation.  For more
51   * information on the Apache Software Foundation, please see
52   * <http://www.apache.org/>.
53   */
54  package net.sf.cglib.proxy;
55  
56  import net.sf.cglib.CodeGenTestCase;
57  import java.beans.*;
58  import java.lang.reflect.Method;
59  import java.util.*;
60  import junit.framework.*;
61  
62  /***
63   * @author Chris Nokleberg
64   * @version $Id: TestMixin.java,v 1.3 2004/01/25 22:28:01 herbyderby Exp $
65   */
66  public class TestMixin extends CodeGenTestCase {
67      public void testSimple() throws Exception {
68          Object obj = Mixin.create(new Class[]{ DI1.class, DI2.class },
69                                     new Object[]{ new D1(), new D2() });
70          assertTrue(((DI1)obj).herby().equals("D1"));
71          assertTrue(((DI2)obj).derby().equals("D2"));
72      }
73  
74      public void testDetermineInterfaces() throws Exception {
75          Object obj = Mixin.create(new Object[]{ new D1(), new D2() });
76          assertTrue(((DI1)obj).herby().equals("D1"));
77          assertTrue(((DI2)obj).derby().equals("D2"));
78      }
79   
80      public void testOverride() throws Exception {
81          Object obj = Mixin.create(new Object[]{ new D1(), new D4() });
82          assertTrue(((DI1)obj).herby().equals("D1"));
83          assertTrue(((DI2)obj).derby().equals("D4"));
84      }
85  
86      public void testNonOverride() throws Exception {
87          Object obj = Mixin.create(new Object[]{ new D4(), new D1() });
88          assertTrue(((DI1)obj).herby().equals("D4"));
89          assertTrue(((DI2)obj).derby().equals("D4"));
90      }
91  
92      public void testSubclass() throws Exception {
93          Object obj = Mixin.create(new Object[]{ new D3(), new D1() });
94          assertTrue(((DI1)obj).herby().equals("D1"));
95          assertTrue(((DI2)obj).derby().equals("D2"));
96          assertTrue(((DI3)obj).extra().equals("D3"));
97      }
98  
99      public void testBeans() throws Exception {
100         Object obj = Mixin.createBean(new Object[]{ new DBean1(), new DBean2() });
101         Set getters = getGetters(obj.getClass());
102         assertTrue(getters.size() == 3); // name, age, class
103         assertTrue(getters.contains("name"));
104         assertTrue(getters.contains("age"));
105         assertTrue(!(obj instanceof DI1));
106     }
107 
108     public void testEverything() throws Exception {
109         Mixin.Generator gen = new Mixin.Generator();
110         gen.setStyle(Mixin.STYLE_EVERYTHING);
111         gen.setDelegates(new Object[]{ new DBean1(), new DBean2() });
112         Object obj = gen.create();
113         Set getters = getGetters(obj.getClass());
114         assertTrue(getters.size() == 3); // name, age, class
115         assertTrue(obj instanceof DI1);
116         assertTrue(new DBean1().herby().equals(((DI1)obj).herby()));
117     }
118 
119     public void testNullDelegates() throws Exception {
120         Mixin.Generator gen = new Mixin.Generator();
121         gen.setStyle(Mixin.STYLE_BEANS);
122         gen.setClasses(new Class[]{ DBean1.class, DBean2.class });
123         Mixin mixin = gen.create();
124         Object obj = mixin.newInstance(new Object[]{ new DBean1(), new DBean2() });
125     }
126 
127     private static Set getGetters(Class beanClass) throws Exception {
128         Set getters = new HashSet();
129         PropertyDescriptor[] descriptors =
130             Introspector.getBeanInfo(beanClass).getPropertyDescriptors();
131         for (int i = 0; i < descriptors.length; i++) {
132             if (descriptors[i].getReadMethod() != null) {
133                 getters.add(descriptors[i].getName());
134             }
135         }
136         return getters;
137     }
138 
139     private static PropertyDescriptor getProperty(Class beanClass, String property) throws Exception {
140         Set getters = new HashSet();
141         PropertyDescriptor[] descriptors =
142             Introspector.getBeanInfo(beanClass).getPropertyDescriptors();
143         for (int i = 0; i < descriptors.length; i++) {
144             if (descriptors[i].getName().equals(property))
145                 return descriptors[i];
146         }
147         return null;
148     }
149 
150     public TestMixin(String testName) {
151         super(testName);
152     }
153     
154     public static void main(String[] args) {
155         junit.textui.TestRunner.run(suite());
156     }
157     
158     public static Test suite() {
159         return new TestSuite(TestMixin.class);
160     }
161 }
This page was automatically generated by Maven