X-Git-Url: http://wien.tomnetworks.com/gitweb/?a=blobdiff_plain;f=mono%2Ftests%2Fappdomain-unload.cs;h=e5ce63689219231bba99f26ef95eb35baafc8c1f;hb=5f72be6d6dbe371eb5794f16ebc33186d185de09;hp=4777b2b2bde154e6112dca3914b0036201319380;hpb=948dbf8d4581ac17f5420cc4f7dc375e3c502576;p=mono.git diff --git a/mono/tests/appdomain-unload.cs b/mono/tests/appdomain-unload.cs index 4777b2b2bde..e5ce6368921 100644 --- a/mono/tests/appdomain-unload.cs +++ b/mono/tests/appdomain-unload.cs @@ -1,6 +1,7 @@ using System; using System.Threading; using System.Reflection; +using System.Runtime.Remoting; [Serializable] public class Foo { @@ -10,6 +11,20 @@ public class Foo { } } +public class Bar : MarshalByRefObject { + public int test (int x) { + Console.WriteLine ("in " + Thread.GetDomain ().FriendlyName); + return x + 1; + } + + public void start_wait () { + Action a = delegate () { + Thread.Sleep (10000); + }; + a.BeginInvoke (null, null); + } +} + [Serializable] public class SlowFinalize { @@ -89,8 +104,11 @@ class CrossDomainTester : MarshalByRefObject public class Tests { - public static int Main() { - return TestDriver.RunTests (typeof (Tests)); + public static int Main(string[] args) { + if (args.Length == 0) + return TestDriver.RunTests (typeof (Tests), new String[] { "-v" }); + else + return TestDriver.RunTests (typeof (Tests), args); } public static int test_0_unload () { @@ -152,6 +170,8 @@ public class Tests return 0; } + /* In recent mono versions, there is no unload timeout */ + /* public static int test_0_unload_with_active_threads_timeout () { AppDomain domain = AppDomain.CreateDomain ("Test4"); BThread o = (BThread)domain.CreateInstanceFromAndUnwrap (typeof (Tests).Assembly.Location, "BThread"); @@ -169,6 +189,7 @@ public class Tests return 1; } + */ static void Worker (object x) { Thread.Sleep (100000); @@ -231,6 +252,36 @@ public class Tests return 0; } + public static int test_0_invoke_after_unload () { + AppDomain domain = AppDomain.CreateDomain ("DeadInvokeTest"); + Bar bar = (Bar)domain.CreateInstanceAndUnwrap (typeof (Tests).Assembly.FullName, "Bar"); + int x; + + if (!RemotingServices.IsTransparentProxy(bar)) + return 3; + + AppDomain.Unload (domain); + + try { + x = bar.test (123); + if (x == 124) + return 1; + return 2; + } catch (Exception e) { + return 0; + } + } + + public static int test_0_abort_wait () { + AppDomain domain = AppDomain.CreateDomain ("AbortWait"); + Bar bar = (Bar)domain.CreateInstanceAndUnwrap (typeof (Tests).Assembly.FullName, "Bar"); + int x; + + bar.start_wait (); + AppDomain.Unload (domain); + return 0; + } + // FIXME: This does not work yet, because the thread is finalized too // early /*