Merge branch 'master' into msbuilddll2
[mono.git] / mcs / class / corlib / Test / System / AppDomainTest.cs
index 54ba7cef2a80f9ca3c9048507b379763915e68e6..9c950226391ce42bf60a5e48f7c724be13bab6ba 100644 (file)
@@ -2073,7 +2073,6 @@ namespace MonoTests.System
                                AppDomain.CurrentDomain.ExecuteAssembly (
                                        assembly.Location);
                                Assert.Fail ("#1");
-#if NET_2_0
                        } catch (MissingMethodException ex) {
                                // Entry point not found in assembly '...'
                                Assert.AreEqual (typeof (MissingMethodException), ex.GetType (), "#2");
@@ -2081,15 +2080,6 @@ namespace MonoTests.System
                                Assert.IsNotNull (ex.Message, "#4");
                                Assert.IsTrue (ex.Message.IndexOf (assembly.FullName) != -1, "#5");
                        }
-#else
-                       } catch (COMException ex) {
-                               // Unspecified error
-                               Assert.AreEqual (typeof (COMException), ex.GetType (), "#2");
-                               Assert.AreEqual (-2147467259, ex.ErrorCode, "#3");
-                               Assert.IsNull (ex.InnerException, "#4");
-                               Assert.IsNotNull (ex.Message, "#5");
-                       }
-#endif
                }
 
                [Test] // ExecuteAssembly (String, Evidence)
@@ -2102,7 +2092,6 @@ namespace MonoTests.System
                                        assembly.Location,
                                        (Evidence) null);
                                Assert.Fail ("#1");
-#if NET_2_0
                        } catch (MissingMethodException ex) {
                                // Entry point not found in assembly '...'
                                Assert.AreEqual (typeof (MissingMethodException), ex.GetType (), "#2");
@@ -2110,15 +2099,6 @@ namespace MonoTests.System
                                Assert.IsNotNull (ex.Message, "#4");
                                Assert.IsTrue (ex.Message.IndexOf (assembly.FullName) != -1, "#5");
                        }
-#else
-                       } catch (COMException ex) {
-                               // Unspecified error
-                               Assert.AreEqual (typeof (COMException), ex.GetType (), "#2");
-                               Assert.AreEqual (-2147467259, ex.ErrorCode, "#3");
-                               Assert.IsNull (ex.InnerException, "#4");
-                               Assert.IsNotNull (ex.Message, "#5");
-                       }
-#endif
                }
 
                [Test] // ExecuteAssembly (String, Evidence, String [])
@@ -2132,7 +2112,6 @@ namespace MonoTests.System
                                        (Evidence) null,
                                        new string [0]);
                                Assert.Fail ("#1");
-#if NET_2_0
                        } catch (MissingMethodException ex) {
                                // Entry point not found in assembly '...'
                                Assert.AreEqual (typeof (MissingMethodException), ex.GetType (), "#2");
@@ -2140,15 +2119,6 @@ namespace MonoTests.System
                                Assert.IsNotNull (ex.Message, "#4");
                                Assert.IsTrue (ex.Message.IndexOf (assembly.FullName) != -1, "#5");
                        }
-#else
-                       } catch (COMException ex) {
-                               // Unspecified error
-                               Assert.AreEqual (typeof (COMException), ex.GetType (), "#2");
-                               Assert.AreEqual (-2147467259, ex.ErrorCode, "#3");
-                               Assert.IsNull (ex.InnerException, "#4");
-                               Assert.IsNotNull (ex.Message, "#5");
-                       }
-#endif
                }
 
                [Test] // ExecuteAssembly (String, Evidence, String [], Byte [], AssemblyHashAlgorithm)
@@ -2165,7 +2135,6 @@ namespace MonoTests.System
                                        (byte []) null,
                                        AssemblyHashAlgorithm.SHA1);
                                Assert.Fail ("#1");
-#if NET_2_0
                        } catch (MissingMethodException ex) {
                                // Entry point not found in assembly '...'
                                Assert.AreEqual (typeof (MissingMethodException), ex.GetType (), "#2");
@@ -2173,15 +2142,6 @@ namespace MonoTests.System
                                Assert.IsNotNull (ex.Message, "#4");
                                Assert.IsTrue (ex.Message.IndexOf (assembly.FullName) != -1, "#5");
                        }
-#else
-                       } catch (COMException ex) {
-                               // Unspecified error
-                               Assert.AreEqual (typeof (COMException), ex.GetType (), "#2");
-                               Assert.AreEqual (-2147467259, ex.ErrorCode, "#3");
-                               Assert.IsNull (ex.InnerException, "#4");
-                               Assert.IsNotNull (ex.Message, "#5");
-                       }
-#endif
                }
 
                [Test] // bug #79720
@@ -3044,14 +3004,9 @@ namespace MonoTests.System
                        try {
                                AppDomain.CurrentDomain.Load (aname);
                                Assert.Fail ("#C9");
-#if NET_2_0
                        } catch (SecurityException) {
                                // Invalid assembly public key
                        }
-#else
-                       } catch (FileLoadException) {
-                       }
-#endif
 
                        aname = new AssemblyName ();
                        aname.Name = "bug79522C";
