public void BuildMany_WithoutNullParentKeys_Successful() { var item1 = new TreeItem(1, -1); var item2 = new TreeItem(2, 1); var result = ReadOnlyTree <int, TreeItem> .BuildAllTrees(new[] { item1, item2 }, item => item.Id, item => item.ParentId.Value).Single(); AssertExtension.AreObjectsValuesEqual(item1, result.Item); }
public void BuildMany_Successful() { var testData = CreateTestData(); var result = ReadOnlyTree <int?, TreeItem> .BuildAllTrees(testData.SetupList, item => item.Id, item => item.ParentId).ToList(); Assert.AreEqual(testData.ExpectedParents.Count, result.Count); for (int i = 0; i < result.Count; i++) { AssertExtension.AreObjectsValuesEqual(testData.ExpectedParents[i], result[i].Item); } }
public void Traverse_Successful() { var testData = CreateTestData(); var trees = ReadOnlyTree <int?, TreeItem> .BuildAllTrees(testData.SetupList, item => item.Id, item => item.ParentId).ToList(); var result = trees.SelectMany(tree => tree.Traverse()).ToList(); Assert.AreEqual(testData.ExpectedTraversalList.Count, result.Count); for (int i = 0; i < result.Count; i++) { AssertExtension.AreObjectsValuesEqual(testData.ExpectedTraversalList[i], result[i]); } }
public void BuildMany_WithDuplicateKeys_IgnoresDuplicates() { var item1 = new TreeItem(1, -1); var item2 = new TreeItem(2, 1); var item3 = new TreeItem(2, -1); var result = ReadOnlyTree <int?, TreeItem> .BuildAllTrees(new[] { item1, item2, item3 }, item => item.Id, item => item.ParentId) .ToList(); Assert.AreEqual(1, result.Count); Assert.AreEqual(item1, result[0].Item); }
public void BuildMany_WithCycles_RemovesCyclesFromResult() { var item1 = new TreeItem(1, 2); var item2 = new TreeItem(2, 1); var item3 = new TreeItem(3, null); var result = ReadOnlyTree <int?, TreeItem> .BuildAllTrees(new[] { item1, item2, item3 }, item => item.Id, item => item.ParentId) .SelectMany(t => t.Traverse()) .ToList(); Assert.AreEqual(1, result.Count); Assert.AreEqual(item3, result[0]); }