Hi!

Here are the test for System.Threading.Thread.

The problem is that this test doesn't run well with mono, when running
it in mono, it gets a Segmentation Fault (as described in:
http://bugzilla.ximian.com/show_bug.cgi?id=34323 ), or it hangs mono.

Somebody can add this to the CVS (i haven't cvs account).

The patch is attached.
The "ThreadTest.cs" and "AllTests.cs" are in a new directory called
System.Threading (mcs/class/corlib/Test/System.Threading) that should be
created.

Best wishes.

-- 
Eduardo Garcia Cebollero <[EMAIL PROTECTED]>
Index: AllTests.cs
===================================================================
RCS file: /mono/mcs/class/corlib/Test/AllTests.cs,v
retrieving revision 1.17
diff -u -r1.17 AllTests.cs
--- AllTests.cs	28 Oct 2002 03:10:23 -0000	1.17
+++ AllTests.cs	21 Nov 2002 02:39:38 -0000
@@ -32,6 +32,7 @@
                                 suite.AddTest(System.Resources.AllTests.Suite);
 				suite.AddTest(System.Runtime.Serialization.AllTests.Suite);
 				suite.AddTest(System.Runtime.CompilerServices.AllTests.Suite);
+				suite.AddTest(System.Threading.AllTests.Suite);
 //				suite.AddTest(System.Security.Policy.AllTests.Suite);
 				return suite;
                         }
Index: corlib_linux_test.args
===================================================================
RCS file: /mono/mcs/class/corlib/Test/corlib_linux_test.args,v
retrieving revision 1.12
diff -u -r1.12 corlib_linux_test.args
--- corlib_linux_test.args	17 Nov 2002 21:55:50 -0000	1.12
+++ corlib_linux_test.args	21 Nov 2002 02:39:38 -0000
@@ -122,3 +122,5 @@
 System.Text/ASCIIEncodingTest.cs
 System.Text/AllTests.cs
 System.Text/StringBuilderTest.cs
+System.Threading/AllTests.cs
+System.Threading/ThreadTest.cs
// Testsuite.System.AllSystemTests.cs
//
// Mario Martinez ([EMAIL PROTECTED])
//
// (C) Ximian, Inc.  http://www.ximian.com
// 

using System;
using NUnit.Framework;

namespace MonoTests.System.Threading {
        /// <summary>
        ///   Combines all available unit tests into one test suite.
        /// </summary>
        public class AllTests : TestCase {
                public AllTests(string name) : base(name) {}
                
                public static ITest Suite 
                { 
                        get 
                        {
                                TestSuite suite =  new TestSuite();
                                suite.AddTest(ThreadTest.Suite);
                                return suite;
                        }
                }
        }
}

// ThreadTest.cs - NUnit Test Cases for the System.Threading.Thread class
//
// Eduardo Garcia Cebollero ([EMAIL PROTECTED])
//
// (C) Eduardo Garcia Cebollero.
// (C) Ximian, Inc.  http://www.ximian.com
//


using NUnit.Framework;
using System;
using System.Threading;

namespace MonoTests.System.Threading
{
        public class ThreadTest : TestCase
        {
                public ThreadTest () : 
                        base ("MonoTests.System.Threading.ThreadTest testsuite") {}
                
                public ThreadTest (string name) : base (name) {}
                
                protected override void SetUp () {}
                
                public static ITest Suite
                {
                        get 
                        { 
                                return new TestSuite (typeof (ThreadTest)); 
                        }
                }
                                
                //Some Classes to test as threads
                private class C1Test
                {
                        public int cnt;
                        public Thread thread1;
                        public bool endm1;
                        public bool endm2;

                        public C1Test()
                        {
                                thread1 = (Thread)null;
                                this.cnt = 0;
                                endm1 = endm2 = false;
                        }
                        
                        public void TestMethod()
                        {
                                while (cnt < 10)
                                {
                                        cnt++;
                                }
                                endm1 = true;
                        }
                        public void TestMethod2()
                        {
                                if (!(thread1==(Thread)null) )
                                {
                                        thread1.Join();
                                }
                                endm2 = true;
                        }
                }
                private class C2Test
                {
                        public int cnt;
                        public bool run = false;
                        
                        public C2Test()
                        {
                                this.cnt = 0;
                        }

                        public void TestMethod()
                        {
                                run = true;
                                while (true)
                                {
                                        if (cnt < 1000)
                                                cnt++;
                                        else
                                                cnt = 0;
                                }
                        }
                }
                
                private class C3Test
                {
                        public C1Test sub_class;
                        public Thread sub_thread;

                        public C3Test()
                        {
                                sub_class = new C1Test();
                                sub_thread = new Thread(new 
ThreadStart(sub_class.TestMethod));
                        }

                        public void TestMethod1()
                        {
                                sub_thread.Start();
                                sub_thread.Abort();
                        }
                }
                
                private class C4Test
                {
                        public C1Test class1;
                        public C1Test class2;
                        public Thread thread1;
                        public Thread thread2;
                        public bool T1ON ;
                        public bool T2ON ;

                        public C4Test()
                        {
                                T1ON = false;
                                T2ON = false;
                                class1 = new C1Test();
                                class2 = new C1Test();
                                thread1 = new Thread(new 
ThreadStart(class1.TestMethod));
                                thread2 = new Thread(new 
ThreadStart(class2.TestMethod));
                        }

                        public void TestMethod1()
                        {
                                thread1.Start();
                                while (!thread1.IsAlive);
                                T1ON = true;
                                thread2.Start();
                                while (!thread2.IsAlive);
                                T2ON = true;
                                thread2.Abort();
                                while (thread2.IsAlive);
                                T2ON = false;
                                thread1.Abort();
                                while (thread2.IsAlive);
                                T1ON = false;
                        }
                        
                        public void TestMethod2()
                        {
                                thread1.Start();
                                thread1.Join();
                        }
                }

        
                
                public void TestCtor1()
                {                       
                        C1Test test1 = new C1Test();
                        try
                        {
                                Thread TestThread = new Thread(new 
ThreadStart(test1.TestMethod));
                        }
                        catch (Exception e)
                        {
                                Fail ("#01 Unexpected Exception Thrown: " + e.ToString 
());
                        }
                }
                //TODO: Test to make a constructor in a thread :)
                
                public void TestStart()
                {
                {
                        C1Test test1 = new C1Test();
                        Thread TestThread = new Thread(new 
ThreadStart(test1.TestMethod));
                        try
                        {
                                TestThread.Start();
                        }
                        catch (Exception e)
                        {
                                Fail ("#12 Unexpected Exception Thrown: " + e.ToString 
());
                        }
                        TestThread.Join();
                        AssertEquals("#13 Thread Not started: ", 10,test1.cnt);
                }
                {
                        bool errorThrown = false;
                        C2Test test1 = new C2Test();
                        Thread TestThread = new Thread(new 
ThreadStart(test1.TestMethod));
                        TestThread.Start();
                        TestThread.Abort();
                        try
                        {
                                TestThread.Start();
                        }
                        catch(ThreadStateException)
                        {
                                errorThrown = true;
                        }
                        Assert ("#14 no ThreadStateException trown", errorThrown);
                }
                {
                        C2Test test1 = new C2Test();
                        Thread TestThread = new Thread(new 
ThreadStart(test1.TestMethod));
                        TestThread.Start();
                        while(!test1.run);
                        bool started = (TestThread.ThreadState == ThreadState.Running);
                        AssertEquals("#15 Thread Is not in the correct state: ", 
started , test1.run);  
                }
                }
                public void TestApartment()
                {
                        C2Test test1 = new C2Test();
                        Thread TestThread = new Thread(new 
ThreadStart(test1.TestMethod));
                        ApartmentState before = TestThread.ApartmentState;
                        TestThread.Start();
                        while(!TestThread.IsAlive);
                        ApartmentState after = TestThread.ApartmentState;
                        TestThread.Abort();
                        AssertEquals("#21 Apartment State Changed when not 
needed",before,after);
                }
                public void TestApartmentState()
                {
                        C2Test test1 = new C2Test();
                        Thread TestThread = new Thread(new 
ThreadStart(test1.TestMethod));
                        ApartmentState before = TestThread.ApartmentState;
                        TestThread.Start();
                        while(!TestThread.IsAlive);
                        ApartmentState after = TestThread.ApartmentState;
                        TestThread.Abort();
                        AssertEquals("#31 Apartment State Changed when not needed: 
",before,after);
                }
                public void TestPriority()
                {
                        C2Test test1 = new C2Test();
                        Thread TestThread = new Thread(new 
ThreadStart(test1.TestMethod));
                        ThreadPriority after = TestThread.Priority;
                        TestThread.Start();
                        while(!TestThread.IsAlive);
                        ThreadPriority before = TestThread.Priority;
                        TestThread.Abort();
                        AssertEquals("#41 Priority Changed when not needed: 
",before,after);
                }
                public void TestIsBackground()
                {
                        C2Test test1 = new C2Test();
                        Thread TestThread = new Thread(new 
ThreadStart(test1.TestMethod));
                        TestThread.Start();
                        while(!TestThread.IsAlive);
                        bool state = TestThread.IsBackground;
                        TestThread.Abort();
                        AssertEquals("#51 IsBackground not set at the default state: 
", state, false);
                }
                public void TestName()
                {
                        C2Test test1 = new C2Test();
                        Thread TestThread = new Thread(new 
ThreadStart(test1.TestMethod));
                        TestThread.Start();
                        while(!TestThread.IsAlive);
                        string name = TestThread.Name;
                        AssertEquals("#61 Name set when mustn't be set: ", name, 
(string)null);
                        string newname = "Testing....";
                        TestThread.Name = newname;
                        AssertEquals("#62 Name not set when must be set: 
",TestThread.Name,newname);
                        TestThread.Abort();
                }
                public void TestNestedThreads1()
                {
                        C3Test  test1 = new C3Test();
                        Thread TestThread = new Thread(new 
ThreadStart(test1.TestMethod1));
                        try
                        {
                                TestThread.Start();
                                while(!TestThread.IsAlive);
                                TestThread.Abort();
                        }
                        catch(Exception e)
                        {
                                Fail("#71 Unexpected Exception" + e.Message);
                        }
                }
                public void TestNestedThreads2()
                {
                        C4Test test1 = new C4Test();
                        test1.thread1.Start();
                        test1.thread1.Abort();
                        while(test1.thread1.IsAlive);
                        Thread TestThread = new Thread(new 
ThreadStart(test1.TestMethod1));
                        try
                        {
                                TestThread.Start();
                                TestThread.Abort();
                        }
                        catch(Exception e)
                        {
                                Fail("#81 Unexpected Exception" + e.ToString());
                        }
                }
                public void TestJoin1()
                {
                        C1Test test1 = new C1Test();
                        C1Test test2 = new C1Test();
                        Thread thread1 = new Thread(new ThreadStart(test1.TestMethod));
                        Thread thread2 = new Thread(new 
ThreadStart(test1.TestMethod2));
                        try
                        {
                                thread1.Start();
                                thread2.Start();
                                thread2.Join();
                        }
                        catch(Exception e)
                        {
                                Fail("#91 Unexpected Exception " + e.ToString());
                        }
                }
        }

}
                        






                        
                        
                        

                        
                
                


Reply via email to