Browse Source

Added ItemsPresenter tests.

Needed to allow it to not be part of ItemsControl template to allow
easier testing.
pull/58/head
Steven Kirk 11 years ago
parent
commit
dd4bd88bd8
  1. 4
      Perspex.Controls/Generators/ItemContainerGenerator.cs
  2. 15
      Perspex.Controls/Presenters/ItemsPresenter.cs
  3. 1
      Tests/Perspex.Controls.UnitTests/Perspex.Controls.UnitTests.csproj
  4. 77
      Tests/Perspex.Controls.UnitTests/Presenters/ItemsPresenterTests.cs

4
Perspex.Controls/Generators/ItemContainerGenerator.cs

@ -20,7 +20,7 @@ namespace Perspex.Controls.Generators
private ItemContainerGeneratorState state; private ItemContainerGeneratorState state;
public ItemContainerGenerator(ItemsControl owner) public ItemContainerGenerator(Control owner)
{ {
this.Owner = owner; this.Owner = owner;
} }
@ -48,7 +48,7 @@ namespace Perspex.Controls.Generators
} }
} }
protected ItemsControl Owner protected Control Owner
{ {
get; get;
private set; private set;

15
Perspex.Controls/Presenters/ItemsPresenter.cs

@ -29,6 +29,12 @@ namespace Perspex.Controls.Presenters
this.GetObservableWithHistory(ItemsProperty).Subscribe(this.ItemsChanged); this.GetObservableWithHistory(ItemsProperty).Subscribe(this.ItemsChanged);
} }
public ItemContainerGenerator ItemContainerGenerator
{
get;
private set;
}
public IEnumerable Items public IEnumerable Items
{ {
get { return this.GetValue(ItemsProperty); } get { return this.GetValue(ItemsProperty); }
@ -81,14 +87,13 @@ namespace Perspex.Controls.Presenters
private IItemContainerGenerator GetGenerator() private IItemContainerGenerator GetGenerator()
{ {
ItemsControl i = this.TemplatedParent as ItemsControl; if (this.ItemContainerGenerator == null)
if (i == null)
{ {
throw new InvalidOperationException("ItemsPresenter must be part of an ItemsControl template."); ItemsControl i = this.TemplatedParent as ItemsControl;
this.ItemContainerGenerator = i?.ItemContainerGenerator ?? new ItemContainerGenerator(this);
} }
return i.ItemContainerGenerator; return this.ItemContainerGenerator;
} }
private void ItemsChanged(Tuple<IEnumerable, IEnumerable> value) private void ItemsChanged(Tuple<IEnumerable, IEnumerable> value)

1
Tests/Perspex.Controls.UnitTests/Perspex.Controls.UnitTests.csproj

@ -90,6 +90,7 @@
<ItemGroup> <ItemGroup>
<Compile Include="ContentPresenterTests.cs" /> <Compile Include="ContentPresenterTests.cs" />
<Compile Include="DropDownTests.cs" /> <Compile Include="DropDownTests.cs" />
<Compile Include="Presenters\ItemsPresenterTests.cs" />
<Compile Include="ScrollContentPresenterTests.cs" /> <Compile Include="ScrollContentPresenterTests.cs" />
<Compile Include="ScrollViewerTests.cs" /> <Compile Include="ScrollViewerTests.cs" />
<Compile Include="Primitives\SelectingItemsControlTests.cs" /> <Compile Include="Primitives\SelectingItemsControlTests.cs" />

77
Tests/Perspex.Controls.UnitTests/Presenters/ItemsPresenterTests.cs

@ -0,0 +1,77 @@
// -----------------------------------------------------------------------
// <copyright file="ItemsPresenterTests.cs" company="Steven Kirk">
// Copyright 2015 MIT Licence. See licence.md for more information.
// </copyright>
// -----------------------------------------------------------------------
namespace Perspex.Controls.UnitTests.Presenters
{
using Perspex.Controls.Presenters;
using Perspex.Input;
using Perspex.VisualTree;
using System.Linq;
using Xunit;
public class ItemsPresenterTests
{
[Fact]
public void Panel_Should_Be_Created_From_ItemsPanel_Template()
{
var panel = new Panel();
var target = new ItemsPresenter
{
ItemsPanel = new ItemsPanelTemplate(() => panel),
};
target.ApplyTemplate();
Assert.Equal(panel, target.Panel);
}
[Fact]
public void Panel_TemplatedParent_Should_Be_Set()
{
var target = new ItemsPresenter();
target.ApplyTemplate();
Assert.Equal(target, target.Panel.TemplatedParent);
}
[Fact]
public void Panel_TabNavigation_Should_Be_Set_To_Once()
{
var target = new ItemsPresenter();
target.ApplyTemplate();
Assert.Equal(KeyboardNavigationMode.Once, KeyboardNavigation.GetTabNavigation(target.Panel));
}
[Fact]
public void Panel_Should_Be_Visual_Child()
{
var target = new ItemsPresenter();
target.ApplyTemplate();
var child = target.GetVisualChildren().Single();
Assert.Equal(target.Panel, child);
}
[Fact]
public void Items_Should_Be_Created_On_ApplyTemplate()
{
var target = new ItemsPresenter
{
Items = new[] { "foo", "bar" },
};
target.ApplyTemplate();
Assert.Equal(2, target.Panel.GetVisualChildren().Count());
}
}
}
Loading…
Cancel
Save