Merge pull request #5714 from alexischr/update_bockbuild
[mono.git] / mono / tests / assembly_append_ordering.cs
1 using System;
2 using System.Linq;
3 using System.Reflection;
4 using System.Reflection.Emit;
5
6 class Driver {
7         static int Main () {
8                 var dyn = DefineDynamicAssembly (AppDomain.CurrentDomain);
9                 var core = TriggerLoadingSystemCore ();
10                 var asm = AppDomain.CurrentDomain.GetAssemblies ();
11         
12                 if (asm [0] != typeof (object).Assembly) {
13                         Console.WriteLine ("first assembly must be mscorlib, but it was {0}", asm [0]);
14                         return 1;
15                 }
16
17                 if (asm [1] != typeof (Driver).Assembly) {
18                         Console.WriteLine ("second assembly must be test assembly, but it was {0}", asm [1]);
19                         return 2;
20                 }
21
22                 if (asm [2] != dyn) {
23                         Console.WriteLine ("third assembly must be SRE, but it was {0}", asm [2]);
24                         return 3;
25                 }
26
27                 if (asm [3] != core) {
28                         Console.WriteLine ("last assembly must be System.Core, but it was {0}", asm [3]);
29                         return 4;
30                 }
31
32                 return 0;
33         }
34
35         static Assembly TriggerLoadingSystemCore ()
36         {
37                 int[] x = new int[] { 1,2,3};
38                 x.Where (v => v > 1);
39                 return typeof (Enumerable).Assembly;
40         }
41
42
43         static Assembly DefineDynamicAssembly (AppDomain domain)
44         {
45                 AssemblyName assemblyName = new AssemblyName ();
46                 assemblyName.Name = "MyDynamicAssembly";
47
48                 AssemblyBuilder assemblyBuilder = domain.DefineDynamicAssembly (assemblyName, AssemblyBuilderAccess.Run);
49                 ModuleBuilder moduleBuilder = assemblyBuilder.DefineDynamicModule ("MyDynamicModule");
50                 TypeBuilder typeBuilder = moduleBuilder.DefineType ("MyDynamicType", TypeAttributes.Public);
51                 ConstructorBuilder constructorBuilder = typeBuilder.DefineConstructor (MethodAttributes.Public, CallingConventions.Standard, null);
52                 ILGenerator ilGenerator = constructorBuilder.GetILGenerator ();
53                 ilGenerator.EmitWriteLine ("MyDynamicType instantiated!");
54                 ilGenerator.Emit (OpCodes.Ret);
55                 typeBuilder.CreateType ();
56                 return assemblyBuilder;
57         }
58         
59 }