@@ -3212,6 +3167,30 @@ namespace MonoTests.System
                        // we have no public way to get the default appdomain
                }
 
+               static bool resolve_called;
+
+               [Test]
+               public void AssemblyResolveParseError ()
+               {
+                       AppDomain currentDomain = AppDomain.CurrentDomain;
+                       ResolveEventHandler d = ParseErrorResolve;
+                       currentDomain.AssemblyResolve += d;
+                       try {
+                               resolve_called = false;
+                               var a = Assembly.Load ("MyDynamicType, 1.0.0.0, Culture=neutral, PublicKeyToken=0738eb9f132ed756");
+                               Assert.Fail ();
+                       } catch (FileNotFoundException) {
+                               Assert.IsTrue (resolve_called);
+                       }
+                       currentDomain.AssemblyResolve -= d;
+               }
+
+               static Assembly ParseErrorResolve (object sender, ResolveEventArgs args)
+               {
+                       resolve_called = true;
+                       return null;
+               }
+
                [Test]
                public void ReflectionOnlyGetAssemblies ()
                {
@@ -3261,6 +3240,74 @@ namespace MonoTests.System
                }
 #endif
 
+               public class StuffToPick
+               {
+                       public StuffToPick () {}
+                       public void Method () {}
+                       public int Property { get; set; }
+                       public event Action Event;
+                       public int Field;
+                       public void GenericMethod<T> () {}
+               }
+
+               public class StuffToPick<T>
+               {
+                       public StuffToPick () {}
+                       public void Method () {}
+                       public int Property { get; set; }
+                       public event Action Event;
+                       public int Field;
+                       public void GenericMethod<T> () {}
+               }
+
+               static void TestSerialization (CrossDomainTester tester, object o)
+               {
+                       Assert.AreSame (o, tester.ReturnArg0 (o), "serializing_type_" + o.GetType ());
+               }
+
+               [Test] //BXC #12611
+               public void ReflectionObjectsAreSerializableTest ()
+               {
+                       ad = CreateTestDomain (tempDir, true);
+                       CrossDomainTester tester = CreateCrossDomainTester (ad);
+
+                       TestSerialization (tester, typeof (StuffToPick));
+                       TestSerialization (tester, typeof (StuffToPick).GetConstructor(new Type [0]));
+                       TestSerialization (tester, typeof (StuffToPick).GetMethod ("Method"));
+                       TestSerialization (tester, typeof (StuffToPick).GetProperty ("Property"));
+                       TestSerialization (tester, typeof (StuffToPick).GetEvent ("Event"));
+                       TestSerialization (tester, typeof (StuffToPick).GetField ("Field"));
+                       TestSerialization (tester, typeof (StuffToPick).GetMethod ("GenericMethod"));
+
+                       TestSerialization (tester, typeof (StuffToPick<>));
+                       TestSerialization (tester, typeof (StuffToPick<>).GetConstructor(new Type [0]));
+                       TestSerialization (tester, typeof (StuffToPick<>).GetMethod ("Method"));
+                       TestSerialization (tester, typeof (StuffToPick<>).GetProperty ("Property"));
+                       TestSerialization (tester, typeof (StuffToPick<>).GetEvent ("Event"));
+                       TestSerialization (tester, typeof (StuffToPick<>).GetField ("Field"));
+                       TestSerialization (tester, typeof (StuffToPick<>).GetMethod ("GenericMethod"));
+
+                       TestSerialization (tester, typeof (StuffToPick<int>));
+                       TestSerialization (tester, typeof (StuffToPick<int>).GetConstructor(new Type [0]));
+                       TestSerialization (tester, typeof (StuffToPick<int>).GetMethod ("Method"));
+                       TestSerialization (tester, typeof (StuffToPick<int>).GetProperty ("Property"));
+                       TestSerialization (tester, typeof (StuffToPick<int>).GetEvent ("Event"));
+                       TestSerialization (tester, typeof (StuffToPick<int>).GetField ("Field"));
+                       TestSerialization (tester, typeof (StuffToPick<int>).GetMethod ("GenericMethod"));
+               }
+
+               [Test] //BXC #12611
+               [Category ("NotWorking")] // Serialization can't handle generic methods
+               public void GenericReflectionObjectsAreSerializableTest ()
+               {
+                       ad = CreateTestDomain (tempDir, true);
+                       CrossDomainTester tester = CreateCrossDomainTester (ad);
+
+                       TestSerialization (tester, typeof (StuffToPick).GetMethod ("GenericMethod").MakeGenericMethod (typeof (int)));
+                       TestSerialization (tester, typeof (StuffToPick<>).GetMethod ("GenericMethod").MakeGenericMethod (typeof (int)));
+                       TestSerialization (tester, typeof (StuffToPick<int>).GetMethod ("GenericMethod").MakeGenericMethod (typeof (int)));
+               }
+
                private static AppDomain CreateTestDomain (string baseDirectory, bool assemblyResolver)
                {
                        AppDomainSetup setup = new AppDomainSetup ();
@@ -3395,6 +3442,11 @@ namespace MonoTests.System
                                        return true;
                                }
                        }
+
+                       public object ReturnArg0 (object obj)
+                       {
+                               return obj;
+                       }
                }
 
                [Serializable ()]