1
1
using System . Collections . Generic ;
2
2
using NHibernate . Proxy ;
3
3
using NUnit . Framework ;
4
+ #if NETFX
5
+ using System ;
6
+ using System . Reflection ;
7
+ using System . Reflection . Emit ;
8
+ using NHibernate . Proxy . DynamicProxy ;
9
+ using NHibernate . Test . ProxyTest ;
10
+ #endif
4
11
5
12
namespace NHibernate . Test . StaticProxyTest
6
13
{
@@ -24,5 +31,61 @@ public void CanCreateProxyForClassWithInternalInterface()
24
31
var proxy = factory . GetProxy ( 1 , null ) ;
25
32
Assert . That ( proxy , Is . Not . Null ) ;
26
33
}
34
+
35
+ #if NETFX
36
+ [ Test ]
37
+ public void VerifyFieldInterceptorProxy ( )
38
+ {
39
+ var proxyBuilderType = typeof ( StaticProxyFactory ) . Assembly . GetType ( "NHibernate.Proxy.FieldInterceptorProxyBuilder" , true ) ;
40
+ var proxyBuilder = proxyBuilderType . GetMethod ( "CreateProxyType" ) ;
41
+ Assert . That ( proxyBuilder , Is . Not . Null , "Failed to find method CreateProxyType" ) ;
42
+ var proxyBuilderAssemblyBuilder = proxyBuilderType . GetField ( "ProxyAssemblyBuilder" , BindingFlags . NonPublic | BindingFlags . Static ) ;
43
+ Assert . That ( proxyBuilderAssemblyBuilder , Is . Not . Null , "Failed to find assembly builder field" ) ;
44
+
45
+ const string assemblyName = "VerifyFieldInterceptorProxy" ;
46
+ var assemblyBuilder = new SavingProxyAssemblyBuilder ( assemblyName ) ;
47
+
48
+ var backupAssemblyBuilder = proxyBuilderAssemblyBuilder . GetValue ( null ) ;
49
+ proxyBuilderAssemblyBuilder . SetValue ( null , assemblyBuilder ) ;
50
+ try
51
+ {
52
+ proxyBuilder . Invoke ( null , new object [ ] { typeof ( TestClass ) } ) ;
53
+ }
54
+ finally
55
+ {
56
+ proxyBuilderAssemblyBuilder . SetValue ( null , backupAssemblyBuilder ) ;
57
+ }
58
+
59
+ new PeVerifier ( $ "{ assemblyName } .dll") . AssertIsValid ( ) ;
60
+ }
61
+
62
+ public class SavingProxyAssemblyBuilder : IProxyAssemblyBuilder
63
+ {
64
+ private readonly string _assemblyName ;
65
+
66
+ public SavingProxyAssemblyBuilder ( string assemblyName )
67
+ {
68
+ _assemblyName = assemblyName ;
69
+ }
70
+
71
+ public AssemblyBuilder DefineDynamicAssembly ( AppDomain appDomain , AssemblyName name )
72
+ {
73
+ return appDomain . DefineDynamicAssembly (
74
+ new AssemblyName ( _assemblyName ) ,
75
+ AssemblyBuilderAccess . RunAndSave ,
76
+ TestContext . CurrentContext . TestDirectory ) ;
77
+ }
78
+
79
+ public ModuleBuilder DefineDynamicModule ( AssemblyBuilder assemblyBuilder , string moduleName )
80
+ {
81
+ return assemblyBuilder . DefineDynamicModule ( moduleName , $ "{ _assemblyName } .mod", true ) ;
82
+ }
83
+
84
+ public void Save ( AssemblyBuilder assemblyBuilder )
85
+ {
86
+ assemblyBuilder . Save ( $ "{ _assemblyName } .dll") ;
87
+ }
88
+ }
89
+ #endif
27
90
}
28
91
}
0 commit comments