public void NormalizeCiteLinkIndex_ThrowsBlockExceptionIfCiteLinkIndexIsInvalid(int dummyNumLinks, int dummyCiteLinkIndex)
        {
            // Arrange
            const int       dummyLineIndex       = 5;
            const int       dummyColumn          = 2;
            FlexiQuoteBlock dummyFlexiQuoteBlock = CreateFlexiQuoteBlock(citeLink: dummyCiteLinkIndex);

            dummyFlexiQuoteBlock.Column = dummyColumn;
            dummyFlexiQuoteBlock.Line   = dummyLineIndex;
            FlexiQuoteBlockFactory testSubject = CreateFlexiQuoteBlockFactory();

            // Act and assert
            BlockException result = Assert.Throws <BlockException>(() => testSubject.NormalizeCiteLinkIndex(dummyNumLinks, dummyFlexiQuoteBlock));

            Assert.Equal(string.Format(Strings.BlockException_BlockException_InvalidBlock,
                                       nameof(FlexiQuoteBlock),
                                       dummyLineIndex + 1,
                                       dummyColumn,
                                       Strings.BlockException_BlockException_ExceptionOccurredWhileProcessingBlock),
                         result.Message);
            var resultOptionsException = result.InnerException as OptionsException;

            Assert.IsType <OptionsException>(resultOptionsException);
            Assert.Equal(string.Format(Strings.OptionsException_OptionsException_InvalidOption,
                                       nameof(IFlexiQuoteBlockOptions.CiteLink),
                                       string.Format(Strings.OptionsException_FlexiQuoteBlockFactory_UnableToNormalize, dummyCiteLinkIndex, dummyNumLinks)),
                         resultOptionsException.Message);
        }
        public void ExtractCiteUrl_ExtractsCiteUrlIfSuccessful()
        {
            // Arrange
            const string dummyUrl = "dummyLink";
            var          dummyAuthorLinkInline = new LinkInline();
            var          dummyCiteLinkInline   = new LinkInline(dummyUrl, null);
            var          dummyContainerInline  = new ContainerInline();

            dummyContainerInline.
            AppendChild(dummyAuthorLinkInline).
            AppendChild(dummyCiteLinkInline);
            LeafBlock       dummyCitationBlock   = _mockRepository.Create <LeafBlock>(null).Object;
            InlineProcessor dummyInlineProcessor = MarkdigTypesFactory.CreateInlineProcessor();

            dummyInlineProcessor.ProcessInlineLeaf(dummyCitationBlock); // Sets InlineProcessor.Block to dummyCitationBlock
            dummyCitationBlock.Inline = dummyContainerInline;           // Replace container created in ProcessInlineLeaf
            FlexiQuoteBlock dummyFlexiQuoteBlock = CreateFlexiQuoteBlock();

            dummyFlexiQuoteBlock.Add(dummyCitationBlock);
            Mock <FlexiQuoteBlockFactory> mockTestSubject = CreateMockFlexiQuoteBlockFactory();

            mockTestSubject.Setup(m => m.NormalizeCiteLinkIndex(2, dummyFlexiQuoteBlock)).Returns(1);

            // Act
            mockTestSubject.Object.ExtractCiteUrl(dummyInlineProcessor, null);

            // Assert
            _mockRepository.VerifyAll();
            Assert.Equal(dummyUrl, dummyFlexiQuoteBlock.CiteUrl);
        }
        public void NormalizeCiteLinkIndex_NormalizesCiteLinkIndexIfSuccessful(int dummyNumLinks, int dummyCiteLinkIndex, int expectedCiteLinkIndex)
        {
            // Arrange
            FlexiQuoteBlock        dummyFlexiQuoteBlock = CreateFlexiQuoteBlock(citeLink: dummyCiteLinkIndex);
            FlexiQuoteBlockFactory testSubject          = CreateFlexiQuoteBlockFactory();

            // Act
            int result = testSubject.NormalizeCiteLinkIndex(dummyNumLinks, dummyFlexiQuoteBlock);

            // Assert
            Assert.Equal(expectedCiteLinkIndex, result);
        }
