annotate UnitTests/CS/Reflection/Emit/MethodBuilderHelperTest.cs @ 3:1ef98bd70424

!bug 100 +3h Исправление проблемы BLToolkit + mono 3.4
author cin
date Fri, 22 Aug 2014 17:34:46 +0400
parents f990fcb411a9
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
0
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1 using System;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2 using System.Reflection;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
4 using NUnit.Framework;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
5
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
6 using BLToolkit.Reflection.Emit;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
7
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
8 namespace Reflection.Emit
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
9 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
10 [TestFixture]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
11 public class MethodBuilderHelperTest
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
12 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
13 public abstract class TestObject
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
14 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
15 public abstract int Property { get; }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
16 protected abstract int Method1(float f);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
17 public abstract int Method2(float f);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
18
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
19 public int Method3(float f) { return Method1(f); }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
20 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
21
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
22 [Test]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
23 public void Test()
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
24 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
25 TypeBuilderHelper typeBuilder =
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
26 new AssemblyBuilderHelper("HelloWorld.dll").DefineType("Test", typeof(TestObject));
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
27
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
28 // Property
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
29 //
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
30 PropertyInfo propertyInfo = typeof(TestObject).GetProperty("Property");
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
31 MethodBuilderHelper methodBuilder = typeBuilder.DefineMethod(propertyInfo.GetGetMethod());
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
32 EmitHelper emit = methodBuilder.Emitter;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
33
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
34 emit
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
35 .ldc_i4(10)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
36 .ret()
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
37 ;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
38
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
39 // Method1
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
40 //
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
41 MethodInfo methodInfo = typeof(TestObject).GetMethod(
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
42 "Method1", BindingFlags.Instance | BindingFlags.NonPublic | BindingFlags.Public);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
43
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
44 methodBuilder = typeBuilder.DefineMethod(methodInfo);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
45 emit = methodBuilder.Emitter;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
46
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
47 emit
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
48 .ldc_i4(10)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
49 .ret()
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
50 ;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
51
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
52 // Method2
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
53 //
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
54 methodInfo = typeof(TestObject).GetMethod("Method2", BindingFlags.Instance | BindingFlags.NonPublic | BindingFlags.Public);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
55
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
56 methodBuilder = typeBuilder.DefineMethod(
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
57 "Method2",
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
58 MethodAttributes.Virtual |
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
59 MethodAttributes.Public |
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
60 MethodAttributes.HideBySig |
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
61 MethodAttributes.PrivateScope |
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
62 MethodAttributes.VtableLayoutMask,
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
63 typeof(int),
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
64 new Type[] { typeof(float) });
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
65
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
66 typeBuilder.TypeBuilder.DefineMethodOverride(methodBuilder, methodInfo);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
67
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
68 emit = methodBuilder.Emitter;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
69
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
70 emit
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
71 .ldc_i4(10)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
72 .ret()
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
73 ;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
74
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
75 // Create type.
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
76 //
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
77 Type type = typeBuilder.Create();
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
78
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
79 TestObject obj = (TestObject)Activator.CreateInstance(type);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
80
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
81 Assert.AreEqual(10, obj.Property);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
82 Assert.AreEqual(10, obj.Method3(0));
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
83 Assert.AreEqual(10, obj.Method2(0));
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
84 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
85 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
86 }