New test.
[mono.git] / mcs / class / corlib / Test / System.Reflection / FieldInfoTest.cs
index 9ecb7f21afcd8e31051f451376845d9eff5882ff..4ad97602f8f7b3d9a75fbdf52ba637501d70e3c7 100644 (file)
@@ -95,6 +95,70 @@ public class FieldInfoTest : Assertion
                AssertEquals (typeof (Marshal1), Type.GetType (attr.MarshalType));
                */
        }
+
+       [Test]
+       [ExpectedException (typeof (InvalidOperationException))]
+       public void GetValueOnRefOnlyAssembly ()
+       {
+               Assembly assembly = Assembly.ReflectionOnlyLoad (typeof (FieldInfoTest).Assembly.FullName);
+               Type t = assembly.GetType (typeof (RefOnlyFieldClass).FullName);
+               FieldInfo f = t.GetField ("RefOnlyField", BindingFlags.Static | BindingFlags.NonPublic);
+
+               f.GetValue (null);
+       }
+       
+       [Test]
+       [ExpectedException (typeof (InvalidOperationException))]
+       public void SetValueOnRefOnlyAssembly ()
+       {
+               Assembly assembly = Assembly.ReflectionOnlyLoad (typeof (FieldInfoTest).Assembly.FullName);
+               Type t = assembly.GetType (typeof (RefOnlyFieldClass).FullName);
+               FieldInfo f = t.GetField ("RefOnlyField", BindingFlags.Static | BindingFlags.NonPublic);
+
+               f.SetValue (null, 8);
+       }
+
+       const int literal = 42;
+
+       [Test]
+       [ExpectedException (typeof (FieldAccessException))]
+       public void SetValueOnLiteralField ()
+       {
+               FieldInfo f = typeof (FieldInfoTest).GetField ("literal", BindingFlags.Static | BindingFlags.NonPublic);
+               f.SetValue (null, 0);
+       }
+
+       public int? nullable_field;
+
+       public static int? static_nullable_field;
+
+       [Test]
+       public void NullableTests ()
+       {
+               FieldInfoTest t = new FieldInfoTest ();
+
+               FieldInfo fi = typeof (FieldInfoTest).GetField ("nullable_field");
+
+               fi.SetValue (t, 101);
+               AssertEquals (101, fi.GetValue (t));
+               fi.SetValue (t, null);
+               AssertEquals (null, fi.GetValue (t));
+
+               FieldInfo fi2 = typeof (FieldInfoTest).GetField ("static_nullable_field");
+
+               fi2.SetValue (t, 101);
+               AssertEquals (101, fi2.GetValue (t));
+               fi2.SetValue (t, null);
+               AssertEquals (null, fi2.GetValue (t));
+       }
 #endif
 }              
+#if NET_2_0
+// Helper class
+class RefOnlyFieldClass 
+{
+       // Helper property
+       static int RefOnlyField;
+}
+#endif
 }