Beispiel #4
0
        public void WriteBlock_WritesBlock(FlexiQuoteBlock dummyFlexiQuoteBlock,
                                           string expectedResult)
        {
            // Arrange
            var dummyStringWriter = new StringWriter();
            var dummyHtmlRenderer = new HtmlRenderer(dummyStringWriter);
            ExposedFlexiQuoteBlockRenderer testSubject = CreateExposedFlexiQuoteBlockRenderer();

            // Act
            testSubject.ExposedWriteBlock(dummyHtmlRenderer, dummyFlexiQuoteBlock);
            string result = dummyStringWriter.ToString();

            // Assert
            Assert.Equal(expectedResult, result, ignoreLineEndingDifferences: true);
        }
        public void Create_CreatesFlexiQuoteBlock()
        {
            // Arrange
            const int      dummyColumn            = 2;
            var            dummyLine              = new StringSlice("dummyText", 3, 8);
            const string   dummyBlockName         = "dummyBlockName";
            const string   dummyResolvedBlockName = "dummyResolvedBlockName";
            const string   dummyIcon              = "dummyIcon";
            const int      dummyCiteLink          = -3;
            BlockProcessor dummyBlockProcessor    = MarkdigTypesFactory.CreateBlockProcessor();

            dummyBlockProcessor.Column = dummyColumn;
            dummyBlockProcessor.Line   = dummyLine;
            Mock <BlockParser> dummyBlockParser = _mockRepository.Create <BlockParser>();
            var dummyAttributes = new ReadOnlyDictionary <string, string>(new Dictionary <string, string>());
            Mock <IFlexiQuoteBlockOptions> mockFlexiQuoteBlockOptions = _mockRepository.Create <IFlexiQuoteBlockOptions>();

            mockFlexiQuoteBlockOptions.Setup(f => f.BlockName).Returns(dummyBlockName);
            mockFlexiQuoteBlockOptions.Setup(f => f.Icon).Returns(dummyIcon);
            mockFlexiQuoteBlockOptions.Setup(f => f.CiteLink).Returns(dummyCiteLink);
            mockFlexiQuoteBlockOptions.Setup(f => f.Attributes).Returns(dummyAttributes);
            Mock <IOptionsService <IFlexiQuoteBlockOptions, IFlexiQuoteBlocksExtensionOptions> > mockOptionsService = _mockRepository.
                                                                                                                      Create <IOptionsService <IFlexiQuoteBlockOptions, IFlexiQuoteBlocksExtensionOptions> >();

            mockOptionsService.Setup(f => f.CreateOptions(dummyBlockProcessor)).
            Returns((mockFlexiQuoteBlockOptions.Object, (IFlexiQuoteBlocksExtensionOptions)null));
            Mock <FlexiQuoteBlockFactory> mockTestSubject = CreateMockFlexiQuoteBlockFactory(mockOptionsService.Object);

            mockTestSubject.CallBase = true;
            mockTestSubject.Setup(t => t.ResolveBlockName(dummyBlockName)).Returns(dummyResolvedBlockName);

            // Act
            FlexiQuoteBlock result = mockTestSubject.Object.Create(dummyBlockProcessor, dummyBlockParser.Object);

            // TODO how can we verify that ProcessInlineEnd event handler is added? Due to language restrictions, no simple solution, got to get Block.OnProcessInlinesEnd to fire
            // Assert
            _mockRepository.VerifyAll();
            Assert.Equal(dummyResolvedBlockName, result.BlockName);
            Assert.Equal(dummyIcon, result.Icon);
            Assert.Equal(dummyCiteLink, result.CiteLink);
            Assert.Same(dummyAttributes, result.Attributes);
            Assert.Same(dummyBlockParser.Object, result.Parser);
            Assert.Equal(dummyColumn, result.Column);
            Assert.Equal(dummyLine.Start, result.Span.Start);
            Assert.Equal(0, result.Span.End);
        }
Beispiel #6
0
        private static FlexiQuoteBlock CreateFlexiQuoteBlock(string blockName = default,
                                                             string icon      = default,
                                                             int citeLink     = default,
                                                             ReadOnlyDictionary <string, string> attributes = default,
                                                             BlockParser blockParser       = default,
                                                             string citeUrl                = default,
                                                             PlainContainerBlock quotePart = default,
                                                             PlainLeafBlock citationPart   = default)
        {
            var result = new FlexiQuoteBlock(blockName, icon, citeLink, attributes, blockParser)
            {
                quotePart ?? new PlainContainerBlock(null), citationPart ?? new PlainLeafBlock(null)
            };

            result.CiteUrl = citeUrl;

            return(result);
        }
Beispiel #7
0
        public void WriteBlock_OnlyWritesChildrenIfEnableHtmlForBlockIsFalse()
        {
            // Arrange
            const string dummyQuote = "dummyQuote";
            var          dummyQuoteContainerInline = new ContainerInline();

            dummyQuoteContainerInline.AppendChild(new LiteralInline(dummyQuote));
            var dummyQuoteParagraphBlock = new ParagraphBlock()
            {
                Inline = dummyQuoteContainerInline
            };
            var dummyQuotePartBlock = new PlainContainerBlock(null);

            dummyQuotePartBlock.Add(dummyQuoteParagraphBlock);
            const string dummyCitation = "dummyCitation";
            var          dummyCitationContainerInline = new ContainerInline();

            dummyCitationContainerInline.AppendChild(new LiteralInline(dummyCitation));
            var dummyCitationPartBlock = new PlainLeafBlock(null);

            dummyCitationPartBlock.Inline = dummyCitationContainerInline;
            FlexiQuoteBlock dummyFlexiQuoteBlock = CreateFlexiQuoteBlock(quotePart: dummyQuotePartBlock, citationPart: dummyCitationPartBlock);
            var             dummyStringWriter    = new StringWriter();
            var             dummyHtmlRenderer    = new HtmlRenderer(dummyStringWriter)
            {
                EnableHtmlForBlock = false
            };
            ExposedFlexiQuoteBlockRenderer testSubject = CreateExposedFlexiQuoteBlockRenderer();

            // Act
            testSubject.ExposedWriteBlock(dummyHtmlRenderer, dummyFlexiQuoteBlock);
            string result = dummyStringWriter.ToString();

            // Assert
            Assert.Equal($"{dummyQuote}\n{dummyCitation}\n", result, ignoreLineEndingDifferences: true);
        }
Beispiel #8
0
 public void ExposedWriteBlock(HtmlRenderer htmlRenderer, FlexiQuoteBlock flexiQuoteBlock)
 {
     WriteBlock(htmlRenderer, flexiQuoteBlock);
 }