瀏覽代碼

Added failing test for #2971.

And a passing test for normal TreeView.
Steven Kirk 6 年之前
父節點
當前提交
ea68915de6
共有 1 個文件被更改,包括 74 次插入0 次删除
  1. 74 0
      tests/Avalonia.Controls.UnitTests/TreeViewTests.cs

+ 74 - 0
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
+        {
+        }
     }
 }