Browse Source

Merge pull request #3050 from AvaloniaUI/fixes/2971-treeview-inheritance

Don't test tree view item type by comparing GetType().
pull/3052/head
Steven Kirk 7 years ago
committed by GitHub
parent
commit
54299c381a
No known key found for this signature in database GPG Key ID: 4AEE18F83AFDEB23
  1. 2
      src/Avalonia.Controls/TreeViewItem.cs
  2. 74
      tests/Avalonia.Controls.UnitTests/TreeViewTests.cs

2
src/Avalonia.Controls/TreeViewItem.cs

@ -173,7 +173,7 @@ namespace Avalonia.Controls
{
var result = 0;
while (logical != null && logical.GetType() != typeof(T))
while (logical != null && !(logical is T))
{
++result;
logical = logical.LogicalParent;

74
tests/Avalonia.Controls.UnitTests/TreeViewTests.cs

@ -2,6 +2,7 @@
// Licensed under the MIT license. See licence.md file in the project root for full license information.
using System;
using System.Collections;
using System.Collections.Generic;
using System.Linq;
using Avalonia.Collections;
@ -843,6 +844,54 @@ namespace Avalonia.Controls.UnitTests
Assert.Equal(1, target.SelectedItems.Count);
}
[Fact]
public void TreeViewItems_Level_Should_Be_Set()
{
var tree = CreateTestTreeData();
var target = new TreeView
{
Template = CreateTreeViewTemplate(),
Items = tree,
};
var visualRoot = new TestRoot();
visualRoot.Child = target;
CreateNodeDataTemplate(target);
ApplyTemplates(target);
ExpandAll(target);
Assert.Equal(0, GetItem(target, 0).Level);
Assert.Equal(1, GetItem(target, 0, 0).Level);
Assert.Equal(1, GetItem(target, 0, 1).Level);
Assert.Equal(1, GetItem(target, 0, 2).Level);
Assert.Equal(2, GetItem(target, 0, 1, 0).Level);
}
[Fact]
public void TreeViewItems_Level_Should_Be_Set_For_Derived_TreeView()
{
var tree = CreateTestTreeData();
var target = new DerivedTreeView
{
Template = CreateTreeViewTemplate(),
Items = tree,
};
var visualRoot = new TestRoot();
visualRoot.Child = target;
CreateNodeDataTemplate(target);
ApplyTemplates(target);
ExpandAll(target);
Assert.Equal(0, GetItem(target, 0).Level);
Assert.Equal(1, GetItem(target, 0, 0).Level);
Assert.Equal(1, GetItem(target, 0, 1).Level);
Assert.Equal(1, GetItem(target, 0, 2).Level);
Assert.Equal(2, GetItem(target, 0, 1, 0).Level);
}
private void ApplyTemplates(TreeView tree)
{
tree.ApplyTemplate();
@ -862,6 +911,19 @@ namespace Avalonia.Controls.UnitTests
}
}
private TreeViewItem GetItem(TreeView target, params int[] indexes)
{
var c = (ItemsControl)target;
foreach (var index in indexes)
{
var item = ((IList)c.Items)[index];
c = (ItemsControl)target.ItemContainerGenerator.Index.ContainerFromItem(item);
}
return (TreeViewItem)c;
}
private IList<Node> CreateTestTreeData()
{
return new AvaloniaList<Node>
@ -929,6 +991,14 @@ namespace Avalonia.Controls.UnitTests
});
}
private void ExpandAll(TreeView tree)
{
foreach (var i in tree.ItemContainerGenerator.Containers)
{
tree.ExpandSubTree((TreeViewItem)i.ContainerControl);
}
}
private List<string> ExtractItemHeader(TreeView tree, int level)
{
return ExtractItemContent(tree.Presenter.Panel, 0, level)
@ -1019,5 +1089,9 @@ namespace Avalonia.Controls.UnitTests
return data is Node;
}
}
private class DerivedTreeView : TreeView
{
}
}
}

Loading…
Cancel
Save