using System; using System.Collections.Generic; using System.Collections.ObjectModel; using NUnit.Framework; using Xamarin.Forms.Internals; namespace Xamarin.Forms.Core.UnitTests { [TestFixture] public class NotifyCollectionChangedEventArgsExtensionsTests : BaseTestFixture { [Test] public void Add() { List applied = new List { "foo", "bar", "baz" }; Action reset = () => Assert.Fail ("Reset should not be called"); Action insert = (o, i, create) => { Assert.That (create, Is.True); applied.Insert (i, (string) o); }; Action removeAt = (o, i) => applied.RemoveAt (i); var items = new ObservableCollection (applied); items.CollectionChanged += (s, e) => e.Apply (insert, removeAt, reset); items.Add ("monkey"); CollectionAssert.AreEqual (items, applied); } [Test] public void Insert() { List applied = new List { "foo", "bar", "baz" }; Action reset = () => Assert.Fail ("Reset should not be called"); Action insert = (o, i, create) => { Assert.That (create, Is.True); applied.Insert (i, (string) o); }; Action removeAt = (o, i) => applied.RemoveAt (i); var items = new ObservableCollection (applied); items.CollectionChanged += (s, e) => e.Apply (insert, removeAt, reset); items.Insert (1, "monkey"); CollectionAssert.AreEqual (items, applied); } [Test] public void Move() { List applied = new List { "foo", "bar", "baz" }; Action reset = () => Assert.Fail ("Reset should not be called"); Action insert = (o, i, create) => { Assert.That (create, Is.False); applied.Insert (i, (string) o); }; Action removeAt = (o, i) => applied.RemoveAt (i); var items = new ObservableCollection (applied); items.CollectionChanged += (s, e) => e.Apply (insert, removeAt, reset); items.Move (0, 2); CollectionAssert.AreEqual (items, applied); } [Test] public void Replace() { List applied = new List { "foo", "bar", "baz" }; Action reset = () => Assert.Fail("Reset should not be called"); Action insert = (o, i, create) => { Assert.That(create, Is.True); applied.Insert(i, (string)o); }; Action removeAt = (o, i) => applied.RemoveAt(i); var items = new ObservableCollection(applied); items.CollectionChanged += (s, e) => e.Apply(insert, removeAt, reset); items[1] = "monkey"; CollectionAssert.AreEqual(items, applied); } } }