Merge pull request #5714 from alexischr/update_bockbuild
[mono.git] / mono / tests / load-exceptions.cs
index 53480c6ff2f7e1ef6b9192a20cee35e049623529..5bfa3a89da58104ebfd20516c665ed37dbf4bdb2 100644 (file)
@@ -4,10 +4,16 @@
 
 using System;
 using System.IO;
+using System.Reflection;
 
 class Miss1 : Missing.Foo1 {
 }
 
+public class Miss2 {
+       public class Foo : Missing.Foo1 {
+       }
+}
+
 public class Tests : LoadMissing {
 
        public delegate void TestDel ();
@@ -216,13 +222,15 @@ public class Tests : LoadMissing {
        public static int test_0_missing_assembly_in_newobj () {
                return check_type_load (new TestDel (missing_assembly_in_newobj));
        }
+
+       public static int test_0_missing_delegate_ctor_argument () {
+               return check_type_load (new TestDel (missing_delegate_ctor_argument));
+       }
        
        //
        // Missing classes referenced from metadata
        //
 
-       // FIXME: These do not work yet
-#if FALSE
        public static int test_0_missing_local () {
                try {
                        missing_local ();
@@ -234,6 +242,74 @@ public class Tests : LoadMissing {
                return 0;
        }
 
+       //Regression test for #508532
+       public static int test_0_assembly_throws_on_loader_error ()
+       {
+               try {
+                       Assembly asm = Assembly.Load ("load-missing");
+                       asm.GetType ("BrokenClass", false);
+                       return 1;
+               } catch (TypeLoadException) {}
+               return 0;
+       }
+
+       public static int test_0_bad_method_override1 ()
+       {
+               try {
+                       BadOverridesDriver.bad_override1 ();
+                       return 1;
+               } catch (TypeLoadException) {}
+               return 0;
+       }
+
+       public static int test_0_bad_method_override2 ()
+       {
+               try {
+                       BadOverridesDriver.bad_override2 ();
+                       return 1;
+               } catch (TypeLoadException) {}
+               return 0;
+       }
+
+       public static int test_0_bad_method_override3 ()
+       {
+               try {
+                       BadOverridesDriver.bad_override3 ();
+                       return 1;
+               } catch (TypeLoadException) {}
+               return 0;
+       }
+
+       public static int test_0_bad_method_override4 ()
+       {
+               try {
+                       BadOverridesDriver.bad_override4 ();
+                       return 1;
+               } catch (TypeLoadException) {}
+               return 0;
+       }
+
+       public static void missing_outer () {
+               new Missing.Foo1.InnerFoo ();
+       }
+
+       //Regression test for #508487
+       public static int test_0_missing_outer_type_in_typeref () {
+               return check_type_load (new TestDel (missing_outer));
+       }
+
+       // #524498
+       public static int test_0_exception_while_jitting_cctor () {
+               try {
+                       CCtorClass.foo ();
+               } catch (TypeInitializationException) {
+                       return 0;
+               }
+
+               return 1;
+       }
+
+#if FALSE
        public static void missing_parent () {
                new Miss1 ();
        }
@@ -243,7 +319,38 @@ public class Tests : LoadMissing {
        }
 #endif
 
-       public static int Main () {
-               return TestDriver.RunTests (typeof (Tests));
+       public static int test_0_missing_nested () {
+               if (typeof (Miss2).GetNestedTypes ().Length != 0)
+                       return 1;
+               return 0;
+       }
+
+       public static int test_0_reflection_on_field_with_missing_type () {
+               var t = typeof (BadOverridesDriver).Assembly.GetType ("FieldWithMissingType");
+               foreach (var f in t.GetFields (BindingFlags.Public | BindingFlags.Static)) {
+                       try {
+                               Console.WriteLine (f.Name);
+                               f.GetValue (null);
+                               return 1;
+                       } catch (TypeLoadException) {
+                               return 0;
+                       }
+               }
+               return 2;
+       }
+
+       public static int test_0_reflection_on_field_with_missing_custom_attr () {
+               var t = typeof (BadOverridesDriver).Assembly.GetType ("FieldWithMissingCustomAttribute");
+               try {
+                       Console.WriteLine (t.GetFields ()[0].CustomAttributes);
+                       return 1;
+               } catch (FileNotFoundException) {
+                       return 0;
+               }
+               return 2;
+       }
+
+       public static int Main (string[] args) {
+               return TestDriver.RunTests (typeof (Tests), args);
        }
 }