public void Calculate_WithChildrenArea_Works() { var model = _modelBuilder .AddNodes("A", "B") .AddRelationships("A->B") .AddChildNodes("B", "C", "D") .AddRelationships("C->D") .Model; var diagramBuilder = new DiagramBuilder(model) .AddNodes(("A", 1, 1), ("B", 2, 2)) .AddChildNodes("B", ("C", 3, 3), ("D", 4, 4)) .AddAllRelationships(); var rootLayoutInfo = SetUpRootLayoutInfo(diagramBuilder, ("A", 0, 0), ("B", 1, 1)); var nodeBLayoutInfo = SetUpNodeLayoutInfo(diagramBuilder, "B", ("C", 0, 0), ("D", 1, 1)); var diagramLayoutInfo = CreateLayoutAlgorithm().Calculate(diagramBuilder.Diagram); diagramLayoutInfo.RootNodes.Should().BeEquivalentTo(rootLayoutInfo.Nodes); var nodeBResult = diagramLayoutInfo.RootNodes.First(i => i.Node.Name == "B"); nodeBResult.ChildrenArea.Nodes.Should().BeEquivalentTo(nodeBLayoutInfo.Nodes); // C+D rect should be: from C.TopLeft(0,0) to D.TopLeft(1,1) + D.PayloadAreaSize(4,4) nodeBResult.ChildrenArea.Rect.Should().Be(new Rect2D(0, 0, 5, 5)); // B rect should be B.TopLeft(1,1) + B.Size(5,7) which comes from stacking B.PayloadAreaSize(2,2) and B.ChildrenAreaSize(5,5) nodeBResult.Rect.Should().Be(new Rect2D(1, 1, 6, 8)); }
public void Calculate_RootNodesOnly_Works() { var model = _modelBuilder .AddNodes("A", "B") .AddRelationships("A->B") .Model; var diagramBuilder = new DiagramBuilder(model) .AddNodes(("A", 1, 1), ("B", 2, 2)) .AddAllRelationships(); var rootLayoutInfo = SetUpRootLayoutInfo(diagramBuilder, ("A", 0, 0), ("B", 1, 1)); var diagramLayoutInfo = CreateLayoutAlgorithm().Calculate(diagramBuilder.Diagram); diagramLayoutInfo.RootNodes.Should().BeEquivalentTo(rootLayoutInfo.Nodes); }