New tests.
[mono.git] / mcs / class / corlib / Test / System.Collections / StackTest.cs
index e6c3dabf9f504dd5fb2e9a0c45ef749c04e45edc..397926c9a6b9b3ffdecdf54a6eee009a7530e0ac 100644 (file)
@@ -15,34 +15,67 @@ using NUnit.Framework;
 
 namespace MonoTests.System.Collections
 {
-       public class StackTest: TestCase
+       [TestFixture]
+       public class StackTest
        {
                 private Stack stack1;
-                private Stack stack2;
                 private Stack stackInt;
 
+               [Test]
                 public void TestConstructor()
                 {
-                        AssertEquals(false, stack1 == null);
+                        Assert.AreEqual (stack1 == null, false);
                 }
                 
-                public void TestICollectionConstructor()
+               [Test]
+                public void TestICollectionConstructor1()
                 {
                         Stack stackTest = new Stack(new int[] {0, 1, 2, 3, 4});
 
                         for (int i = 4; i >= 0; i--)
-                                AssertEquals(i, stackTest.Pop());
+                                Assert.AreEqual (stackTest.Pop(), i);
 
-                        AssertEquals(0, stackTest.Count);
+                        Assert.AreEqual (stackTest.Count, 0);
                 }
 
-                public void TestIntConstructor()
+               [Test]
+               public void TestICollectionConstructor2()
+               {
+                       bool exceptionThrown = false;
+                       try {
+                               Stack stackTest = new Stack(null);
+                       } catch (ArgumentNullException e) {
+                               exceptionThrown = true;
+                               Assert.AreEqual ("col", e.ParamName, "ParamName must be \"col\"");
+                       }
+                       Assert.IsTrue (exceptionThrown, "null argument must throw ArgumentNullException");
+                                       
+               }
+
+               [Test]
+                public void TestIntConstructor1()
                 {
                         Stack stackTest = new Stack(50);
 
-                        AssertEquals(false, stackTest == null);
+                        Assert.IsTrue (stackTest != null);
                 }
 
+               [Test]
+               public void TestIntConstructor2()
+               {
+                       bool exceptionThrown = false;
+                       try {
+                               Stack stackTest = new Stack(-1);
+                       } 
+                       catch (ArgumentOutOfRangeException e) 
+                       {
+                               exceptionThrown = true;
+                               Assert.AreEqual ("initialCapacity", e.ParamName, "ParamName must be \"initialCapacity\"");
+                       }
+                       Assert.IsTrue (exceptionThrown, "negative argument must throw ArgumentOutOfRangeException");
+               }
+
+               [Test]
                 public void TestCount()
                 {
                         Stack stackTest = new Stack();
@@ -52,21 +85,24 @@ namespace MonoTests.System.Collections
                         stackTest.Push(0);
                         stackTest.Push(50);
 
-                        AssertEquals(4, stackTest.Count);
+                        Assert.AreEqual (stackTest.Count, 4);
                 }
 
+               [Test]
                 public void TestIsSyncronized()
                 {
-                        AssertEquals(false, stack1.IsSynchronized);
-                        AssertEquals(true, Stack.Synchronized(stack1).IsSynchronized);
+                        Assert.AreEqual (stack1.IsSynchronized, false);
+                        Assert.AreEqual (Stack.Synchronized(stack1).IsSynchronized, true);
                 }
 
+               [Test]
                 public void TestSyncRoot()
                 {
-                        AssertEquals(false, stack1.SyncRoot == null);
+                        Assert.AreEqual (stack1.SyncRoot == null, false);
                 }
 
-                public void TestGetEnumerator()
+               [Test]
+                public void TestGetEnumerator1()
                 {
                         stackInt.Pop();
 
@@ -74,59 +110,148 @@ namespace MonoTests.System.Collections
 
                         foreach (int i in stackInt)
                         {
-                                AssertEquals(j--, i);
+                                Assert.AreEqual (i, j--);
                         }
 
                         stackInt.Clear();
 
                         IEnumerator e = stackInt.GetEnumerator();
 
-                        AssertEquals(false, e.MoveNext());
+                        Assert.AreEqual (e.MoveNext(), false);
                 }
 
+               [Test]
+               public void TestGetEnumerator2()
+               {
+                       
+                       IEnumerator e = stackInt.GetEnumerator();
+                       try 
+                       {
+                               // Tests InvalidOperationException if enumerator is uninitialized
+                               Object o = e.Current;
+                               Assert.Fail ("InvalidOperationException should be thrown");
+                       } catch (InvalidOperationException) {}
+               }
+
+               [Test]
+               public void TestGetEnumerator3()
+               {
+                       
+                       IEnumerator e = stack1.GetEnumerator();
+                       e.MoveNext();
+                       try 
+                       {
+                               // Tests InvalidOperationException if enumeration has ended
+                               Object o = e.Current;
+                               Assert.Fail ("InvalidOperationException should be thrown");
+                       } catch (InvalidOperationException) {}
+               }
+       
+               [Test]
+               public void TestEnumeratorReset1() 
+               {
+                       IEnumerator e = stackInt.GetEnumerator();
+
+                       e.MoveNext();
+                       Assert.AreEqual (4, e.Current, "current value");
+                       e.MoveNext();
+
+                       e.Reset();
+
+                       e.MoveNext();
+                       Assert.AreEqual (4, e.Current, "current value after reset");
+               }
+
+               [Test]
+               public void TestEnumeratorReset2() 
+               {
+                       IEnumerator e = stackInt.GetEnumerator();
+
+                       e.MoveNext();
+                       Assert.AreEqual (4, e.Current, "current value");
+
+                       // modifies underlying the stack. Reset must throw InvalidOperationException
+                       stackInt.Push(5);
+                       
+                       try 
+                       {
+                               e.Reset();
+                               Assert.Fail ("InvalidOperationException should be thrown");
+                       } 
+                       catch (InvalidOperationException) {}
+               }
+
+               [Test]
+               public void TestEnumeratorMoveNextException() 
+               {
+                       IEnumerator e = stackInt.GetEnumerator();
+
+                       // modifies underlying the stack. MoveNext must throw InvalidOperationException
+                       stackInt.Push(5);
+                       
+                       try 
+                       {
+                               e.MoveNext();
+                               Assert.Fail ("InvalidOperationException should be thrown");
+                       } 
+                       catch (InvalidOperationException) {}
+               }
+
+
+               [Test]
                 public void TestClear()
                 {
                         stackInt.Clear();
 
-                        AssertEquals(0, stackInt.Count);
+                        Assert.AreEqual (stackInt.Count, 0);
                 }
 
+               [Test]
                 public void TestClone()
                 {
                         Stack clone = (Stack)stackInt.Clone();
 
                         while (stackInt.Count > 0)
                         {
-                                AssertEquals(stackInt.Pop(), clone.Pop());
+                                Assert.AreEqual (clone.Pop(), stackInt.Pop());
                         }
                 }
 
+               [Test]
                 public void TestContains()
                 {
                         string toLocate = "test";
 
+
                         stackInt.Push(toLocate);
 
                         stackInt.Push("chaff");
 
-                        Assert(stackInt.Contains(toLocate));
+                       stackInt.Push(null);
+
+                       Assert.IsTrue (stackInt.Contains(toLocate));
+
+                       Assert.IsTrue (stackInt.Contains(null), "must contain null");
+
+                       stackInt.Pop();
 
                         stackInt.Pop();
 
-                        Assert(stackInt.Contains(toLocate));
+                        Assert.IsTrue (stackInt.Contains(toLocate));
 
                         stackInt.Pop();
 
-                        Assert(!stackInt.Contains(toLocate));
+                        Assert.IsTrue (!stackInt.Contains(toLocate));
                        
                        stackInt.Push(null);
-                       Assert(stackInt.Contains(null));
+                       Assert.IsTrue (stackInt.Contains(null));
                        stackInt.Pop();
-                       Assert(!stackInt.Contains(null));
+                       Assert.IsTrue (!stackInt.Contains(null));
                        
                        
                 }
 
+               [Test]
                 public void TestCopyTo()
                 {
                         int[] arr = new int[stackInt.Count - 1];
@@ -135,42 +260,46 @@ namespace MonoTests.System.Collections
                         try 
                         {
                                 stackInt.CopyTo(null, 0);
-                                Fail("Should throw an ArgumentNullException");
-                        } 
-                        catch (ArgumentNullException) {}
+                                Assert.Fail ("Should throw an ArgumentNullException");
+                        } catch (ArgumentNullException e) {
+                               Assert.AreEqual ("array", e.ParamName, "ParamName must be \"array\"");
+                       }
 
                         try
                         {
                                 stackInt.CopyTo(arr, -1);
-                                Fail("Should throw an ArgumentOutOfRangeException");
+                                Assert.Fail ("Should throw an ArgumentOutOfRangeException");
                         } 
-                        catch (ArgumentOutOfRangeException) {}
+                       catch (ArgumentOutOfRangeException e) 
+                       {
+                               Assert.AreEqual ("index", e.ParamName, "ParamName must be \"index\"");
+                       }
 
                         try
                         {
                                 stackInt.CopyTo(arrMulti = new int[1, 1], 1);
-                                Fail("Should throw an ArgumentException");
+                                Assert.Fail ("Should throw an ArgumentException");
                         } 
                         catch (ArgumentException) {}
 
                         try
                         {
                                 stackInt.CopyTo(arr = new int[2], 3);
-                                Fail("Should throw an ArgumentException");
+                                Assert.Fail ("Should throw an ArgumentException");
                         } 
                         catch (ArgumentException) {}
 
                         try
                         {
                                 stackInt.CopyTo(arr = new int[3], 2);
-                                Fail("Should throw an ArgumentException");
+                                Assert.Fail ("Should throw an ArgumentException");
                         } 
                         catch (ArgumentException) {}
 
                         try
                         {
                                 stackInt.CopyTo(arr = new int[2], 3);
-                                Fail("Should throw an ArgumentException");
+                                Assert.Fail ("Should throw an ArgumentException");
                         } 
                         catch (ArgumentException) {}
 
@@ -182,10 +311,11 @@ namespace MonoTests.System.Collections
 
                         for (int i = 0; i < 4; i++)
                         {
-                               AssertEquals(j--, arr[i]);
+                               Assert.AreEqual (arr[i], j--);
                         }
                 }
 
+               [Test]
                 public void TestSyncronized()
                 {
                         Stack syncStack = Stack.Synchronized(stackInt);
@@ -193,43 +323,93 @@ namespace MonoTests.System.Collections
                         syncStack.Push(5);
 
                         for (int i = 5; i >= 0; i--)
-                                AssertEquals(i, syncStack.Pop());
+                                Assert.AreEqual (syncStack.Pop(), i);
                 }
 
+               [Test]
                 public void TestPushPeekPop()
                 {
                         stackInt.Pop();
 
                         int topVal = (int)stackInt.Peek();
 
-                        AssertEquals(3, topVal);
+                        Assert.AreEqual (topVal, 3);
 
-                        AssertEquals(4, stackInt.Count);
+                        Assert.AreEqual (stackInt.Count, 4);
 
-                        AssertEquals(topVal, stackInt.Pop());
+                        Assert.AreEqual (stackInt.Pop(), topVal);
 
-                        AssertEquals(2, stackInt.Pop());
+                        Assert.AreEqual (stackInt.Pop(), 2);
 
                         Stack test = new Stack();
                         test.Push(null);
 
-                        AssertEquals(null, test.Pop());
-                }
+                        Assert.AreEqual (test.Pop(), null);
 
+                }
+               
+               [Test]
+               public void TestPop()
+               {
+                       for (int i = 4; i >= 0; i--) 
+                       {
+                               Assert.AreEqual (stackInt.Pop(), i);
+                       }
+                       try {
+                               stackInt.Pop();
+                               Assert.Fail ("must throw InvalidOperationException");
+                       } catch (InvalidOperationException){
+                       }
+               }
+
+               [Test]
                 public void TestToArray()
                 {
                         object[] arr = stackInt.ToArray();
 
-                        AssertEquals(stackInt.Count, arr.Length);                       
+                        Assert.AreEqual (arr.Length, stackInt.Count);                       
 
                         for (int i = 0; i < 5; i++)
-                                AssertEquals(arr[i], stackInt.Pop());
+                                Assert.AreEqual (stackInt.Pop(), arr[i]);
                 }
-
-                protected override void SetUp()
+               
+               [Test]
+               public void TestResize()
+               {
+                       Stack myStack = new Stack(20);
+
+                       for (int i = 0; i < 500; i++) 
+                       {
+                               myStack.Push(i);
+                               Assert.AreEqual (i+1, myStack.Count, "push count test");
+                       }
+                       
+                       for (int i = 499; i >= 0; i--) 
+                       {
+                               Assert.AreEqual (myStack.Pop(), i);
+                               Assert.AreEqual (i, myStack.Count, "pop count test");
+                       }
+               }
+
+               [Test]
+               public void TestEmptyCopyTo ()
+               {
+                       Stack stack = new Stack ();
+                       string [] arr = new string [0];
+                       stack.CopyTo (arr, 0);
+               }
+
+               [Test]  
+               public void TestICollectionCtorUsesEnum ()
+               {
+                       BitArray x = new BitArray (10, true);
+                       Stack s = new Stack (x);
+               }
+
+               [SetUp]
+                protected  void SetUp()
                 {
                         stack1 = new Stack();
-                        stack2 = new Stack();
 
                         stackInt = new Stack();