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; var result = 0;
while (logical != null && logical.GetType() != typeof(T)) while (logical != null && !(logical is T))
{ {
++result; ++result;
logical = logical.LogicalParent; 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. // Licensed under the MIT license. See licence.md file in the project root for full license information.
using System; using System;
using System.Collections;
using System.Collections.Generic; using System.Collections.Generic;
using System.Linq; using System.Linq;
using Avalonia.Collections; using Avalonia.Collections;
@ -843,6 +844,54 @@ namespace Avalonia.Controls.UnitTests
Assert.Equal(1, target.SelectedItems.Count); 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) private void ApplyTemplates(TreeView tree)
{ {
tree.ApplyTemplate(); 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() private IList<Node> CreateTestTreeData()
{ {
return new AvaloniaList<Node> 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) private List<string> ExtractItemHeader(TreeView tree, int level)
{ {
return ExtractItemContent(tree.Presenter.Panel, 0, level) return ExtractItemContent(tree.Presenter.Panel, 0, level)
@ -1019,5 +1089,9 @@ namespace Avalonia.Controls.UnitTests
return data is Node; return data is Node;
} }
} }
private class DerivedTreeView : TreeView
{
}
} }
} }

Loading…
Cancel
Save