From b74c0d316b1632ed83b32a08bae18410fc931733 Mon Sep 17 00:00:00 2001 From: Steven Kirk Date: Fri, 29 Jul 2016 12:35:29 +0200 Subject: [PATCH] Fix off-by-one error in ItemContainerGenerator Fixes #604. --- .../Generators/ItemContainerGenerator.cs | 2 +- tests/Avalonia.Controls.UnitTests/TreeViewTests.cs | 14 +++++++++----- 2 files changed, 10 insertions(+), 6 deletions(-) diff --git a/src/Avalonia.Controls/Generators/ItemContainerGenerator.cs b/src/Avalonia.Controls/Generators/ItemContainerGenerator.cs index 6bbf757106..6f37039734 100644 --- a/src/Avalonia.Controls/Generators/ItemContainerGenerator.cs +++ b/src/Avalonia.Controls/Generators/ItemContainerGenerator.cs @@ -228,7 +228,7 @@ namespace Avalonia.Controls.Generators /// The containers. protected IEnumerable GetContainerRange(int index, int count) { - return _containers.Where(x => x.Key >= index && x.Key <= index + count).Select(x => x.Value); + return _containers.Where(x => x.Key >= index && x.Key < index + count).Select(x => x.Value); } /// diff --git a/tests/Avalonia.Controls.UnitTests/TreeViewTests.cs b/tests/Avalonia.Controls.UnitTests/TreeViewTests.cs index ef8a9ca871..eb0ee5a231 100644 --- a/tests/Avalonia.Controls.UnitTests/TreeViewTests.cs +++ b/tests/Avalonia.Controls.UnitTests/TreeViewTests.cs @@ -31,7 +31,7 @@ namespace Avalonia.Controls.UnitTests ApplyTemplates(target); Assert.Equal(new[] { "Root" }, ExtractItemHeader(target, 0)); - Assert.Equal(new[] { "Child1", "Child2" }, ExtractItemHeader(target, 1)); + Assert.Equal(new[] { "Child1", "Child2", "Child3" }, ExtractItemHeader(target, 1)); Assert.Equal(new[] { "Grandchild2a" }, ExtractItemHeader(target, 2)); } @@ -58,7 +58,7 @@ namespace Avalonia.Controls.UnitTests .OfType() .ToList(); - Assert.Equal(4, items.Count); + Assert.Equal(5, items.Count); Assert.All(items, x => Assert.IsType(x.HeaderPresenter.Child)); } @@ -199,11 +199,11 @@ namespace Avalonia.Controls.UnitTests root.Child = target; ApplyTemplates(target); - Assert.Equal(4, target.ItemContainerGenerator.Index.Items.Count()); + Assert.Equal(5, target.ItemContainerGenerator.Index.Items.Count()); tree[0].Children.RemoveAt(1); - Assert.Equal(2, target.ItemContainerGenerator.Index.Items.Count()); + Assert.Equal(3, target.ItemContainerGenerator.Index.Items.Count()); } [Fact] @@ -297,7 +297,7 @@ namespace Avalonia.Controls.UnitTests ApplyTemplates(target); Assert.Equal(new[] { "Root" }, ExtractItemHeader(target, 0)); - Assert.Equal(new[] { "Child1", "Child2" }, ExtractItemHeader(target, 1)); + Assert.Equal(new[] { "Child1", "Child2", "Child3" }, ExtractItemHeader(target, 1)); Assert.Equal(new[] { "Grandchild2a" }, ExtractItemHeader(target, 2)); // Make sure that the binding to Node.Children does not get collected. @@ -358,6 +358,10 @@ namespace Avalonia.Controls.UnitTests }, }, }, + new Node + { + Value = "Child3", + }, } } };