Mercurial > pub > bltoolkit
comparison UnitTests/CS/Aspects/InterceptorAspectTest.cs @ 0:f990fcb411a9
Копия текущей версии из github
author | cin |
---|---|
date | Thu, 27 Mar 2014 21:46:09 +0400 |
parents | |
children |
comparison
equal
deleted
inserted
replaced
-1:000000000000 | 0:f990fcb411a9 |
---|---|
1 using System; | |
2 using System.Reflection; | |
3 | |
4 using BLToolkit.Aspects; | |
5 using BLToolkit.Reflection; | |
6 using BLToolkit.TypeBuilder; | |
7 using BLToolkit.TypeBuilder.Builders; | |
8 | |
9 using NUnit.Framework; | |
10 | |
11 namespace Aspects | |
12 { | |
13 [TestFixture] | |
14 public class InterceptorAspectTest | |
15 { | |
16 public class TestInterceptor : IInterceptor | |
17 { | |
18 public void Init(CallMethodInfo info, string configString) | |
19 { | |
20 } | |
21 | |
22 public void Intercept(InterceptCallInfo info) | |
23 { | |
24 if (info.CallMethodInfo.MethodInfo.ReturnType == typeof(int)) | |
25 info.ReturnValue = 10; | |
26 } | |
27 } | |
28 | |
29 [Interceptor(typeof(TestInterceptor), InterceptType.BeforeCall | InterceptType.OnCatch)] | |
30 public abstract class TestClass | |
31 { | |
32 public abstract int Test(int i1, ref int i2, out int i3, out decimal d4); | |
33 | |
34 [NoInterception(typeof(TestInterceptor), InterceptType.BeforeCall | InterceptType.OnCatch)] | |
35 public abstract int TestNo(); | |
36 | |
37 public class PropInterceptor : Interceptor | |
38 { | |
39 protected override void BeforeCall(InterceptCallInfo info) | |
40 { | |
41 info.Items["ReturnValue"] = info.ReturnValue; | |
42 } | |
43 | |
44 protected override void AfterCall(InterceptCallInfo info) | |
45 { | |
46 info.ReturnValue = (int)info.ReturnValue + (int)info.Items["ReturnValue"]; | |
47 } | |
48 } | |
49 | |
50 [Interceptor( | |
51 typeof(PropInterceptor), InterceptType.BeforeCall | InterceptType.AfterCall, | |
52 TypeBuilderConsts.Priority.Normal - 100)] | |
53 public virtual int Prop { get { return 50; } } | |
54 } | |
55 | |
56 [Test] | |
57 public void Test() | |
58 { | |
59 TestClass t = (TestClass)TypeAccessor.CreateInstance(typeof(TestClass)); | |
60 | |
61 int i2 = 2; | |
62 int i3; | |
63 decimal d4; | |
64 | |
65 Assert.AreEqual(10, t.Test(1, ref i2, out i3, out d4)); | |
66 Assert.AreEqual(0, t.TestNo()); | |
67 Assert.AreEqual(60, t.Prop); | |
68 } | |
69 } | |
70 } |