public void TryOpenBlock_ThrowsBlockExceptionIfAnExceptionIsThrownWhileCreatingProxyFencedBlock()
        {
            // Arrange
            int            dummyFenceCharCount = 3;
            const int      dummyLineIndex      = 6;
            const int      dummyIndent         = 2;
            const string   dummyText           = "dummyText";
            BlockProcessor dummyBlockProcessor = MarkdigTypesFactory.CreateBlockProcessor();

            dummyBlockProcessor.Line      = new StringSlice(dummyText);
            dummyBlockProcessor.Column    = dummyIndent;
            dummyBlockProcessor.LineIndex = dummyLineIndex;
            DummyProxyFencedBlock dummyProxyFencedBlock = _mockRepository.Create <DummyProxyFencedBlock>(null).Object;
            Mock <IFencedBlockFactory <Block, DummyProxyFencedBlock> > mockFencedBlockFactory = _mockRepository.Create <IFencedBlockFactory <Block, DummyProxyFencedBlock> >();
            var dummyException = new Exception();
            Mock <ExposedFencedBlockParser> mockTestSubject = CreateMockExposedFencedBlockParser(mockFencedBlockFactory.Object);

            mockFencedBlockFactory.
            Setup(f => f.CreateProxyFencedBlock(dummyIndent, dummyFenceCharCount, dummyBlockProcessor, mockTestSubject.Object)).
            Throws(dummyException);
            mockTestSubject.CallBase = true;
            mockTestSubject.Setup(t => t.LineContainsOpeningFence(It.Is <StringSlice>(s => s.Text == dummyText), out dummyFenceCharCount)).Returns(true);

            // Act and assert
            BlockException result = Assert.Throws <BlockException>(() => mockTestSubject.Object.ExposedTryOpenBlock(dummyBlockProcessor));

            Assert.Equal(string.Format(Strings.BlockException_BlockException_InvalidBlock, nameof(Block), dummyLineIndex + 1, dummyIndent,
                                       Strings.BlockException_Shared_ExceptionOccurredWhileCreatingBlock),
                         result.Message);
            Assert.Same(dummyException, result.InnerException);
            _mockRepository.VerifyAll();
        }
        public void TryOpenBlock_ReturnsContinueDiscardAndAddsNewProxyFencedBlockToNewBlocksIfLineContainsAnOpeningFence()
        {
            // Arrange
            int            dummyFenceCharCount = 3;
            const int      dummyIndent         = 2;
            const string   dummyText           = "dummyText";
            BlockProcessor dummyBlockProcessor = MarkdigTypesFactory.CreateBlockProcessor();

            dummyBlockProcessor.Line   = new StringSlice(dummyText);
            dummyBlockProcessor.Column = dummyIndent;
            DummyProxyFencedBlock dummyProxyFencedBlock = _mockRepository.Create <DummyProxyFencedBlock>(null).Object;
            Mock <IFencedBlockFactory <Block, DummyProxyFencedBlock> > mockFencedBlockFactory = _mockRepository.Create <IFencedBlockFactory <Block, DummyProxyFencedBlock> >();
            Mock <ExposedFencedBlockParser> mockTestSubject = CreateMockExposedFencedBlockParser(mockFencedBlockFactory.Object);

            mockFencedBlockFactory.
            Setup(f => f.CreateProxyFencedBlock(dummyIndent, dummyFenceCharCount, dummyBlockProcessor, mockTestSubject.Object)).
            Returns(dummyProxyFencedBlock);
            mockTestSubject.CallBase = true;
            mockTestSubject.Setup(t => t.LineContainsOpeningFence(It.Is <StringSlice>(s => s.Text == dummyText), out dummyFenceCharCount)).Returns(true);

            // Act
            BlockState result = mockTestSubject.Object.ExposedTryOpenBlock(dummyBlockProcessor);

            // Assert
            _mockRepository.VerifyAll();
            Assert.Equal(BlockState.ContinueDiscard, result);
            Assert.Same(dummyProxyFencedBlock, dummyBlockProcessor.NewBlocks.Peek());
        }