From 766b194687dedbd0966309cebd7b0a60c503847f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Halil=20=C4=B0brahim=20Kalkan?= Date: Mon, 1 Jun 2020 23:21:30 +0300 Subject: [PATCH] Add test for SortByDependencies --- .../Collections/Generic/AbpListExtensions.cs | 5 ++- .../Generic/AbpListExtensions_Tests.cs | 34 ++++++++++++++++++- 2 files changed, 37 insertions(+), 2 deletions(-) diff --git a/framework/src/Volo.Abp.Core/System/Collections/Generic/AbpListExtensions.cs b/framework/src/Volo.Abp.Core/System/Collections/Generic/AbpListExtensions.cs index a123236a4e..ec7a640a39 100644 --- a/framework/src/Volo.Abp.Core/System/Collections/Generic/AbpListExtensions.cs +++ b/framework/src/Volo.Abp.Core/System/Collections/Generic/AbpListExtensions.cs @@ -180,7 +180,10 @@ namespace System.Collections.Generic /// The type of the members of values. /// A list of objects to sort /// Function to resolve the dependencies - /// + /// + /// Returns a new list ordered by dependencies. + /// If A depends on B, then B will come before than A in the resulting list. + /// public static List SortByDependencies(this IEnumerable source, Func> getDependencies) { /* See: http://www.codeproject.com/Articles/869059/Topological-sorting-in-Csharp diff --git a/framework/test/Volo.Abp.Core.Tests/System/Collections/Generic/AbpListExtensions_Tests.cs b/framework/test/Volo.Abp.Core.Tests/System/Collections/Generic/AbpListExtensions_Tests.cs index 93e2ef5824..9c8926f38a 100644 --- a/framework/test/Volo.Abp.Core.Tests/System/Collections/Generic/AbpListExtensions_Tests.cs +++ b/framework/test/Volo.Abp.Core.Tests/System/Collections/Generic/AbpListExtensions_Tests.cs @@ -1,5 +1,6 @@ using System.Linq; using Shouldly; +using Volo.Abp; using Xunit; namespace System.Collections.Generic @@ -171,5 +172,36 @@ namespace System.Collections.Generic list[1].ShouldBe(42); list[2].ShouldBe(3); } + + [Fact] + public void SortByDependencies() + { + var dependencies = new Dictionary + { + {'A', new[] {'B', 'G'}}, + {'B', new[] {'C', 'E'}}, + {'C', new[] {'D'}}, + {'D', new char[0]}, + {'E', new[] {'C', 'F'}}, + {'F', new[] {'C'}}, + {'G', new[] {'F'}} + }; + + for (int i = 0; i < 3; i++) + { + var list = RandomHelper + .GenerateRandomizedList(new char[] {'A', 'B', 'C', 'D', 'E', 'F', 'G'}); + + list = list.SortByDependencies(c => dependencies[c]); + + foreach (var dependency in dependencies) + { + foreach (var dependedValue in dependency.Value) + { + list.IndexOf(dependency.Key).ShouldBeGreaterThan(list.IndexOf(dependedValue)); + } + } + } + } } -} +} \ No newline at end of file