public void TryOpenBlock_ReturnsBlockStateNoneIfLineHasCodeIndent()
        {
            // Arrange
            BlockProcessor dummyBlockProcessor = MarkdigTypesFactory.CreateBlockProcessor();

            dummyBlockProcessor.Column = 4;                   // Code indent
            dummyBlockProcessor.Line   = new StringSlice(""); // To avoid null reference exception
            ExposedFencedBlockParser testSubject = CreateExposedFencedBlockParser();

            // Act
            BlockState result = testSubject.ExposedTryOpenBlock(dummyBlockProcessor);

            // Assert
            Assert.Equal(BlockState.None, result);
        }
        public void LineContainsClosingFence_ReturnsTrueIfLineContainsAClosingFenceAndFalseOtherwise(bool dummyMatchingFencesRequired,
                                                                                                     string dummyLineText,
                                                                                                     char dummyFenceChar,
                                                                                                     int dummyOpeningFenceCharCount,
                                                                                                     bool expectedResult)
        {
            // Arrange
            var dummyLine = new StringSlice(dummyLineText);
            ExposedFencedBlockParser testSubject = CreateExposedFencedBlockParser(fenceChar: dummyFenceChar, matchingFencesRequired: dummyMatchingFencesRequired);

            // Act
            bool result = testSubject.LineContainsClosingFence(dummyLine, dummyOpeningFenceCharCount);

            // Assert
            Assert.Equal(expectedResult, result);
        }
        public void LineContainsOpeningFence_ReturnsTrueIfLineContainsAnOpeningFenceAndFalseOtherwise(FenceTrailingCharacters dummyFenceTrailingCharacters,
                                                                                                      string dummyLineText,
                                                                                                      char dummyFenceChar,
                                                                                                      bool expectedContains,
                                                                                                      int expectedFenceCharCount)
        {
            // Arrange
            var dummyLine = new StringSlice(dummyLineText);
            ExposedFencedBlockParser testSubject = CreateExposedFencedBlockParser(fenceChar: dummyFenceChar, fenceTrailingCharacters: dummyFenceTrailingCharacters);

            // Act
            bool resultContains = testSubject.LineContainsOpeningFence(dummyLine, out int resultFenceCharCount);

            // Assert
            Assert.Equal(expectedContains, resultContains);
            Assert.Equal(expectedFenceCharCount, resultFenceCharCount);
        }
        public void CloseProxy_CreatesFencedBlock()
        {
            // Arrange
            Mock <DummyProxyFencedBlock> dummyProxyFencedBlock = _mockRepository.Create <DummyProxyFencedBlock>(null);
            BlockProcessor dummyBlockProcessor = MarkdigTypesFactory.CreateBlockProcessor();
            Mock <Block>   dummyBlock          = _mockRepository.Create <Block>(null);
            Mock <IFencedBlockFactory <Block, DummyProxyFencedBlock> > mockFencedBlockFactory = _mockRepository.Create <IFencedBlockFactory <Block, DummyProxyFencedBlock> >();

            mockFencedBlockFactory.Setup(f => f.Create(dummyProxyFencedBlock.Object, dummyBlockProcessor)).Returns(dummyBlock.Object);
            ExposedFencedBlockParser testSubject = CreateExposedFencedBlockParser(mockFencedBlockFactory.Object);

            // Act
            Block result = testSubject.ExposedCloseProxy(dummyBlockProcessor, dummyProxyFencedBlock.Object);

            // Assert
            _mockRepository.VerifyAll();
            Assert.Same(dummyBlock.Object, result);
        }
        public void UpdateLineStart_UpdatesLineStart(string dummyLineText, int dummyOpeningFenceIndent, int dummyLineIndent, int expectedResult)
        {
            // Arrange
            var            dummyLine           = new StringSlice(dummyLineText);
            BlockProcessor dummyBlockProcessor = MarkdigTypesFactory.CreateBlockProcessor();

            dummyBlockProcessor.Line   = dummyLine;
            dummyBlockProcessor.Column = dummyLineIndent;
            Mock <DummyProxyFencedBlock> mockProxyFencedBlock = _mockRepository.Create <DummyProxyFencedBlock>(null);

            mockProxyFencedBlock.Setup(p => p.OpeningFenceIndent).Returns(dummyOpeningFenceIndent);
            ExposedFencedBlockParser testSubject = CreateExposedFencedBlockParser();

            // Act
            testSubject.UpdateLineStart(dummyBlockProcessor, mockProxyFencedBlock.Object);

            // Assert
            _mockRepository.VerifyAll();
            Assert.Equal(expectedResult, dummyBlockProcessor.Indent);
        }