예제 #1
0
        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);
        }
예제 #2
0
 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();
 }
예제 #3
0
        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();
        }
예제 #4
0
 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));
     }
 }
예제 #5
0
 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));
     }
 }