diff options
author | Jason Smith <jason.smith@xamarin.com> | 2016-03-22 13:02:25 -0700 |
---|---|---|
committer | Jason Smith <jason.smith@xamarin.com> | 2016-03-22 16:13:41 -0700 |
commit | 17fdde66d94155fc62a034fa6658995bef6fd6e5 (patch) | |
tree | b5e5073a2a7b15cdbe826faa5c763e270a505729 /Xamarin.Forms.Core.UnitTests/ObservableWrapperTests.cs | |
download | xamarin-forms-17fdde66d94155fc62a034fa6658995bef6fd6e5.tar.gz xamarin-forms-17fdde66d94155fc62a034fa6658995bef6fd6e5.tar.bz2 xamarin-forms-17fdde66d94155fc62a034fa6658995bef6fd6e5.zip |
Initial import
Diffstat (limited to 'Xamarin.Forms.Core.UnitTests/ObservableWrapperTests.cs')
-rw-r--r-- | Xamarin.Forms.Core.UnitTests/ObservableWrapperTests.cs | 402 |
1 files changed, 402 insertions, 0 deletions
diff --git a/Xamarin.Forms.Core.UnitTests/ObservableWrapperTests.cs b/Xamarin.Forms.Core.UnitTests/ObservableWrapperTests.cs new file mode 100644 index 00000000..2dc8a58d --- /dev/null +++ b/Xamarin.Forms.Core.UnitTests/ObservableWrapperTests.cs @@ -0,0 +1,402 @@ +using System; +using System.Collections.ObjectModel; +using NUnit.Framework; + +namespace Xamarin.Forms.Core.UnitTests +{ + [TestFixture] + public class ObservableWrapperTests : BaseTestFixture + { + [Test] + public void Constructor () + { + var observableCollection = new ObservableCollection<View> (); + var wrapper = new ObservableWrapper<View, Button> (observableCollection); + + Assert.IsEmpty (wrapper); + + Assert.Throws<ArgumentNullException> (() => new ObservableWrapper<View, View> (null)); + } + + [Test] + public void IgnoresInternallyAdded () + { + var observableCollection = new ObservableCollection<View> (); + var wrapper = new ObservableWrapper<View, Button> (observableCollection); + + var child = new View (); + + observableCollection.Add (child); + + Assert.IsEmpty (wrapper); + } + + [Test] + public void TracksExternallyAdded () + { + var observableCollection = new ObservableCollection<View> (); + var wrapper = new ObservableWrapper<View, Button> (observableCollection); + + var child = new Button (); + + wrapper.Add (child); + + Assert.AreEqual (child, wrapper[0]); + Assert.AreEqual (child, observableCollection[0]); + } + + [Test] + public void AddWithInternalItemsAlreadyAdded () + { + var observableCollection = new ObservableCollection<View> (); + var wrapper = new ObservableWrapper<View, Button> (observableCollection); + + var view = new View (); + observableCollection.Add (view); + + var btn = new Button (); + + wrapper.Add (btn); + + Assert.AreEqual (btn, wrapper[0]); + Assert.AreEqual (1, wrapper.Count); + + Assert.Contains (btn, observableCollection); + Assert.Contains (view, observableCollection); + Assert.AreEqual (2, observableCollection.Count); + } + + [Test] + public void IgnoresInternallyAddedSameType () + { + var observableCollection = new ObservableCollection<View> (); + var wrapper = new ObservableWrapper<View, View> (observableCollection); + + var child = new View (); + + observableCollection.Add (child); + + Assert.IsEmpty (wrapper); + } + + [Test] + public void TracksExternallyAddedSameType () + { + var observableCollection = new ObservableCollection<View> (); + var wrapper = new ObservableWrapper<View, View> (observableCollection); + + var child = new Button (); + + wrapper.Add (child); + + Assert.AreEqual (child, wrapper[0]); + Assert.AreEqual (child, observableCollection[0]); + } + + [Test] + public void AddWithInternalItemsAlreadyAddedSameType () + { + var observableCollection = new ObservableCollection<View> (); + var wrapper = new ObservableWrapper<View, View> (observableCollection); + + var view = new View (); + observableCollection.Add (view); + + var btn = new Button (); + + wrapper.Add (btn); + + Assert.AreEqual (btn, wrapper[0]); + Assert.AreEqual (1, wrapper.Count); + + Assert.Contains (btn, observableCollection); + Assert.Contains (view, observableCollection); + Assert.AreEqual (2, observableCollection.Count); + } + + [Test] + public void CannotRemoveInternalItem () + { + var observableCollection = new ObservableCollection<View> (); + var wrapper = new ObservableWrapper<View, View> (observableCollection); + + var child = new View (); + + observableCollection.Add (child); + + Assert.IsEmpty (wrapper); + + Assert.False (wrapper.Remove (child)); + + Assert.Contains (child, observableCollection); + } + + [Test] + public void ReadOnly () + { + var observableCollection = new ObservableCollection<View> (); + var wrapper = new ObservableWrapper<View, Button> (observableCollection); + + Assert.False (wrapper.IsReadOnly); + + wrapper.Add (new Button ()); + + wrapper.IsReadOnly = true; + + Assert.True (wrapper.IsReadOnly); + + Assert.Throws<NotSupportedException> (() => wrapper.Remove (wrapper[0])); + Assert.Throws<NotSupportedException> (() => wrapper.Add (new Button ())); + Assert.Throws<NotSupportedException> (() => wrapper.RemoveAt (0)); + Assert.Throws<NotSupportedException> (() => wrapper.Insert (0, new Button ())); + Assert.Throws<NotSupportedException> (wrapper.Clear); + } + + [Test] + public void Indexer () + { + var observableCollection = new ObservableCollection<View> (); + var wrapper = new ObservableWrapper<View, Button> (observableCollection); + + wrapper.Add (new Button ()); + + var newButton = new Button (); + + wrapper[0] = newButton; + + Assert.AreEqual (newButton, wrapper[0]); + } + + [Test] + public void IndexerSameType () + { + var observableCollection = new ObservableCollection<View> (); + var wrapper = new ObservableWrapper<View, View> (observableCollection); + + wrapper.Add (new Button ()); + + var newButton = new Button (); + + wrapper[0] = newButton; + + Assert.AreEqual (newButton, wrapper[0]); + } + + [Test] + public void CopyTo () + { + var observableCollection = new ObservableCollection<View> (); + var wrapper = new ObservableWrapper<View, View> (observableCollection); + + var child1 = new Button (); + var child2 = new Button (); + var child3 = new Button (); + var child4 = new Button (); + var child5 = new Button (); + + observableCollection.Add (new Stepper ()); + wrapper.Add (child1); + observableCollection.Add (new Button ()); + wrapper.Add (child2); + wrapper.Add (child3); + wrapper.Add (child4); + wrapper.Add (child5); + observableCollection.Add (new Button ()); + + var target = new View[30]; + wrapper.CopyTo (target, 2); + + Assert.AreEqual (target[2], child1); + Assert.AreEqual (target[3], child2); + Assert.AreEqual (target[4], child3); + Assert.AreEqual (target[5], child4); + Assert.AreEqual (target[6], child5); + } + + [Test] + public void INCCSimpleAdd () + { + var oc = new ObservableCollection<View> (); + var wrapper = new ObservableWrapper<View, View> (oc); + + var child = new Button (); + + Button addedResult = null; + int addIndex = -1; + wrapper.CollectionChanged += (sender, args) => { + addedResult = args.NewItems[0] as Button; + addIndex = args.NewStartingIndex; + }; + + wrapper.Add (child); + + Assert.AreEqual (0, addIndex); + Assert.AreEqual (child, addedResult); + } + + [Test] + public void INCCSimpleAddToInner () + { + var oc = new ObservableCollection<View> (); + var wrapper = new ObservableWrapper<View, View> (oc); + + var child = new Button (); + + Button addedResult = null; + int addIndex = -1; + wrapper.CollectionChanged += (sender, args) => { + addedResult = args.NewItems[0] as Button; + addIndex = args.NewStartingIndex; + }; + + oc.Add (child); + + Assert.AreEqual (-1, addIndex); + Assert.AreEqual (null, addedResult); + } + + [Test] + public void INCCComplexAdd () + { + var oc = new ObservableCollection<View> (); + var wrapper = new ObservableWrapper<View, Button> (oc); + + oc.Add (new Stepper ()); + + var child = new Button (); + + Button addedResult = null; + int addIndex = -1; + wrapper.CollectionChanged += (sender, args) => { + addedResult = args.NewItems[0] as Button; + addIndex = args.NewStartingIndex; + }; + + wrapper.Add (child); + + Assert.AreEqual (0, addIndex); + Assert.AreEqual (child, addedResult); + } + + [Test] + public void INCCSimpleRemove () + { + var oc = new ObservableCollection<View> (); + var wrapper = new ObservableWrapper<View, Button> (oc); + + var child = new Button (); + wrapper.Add (child); + + Button removedResult = null; + int removeIndex = -1; + wrapper.CollectionChanged += (sender, args) => { + removedResult = args.OldItems[0] as Button; + removeIndex = args.OldStartingIndex; + }; + + wrapper.Remove (child); + + Assert.AreEqual (0, removeIndex); + Assert.AreEqual (child, removedResult); + } + + [Test] + public void INCCSimpleRemoveFromInner () + { + var oc = new ObservableCollection<View> (); + var wrapper = new ObservableWrapper<View, Button> (oc); + + var child = new Button (); + oc.Add (child); + + Button addedResult = null; + int addIndex = -1; + wrapper.CollectionChanged += (sender, args) => { + addedResult = args.OldItems[0] as Button; + addIndex = args.OldStartingIndex; + }; + + oc.Remove (child); + + Assert.AreEqual (-1, addIndex); + Assert.AreEqual (null, addedResult); + } + + [Test] + public void INCCComplexRemove () + { + var oc = new ObservableCollection<View> (); + var wrapper = new ObservableWrapper<View, Button> (oc); + + oc.Add (new Stepper ()); + + var child = new Button (); + wrapper.Add (child); + + Button removedResult = null; + int removeIndex = -1; + wrapper.CollectionChanged += (sender, args) => { + removedResult = args.OldItems[0] as Button; + removeIndex = args.OldStartingIndex; + }; + + wrapper.Remove (child); + + Assert.AreEqual (child, removedResult); + Assert.AreEqual (0, removeIndex); + } + + [Test] + public void INCCComplexRemoveLast () + { + var oc = new ObservableCollection<View> (); + var wrapper = new ObservableWrapper<View, Button> (oc); + + oc.Add (new Stepper ()); + + wrapper.Add (new Button ()); + wrapper.Add (new Button ()); + var child = new Button (); + wrapper.Add (child); + + Button removedResult = null; + int removeIndex = -1; + wrapper.CollectionChanged += (sender, args) => { + removedResult = args.OldItems[0] as Button; + removeIndex = args.OldStartingIndex; + }; + + wrapper.Remove (child); + + Assert.AreEqual (child, removedResult); + Assert.AreEqual (2, removeIndex); + } + + [Test] + public void INCCReplace () + { + var oc = new ObservableCollection<View> (); + var wrapper = new ObservableWrapper<View, Button> (oc); + + var child1 = new Button (); + var child2 = new Button (); + + wrapper.Add (child1); + + int index = -1; + Button oldItem = null; + Button newItem = null; + wrapper.CollectionChanged += (sender, args) => { + index = args.NewStartingIndex; + oldItem = args.OldItems[0] as Button; + newItem = args.NewItems[0] as Button; + }; + + wrapper[0] = child2; + + Assert.AreEqual (0, index); + Assert.AreEqual (child1, oldItem); + Assert.AreEqual (child2, newItem); + } + } +} |