[runtime] Synthesize IList and IReadOnlyList for the element type of enum errays...
[mono.git] / mono / tests / assemblyresolve_event5.cs
1 using System;
2 using System.Reflection;
3 using System.Reflection.Emit;
4
5
6 public class TestAssemblyResolveEvent {
7         public static int Main (String[] args) {
8                 // Regression test for https://bugzilla.xamarin.com/show_bug.cgi?id=57851
9
10                 // If the custom attributes of an assembly trigger a
11                 // ResolveEventHandler, and that handler returns an
12                 // AssemblyBuilder, don't crash.
13                 var h = new MockResolver ("assemblyresolve_event5_label");
14                 var aName = new AssemblyName ("assemblyresolve_event5_helper");
15                 var a = AppDomain.CurrentDomain.Load (aName);
16                 var t = a.GetType ("MyClass");
17                 h.StartHandling ();
18                 var cas = t.GetCustomAttributes (true);
19                 h.StopHandling ();
20                 return 0;
21         }
22 }
23
24
25 public class MockResolver {
26         private Assembly mock;
27         private ResolveEventHandler d;
28         private string theName;
29         
30         public MockResolver (string theName) {
31                 mock = CreateMock (theName);
32                 d = new ResolveEventHandler (HandleResolveEvent);
33                 this.theName = theName;
34         }
35
36         public void StartHandling () {
37                 AppDomain.CurrentDomain.AssemblyResolve += d;
38         }
39
40         public void StopHandling () {
41                 AppDomain.CurrentDomain.AssemblyResolve -= d;
42         }
43
44         public Assembly HandleResolveEvent (Object sender, ResolveEventArgs args) {
45                 Console.Error.WriteLine ("handling load of {0}", args.Name);
46                 if (args.Name.StartsWith (theName))
47                         return mock;
48                 else
49                         return null;
50         }
51
52         private static Assembly CreateMock (string s) {
53                 var an = new AssemblyName (s);
54                 var ab = AssemblyBuilder.DefineDynamicAssembly (an, AssemblyBuilderAccess.Run);
55                 var mb = ab.DefineDynamicModule (an.Name);
56
57                 var tb = mb.DefineType ("Foo", TypeAttributes.Public);
58                 tb.DefineDefaultConstructor (MethodAttributes.Public);
59                 tb.CreateType ();
60
61                 return ab;
62         }
63 }