X-Git-Url: http://wien.tomnetworks.com/gitweb/?a=blobdiff_plain;f=mono%2Ftests%2Fload-exceptions.cs;h=5bfa3a89da58104ebfd20516c665ed37dbf4bdb2;hb=HEAD;hp=b84c7b4eb7d2f7370d252837dbb6083f1c4f3ea7;hpb=da4f9e9b2afb23791029d0bb09d78b868aabd870;p=mono.git diff --git a/mono/tests/load-exceptions.cs b/mono/tests/load-exceptions.cs index b84c7b4eb7d..5bfa3a89da5 100644 --- a/mono/tests/load-exceptions.cs +++ b/mono/tests/load-exceptions.cs @@ -3,10 +3,17 @@ // 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 (); @@ -36,6 +43,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 +64,7 @@ public class Tests : LoadMissing { return 1; } + // // Base instructions // @@ -85,6 +102,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 +207,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 +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 (); } @@ -213,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); } }