|
@@ -1,10 +1,14 @@
|
|
|
using System.Collections.ObjectModel;
|
|
using System.Collections.ObjectModel;
|
|
|
using System.Linq;
|
|
using System.Linq;
|
|
|
|
|
+using System.Reactive.Subjects;
|
|
|
using Avalonia.Controls.Presenters;
|
|
using Avalonia.Controls.Presenters;
|
|
|
using Avalonia.Controls.Primitives;
|
|
using Avalonia.Controls.Primitives;
|
|
|
using Avalonia.Controls.Templates;
|
|
using Avalonia.Controls.Templates;
|
|
|
|
|
+using Avalonia.Data;
|
|
|
using Avalonia.LogicalTree;
|
|
using Avalonia.LogicalTree;
|
|
|
|
|
+using Avalonia.Threading;
|
|
|
using Avalonia.VisualTree;
|
|
using Avalonia.VisualTree;
|
|
|
|
|
+using Avalonia.UnitTests;
|
|
|
using Xunit;
|
|
using Xunit;
|
|
|
|
|
|
|
|
namespace Avalonia.Controls.UnitTests
|
|
namespace Avalonia.Controls.UnitTests
|
|
@@ -16,12 +20,7 @@ namespace Avalonia.Controls.UnitTests
|
|
|
{
|
|
{
|
|
|
var target = new Carousel
|
|
var target = new Carousel
|
|
|
{
|
|
{
|
|
|
- Template = new FuncControlTemplate<Carousel>(CreateTemplate),
|
|
|
|
|
- Items = new[]
|
|
|
|
|
- {
|
|
|
|
|
- "Foo",
|
|
|
|
|
- "Bar"
|
|
|
|
|
- }
|
|
|
|
|
|
|
+ Template = new FuncControlTemplate<Carousel>(CreateTemplate), Items = new[] { "Foo", "Bar" }
|
|
|
};
|
|
};
|
|
|
|
|
|
|
|
target.ApplyTemplate();
|
|
target.ApplyTemplate();
|
|
@@ -35,12 +34,7 @@ namespace Avalonia.Controls.UnitTests
|
|
|
{
|
|
{
|
|
|
var target = new Carousel
|
|
var target = new Carousel
|
|
|
{
|
|
{
|
|
|
- Template = new FuncControlTemplate<Carousel>(CreateTemplate),
|
|
|
|
|
- Items = new[]
|
|
|
|
|
- {
|
|
|
|
|
- "Foo",
|
|
|
|
|
- "Bar"
|
|
|
|
|
- }
|
|
|
|
|
|
|
+ Template = new FuncControlTemplate<Carousel>(CreateTemplate), Items = new[] { "Foo", "Bar" }
|
|
|
};
|
|
};
|
|
|
|
|
|
|
|
target.ApplyTemplate();
|
|
target.ApplyTemplate();
|
|
@@ -75,18 +69,11 @@ namespace Avalonia.Controls.UnitTests
|
|
|
[Fact]
|
|
[Fact]
|
|
|
public void Selected_Item_Changes_To_First_Item_When_Items_Property_Changes()
|
|
public void Selected_Item_Changes_To_First_Item_When_Items_Property_Changes()
|
|
|
{
|
|
{
|
|
|
- var items = new ObservableCollection<string>
|
|
|
|
|
- {
|
|
|
|
|
- "Foo",
|
|
|
|
|
- "Bar",
|
|
|
|
|
- "FooBar"
|
|
|
|
|
- };
|
|
|
|
|
|
|
+ var items = new ObservableCollection<string> { "Foo", "Bar", "FooBar" };
|
|
|
|
|
|
|
|
var target = new Carousel
|
|
var target = new Carousel
|
|
|
{
|
|
{
|
|
|
- Template = new FuncControlTemplate<Carousel>(CreateTemplate),
|
|
|
|
|
- Items = items,
|
|
|
|
|
- IsVirtualized = false
|
|
|
|
|
|
|
+ Template = new FuncControlTemplate<Carousel>(CreateTemplate), Items = items, IsVirtualized = false
|
|
|
};
|
|
};
|
|
|
|
|
|
|
|
target.ApplyTemplate();
|
|
target.ApplyTemplate();
|
|
@@ -111,18 +98,11 @@ namespace Avalonia.Controls.UnitTests
|
|
|
[Fact]
|
|
[Fact]
|
|
|
public void Selected_Item_Changes_To_First_Item_When_Items_Property_Changes_And_Virtualized()
|
|
public void Selected_Item_Changes_To_First_Item_When_Items_Property_Changes_And_Virtualized()
|
|
|
{
|
|
{
|
|
|
- var items = new ObservableCollection<string>
|
|
|
|
|
- {
|
|
|
|
|
- "Foo",
|
|
|
|
|
- "Bar",
|
|
|
|
|
- "FooBar"
|
|
|
|
|
- };
|
|
|
|
|
|
|
+ var items = new ObservableCollection<string> { "Foo", "Bar", "FooBar" };
|
|
|
|
|
|
|
|
var target = new Carousel
|
|
var target = new Carousel
|
|
|
{
|
|
{
|
|
|
- Template = new FuncControlTemplate<Carousel>(CreateTemplate),
|
|
|
|
|
- Items = items,
|
|
|
|
|
- IsVirtualized = true,
|
|
|
|
|
|
|
+ Template = new FuncControlTemplate<Carousel>(CreateTemplate), Items = items, IsVirtualized = true,
|
|
|
};
|
|
};
|
|
|
|
|
|
|
|
target.ApplyTemplate();
|
|
target.ApplyTemplate();
|
|
@@ -150,9 +130,7 @@ namespace Avalonia.Controls.UnitTests
|
|
|
var items = new ObservableCollection<string>();
|
|
var items = new ObservableCollection<string>();
|
|
|
var target = new Carousel
|
|
var target = new Carousel
|
|
|
{
|
|
{
|
|
|
- Template = new FuncControlTemplate<Carousel>(CreateTemplate),
|
|
|
|
|
- Items = items,
|
|
|
|
|
- IsVirtualized = false
|
|
|
|
|
|
|
+ Template = new FuncControlTemplate<Carousel>(CreateTemplate), Items = items, IsVirtualized = false
|
|
|
};
|
|
};
|
|
|
|
|
|
|
|
target.ApplyTemplate();
|
|
target.ApplyTemplate();
|
|
@@ -170,18 +148,11 @@ namespace Avalonia.Controls.UnitTests
|
|
|
[Fact]
|
|
[Fact]
|
|
|
public void Selected_Index_Changes_To_None_When_Items_Assigned_Null()
|
|
public void Selected_Index_Changes_To_None_When_Items_Assigned_Null()
|
|
|
{
|
|
{
|
|
|
- var items = new ObservableCollection<string>
|
|
|
|
|
- {
|
|
|
|
|
- "Foo",
|
|
|
|
|
- "Bar",
|
|
|
|
|
- "FooBar"
|
|
|
|
|
- };
|
|
|
|
|
|
|
+ var items = new ObservableCollection<string> { "Foo", "Bar", "FooBar" };
|
|
|
|
|
|
|
|
var target = new Carousel
|
|
var target = new Carousel
|
|
|
{
|
|
{
|
|
|
- Template = new FuncControlTemplate<Carousel>(CreateTemplate),
|
|
|
|
|
- Items = items,
|
|
|
|
|
- IsVirtualized = false
|
|
|
|
|
|
|
+ Template = new FuncControlTemplate<Carousel>(CreateTemplate), Items = items, IsVirtualized = false
|
|
|
};
|
|
};
|
|
|
|
|
|
|
|
target.ApplyTemplate();
|
|
target.ApplyTemplate();
|
|
@@ -204,12 +175,7 @@ namespace Avalonia.Controls.UnitTests
|
|
|
[Fact]
|
|
[Fact]
|
|
|
public void Selected_Index_Is_Maintained_Carousel_Created_With_Non_Zero_SelectedIndex()
|
|
public void Selected_Index_Is_Maintained_Carousel_Created_With_Non_Zero_SelectedIndex()
|
|
|
{
|
|
{
|
|
|
- var items = new ObservableCollection<string>
|
|
|
|
|
- {
|
|
|
|
|
- "Foo",
|
|
|
|
|
- "Bar",
|
|
|
|
|
- "FooBar"
|
|
|
|
|
- };
|
|
|
|
|
|
|
+ var items = new ObservableCollection<string> { "Foo", "Bar", "FooBar" };
|
|
|
|
|
|
|
|
var target = new Carousel
|
|
var target = new Carousel
|
|
|
{
|
|
{
|
|
@@ -233,18 +199,11 @@ namespace Avalonia.Controls.UnitTests
|
|
|
[Fact]
|
|
[Fact]
|
|
|
public void Selected_Item_Changes_To_Next_First_Item_When_Item_Removed_From_Beggining_Of_List()
|
|
public void Selected_Item_Changes_To_Next_First_Item_When_Item_Removed_From_Beggining_Of_List()
|
|
|
{
|
|
{
|
|
|
- var items = new ObservableCollection<string>
|
|
|
|
|
- {
|
|
|
|
|
- "Foo",
|
|
|
|
|
- "Bar",
|
|
|
|
|
- "FooBar"
|
|
|
|
|
- };
|
|
|
|
|
|
|
+ var items = new ObservableCollection<string> { "Foo", "Bar", "FooBar" };
|
|
|
|
|
|
|
|
var target = new Carousel
|
|
var target = new Carousel
|
|
|
{
|
|
{
|
|
|
- Template = new FuncControlTemplate<Carousel>(CreateTemplate),
|
|
|
|
|
- Items = items,
|
|
|
|
|
- IsVirtualized = false
|
|
|
|
|
|
|
+ Template = new FuncControlTemplate<Carousel>(CreateTemplate), Items = items, IsVirtualized = false
|
|
|
};
|
|
};
|
|
|
|
|
|
|
|
target.ApplyTemplate();
|
|
target.ApplyTemplate();
|
|
@@ -267,18 +226,11 @@ namespace Avalonia.Controls.UnitTests
|
|
|
[Fact]
|
|
[Fact]
|
|
|
public void Selected_Item_Changes_To_First_Item_If_SelectedItem_Is_Removed_From_Middle()
|
|
public void Selected_Item_Changes_To_First_Item_If_SelectedItem_Is_Removed_From_Middle()
|
|
|
{
|
|
{
|
|
|
- var items = new ObservableCollection<string>
|
|
|
|
|
- {
|
|
|
|
|
- "Foo",
|
|
|
|
|
- "Bar",
|
|
|
|
|
- "FooBar"
|
|
|
|
|
- };
|
|
|
|
|
|
|
+ var items = new ObservableCollection<string> { "Foo", "Bar", "FooBar" };
|
|
|
|
|
|
|
|
var target = new Carousel
|
|
var target = new Carousel
|
|
|
{
|
|
{
|
|
|
- Template = new FuncControlTemplate<Carousel>(CreateTemplate),
|
|
|
|
|
- Items = items,
|
|
|
|
|
- IsVirtualized = false
|
|
|
|
|
|
|
+ Template = new FuncControlTemplate<Carousel>(CreateTemplate), Items = items, IsVirtualized = false
|
|
|
};
|
|
};
|
|
|
|
|
|
|
|
target.ApplyTemplate();
|
|
target.ApplyTemplate();
|
|
@@ -311,5 +263,31 @@ namespace Avalonia.Controls.UnitTests
|
|
|
contentPresenter.UpdateChild();
|
|
contentPresenter.UpdateChild();
|
|
|
return Assert.IsType<TextBlock>(contentPresenter.Child);
|
|
return Assert.IsType<TextBlock>(contentPresenter.Child);
|
|
|
}
|
|
}
|
|
|
|
|
+
|
|
|
|
|
+ [Fact]
|
|
|
|
|
+ public void SelectedItem_Validation()
|
|
|
|
|
+ {
|
|
|
|
|
+ using (UnitTestApplication.Start(TestServices.MockThreadingInterface))
|
|
|
|
|
+ {
|
|
|
|
|
+ var target = new Carousel
|
|
|
|
|
+ {
|
|
|
|
|
+ Template = new FuncControlTemplate<Carousel>(CreateTemplate), IsVirtualized = false
|
|
|
|
|
+ };
|
|
|
|
|
+
|
|
|
|
|
+ target.ApplyTemplate();
|
|
|
|
|
+ target.Presenter.ApplyTemplate();
|
|
|
|
|
+
|
|
|
|
|
+ var exception = new System.InvalidCastException("failed validation");
|
|
|
|
|
+ var textObservable =
|
|
|
|
|
+ new BehaviorSubject<BindingNotification>(new BindingNotification(exception,
|
|
|
|
|
+ BindingErrorType.DataValidationError));
|
|
|
|
|
+ target.Bind(ComboBox.SelectedItemProperty, textObservable);
|
|
|
|
|
+
|
|
|
|
|
+ Dispatcher.UIThread.RunJobs();
|
|
|
|
|
+
|
|
|
|
|
+ Assert.True(DataValidationErrors.GetHasErrors(target));
|
|
|
|
|
+ Assert.True(DataValidationErrors.GetErrors(target).SequenceEqual(new[] { exception }));
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|