[interp] Remove unreachable code (#12411)
[mono-project.git] / mono / tests / assemblyresolve_event5.cs
blob8fa02006f0cdf0d2c5e41d4f2f4c53abcdc25305
1 using System;
2 using System.Reflection;
3 using System.Reflection.Emit;
6 public class TestAssemblyResolveEvent {
7 public static int Main (String[] args) {
8 // Regression test for https://bugzilla.xamarin.com/show_bug.cgi?id=57851
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;
25 public class MockResolver {
26 private Assembly mock;
27 private ResolveEventHandler d;
28 private string theName;
30 public MockResolver (string theName) {
31 mock = CreateMock (theName);
32 d = new ResolveEventHandler (HandleResolveEvent);
33 this.theName = theName;
36 public void StartHandling () {
37 AppDomain.CurrentDomain.AssemblyResolve += d;
40 public void StopHandling () {
41 AppDomain.CurrentDomain.AssemblyResolve -= d;
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;
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);
57 var tb = mb.DefineType ("Foo", TypeAttributes.Public);
58 tb.DefineDefaultConstructor (MethodAttributes.Public);
59 tb.CreateType ();
61 return ab;