public static List <Package> OrderDependencies <T>(List <Package> source, Func <Package, IEnumerable <Package> > getDependencies) { var comparer = new PackageComparer(); var visiteds = new Dictionary <Package, bool>(comparer); var sorted = new List <Package>(source.Count); Action <Package> visit = null; visit = item => { if (visiteds.TryGetValue(item, out bool isMarked)) { if (isMarked && !(source.Any(x => x.Dependencies.Contains(item, comparer) && item.Dependencies.Contains(x, comparer)))) { return; } throw new ArgumentException("Dependency specification is invalid, it contains cycles."); } var dependencies = getDependencies(item); if (dependencies != null) { visiteds[item] = false; foreach (var itm in dependencies) { visit(itm); } } visiteds[item] = true; sorted.Add(item); }; foreach (var item in source) { visit(item); } return(sorted); }
public void CorrectlyMapPackageWithOneShape() { var comparer = new PackageComparer(); new PersistenceSpecification<Package>(Context.CurrentSession(), comparer) .CheckProperty(b => b.Name, "ampul") .CheckProperty(p => p.Abbreviation, "amp") .CheckList(p => p.ShapeSet, GetShapesList(), (package, shape) => package.AddShape(shape)) .VerifyTheMappings(); }
public void CorrectlyMapPackageWithOneShape() { var comparer = new PackageComparer(); new PersistenceSpecification <Package>(Context.CurrentSession(), comparer) .CheckProperty(b => b.Name, "ampul") .CheckProperty(p => p.Abbreviation, "amp") .CheckList(p => p.ShapeSet, GetShapesList(), (package, shape) => package.AddShape(shape)) .VerifyTheMappings(); }
public void WillThrowAnErrorWhenDuplicateShapes() { try { var comparer = new PackageComparer(); new PersistenceSpecification <Package>(Context.CurrentSession(), comparer) .CheckProperty(b => b.Name, "ampul") .CheckProperty(p => p.Abbreviation, "amp") .CheckList(p => p.ShapeSet, GetDuplicateShapes(), (package, shape) => package.AddShape(shape)) .VerifyTheMappings(); Assert.Fail(new StackFrame().GetMethod().Name); } catch (System.Exception e) { Assert.IsNotInstanceOfType(e, typeof(AssertFailedException)); } }
public void WillThrowAnErrorWhenDuplicateShapes() { try { var comparer = new PackageComparer(); new PersistenceSpecification<Package>(Context.CurrentSession(), comparer) .CheckProperty(b => b.Name, "ampul") .CheckProperty(p => p.Abbreviation, "amp") .CheckList(p => p.ShapeSet, GetDuplicateShapes(), (package, shape) => package.AddShape(shape)) .VerifyTheMappings(); Assert.Fail(new StackFrame().GetMethod().Name); } catch (System.Exception e) { Assert.IsNotInstanceOfType(e, typeof(AssertFailedException)); } }