From 3fc968f8ee499f20123935aacf755feb729f13ed Mon Sep 17 00:00:00 2001 From: Marijn van der Zee Date: Tue, 24 Apr 2012 13:10:41 +0200 Subject: [PATCH] SPRNET-1433 - Add `IsInheritanceAopProxy` and `IsInheritanceAopProxyType` methods Includes tests. --- .../Spring.Aop/Aop/Framework/AopUtils.cs | 27 +++++++ .../Framework/DynamicProxy/IsAopProxyTests.cs | 77 +++++++++++++++++++ .../DynamicProxy/IsAopProxyTests.xml | 26 +++++++ .../Spring.Aop.Tests.2010.csproj | 2 + 4 files changed, 132 insertions(+) create mode 100644 test/Spring/Spring.Aop.Tests/Aop/Framework/DynamicProxy/IsAopProxyTests.cs create mode 100644 test/Spring/Spring.Aop.Tests/Aop/Framework/DynamicProxy/IsAopProxyTests.xml diff --git a/src/Spring/Spring.Aop/Aop/Framework/AopUtils.cs b/src/Spring/Spring.Aop/Aop/Framework/AopUtils.cs index 3ceb7a54..7efc7b54 100644 --- a/src/Spring/Spring.Aop/Aop/Framework/AopUtils.cs +++ b/src/Spring/Spring.Aop/Aop/Framework/AopUtils.cs @@ -47,6 +47,8 @@ namespace Spring.Aop.Framework private const string COMPOSITION_PROXY_TYPE_NAME = "CompositionAopProxy"; private const string DECORATOR_PROXY_TYPE_NAME = "DecoratorAopProxy"; + + private const string INHERITANCE_PROXY_TYPE_NAME = "InheritanceAopProxy"; /// /// Is the supplied an AOP proxy? @@ -130,6 +132,30 @@ namespace Spring.Aop.Framework return ((objectType != null) && objectType.FullName.StartsWith(DECORATOR_PROXY_TYPE_NAME)); } + + /// + /// Is the supplied an inheritance based AOP proxy? + /// + /// The instance to be checked. + /// + /// if the supplied is + /// an inheritacne based AOP proxy. + /// + public static bool IsInheritanceAopProxy(Object instance) + { + return instance != null && IsInheritanceAopProxyType(instance.GetType()); + } + + /// + /// Is the supplied an inheritance based AOP proxy type? + /// + /// The type to be checked. + /// if the supplied is an inheritance based AOP proxy type. + public static bool IsInheritanceAopProxyType(Type objectType) + { + return ((objectType != null) && objectType.FullName.StartsWith(INHERITANCE_PROXY_TYPE_NAME)); + } + /// /// Gets all of the interfaces that the of the /// supplied implements. @@ -379,5 +405,6 @@ namespace Spring.Aop.Framework } return candidate.GetType(); } + } } \ No newline at end of file diff --git a/test/Spring/Spring.Aop.Tests/Aop/Framework/DynamicProxy/IsAopProxyTests.cs b/test/Spring/Spring.Aop.Tests/Aop/Framework/DynamicProxy/IsAopProxyTests.cs new file mode 100644 index 00000000..653355c3 --- /dev/null +++ b/test/Spring/Spring.Aop.Tests/Aop/Framework/DynamicProxy/IsAopProxyTests.cs @@ -0,0 +1,77 @@ +using System; +using NUnit.Framework; +using Spring.Aop.Advice; +using Spring.Context.Support; +using Spring.Objects; +using Spring.Objects.Factory.Xml; + +namespace Spring.Aop.Framework.DynamicProxy +{ + [TestFixture] + public class IsAopProxyTests + { + private TestObject _target; + + [SetUp] + public void SetUp() + { + _target = new TestObject("Michael", 23); + } + + [Test] + public void TargetIsNotAProxy() + { + Assert.False(AopUtils.IsAopProxy(_target)); + } + + [Test] + public void IsCompositionProxy() + { + var pf = new ProxyFactory(typeof(ITestObject), new DebugAdvice()); + pf.Target = _target; + Assert.False(pf.ProxyTargetType); + + var proxy = (ITestObject)pf.GetProxy(); + + Assert.True(AopUtils.IsCompositionAopProxy(proxy)); + Assert.True(AopUtils.IsAopProxy(proxy)); + Assert.IsNotInstanceOf(proxy); + } + + [Test] + public void IsDecoratorProxy() + { + var pf = new ProxyFactory(new DebugAdvice()); + pf.Target = _target; + pf.ProxyTargetType = true; + + var proxy = (TestObject)pf.GetProxy(); + Assert.True(AopUtils.IsDecoratorAopProxy(proxy)); + Assert.True(AopUtils.IsAopProxy(proxy)); + } + + [Test] + public void IsInheritanceBasedProxyTypeReturnsFalseForNull() + { + Assert.False(AopUtils.IsInheritanceAopProxyType(null)); + } + + [Test] + public void IsInheritanceBasedProxyReturnsFalseForNull() + { + Assert.False(AopUtils.IsInheritanceAopProxy(null)); + } + + [Test] + public void IsInheritanceBasedProxy() + { + using (var ctx = new XmlApplicationContext(ReadOnlyXmlTestResource.GetFilePath("IsAopProxyTests.xml", this.GetType()))) + { + var proxy = (TestObject)ctx["michael"]; + Assert.AreEqual("Michael", proxy.Name); + Assert.True(AopUtils.IsInheritanceAopProxyType(proxy.GetType())); + Assert.True(AopUtils.IsInheritanceAopProxy(proxy)); + } + } + } +} \ No newline at end of file diff --git a/test/Spring/Spring.Aop.Tests/Aop/Framework/DynamicProxy/IsAopProxyTests.xml b/test/Spring/Spring.Aop.Tests/Aop/Framework/DynamicProxy/IsAopProxyTests.xml new file mode 100644 index 00000000..6b15132a --- /dev/null +++ b/test/Spring/Spring.Aop.Tests/Aop/Framework/DynamicProxy/IsAopProxyTests.xml @@ -0,0 +1,26 @@ + + + + + + + michael + + + + + debugInterceptor + + + + + + + + + + + + diff --git a/test/Spring/Spring.Aop.Tests/Spring.Aop.Tests.2010.csproj b/test/Spring/Spring.Aop.Tests/Spring.Aop.Tests.2010.csproj index 7d895ddd..1aeacff6 100644 --- a/test/Spring/Spring.Aop.Tests/Spring.Aop.Tests.2010.csproj +++ b/test/Spring/Spring.Aop.Tests/Spring.Aop.Tests.2010.csproj @@ -153,6 +153,7 @@ + Code @@ -277,6 +278,7 @@ +