Update of /cvsroot/springnet/Spring.Net/test/Spring/Spring.Aop.Tests/Aop/Framework/AutoProxy
In directory sc8-pr-cvs8.sourceforge.net:/tmp/cvs-serv30573/Aop/Framework/AutoProxy
Modified Files:
AdvisorAutoProxyCreatorCircularReferencesTests.cs
ObjectNameAutoProxyCreatorTests.cs
advisorAutoProxyCreatorCircularReferencesTests.xml
Added Files:
CreatesTestObject.cs
Log Message:
SPRNET-720 - Change ObjectNameAutoProxyCreator default behavior to proxy the product of a IFactoryObject and not the IFactoryObject itself
SPRNET-721 - Intercept all target interfaces when using an introduction with ObjectNameAutoProxyCreator
Index: AdvisorAutoProxyCreatorCircularReferencesTests.cs
===================================================================
RCS file: /cvsroot/springnet/Spring.Net/test/Spring/Spring.Aop.Tests/Aop/Framework/AutoProxy/AdvisorAutoProxyCreatorCircularReferencesTests.cs,v
retrieving revision 1.3
retrieving revision 1.4
diff -C2 -d -r1.3 -r1.4
*** AdvisorAutoProxyCreatorCircularReferencesTests.cs 1 Aug 2007 17:56:25 -0000 1.3
--- AdvisorAutoProxyCreatorCircularReferencesTests.cs 7 Sep 2007 01:53:01 -0000 1.4
***************
*** 50,58 ****
Assert.IsFalse(AopUtils.IsAopProxy(context.GetObject("aapc")));
Assert.IsFalse(AopUtils.IsAopProxy(context.GetObject("testAdvisor")));
! Assert.IsFalse(AopUtils.IsAopProxy(context.GetObject("testObjectFactory")));
Assert.IsFalse(AopUtils.IsAopProxy(context.GetObject("someOtherObject")));
// this one is completely independent
Assert.IsTrue(AopUtils.IsAopProxy(context.GetObject("independentObject")));
}
}
--- 50,61 ----
Assert.IsFalse(AopUtils.IsAopProxy(context.GetObject("aapc")));
Assert.IsFalse(AopUtils.IsAopProxy(context.GetObject("testAdvisor")));
! Assert.IsFalse(AopUtils.IsAopProxy(context.GetObject("&testObjectFactory")));
Assert.IsFalse(AopUtils.IsAopProxy(context.GetObject("someOtherObject")));
// this one is completely independent
Assert.IsTrue(AopUtils.IsAopProxy(context.GetObject("independentObject")));
+
+ // products of the factory created at runtime should be proxied
+ Assert.IsTrue(AopUtils.IsAopProxy(context.GetObject("testObjectFactory")));
}
}
--- NEW FILE: CreatesTestObject.cs ---
#region License
/*
* Copyright 2002-2007 the original author or authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
#endregion
using System;
using Spring.Objects;
using Spring.Objects.Factory;
namespace Spring.Aop.Framework.AutoProxy
{
/// <summary>
/// This is simple implementation of IFactoryObject that creates a TestObject.
/// </summary>
/// <author>Mark Pollack</author>
/// <version>$Id: CreatesTestObject.cs,v 1.1 2007/09/07 01:53:02 markpollack Exp $</version>
public class CreatesTestObject : IFactoryObject, IInitializingObject
{
private bool initialized = false;
private ITestObject testObject;
public CreatesTestObject()
{
}
public object GetObject()
{
// return product only, if factory has been fully initialized!
if (!initialized)
{
return null;
}
else
{
return testObject;
}
}
public Type ObjectType
{
get
{
// return type only if we are ready to deliver our product!
if (!initialized)
{
return null;
}
else
{
return typeof(ITestObject);
}
}
}
public bool IsSingleton
{
get { return true; }
}
public void AfterPropertiesSet()
{
testObject = new TestObject();
initialized = true;
}
}
}
Index: advisorAutoProxyCreatorCircularReferencesTests.xml
===================================================================
RCS file: /cvsroot/springnet/Spring.Net/test/Spring/Spring.Aop.Tests/Aop/Framework/AutoProxy/advisorAutoProxyCreatorCircularReferencesTests.xml,v
retrieving revision 1.2
retrieving revision 1.3
diff -C2 -d -r1.2 -r1.3
*** advisorAutoProxyCreatorCircularReferencesTests.xml 21 Jul 2007 11:28:05 -0000 1.2
--- advisorAutoProxyCreatorCircularReferencesTests.xml 7 Sep 2007 01:53:01 -0000 1.3
***************
*** 29,32 ****
--- 29,34 ----
<object id="independentObject" type="Spring.Aop.Framework.AutoProxy.IndependentObject, Spring.Aop.Tests" />
+
+ <!-- match everything -->
<object id="aapc" type="Spring.Aop.Framework.AutoProxy.DefaultAdvisorAutoProxyCreator, Spring.Aop"/>
Index: ObjectNameAutoProxyCreatorTests.cs
===================================================================
RCS file: /cvsroot/springnet/Spring.Net/test/Spring/Spring.Aop.Tests/Aop/Framework/AutoProxy/ObjectNameAutoProxyCreatorTests.cs,v
retrieving revision 1.5
retrieving revision 1.6
diff -C2 -d -r1.5 -r1.6
*** ObjectNameAutoProxyCreatorTests.cs 1 Aug 2007 17:56:25 -0000 1.5
--- ObjectNameAutoProxyCreatorTests.cs 7 Sep 2007 01:53:01 -0000 1.6
***************
*** 22,26 ****
using NUnit.Framework;
- using Spring.Aop.Framework.DynamicProxy;
using Spring.Aop.Interceptor;
using Spring.Context;
--- 22,25 ----
***************
*** 64,76 ****
{
ITestObject testObject = (ITestObject) ctx.GetObject("testObject");
! ProxyAssertions(testObject);
Assert.AreEqual("SimpleTestObject", testObject.Name);
}
[Test]
public void ProxyWithWildcardMatchSuffix()
{
ITestObject testObject = (ITestObject) ctx.GetObject("SmithFamilyMember");
! ProxyAssertions(testObject);
Assert.AreEqual("John Smith", testObject.Name);
}
--- 63,83 ----
{
ITestObject testObject = (ITestObject) ctx.GetObject("testObject");
! ProxyAssertions(testObject, 1);
Assert.AreEqual("SimpleTestObject", testObject.Name);
}
[Test]
+ public void ProxyWithDoubleProxying()
+ {
+ ITestObject testObject = (ITestObject)ctx.GetObject("doubleProxy");
+ ProxyAssertions(testObject, 2);
+ Assert.AreEqual("doubleProxy", testObject.Name);
+ }
+
+ [Test]
public void ProxyWithWildcardMatchSuffix()
{
ITestObject testObject = (ITestObject) ctx.GetObject("SmithFamilyMember");
! ProxyAssertions(testObject, 1);
Assert.AreEqual("John Smith", testObject.Name);
}
***************
*** 79,96 ****
public void ProxyWithTwoWildcardsMatch()
{
! ITestObject testObject = (ITestObject)ctx.GetObject("twoWildcardsTestObject");
! ProxyAssertions(testObject);
Assert.AreEqual("Damjan Tomic", testObject.Name);
}
! private void ProxyAssertions(ITestObject testObject)
{
NopInterceptor nop = (NopInterceptor) ctx.GetObject("nopInterceptor");
Assert.AreEqual(0, nop.Count);
! Assert.IsTrue(AopUtils.IsAopProxy(testObject), testObject + " is not an AOP Proxy");
int age = 5;
testObject.Age = age;
Assert.AreEqual(age, testObject.Age);
! Assert.AreEqual(2, nop.Count);
}
}
--- 86,161 ----
public void ProxyWithTwoWildcardsMatch()
{
! ITestObject testObject = (ITestObject)ctx.GetObject("twoWildcardsTestObject");
! ProxyAssertions(testObject, 1);
Assert.AreEqual("Damjan Tomic", testObject.Name);
}
! [Test]
! public void AppliesToCreatedObjectsNotFactoryObject()
! {
! ITestObject testObject = (ITestObject) ctx.GetObject("factoryObject");
! ProxyAssertions(testObject, 1);
! }
!
! [Test]
! public void DecoratorProxyWithWildcardMatch()
! {
! ITestObject testObject = (ITestObject)ctx.GetObject("decoratorProxy");
! DecoratorProxyAssertions(testObject);
! Assert.AreEqual("decoratorProxy", testObject.Name);
! }
!
! [Test]
! public void FrozenProxy()
! {
! ITestObject testObject = (ITestObject)ctx.GetObject("frozen");
! Assert.IsTrue( ((IAdvised)testObject).IsFrozen);
! }
!
! [Test]
! public void Introduction()
! {
! object obj = ctx.GetObject("introductionUsingDecorator");
! Assert.IsNotNull(obj as IIsModified);
! ITestObject testObject = (ITestObject) obj;
! NopInterceptor nop = (NopInterceptor)ctx.GetObject("introductionNopInterceptor");
! Assert.AreEqual(0, nop.Count);
! Assert.IsTrue(AopUtils.IsCompositionAopProxy(testObject), testObject + " is not an Composition AOP Proxy");
! int age = 5;
! testObject.Age = age;
! Assert.AreEqual(age, testObject.Age);
! Assert.IsNotNull(testObject as IIsModified);
! Assert.IsTrue(((IIsModified)testObject).IsModified);
! Assert.AreEqual(3, nop.Count);
! Assert.AreEqual("introductionUsingDecorator", testObject.Name);
! }
!
!
! private void ProxyAssertions(ITestObject testObject, int nopInterceptorCount)
{
NopInterceptor nop = (NopInterceptor) ctx.GetObject("nopInterceptor");
Assert.AreEqual(0, nop.Count);
! Assert.IsTrue(AopUtils.IsCompositionAopProxy(testObject), testObject + " is not an AOP Proxy");
int age = 5;
testObject.Age = age;
Assert.AreEqual(age, testObject.Age);
! Assert.AreEqual(2 * nopInterceptorCount, nop.Count);
! }
!
! private void DecoratorProxyAssertions(ITestObject testObject)
! {
! CountingBeforeAdvice cba = (CountingBeforeAdvice) ctx.GetObject("countingBeforeAdvice");
! NopInterceptor nop = (NopInterceptor)ctx.GetObject("nopInterceptor");
! Assert.AreEqual(0, cba.GetCalls());
! Assert.AreEqual(0, nop.Count);
! Assert.IsTrue(AopUtils.IsDecoratorAopProxy(testObject), testObject + " is not an AOP Proxy");
! //extra advice calls are due to test IsDecoratorAopProxy and call to .GetType in impl
! Assert.AreEqual(1, nop.Count);
! Assert.AreEqual(1, cba.GetCalls());
! int age = 5;
! testObject.Age = age;
! Assert.AreEqual(age, testObject.Age);
! Assert.AreEqual(3, nop.Count);
! Assert.AreEqual(3, cba.GetCalls());
}
}
|