public void DocumentChanges_Trigger_InvalidateLayout()
        {
            var docView    = Substitute.For <IDocumentView <ITextDocument> >();
            var edit       = Substitute.For <IElementEdit>();
            var parentView = Substitute.For <ITextView <ITextDocument> >();
            var chunk      = new BranchImpl(Substitute.For <ITextNode>(), styleSystem);

            chunk.AddNotify(parentView);
            chunk.Arrange(new Rectangle(10, 20, 200, 50));
            chunk.LayoutInvalid.Should().Be(false);

            chunk.OnNodeStructureChanged(docView, edit);

            chunk.Node.Should().Be(edit.NewElement);
            parentView.Received().InvalidateLayout();
        }
        public void Edit_Events_Update_Nodes()
        {
            var replacementChild1 = CreateView();
            var replacementChild2 = CreateView();

            var factory = doc.ViewFactory;

            factory.CreateFor(replacementChild1.Node, Arg.Any <IStyle>()).Returns(replacementChild1);
            factory.CreateFor(replacementChild2.Node, Arg.Any <IStyle>()).Returns(replacementChild2);

            var child1 = CreateView();
            var child2 = CreateView();
            var child3 = CreateView();

            var branch = new BranchImpl(Substitute.For <ITextNode>(), styleSystem);

            branch.Add(child1);
            branch.Add(child2);
            branch.Add(child3);

            var removedNodesArray = new[] { child2.Node };
            var addedNodesArray   = new[] { replacementChild1.Node, replacementChild2.Node };

            var edit = Substitute.For <IElementEdit>();

            edit.Index.Returns(1);
            edit.NewElement.Returns(Substitute.For <ITextNode>());
            edit.OldElement.Returns(branch.Node);
            edit.RemovedNodes.Returns(removedNodesArray);
            edit.AddedNodes.Returns(addedNodesArray);

            branch.OnNodeStructureChanged(doc, edit);

            branch.Node.Should().Be(edit.NewElement);
            branch.Count.Should().Be(4);
            branch[0].Should().BeSameAs(child1);
            branch[1].Should().BeSameAs(replacementChild1);
            branch[2].Should().BeSameAs(replacementChild2);
            branch[3].Should().BeSameAs(child3);

            factory.Received().CreateFor(replacementChild1.Node, Arg.Any <IStyle>());
            factory.Received().CreateFor(replacementChild2.Node, Arg.Any <IStyle>());
        }