2009-06-19 Rodrigo Kumpera <rkumpera@novell.com>
[mono.git] / mono / tests / load-exceptions.cs
index b84c7b4eb7d2f7370d252837dbb6083f1c4f3ea7..ed6f8cb357c07475312bd93926d91d1091745641 100644 (file)
@@ -3,6 +3,8 @@
 //
 
 using System;
+using System.IO;
+using System.Reflection;
 
 class Miss1 : Missing.Foo1 {
 }
@@ -36,6 +38,15 @@ public class Tests : LoadMissing {
                return 1;
        }
 
+       internal static int check_file_not_found (TestDel d){
+               try {
+                       d ();
+               } catch (FileNotFoundException ex){
+                       return 0;
+               }
+               return 1;
+       }
+       
        internal static int check_missing_field (TestDel d) {
                try {
                        d ();
@@ -48,6 +59,7 @@ public class Tests : LoadMissing {
                return 1;
        }
 
+
        //
        // Base instructions
        //
@@ -85,6 +97,9 @@ public class Tests : LoadMissing {
                return check_type_load (new TestDel (missing_cpobj));
        }
 
+        public static int test_0_missing_type_on_parameter () {
+               return check_type_load (new TestDel (missing_external_type_reference_on_parameter));
+        } 
        public static int test_0_initobj () {
                return check_type_load (new TestDel (missing_initobj));
        }
@@ -187,12 +202,30 @@ public class Tests : LoadMissing {
                return check_type_load (new TestDel (missing_unbox_any));
        }
 
+#if false
+       // Bummer: we regressed!   I should have put this before
+       public static int test_0_missing_assembly_in_fieldref () {
+               return check_file_not_found (new TestDel (missing_assembly_in_fieldref));
+       }
+#endif
+
+       // FIXME: the corrent exception here is FileNotFoundException
+       public static int test_0_missing_assembly_in_call () {
+               return check_type_load (new TestDel (missing_assembly_in_call));
+       }
+
+       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 ();
@@ -204,6 +237,28 @@ 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 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));
+       }
+
+#if FALSE
        public static void missing_parent () {
                new Miss1 ();
        }