mirror of
https://github.com/PrismLibrary/Prism.git
synced 2026-10-28 12:48:32 +08:00
260 lines
6.3 KiB
C#
260 lines
6.3 KiB
C#
using Prism.Common;
|
|
using Xunit;
|
|
|
|
namespace Prism.Tests.Common
|
|
{
|
|
|
|
public class ListDictionaryFixture
|
|
{
|
|
static ListDictionary<string, object> list;
|
|
|
|
public ListDictionaryFixture()
|
|
{
|
|
list = new ListDictionary<string, object>();
|
|
}
|
|
|
|
[Fact]
|
|
public void AddThrowsIfKeyNull()
|
|
{
|
|
var ex = Assert.Throws<ArgumentNullException>(() =>
|
|
{
|
|
list.Add(null, new object());
|
|
});
|
|
|
|
}
|
|
|
|
[Fact]
|
|
public void AddThrowsIfValueNull()
|
|
{
|
|
var ex = Assert.Throws<ArgumentNullException>(() =>
|
|
{
|
|
list.Add("", null);
|
|
});
|
|
|
|
}
|
|
|
|
[Fact]
|
|
public void CanAddValue()
|
|
{
|
|
object value1 = new object();
|
|
object value2 = new object();
|
|
|
|
list.Add("foo", value1);
|
|
list.Add("foo", value2);
|
|
|
|
Assert.Equal(2, list["foo"].Count);
|
|
Assert.Same(value1, list["foo"][0]);
|
|
Assert.Same(value2, list["foo"][1]);
|
|
}
|
|
|
|
[Fact]
|
|
public void CanIndexValuesByKey()
|
|
{
|
|
list.Add("foo", new object());
|
|
list.Add("foo", new object());
|
|
|
|
Assert.Equal(2, list["foo"].Count);
|
|
}
|
|
|
|
[Fact]
|
|
public void ThrowsIfRemoveKeyNull()
|
|
{
|
|
var ex = Assert.Throws<ArgumentNullException>(() =>
|
|
{
|
|
list.RemoveValue(null, new object());
|
|
});
|
|
|
|
}
|
|
|
|
[Fact]
|
|
public void CanRemoveValue()
|
|
{
|
|
object value = new object();
|
|
|
|
list.Add("foo", value);
|
|
list.RemoveValue("foo", value);
|
|
|
|
Assert.Empty(list["foo"]);
|
|
}
|
|
|
|
[Fact]
|
|
public void CanRemoveValueFromAllLists()
|
|
{
|
|
object value = new object();
|
|
list.Add("foo", value);
|
|
list.Add("bar", value);
|
|
|
|
list.RemoveValue(value);
|
|
|
|
Assert.Empty(list.Values);
|
|
}
|
|
|
|
[Fact]
|
|
public void RemoveNonExistingValueNoOp()
|
|
{
|
|
list.Add("foo", new object());
|
|
|
|
list.RemoveValue("foo", new object());
|
|
}
|
|
|
|
[Fact]
|
|
public void RemoveNonExistingKeyNoOp()
|
|
{
|
|
list.RemoveValue("foo", new object());
|
|
}
|
|
|
|
[Fact]
|
|
public void ThrowsIfRemoveListKeyNull()
|
|
{
|
|
var ex = Assert.Throws<ArgumentNullException>(() =>
|
|
{
|
|
list.Remove(null);
|
|
});
|
|
}
|
|
|
|
[Fact]
|
|
public void CanRemoveList()
|
|
{
|
|
list.Add("foo", new object());
|
|
list.Add("foo", new object());
|
|
|
|
bool removed = list.Remove("foo");
|
|
|
|
Assert.True(removed);
|
|
Assert.Empty(list.Keys);
|
|
}
|
|
|
|
[Fact]
|
|
public void CanSetList()
|
|
{
|
|
List<object> values = [new object()];
|
|
list.Add("foo", new object());
|
|
list.Add("foo", new object());
|
|
|
|
list["foo"] = values;
|
|
|
|
Assert.Single(list["foo"]);
|
|
}
|
|
|
|
[Fact]
|
|
public void CanEnumerateKeyValueList()
|
|
{
|
|
int count = 0;
|
|
list.Add("foo", new object());
|
|
list.Add("foo", new object());
|
|
|
|
foreach (KeyValuePair<string, IList<object>> pair in list)
|
|
{
|
|
foreach (object value in pair.Value)
|
|
{
|
|
count++;
|
|
}
|
|
Assert.Equal("foo", pair.Key);
|
|
}
|
|
|
|
Assert.Equal(2, count);
|
|
}
|
|
|
|
[Fact]
|
|
public void CanGetFlatListOfValues()
|
|
{
|
|
list.Add("foo", new object());
|
|
list.Add("foo", new object());
|
|
list.Add("bar", new object());
|
|
|
|
IList<object> values = list.Values;
|
|
|
|
Assert.Equal(3, values.Count);
|
|
}
|
|
|
|
[Fact]
|
|
public void IndexerAccessAlwaysSucceeds()
|
|
{
|
|
IList<object> values = list["foo"];
|
|
|
|
Assert.NotNull(values);
|
|
}
|
|
|
|
[Fact]
|
|
public void ThrowsIfContainsKeyNull()
|
|
{
|
|
var ex = Assert.Throws<ArgumentNullException>(() =>
|
|
{
|
|
list.ContainsKey(null);
|
|
});
|
|
}
|
|
|
|
[Fact]
|
|
public void CanAskContainsKey()
|
|
{
|
|
Assert.False(list.ContainsKey("foo"));
|
|
}
|
|
|
|
[Fact]
|
|
public void CanAskContainsValueInAnyList()
|
|
{
|
|
object obj = new object();
|
|
list.Add("foo", new object());
|
|
list.Add("bar", new object());
|
|
list.Add("baz", obj);
|
|
|
|
bool contains = list.ContainsValue(obj);
|
|
|
|
Assert.True(contains);
|
|
}
|
|
|
|
[Fact]
|
|
public void CanClearDictionary()
|
|
{
|
|
list.Add("foo", new object());
|
|
list.Add("bar", new object());
|
|
list.Add("baz", new object());
|
|
|
|
list.Clear();
|
|
|
|
Assert.Empty(list);
|
|
}
|
|
|
|
[Fact]
|
|
public void CanGetFilteredValuesByKeys()
|
|
{
|
|
list.Add("foo", new object());
|
|
list.Add("bar", new object());
|
|
list.Add("baz", new object());
|
|
|
|
IEnumerable<object> filtered = list.FindAllValuesByKey(delegate (string key)
|
|
{
|
|
return key.StartsWith("b");
|
|
});
|
|
|
|
int count = 0;
|
|
foreach (object obj in filtered)
|
|
{
|
|
count++;
|
|
}
|
|
|
|
Assert.Equal(2, count);
|
|
}
|
|
|
|
[Fact]
|
|
public void CanGetFilteredValues()
|
|
{
|
|
list.Add("foo", DateTime.Now);
|
|
list.Add("bar", new object());
|
|
list.Add("baz", DateTime.Today);
|
|
|
|
IEnumerable<object> filtered = list.FindAllValues(delegate (object value)
|
|
{
|
|
return value is DateTime;
|
|
});
|
|
int count = 0;
|
|
foreach (object obj in filtered)
|
|
{
|
|
count++;
|
|
}
|
|
|
|
Assert.Equal(2, count);
|
|
}
|
|
}
|
|
}
|