// -----------------------------------------------------------------------
//
// Copyright 2015 MIT Licence. See licence.md for more information.
//
// -----------------------------------------------------------------------
namespace Perspex.Base.UnitTests.Collections
{
using System.Collections.Generic;
using System.Collections.Specialized;
using Perspex.Collections;
using Xunit;
public class PerspexDictionaryTests
{
[Fact]
public void Adding_Item_Should_Raise_CollectionChanged()
{
var target = new PerspexDictionary();
var tracker = new CollectionChangedTracker(target);
target.Add("foo", "bar");
Assert.NotNull(tracker.Args);
Assert.Equal(NotifyCollectionChangedAction.Add, tracker.Args.Action);
Assert.Equal(-1, tracker.Args.NewStartingIndex);
Assert.Equal(1, tracker.Args.NewItems.Count);
Assert.Equal(new KeyValuePair("foo", "bar"), tracker.Args.NewItems[0]);
}
[Fact]
public void Adding_Item_Should_Raise_PropertyChanged()
{
var target = new PerspexDictionary();
var tracker = new PropertyChangedTracker(target);
target.Add("foo", "bar");
Assert.Equal(new[] { "Count", "Item[foo]" }, tracker.Names);
}
[Fact]
public void Assigning_Item_Should_Raise_CollectionChanged_Add()
{
var target = new PerspexDictionary();
var tracker = new CollectionChangedTracker(target);
target["foo"] = "bar";
Assert.NotNull(tracker.Args);
Assert.Equal(NotifyCollectionChangedAction.Add, tracker.Args.Action);
Assert.Equal(-1, tracker.Args.NewStartingIndex);
Assert.Equal(1, tracker.Args.NewItems.Count);
Assert.Equal(new KeyValuePair("foo", "bar"), tracker.Args.NewItems[0]);
}
[Fact]
public void Assigning_Item_Should_Raise_CollectionChanged_Replace()
{
var target = new PerspexDictionary();
target["foo"] = "baz";
var tracker = new CollectionChangedTracker(target);
target["foo"] = "bar";
Assert.NotNull(tracker.Args);
Assert.Equal(NotifyCollectionChangedAction.Replace, tracker.Args.Action);
Assert.Equal(-1, tracker.Args.NewStartingIndex);
Assert.Equal(1, tracker.Args.NewItems.Count);
Assert.Equal(new KeyValuePair("foo", "bar"), tracker.Args.NewItems[0]);
}
[Fact]
public void Assigning_Item_Should_Raise_PropertyChanged_Add()
{
var target = new PerspexDictionary();
var tracker = new PropertyChangedTracker(target);
target["foo"] = "bar";
Assert.Equal(new[] { "Count", "Item[foo]" }, tracker.Names);
}
[Fact]
public void Assigning_Item_Should_Raise_PropertyChanged_Replace()
{
var target = new PerspexDictionary();
target["foo"] = "baz";
var tracker = new PropertyChangedTracker(target);
target["foo"] = "bar";
Assert.Equal(new[] { "Item[foo]" }, tracker.Names);
}
[Fact]
public void Removing_Item_Should_Raise_CollectionChanged()
{
var target = new PerspexDictionary();
target["foo"] = "bar";
var tracker = new CollectionChangedTracker(target);
target.Remove("foo");
Assert.NotNull(tracker.Args);
Assert.Equal(NotifyCollectionChangedAction.Remove, tracker.Args.Action);
Assert.Equal(-1, tracker.Args.OldStartingIndex);
Assert.Equal(1, tracker.Args.OldItems.Count);
Assert.Equal(new KeyValuePair("foo", "bar"), tracker.Args.OldItems[0]);
}
[Fact]
public void Removing_Item_Should_Raise_PropertyChanged()
{
var target = new PerspexDictionary();
target["foo"] = "bar";
var tracker = new PropertyChangedTracker(target);
target.Remove("foo");
Assert.Equal(new[] { "Count", "Item[foo]" }, tracker.Names);
}
[Fact]
public void Clearing_Collection_Should_Raise_CollectionChanged()
{
var target = new PerspexDictionary();
target["foo"] = "bar";
target["baz"] = "qux";
var tracker = new CollectionChangedTracker(target);
target.Clear();
Assert.NotNull(tracker.Args);
Assert.Equal(NotifyCollectionChangedAction.Remove, tracker.Args.Action);
Assert.Equal(-1, tracker.Args.OldStartingIndex);
Assert.Equal(2, tracker.Args.OldItems.Count);
Assert.Equal(new KeyValuePair("foo", "bar"), tracker.Args.OldItems[0]);
}
[Fact]
public void Clearing_Collection_Should_Raise_PropertyChanged()
{
var target = new PerspexDictionary();
target["foo"] = "bar";
target["baz"] = "qux";
var tracker = new PropertyChangedTracker(target);
target.Clear();
Assert.Equal(new[] { "Count", "Item[]" }, tracker.Names);
}
}
}