From ea68915de6fd4f3cf0bc21e056f24bf32cac1512 Mon Sep 17 00:00:00 2001 From: Steven Kirk Date: Tue, 1 Oct 2019 12:22:34 +0200 Subject: [PATCH] Added failing test for #2971. And a passing test for normal TreeView. --- .../TreeViewTests.cs | 74 +++++++++++++++++++ 1 file changed, 74 insertions(+) diff --git a/tests/Avalonia.Controls.UnitTests/TreeViewTests.cs b/tests/Avalonia.Controls.UnitTests/TreeViewTests.cs index f51a50c0d5..6c9f0f4f57 100644 --- a/tests/Avalonia.Controls.UnitTests/TreeViewTests.cs +++ b/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 CreateTestTreeData() { return new AvaloniaList @@ -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 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 + { + } } }