#if XAMCORE_2_0 using System; using System.Collections; using System.Collections.Generic; using NUnit.Framework; using Foundation; namespace MonoTouchFixtures.Foundation { [TestFixture] public class NSMutableSet1Test { [Test] public void Ctor () { using (var arr = new NSMutableSet ()) { Assert.AreEqual (0, arr.Count, "Count"); } } [Test] public void Ctor_Params () { using (var arr = new NSMutableSet ((NSString) "foo")) { Assert.AreEqual (1, arr.Count, "Count"); } using (var arr = new NSMutableSet ((NSString) "foo", (NSString) "bar")) { Assert.AreEqual (2, arr.Count, "Count"); } } [Test] public void Ctor_OtherSet () { var v1 = (NSString) "1"; using (var first = new NSSet (v1)) { using (var second = new NSMutableSet (first)) { Assert.AreEqual (1, first.Count, "1 count"); Assert.AreEqual (1, second.Count, "2 count"); } } } [Test] public void Ctor_OtherMutableSet () { var v1 = (NSString) "1"; using (var first = new NSMutableSet (v1)) { using (var second = new NSMutableSet (first)) { Assert.AreEqual (1, first.Count, "1 count"); Assert.AreEqual (1, second.Count, "2 count"); } } } [Test] public void LookupMemberTest () { var v1 = (NSString) "1"; var v2 = (NSString) "2"; using (var st = new NSMutableSet (v1)) { Assert.Throws (() => st.LookupMember ((NSString) null), "LookupMember ANE 1"); Assert.AreSame (v1, st.LookupMember (v1), "LookupMember 1"); Assert.IsNull (st.LookupMember (v2), "LookupMember 2"); } } [Test] public void AnyObjectTest () { var v1 = (NSString) "1"; var v2 = (NSString) "2"; using (var st = new NSMutableSet ()) { Assert.IsNull (st.AnyObject, "AnyObject 1"); } using (var st = new NSMutableSet (v1)) { Assert.AreSame (v1, st.AnyObject, "AnyObject 2"); } } [Test] public void ContainsTest () { var v1 = (NSString) "1"; var v2 = (NSString) "2"; using (var st = new NSMutableSet (v1)) { Assert.Throws (() => st.Contains ((NSString) null), "Contains ANE 1"); Assert.IsTrue (st.Contains (v1), "Contains 1"); Assert.IsFalse (st.Contains (v2), "Contains 2"); } } [Test] public void ToArrayTest () { var v1 = (NSString) "1"; using (var st = new NSMutableSet (v1)) { var arr = st.ToArray (); Assert.AreEqual (1, arr.Length, "ToArray Length"); Assert.AreSame (v1, arr [0], "ToArray () [0]"); } } [Test] public void OperatorAddTest () { var v1 = (NSString) "1"; var v2 = (NSString) "2"; using (var first = new NSMutableSet (v1)) { using (var second = new NSMutableSet (v2)) { using (var third = first + second) { Assert.AreEqual (2, third.Count, "+ Count"); Assert.IsTrue (third.Contains (v1), "+ 1"); Assert.IsTrue (third.Contains (v2), "+ 2"); } } } } [Test] public void OperatorSubtractTest () { var v1 = (NSString) "1"; var v2 = (NSString) "2"; using (var first = new NSMutableSet (v1, v2)) { using (var second = new NSMutableSet (v2)) { using (var third = first - second) { Assert.AreEqual (1, third.Count, "- Count"); Assert.IsTrue (third.Contains (v1), "- 1"); } } } } [Test] public void AddTest () { var v1 = (NSString) "1"; using (var st = new NSMutableSet ()) { Assert.Throws (() => st.Add ((NSString) null), "Add ANE 1"); st.Add (v1); Assert.IsTrue (st.Contains (v1), "Add 1"); Assert.AreSame (v1, st.AnyObject, "Add 2"); } } [Test] public void RemoveTest () { var v1 = (NSString) "1"; var v2 = (NSString) "2"; using (var st = new NSMutableSet (v1)) { Assert.Throws (() => st.Remove ((NSString) null), "Remove ANE 1"); st.Remove (v2); Assert.AreEqual (1, st.Count, "Remove 1 Count"); Assert.IsTrue (st.Contains (v1), "Remove 1 Contains"); Assert.AreSame (v1, st.AnyObject, "Remove 1 AnyObject"); st.Remove (v1); Assert.AreEqual (0, st.Count, "Remove 2 Count"); } } [Test] public void AddObjectsTest () { var v1 = (NSString) "1"; var v2 = (NSString) "2"; using (var st = new NSMutableSet ()) { Assert.Throws (() => st.AddObjects ((NSString) null), "AddObjects ANE 1"); Assert.Throws (() => st.AddObjects ((NSString[]) null), "AddObjects ANE 2"); st.AddObjects (v1); Assert.AreEqual (1, st.Count, "AddObjects 1 Count"); Assert.IsTrue (st.Contains (v1), "AddObjects 1 Contains"); st.RemoveAll (); st.AddObjects (v1, v1); Assert.AreEqual (1, st.Count, "AddObjects 2 Count"); Assert.IsTrue (st.Contains (v1), "AddObjects 2 Contains"); st.RemoveAll (); st.AddObjects (v2, v1); Assert.AreEqual (2, st.Count, "AddObjects 3 Count"); Assert.IsTrue (st.Contains (v1), "AddObjects 3 Contains a"); Assert.IsTrue (st.Contains (v2), "AddObjects 3 Contains b"); } } [Test] public void IEnumerable1Test () { const int C = 16 * 2 + 3; // NSFastEnumerator has a array of size 16, use more than that, and not an exact multiple. var values = new NSString [C]; for (int i = 0; i < C; i++) values [i] = (NSString) i.ToString (); using (var st = new NSMutableSet (values)) { Assert.AreEqual (C, st.Count, "Count 1"); var lst = new List (); foreach (var a in (IEnumerable) st) { Assert.IsNotNull (a, "null item iterator"); Assert.IsFalse (lst.Contains (a), "duplicated item iterator"); lst.Add (a); Assert.IsTrue (Array.IndexOf (values, a) >= 0, "different object"); } Assert.AreEqual (C, lst.Count, "iterator count"); } } [Test] public void IEnumerableTest () { const int C = 16 * 2 + 3; // NSFastEnumerator has a array of size 16, use more than that, and not an exact multiple. var values = new NSString [C]; for (int i = 0; i < C; i++) values [i] = (NSString) i.ToString (); using (var st = new NSMutableSet (values)) { Assert.AreEqual (C, st.Count, "Count 1"); var lst = new List (); foreach (NSString a in (IEnumerable) st) { Assert.IsNotNull (a, "null item iterator"); Assert.IsFalse (lst.Contains (a), "duplicated item iterator"); lst.Add (a); Assert.IsTrue (Array.IndexOf (values, a) >= 0, "different object"); } Assert.AreEqual (C, lst.Count, "iterator count"); } } [Test] public void OperatorPlusReferenceTest () { var one = new NSMutableSet ((NSString)"1", (NSString)"2", (NSString)"3"); var two = new NSMutableSet ((NSString)"4", (NSString)"5", (NSString)"6"); NSMutableSet nil = null; using (var sum = one + nil) using (var sum2 = two + one) using (var sum3 = one + two) { } Assert.AreNotEqual (IntPtr.Zero, one.Handle, "Handle must be != IntPtr.Zero"); Assert.AreNotEqual (IntPtr.Zero, two.Handle, "Handle must be != IntPtr.Zero"); } } } #endif // XAMCORE_2_0