|  | @@ -15,28 +15,30 @@
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  package org.acegisecurity.annotation;
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | +import java.lang.reflect.Field;
 | 
	
		
			
				|  |  | +import java.lang.reflect.Method;
 | 
	
		
			
				|  |  | +import java.util.Collection;
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  |  import junit.framework.TestCase;
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  import org.acegisecurity.SecurityConfig;
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | +import org.apache.commons.logging.Log;
 | 
	
		
			
				|  |  | +import org.apache.commons.logging.LogFactory;
 | 
	
		
			
				|  |  |  import org.springframework.metadata.Attributes;
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -import java.lang.reflect.Field;
 | 
	
		
			
				|  |  | -import java.lang.reflect.Method;
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -import java.util.Collection;
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  /**
 | 
	
		
			
				|  |  |   * Tests for {@link org.acegisecurity.annotation.SecurityAnnotationAttributes}
 | 
	
		
			
				|  |  |   *
 | 
	
		
			
				|  |  |   * @author Mark St.Godard
 | 
	
		
			
				|  |  | - * @version $Revision$
 | 
	
		
			
				|  |  | + * @author Joe Scalise
 | 
	
		
			
				|  |  | + * @version $Id$
 | 
	
		
			
				|  |  |   */
 | 
	
		
			
				|  |  |  public class SecurityAnnotationAttributesTests extends TestCase {
 | 
	
		
			
				|  |  |      //~ Instance fields ================================================================================================
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |      private Attributes attributes;
 | 
	
		
			
				|  |  | +    private Log logger = LogFactory.getLog(SecurityAnnotationAttributesTests.class);
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |      //~ Methods ========================================================================================================
 | 
	
		
			
				|  |  |  
 | 
	
	
		
			
				|  | @@ -132,4 +134,59 @@ public class SecurityAnnotationAttributesTests extends TestCase {
 | 
	
		
			
				|  |  |              fail("Unsupported method should have thrown an exception!");
 | 
	
		
			
				|  |  |          } catch (UnsupportedOperationException expected) {}
 | 
	
		
			
				|  |  |      }
 | 
	
		
			
				|  |  | +    
 | 
	
		
			
				|  |  | +    public void testGenericsSuperclassDeclarationsAreIncludedWhenSubclassesOverride() {
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +        Method method = null;
 | 
	
		
			
				|  |  | +        try {
 | 
	
		
			
				|  |  | +            method = DepartmentServiceImpl.class.getMethod("someUserMethod3", new Class[]{Department.class});
 | 
	
		
			
				|  |  | +        } catch (NoSuchMethodException unexpected) {
 | 
	
		
			
				|  |  | +            fail("Should be a superMethod called 'someUserMethod3' on class!");
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  | +        Collection attrs = this.attributes.getAttributes(method);
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +        if (logger.isDebugEnabled()) {
 | 
	
		
			
				|  |  | +            logger.debug("attrs: ");
 | 
	
		
			
				|  |  | +            logger.debug(attrs);
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  | +        assertNotNull(attrs);
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +        // expect 1 attribute
 | 
	
		
			
				|  |  | +        assertTrue("Did not find 1 attribute", attrs.size() == 1);
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +        // should have 1 SecurityConfig
 | 
	
		
			
				|  |  | +        for (Object obj : attrs) {
 | 
	
		
			
				|  |  | +            assertTrue(obj instanceof SecurityConfig);
 | 
	
		
			
				|  |  | +            SecurityConfig sc = (SecurityConfig) obj;
 | 
	
		
			
				|  |  | +            assertEquals("Found an incorrect role", "ROLE_ADMIN", sc.getAttribute());
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +        Method superMethod = null;
 | 
	
		
			
				|  |  | +        try {
 | 
	
		
			
				|  |  | +            superMethod = DepartmentServiceImpl.class.getMethod("someUserMethod3", new Class[]{Entity.class});
 | 
	
		
			
				|  |  | +        } catch (NoSuchMethodException unexpected) {
 | 
	
		
			
				|  |  | +            fail("Should be a superMethod called 'someUserMethod3' on class!");
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  | +        System.out.println(superMethod);
 | 
	
		
			
				|  |  | +        Collection superAttrs = this.attributes.getAttributes(superMethod);
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +        if (logger.isDebugEnabled()) {
 | 
	
		
			
				|  |  | +            logger.debug("superAttrs: ");
 | 
	
		
			
				|  |  | +            logger.debug(superAttrs);
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  | +        assertNotNull(superAttrs);
 | 
	
		
			
				|  |  | +        
 | 
	
		
			
				|  |  | +        // TODO: Resolve bridge method bug as reported in SEC-274
 | 
	
		
			
				|  |  | +        /*
 | 
	
		
			
				|  |  | +        // expect 1 attribute
 | 
	
		
			
				|  |  | +        assertTrue("Did not find 1 attribute", superAttrs.size() == 1);
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +        // should have 1 SecurityConfig
 | 
	
		
			
				|  |  | +        for (Object obj : superAttrs) {
 | 
	
		
			
				|  |  | +            assertTrue(obj instanceof SecurityConfig);
 | 
	
		
			
				|  |  | +            SecurityConfig sc = (SecurityConfig) obj;
 | 
	
		
			
				|  |  | +            assertEquals("Found an incorrect role", "ROLE_ADMIN", sc.getAttribute());
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  | +        */
 | 
	
		
			
				|  |  | +    }   
 | 
	
		
			
				|  |  |  }
 |