/*
* JBoss, Home of Professional Open Source.
* Copyright 2008, Red Hat Middleware LLC, and individual contributors
* as indicated by the @author tags. See the copyright.txt file in the
* distribution for a full listing of individual contributors.
*
* This is free software; you can redistribute it and/or modify it
* under the terms of the GNU Lesser General Public License as
* published by the Free Software Foundation; either version 2.1 of
* the License, or (at your option) any later version.
*
* This software is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this software; if not, write to the Free
* Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
* 02110-1301 USA, or see the FSF site: http://www.fsf.org.
*/
package org.jboss.test.aop.scoped;
import org.jboss.aop.Advised;
import org.jboss.test.aop.scoped.excluded.ExcludedPOJO;
import org.jboss.test.aop.scoped.excluded.included.IncludedPOJO;
/**
*
* @author <a href="kabir.khan@jboss.com">Kabir Khan</a>
* @version $Revision: 85945 $
*/
public class ScopedTester implements ScopedTesterMBean
{
int expectedInterceptorValue;
int expectedAspectValue;
int metadataSuffix;
String ctorPlainMetadata;
String methodPlainMetadata;
String customMetadata;
public void setExpectedInterceptorValue(int i)
{
expectedInterceptorValue = i;
}
public void setExpectedAspectValue(int i)
{
expectedAspectValue = i;
}
public int getExpectedInterceptorValue()
{
return expectedInterceptorValue;
}
public int getExpectedAspectValue()
{
return expectedAspectValue;
}
public void setMetadataSuffix(int i)
{
metadataSuffix = i;
ctorPlainMetadata = "ctor" + metadataSuffix;
methodPlainMetadata = "method" + metadataSuffix;
customMetadata = "custom" + metadataSuffix;
}
public void testExpectedValues()
{
if (ScopedInterceptor.value != expectedInterceptorValue)
{
throw new RuntimeException("Expected Interceptor value " + expectedInterceptorValue + ", was " + ScopedInterceptor.value);
}
if (ScopedAspect.value != expectedAspectValue)
{
throw new RuntimeException("Expected Aspect value " + expectedAspectValue + ", was " + ScopedAspect.value);
}
}
public void testScoped() throws Exception
{
System.out.println("--------------------------- TESTING SCOPED ------------------");
System.out.println("MY CLASSLOADER " + getClass().getClassLoader());
System.out.println("SCOPED INTERCEPTOR CLASSLOADER " + ScopedInterceptor.class.getClassLoader());
System.out.println("------- CTOR");
ScopedAspect.intercepted = 0;
ScopedFactoryAspect.intercepted = 0;
ScopedFactoryAspect.metadata = null;
ScopedFactoryAspect.customMetadata = null;
POJO pojo = new POJO();
if (ScopedAspect.intercepted != 1)
{
throw new RuntimeException("Expected ScopedAspect 1 for POJO constructor, was " + ScopedAspect.intercepted);
}
if (ScopedFactoryAspect.intercepted != 1)
{
throw new RuntimeException("Expected ScopedFactoryAspect 1 for POJO constructor, was " + ScopedFactoryAspect.intercepted);
}
if (!ctorPlainMetadata.equals(ScopedFactoryAspect.metadata))
{
throw new RuntimeException("Expected ctor metadata " + ctorPlainMetadata + ", was " + ScopedFactoryAspect.metadata);
}
if (!customMetadata.equals(ScopedFactoryAspect.customMetadata))
{
throw new RuntimeException("Expected ctor customm metadata " + customMetadata + ", was " + ScopedFactoryAspect.customMetadata);
}
System.out.println("------- METHOD");
ScopedInterceptor.intercepted = 0;
ScopedAspect.intercepted = 0;
ScopedFactoryAspect.intercepted = 0;
ScopedFactoryAspect.metadata = null;
ScopedFactoryAspect.customMetadata = null;
pojo.method();
if (ScopedInterceptor.intercepted != 1)
{
throw new RuntimeException("Expected ScopedInterceptor 1 for POJO method, was " + ScopedInterceptor.intercepted);
}
if (ScopedAspect.intercepted != 1)
{
throw new RuntimeException("Expected ScopedAspect 1 for POJO method, was " + ScopedAspect.intercepted);
}
if (ScopedFactoryAspect.intercepted != 1)
{
throw new RuntimeException("Expected ScopedFactoryAspect 1 for POJO method, was " + ScopedFactoryAspect.intercepted);
}
if (!methodPlainMetadata.equals(ScopedFactoryAspect.metadata))
{
throw new RuntimeException("Expected method metadata '" + methodPlainMetadata + ", was " + ScopedFactoryAspect.metadata);
}
if (!customMetadata.equals(ScopedFactoryAspect.customMetadata))
{
throw new RuntimeException("Expected method customm metadata " + customMetadata + ", was " + ScopedFactoryAspect.customMetadata);
}
}
public void testAnnotatedScopedAnnotationsDeployed()
{
AnnotatedInterceptor.invoked = false;
POJO pojo = new POJO();
if (!AnnotatedInterceptor.invoked) throw new RuntimeException("AnnotatedInterceptor should have been invoked");
}
public void testAnnotatedScopedAnnotationsNotDeployed()
{
try
{
AnnotatedInterceptor.invoked = false;
throw new RuntimeException("AnnotatedInterceptor should not be available in this deployment");
}
catch (NoClassDefFoundError expected)
{
}
}
public void testIntroduction1()
{
IntroducedPOJO pojo = new IntroducedPOJO();
Scope1Interface iface = (Scope1Interface)pojo;
ScopedInterceptor.intercepted = 0;
iface.testMethod();
if (ScopedInterceptor.intercepted != 1)
{
throw new RuntimeException("Expected ScopedInterceptor 1 for introduction " + ScopedInterceptor.intercepted);
}
try
{
Scope2Interface iface2 = (Scope2Interface)pojo;
throw new RuntimeException("Should not be implementing Scope2Interface");
}
catch(ClassCastException expected)
{
}
}
public void testIntroduction2()
{
IntroducedPOJO pojo = new IntroducedPOJO();
Scope2Interface iface = (Scope2Interface)pojo;
ScopedInterceptor.intercepted = 0;
iface.testMethod();
if (ScopedInterceptor.intercepted != 1)
{
throw new RuntimeException("Expected ScopedInterceptor 1 for introduction " + ScopedInterceptor.intercepted);
}
try
{
Scope1Interface iface2 = (Scope1Interface)pojo;
throw new RuntimeException("Should not be implementing Scope1Interface");
}
catch(ClassCastException expected)
{
}
}
public void testInclude()
{
if (!Advised.class.isAssignableFrom(IncludedPOJO.class))
{
throw new RuntimeException("IncludedPOJO should be Advised");
}
}
public void testExclude()
{
if (Advised.class.isAssignableFrom(ExcludedPOJO.class))
{
throw new RuntimeException("ExcludedPOJO should not be Advised");
}
}
public void testIgnore()
{
if (Advised.class.isAssignableFrom(POJO$$Ignored$$123.class))
{
throw new RuntimeException("POJO$$Ignored$$123 should not be Advised");
}
}
}