csharpc-sharpdotnetxamlavaloniauicross-platformcross-platform-xamlavaloniaguimulti-platformuser-interfacedotnetcore
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
63 lines
2.0 KiB
63 lines
2.0 KiB
using System;
|
|
using System.Collections;
|
|
using System.Collections.Generic;
|
|
using System.Collections.Specialized;
|
|
using System.Text;
|
|
using Avalonia.Collections;
|
|
using Avalonia.Diagnostics;
|
|
using Xunit;
|
|
|
|
namespace Avalonia.Controls.UnitTests
|
|
{
|
|
public class ItemsSourceViewTests
|
|
{
|
|
[Fact]
|
|
public void Only_Subscribes_To_Source_CollectionChanged_When_CollectionChanged_Subscribed()
|
|
{
|
|
var source = new AvaloniaList<string>();
|
|
var target = new ItemsSourceView<string>(source);
|
|
var debug = (INotifyCollectionChangedDebug)source;
|
|
|
|
Assert.Null(debug.GetCollectionChangedSubscribers());
|
|
|
|
void Handler(object sender, NotifyCollectionChangedEventArgs e) { }
|
|
target.CollectionChanged += Handler;
|
|
|
|
Assert.NotNull(debug.GetCollectionChangedSubscribers());
|
|
Assert.Equal(1, debug.GetCollectionChangedSubscribers().Length);
|
|
|
|
target.CollectionChanged -= Handler;
|
|
|
|
Assert.Null(debug.GetCollectionChangedSubscribers());
|
|
}
|
|
|
|
[Fact]
|
|
public void Cannot_Wrap_An_ItemsSourceView_In_Another()
|
|
{
|
|
var source = new ItemsSourceView<string>(new string[0]);
|
|
Assert.Throws<ArgumentException>(() => new ItemsSourceView<string>(source));
|
|
}
|
|
|
|
[Fact]
|
|
public void Cannot_Create_ItemsSourceView_With_Collection_That_Implements_INCC_But_Not_List()
|
|
{
|
|
var source = new InvalidCollection();
|
|
Assert.Throws<ArgumentException>(() => new ItemsSourceView<string>(source));
|
|
}
|
|
|
|
private class InvalidCollection : INotifyCollectionChanged, IEnumerable<string>
|
|
{
|
|
public event NotifyCollectionChangedEventHandler CollectionChanged { add { } remove { } }
|
|
|
|
public IEnumerator<string> GetEnumerator()
|
|
{
|
|
yield break;
|
|
}
|
|
|
|
IEnumerator IEnumerable.GetEnumerator()
|
|
{
|
|
yield break;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|