//
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 ();
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 ();
return 1;
}
+
//
// Base instructions
//
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));
}
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 ();
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 ();
}
}
#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);
}
}