Steven Kirk 6 years ago
parent
commit
fcaa250c72
  1. 18
      src/Avalonia.Controls/Utils/SelectionTreeHelper.cs
  2. 31
      tests/Avalonia.Controls.UnitTests/SelectionModelTests.cs

18
src/Avalonia.Controls/Utils/SelectionTreeHelper.cs

@ -132,15 +132,21 @@ namespace Avalonia.Controls.Utils
private static bool IsSubSet(IndexPath path, IndexPath subset)
{
bool isSubset = true;
for (int i = 0; i < subset.GetSize(); i++)
var subsetSize = subset.GetSize();
if (path.GetSize() < subsetSize)
{
isSubset = path.GetAt(i) == subset.GetAt(i);
if (!isSubset)
break;
return false;
}
for (int i = 0; i < subsetSize; i++)
{
if (path.GetAt(i) != subset.GetAt(i))
{
return false;
}
}
return isSubset;
return true;
}
private static IndexPath StartPath(IndexPath path, int length)

31
tests/Avalonia.Controls.UnitTests/SelectionModelTests.cs

@ -898,6 +898,37 @@ namespace Avalonia.Controls.UnitTests
});
}
[Fact]
public void SelectRangeRegressionTest()
{
RunOnUIThread.Execute(() =>
{
var selectionModel = new SelectionModel()
{
Source = CreateNestedData(1, 2, 3)
};
// length of start smaller than end used to cause an out of range error.
selectionModel.SelectRange(IndexPath.CreateFrom(0), IndexPath.CreateFrom(1, 1));
ValidateSelection(selectionModel,
new List<IndexPath>()
{
Path(0, 0),
Path(0, 1),
Path(0, 2),
Path(0),
Path(1, 0),
Path(1, 1)
},
new List<IndexPath>()
{
Path(),
Path(1)
},
1 /* selectedInnerNodes */);
});
}
[Fact]
public void Disposing_Unhooks_CollectionChanged_Handlers()

Loading…
Cancel
Save