public void CloseBlock_ReturnsTrueAndReplacesProxyIfThereIsAReplacement()
        {
            // Arrange
            BlockProcessor   dummyBlockProcessor = MarkdigTypesFactory.CreateBlockProcessor();
            Mock <LeafBlock> dummySiblingBlock1  = _mockRepository.Create <LeafBlock>(null);
            Mock <LeafBlock> dummySiblingBlock2  = _mockRepository.Create <LeafBlock>(null);
            var dummyProxyBlock = new DummyProxyBlock(null);
            Mock <ContainerBlock> dummyParentBlock = _mockRepository.Create <ContainerBlock>(null);

            dummyParentBlock.CallBase = true;
            dummyParentBlock.Object.Add(dummySiblingBlock1.Object); // So we can verify replacement position
            dummyParentBlock.Object.Add(dummyProxyBlock);
            dummyParentBlock.Object.Add(dummySiblingBlock2.Object); // So we can verify replacement position
            Mock <Block> dummyReplacementBlock = _mockRepository.Create <Block>(null);
            Mock <ExposedProxyBlockParser <Block, DummyProxyBlock> > testSubject = CreateMockExposedBlockParser();

            testSubject.CallBase = true;
            testSubject.Protected().Setup <Block>("CloseProxy", dummyBlockProcessor, dummyProxyBlock).Returns(dummyReplacementBlock.Object);

            // Act
            bool result = testSubject.Object.ExposedCloseBlock(dummyBlockProcessor, dummyProxyBlock);

            // Assert
            Assert.True(result);
            Assert.Equal(3, dummyParentBlock.Object.Count);
            Assert.Same(dummySiblingBlock1.Object, dummyParentBlock.Object[0]);
            Assert.Same(dummyReplacementBlock.Object, dummyParentBlock.Object[1]); // Replacement must be in position of proxy it replaced
            Assert.Same(dummySiblingBlock2.Object, dummyParentBlock.Object[2]);
        }
        public void CloseBlock_ReturnsFalseIfThereIsNoReplacement()
        {
            // Arrange
            BlockProcessor dummyBlockProcessor = MarkdigTypesFactory.CreateBlockProcessor();
            var            dummyProxyBlock     = new DummyProxyBlock(null);
            Mock <ExposedProxyBlockParser <Block, DummyProxyBlock> > testSubject = CreateMockExposedBlockParser();

            testSubject.CallBase = true;
            testSubject.Protected().Setup <Block>("CloseProxy", dummyBlockProcessor, dummyProxyBlock).Returns((Block)null);

            // Act
            bool result = testSubject.Object.ExposedCloseBlock(dummyBlockProcessor, dummyProxyBlock);

            // Assert
            Assert.False(result);
        }