Exemple #1
0
        public void Undo_ReplacesProxyTableBlockWithAParagraphBlock()
        {
            // Arrange
            const string dummyText            = "dummyText";
            var          dummyProxyTableBlock = new ProxyTableBlock(null);

            dummyProxyTableBlock.Lines = new StringLineGroup(dummyText);
            BlockParser    dummyBlockParser = _mockRepository.Create <BlockParser>().Object;
            ContainerBlock dummyParent      = _mockRepository.Create <ContainerBlock>(dummyBlockParser).Object; // Must specify block parser since we're calling ProcessLine later

            dummyParent.Add(dummyProxyTableBlock);                                                              // Assigns dummyParent to dummyProxyTableBlock.Parent
            BlockProcessor dummyBlockProcessor = MarkdigTypesFactory.CreateBlockProcessor();

            dummyBlockProcessor.Open(dummyParent);
            dummyBlockProcessor.Open(dummyProxyTableBlock);
            ExposedFlexiTableBlockParser testSubject = CreateExposedFlexiTableBlockParser();

            // Act
            testSubject.ExposedUndo(dummyBlockProcessor, dummyProxyTableBlock);

            // Assert
            Assert.Single(dummyParent);
            var resultParagraphBlock = dummyParent[0] as ParagraphBlock;

            Assert.NotNull(resultParagraphBlock);
            Assert.Equal(dummyText, resultParagraphBlock.Lines.ToString());
            // Verify that ParagraphBlock remains open
            dummyBlockProcessor.ProcessLine(new StringSlice(dummyText));
            Assert.Equal($"{dummyText}\n{dummyText}", resultParagraphBlock.Lines.ToString());
        }
        public void CreateFlexiTableBlock_ThrowsOptionsExceptionIfTypeIsNotUnresponsiveAndTableHasMultipleHeaderRows(FlexiTableType dummyType,
                                                                                                                     Row[] dummyRows)
        {
            // Arrange
            const int      dummyNumColumns        = 6;
            var            dummyColumnDefinitions = new List <ColumnDefinition>();
            var            dummyAttributes        = new ReadOnlyDictionary <string, string>(new Dictionary <string, string>());
            BlockProcessor dummyBlockProcessor    = MarkdigTypesFactory.CreateBlockProcessor();
            var            dummyProxyTableBlock   = new ProxyTableBlock(null);

            foreach (Row row in dummyRows)
            {
                dummyProxyTableBlock.Rows.Add(row);
            }
            dummyProxyTableBlock.ColumnDefinitions = dummyColumnDefinitions;
            dummyProxyTableBlock.NumColumns        = dummyNumColumns;
            Mock <FlexiTableBlockFactory> mockTestSubject = CreateMockFlexiTableBlockFactory();

            mockTestSubject.CallBase = true;
            mockTestSubject.
            Setup(t => t.CreateFlexiTableRowBlock(dummyType, It.IsAny <BlockProcessor>(), dummyColumnDefinitions, dummyNumColumns, 0, dummyRows[0], dummyRows[0].IsHeaderRow)).
            Returns(new FlexiTableRowBlock(true));

            // Act and assert
            OptionsException result = Assert.Throws <OptionsException>(() => mockTestSubject.Object.CreateFlexiTableBlock(default, dummyType, dummyAttributes, dummyProxyTableBlock, dummyBlockProcessor));
Exemple #3
0
        public void Create_CreatesFlexiSectionBlockAndUpdatesOpenFlexiSectionBlocks()
        {
            // Arrange
            var          dummyLine                                  = new StringSlice("dummyLine", 4, 8);
            const int    dummyColumn                                = 4;
            const string dummyBlockName                             = "dummyBlockName";
            const string dummyResolvedBlockName                     = "dummyResolvedBlockName";
            const SectioningContentElement dummyElement             = SectioningContentElement.Aside;
            const string dummyLinkIcon                              = "dummyLinkIcon";
            const FlexiSectionBlockRenderingMode dummyRenderingMode = FlexiSectionBlockRenderingMode.Classic;
            const int dummyLevel      = 5;
            var       dummyAttributes = new ReadOnlyDictionary <string, string>(new Dictionary <string, string>());
            Mock <IFlexiSectionBlockOptions> dummyFlexiSectionBlockOptions = _mockRepository.Create <IFlexiSectionBlockOptions>();

            dummyFlexiSectionBlockOptions.Setup(f => f.BlockName).Returns(dummyBlockName);
            dummyFlexiSectionBlockOptions.Setup(f => f.Element).Returns(dummyElement);
            dummyFlexiSectionBlockOptions.Setup(f => f.RenderingMode).Returns(dummyRenderingMode);
            dummyFlexiSectionBlockOptions.Setup(f => f.LinkIcon).Returns(dummyLinkIcon);
            dummyFlexiSectionBlockOptions.Setup(f => f.Attributes).Returns(dummyAttributes);
            Mock <BlockParser> dummyBlockParser    = _mockRepository.Create <BlockParser>();
            BlockProcessor     dummyBlockProcessor = MarkdigTypesFactory.CreateBlockProcessor();

            dummyBlockProcessor.Column = dummyColumn;
            dummyBlockProcessor.Line   = dummyLine;
            var dummyFlexiSectionHeadingBlock = new FlexiSectionHeadingBlock(null);
            Mock <IFlexiSectionHeadingBlockFactory> mockFlexiSectionHeadingBlockFactory = _mockRepository.Create <IFlexiSectionHeadingBlockFactory>();

            mockFlexiSectionHeadingBlockFactory.
            Setup(f => f.Create(dummyBlockProcessor, dummyFlexiSectionBlockOptions.Object, dummyBlockParser.Object)).
            Returns(dummyFlexiSectionHeadingBlock);
            Mock <IOptionsService <IFlexiSectionBlockOptions, IFlexiSectionBlocksExtensionOptions> > mockOptionsService = _mockRepository.Create <IOptionsService <IFlexiSectionBlockOptions, IFlexiSectionBlocksExtensionOptions> >();

            mockOptionsService.Setup(o => o.CreateOptions(dummyBlockProcessor)).Returns((dummyFlexiSectionBlockOptions.Object, null));
            Mock <FlexiSectionBlockFactory> mockTestSubject = CreateMockFlexiSectionBlockFactory(mockOptionsService.Object, mockFlexiSectionHeadingBlockFactory.Object);

            mockTestSubject.CallBase = true;
            mockTestSubject.Setup(t => t.ValidateLevel(dummyLevel));
            mockTestSubject.Setup(t => t.ResolveBlockName(dummyBlockName)).Returns(dummyResolvedBlockName);
            mockTestSubject.Setup(t => t.ValidateElement(dummyElement));
            mockTestSubject.Setup(t => t.ValidateRenderingMode(dummyRenderingMode));
            mockTestSubject.Setup(t => t.UpdateOpenFlexiSectionBlocks(dummyBlockProcessor, It.IsAny <FlexiSectionBlock>()));

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

            // Assert
            _mockRepository.VerifyAll();
            Assert.Equal(dummyResolvedBlockName, result.BlockName);
            Assert.Equal(dummyElement, result.Element);
            Assert.Equal(dummyLinkIcon, result.LinkIcon);
            Assert.Equal(dummyRenderingMode, result.RenderingMode);
            Assert.Equal(dummyLevel, result.Level);
            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(dummyLine.End, result.Span.End);
            Assert.Single(result);
            Assert.Same(dummyFlexiSectionHeadingBlock, result[0]);
        }
        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);
        }
Exemple #5
0
        public void CreateProxyFencedBlock_CreatesProxyFencedBlock()
        {
            // Arrange
            const int      dummyOpeningFenceIndent    = 5;
            const int      dummyOpeningFenceCharCount = 6;
            const int      dummyColumn         = 2;
            const int      dummyLineStart      = 7;
            const int      dummyLineEnd        = 99;
            BlockProcessor dummyBlockProcessor = MarkdigTypesFactory.CreateBlockProcessor();

            dummyBlockProcessor.Column = dummyColumn;
            dummyBlockProcessor.Line   = new StringSlice("", dummyLineStart, dummyLineEnd);
            Mock <BlockParser>    dummyBlockParser = _mockRepository.Create <BlockParser>();
            FlexiCodeBlockFactory testSubject      = CreateFlexiCodeBlockFactory();

            // Act
            ProxyFencedLeafBlock result = testSubject.CreateProxyFencedBlock(dummyOpeningFenceIndent,
                                                                             dummyOpeningFenceCharCount,
                                                                             dummyBlockProcessor,
                                                                             dummyBlockParser.Object);

            // Assert
            Assert.Equal(dummyOpeningFenceIndent, result.OpeningFenceIndent);
            Assert.Equal(dummyOpeningFenceCharCount, result.OpeningFenceCharCount);
            Assert.Equal(dummyColumn, result.Column);
            Assert.Equal(dummyLineStart, result.Span.Start);
            Assert.Equal(dummyLineEnd, result.Span.End);
            Assert.Same(dummyBlockParser.Object, result.Parser);
            Assert.Equal(nameof(FlexiCodeBlock), result.MainTypeName);
        }
        public void Create_CreatesFlexiOptionsBlockAndAddsItToDocumentData()
        {
            // Arrange
            const int          dummyLine           = 6;
            const int          dummyColumn         = 3;
            var                dummySpan           = new SourceSpan(9, 12);
            var                dummyLines          = new StringLineGroup(2);
            Mock <BlockParser> dummyBlockParser    = _mockRepository.Create <BlockParser>();
            var                dummyProxyJsonBlock = new ProxyJsonBlock(null, dummyBlockParser.Object)
            {
                Lines  = dummyLines,
                Line   = dummyLine,
                Column = dummyColumn,
                Span   = dummySpan
            };
            BlockProcessor           dummyBlockProcessor = MarkdigTypesFactory.CreateBlockProcessor();
            FlexiOptionsBlockFactory testSubject         = CreateFlexiOptionsBlockFactory();

            // Act
            FlexiOptionsBlock result = testSubject.Create(dummyProxyJsonBlock, dummyBlockProcessor);

            // Assert
            Assert.Null(result);
            var resultFlexiOptionsBlock = dummyBlockProcessor.Document.GetData(FlexiOptionsBlockFactory.PENDING_FLEXI_OPTIONS_BLOCK) as FlexiOptionsBlock;

            Assert.NotNull(resultFlexiOptionsBlock);
            Assert.Same(dummyBlockParser.Object, resultFlexiOptionsBlock.Parser);
            Assert.Equal(dummyLines, resultFlexiOptionsBlock.Lines); // Default ValueType comparer - https://github.com/dotnet/coreclr/blob/master/src/System.Private.CoreLib/src/System/ValueType.cs
            Assert.Equal(dummyLine, resultFlexiOptionsBlock.Line);
            Assert.Equal(dummyColumn, resultFlexiOptionsBlock.Column);
            Assert.Equal(dummySpan, resultFlexiOptionsBlock.Span); // Default ValueType comparer - https://github.com/dotnet/coreclr/blob/master/src/System.Private.CoreLib/src/System/ValueType.cs
        }
Exemple #7
0
        public void Create_CreateFlexiSectionHeadingBlock()
        {
            // Arrange
            const int      dummyColumn         = 12;
            const int      dummyLineIndex      = 5;
            var            dummyLine           = new StringSlice("dummyLine", 4, 8);
            BlockProcessor dummyBlockProcessor = MarkdigTypesFactory.CreateBlockProcessor();

            dummyBlockProcessor.Line      = dummyLine;
            dummyBlockProcessor.LineIndex = dummyLineIndex;
            dummyBlockProcessor.Column    = dummyColumn;
            Mock <BlockParser> dummyBlockParser = _mockRepository.Create <BlockParser>();
            Mock <IFlexiSectionBlockOptions>       dummyFlexiSectionBlockOptions = _mockRepository.Create <IFlexiSectionBlockOptions>();
            Mock <FlexiSectionHeadingBlockFactory> mockTestSubject = CreateMockFlexiSectionHeadingBlockFactory();

            mockTestSubject.CallBase = true;
            mockTestSubject.Setup(t => t.SetupIDGenerationAndReferenceLinking(It.IsAny <FlexiSectionHeadingBlock>(),
                                                                              dummyFlexiSectionBlockOptions.Object,
                                                                              dummyBlockProcessor));

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

            // Assert
            _mockRepository.VerifyAll();
            Assert.Equal(dummyColumn, result.Column);
            Assert.Equal(dummyLine.Start, result.Span.Start);
            Assert.Equal(dummyLine.End, result.Span.End);
            Assert.Equal(dummyLineIndex, result.Line);
            Assert.Equal(dummyLine.ToString(), result.Lines.ToString());
        }
        public void TryOpenBlock_ThrowsBlockExceptionIfAnExceptionIsThrownWhileCreatingTheBlock()
        {
            // Arrange
            const int      dummyLineIndex      = 6;
            const int      dummyColumn         = 3;
            const int      dummyLevel          = 1;
            BlockProcessor dummyBlockProcessor = MarkdigTypesFactory.CreateBlockProcessor();

            dummyBlockProcessor.Line      = new StringSlice("# Dummy");
            dummyBlockProcessor.LineIndex = dummyLineIndex;
            dummyBlockProcessor.Column    = dummyColumn;
            Mock <IFlexiSectionBlockFactory> mockFlexiSectionBlockFactory = _mockRepository.Create <IFlexiSectionBlockFactory>();
            var dummyOptionsException = new OptionsException();
            Mock <ExposedFlexiSectionBlockParser> mockTestSubject = CreateMockExposedFlexiSectionBlockParser(mockFlexiSectionBlockFactory.Object);

            mockTestSubject.CallBase = true;
            mockTestSubject.Setup(t => t.DiscardRedundantCharacters(dummyLevel, dummyBlockProcessor));
            mockFlexiSectionBlockFactory.Setup(f => f.Create(dummyLevel, dummyBlockProcessor, mockTestSubject.Object)).Throws(dummyOptionsException);

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

            _mockRepository.VerifyAll();
            Assert.Equal(string.Format(Strings.BlockException_BlockException_InvalidBlock,
                                       nameof(FlexiSectionBlock),
                                       dummyLineIndex + 1,
                                       dummyColumn,
                                       Strings.BlockException_Shared_ExceptionOccurredWhileCreatingBlock),
                         result.Message);
            Assert.Same(dummyOptionsException, result.InnerException);
        }
Exemple #9
0
        public void DocumentOnProcessInlinesBegin_CreatesAndAddsALinkReferenceDefinitionForEachReferenceLinkableFlexiFigureBlock()
        {
            // Arrange
            const string     dummyLinkLabelContent = "dummyLinkLabelContent";
            const string     dummyID               = "dummyID";
            const string     dummyName             = "dummyName";
            FlexiFigureBlock dummyFlexiFigureBlock = CreateFlexiFigureBlock(name: dummyName, linkLabelContent: dummyLinkLabelContent, id: dummyID);
            InlineProcessor  dummyInlineProcessor  = MarkdigTypesFactory.CreateInlineProcessor();

            dummyInlineProcessor.Document.SetData(FlexiFigureBlockFactory.REFERENCE_LINKABLE_FLEXI_FIGURE_BLOCKS_KEY, new List <FlexiFigureBlock> {
                dummyFlexiFigureBlock
            });
            FlexiFigureBlockFactory testSubject = CreateFlexiFigureBlockFactory();

            // Act
            testSubject.DocumentOnProcessInlinesBegin(dummyInlineProcessor, null);

            // Assert
            Dictionary <string, LinkReferenceDefinition> linkReferenceDefinitions = (dummyInlineProcessor.Document.GetData(typeof(LinkReferenceDefinitionGroup)) as LinkReferenceDefinitionGroup)?.Links;

            Assert.Single(linkReferenceDefinitions);
            LinkReferenceDefinition resultLinkReferenceDefinition = linkReferenceDefinitions.Values.First();

            Assert.Equal(dummyLinkLabelContent, resultLinkReferenceDefinition.Label);
            Assert.Equal($"#{dummyID}", resultLinkReferenceDefinition.Url);
            Assert.Equal(dummyName, resultLinkReferenceDefinition.Title);
        }
Exemple #10
0
        public void DocumentOnProcessInlinesBegin_DoesNotReplaceExistingLinkReferenceDefinitions()
        {
            // Arrange
            const string     dummyLinkLabelContent = "dummyLinkLabelContent";
            InlineProcessor  dummyInlineProcessor  = MarkdigTypesFactory.CreateInlineProcessor();
            FlexiFigureBlock dummyFlexiFigureBlock = CreateFlexiFigureBlock(linkLabelContent: dummyLinkLabelContent);

            dummyInlineProcessor.Document.SetData(FlexiFigureBlockFactory.REFERENCE_LINKABLE_FLEXI_FIGURE_BLOCKS_KEY,
                                                  new List <FlexiFigureBlock> {
                dummyFlexiFigureBlock
            });
            var dummyLinkReferenceDefinition = new LinkReferenceDefinition();

            dummyInlineProcessor.Document.SetLinkReferenceDefinition(dummyLinkLabelContent, dummyLinkReferenceDefinition);
            FlexiFigureBlockFactory testSubject = CreateFlexiFigureBlockFactory();

            // Act
            testSubject.DocumentOnProcessInlinesBegin(dummyInlineProcessor, null);

            // Assert
            Dictionary <string, LinkReferenceDefinition> linkReferenceDefinitions =
                (dummyInlineProcessor.Document.GetData(typeof(LinkReferenceDefinitionGroup)) as LinkReferenceDefinitionGroup)?.Links;

            Assert.Single(linkReferenceDefinitions);
            Assert.Same(dummyLinkReferenceDefinition, linkReferenceDefinitions.Values.First()); // Doesn't get replaced
        }
        public void TryContinueBlock_UndoesProxyTableBlockAndReturnsBlockStateBreakIfColumnDefinitionsIsAlreadyDefinedAndLineIsNotAValidRowLine()
        {
            // Arrange
            const int dummyNumColumns        = 8;
            const int dummyNumRows           = 4;
            var       dummyColumnDefinitions = new List <ColumnDefinition>();
            var       dummyProxyTableBlock   = new ProxyTableBlock(null);

            for (int i = 0; i < dummyNumRows; i++)
            {
                dummyProxyTableBlock.Rows.Add(new Row());
            }
            dummyProxyTableBlock.NumColumns        = dummyNumColumns;
            dummyProxyTableBlock.ColumnDefinitions = dummyColumnDefinitions;
            BlockProcessor dummyBlockProcessor = MarkdigTypesFactory.CreateBlockProcessor();

            dummyBlockProcessor.Line = new StringSlice("|");
            Mock <ExposedBasicFlexiTableBlockParser> mockTestSubject = CreateMockExposedBasicFlexiTableBlockParser();

            mockTestSubject.CallBase = true;
            mockTestSubject.Setup(t => t.TryParseRowLine(dummyBlockProcessor, dummyNumRows, dummyNumColumns)).Returns((Row)null);
            mockTestSubject.Protected().Setup("Undo", dummyBlockProcessor, dummyProxyTableBlock);

            // Act
            BlockState result = mockTestSubject.Object.ExposedTryContinueBlock(dummyBlockProcessor, dummyProxyTableBlock);

            // Assert
            _mockRepository.VerifyAll();
            Assert.Equal(BlockState.Break, result);
        }
        public void TryContinueBlock_UndoesProxyTableBlockAndReturnsBlockStateBreakIfLineIsNeitherAValidColumnDefinitionsLineNorAValidRowLine()
        {
            // Arrange
            const string dummyText            = "| dummyText";
            const int    dummyNumColumns      = 8;
            const int    dummyNumRows         = 4;
            var          dummyProxyTableBlock = new ProxyTableBlock(null);

            for (int i = 0; i < dummyNumRows; i++)
            {
                dummyProxyTableBlock.Rows.Add(new Row());
            }
            dummyProxyTableBlock.NumColumns = dummyNumColumns;
            BlockProcessor dummyBlockProcessor = MarkdigTypesFactory.CreateBlockProcessor();

            dummyBlockProcessor.Line = new StringSlice(dummyText);
            Mock <ExposedBasicFlexiTableBlockParser> mockTestSubject = CreateMockExposedBasicFlexiTableBlockParser();

            mockTestSubject.CallBase = true;
            mockTestSubject.Setup(t => t.TryParseRowLine(dummyBlockProcessor, dummyNumRows, dummyNumColumns)).Returns((Row)null);
            mockTestSubject.
            Protected().
            Setup <List <ColumnDefinition> >("TryParseColumnDefinitionsLine", ItExpr.Is <StringSlice>(line => line.Text == dummyText), '|', dummyNumColumns).
            Returns((List <ColumnDefinition>)null);
            mockTestSubject.Protected().Setup("Undo", dummyBlockProcessor, dummyProxyTableBlock);

            // Act
            BlockState result = mockTestSubject.Object.ExposedTryContinueBlock(dummyBlockProcessor, dummyProxyTableBlock);

            // Assert
            _mockRepository.VerifyAll();
            Assert.Equal(BlockState.Break, result);
        }
        public void TryContinueBlock_ReturnsBlockStateContinueDiscardIfColumnDefinitionsHasBeenDefinedAndTheCurrentLineIsAValidRowLine()
        {
            // Arrange
            const string dummyText              = "| dummyText";
            const int    dummyNumColumns        = 8;
            const int    dummyNumRows           = 4;
            var          dummyColumnDefinitions = new List <ColumnDefinition>();
            var          dummyProxyTableBlock   = new ProxyTableBlock(null);

            for (int i = 0; i < dummyNumRows; i++)
            {
                dummyProxyTableBlock.Rows.Add(new Row());
            }
            dummyProxyTableBlock.NumColumns        = dummyNumColumns;
            dummyProxyTableBlock.ColumnDefinitions = dummyColumnDefinitions;
            BlockProcessor dummyBlockProcessor = MarkdigTypesFactory.CreateBlockProcessor();

            dummyBlockProcessor.Line = new StringSlice(dummyText);
            var dummyRow = new Row();
            Mock <ExposedBasicFlexiTableBlockParser> mockTestSubject = CreateMockExposedBasicFlexiTableBlockParser();

            mockTestSubject.CallBase = true;
            mockTestSubject.Setup(t => t.TryParseRowLine(dummyBlockProcessor, dummyNumRows, dummyNumColumns)).Returns(dummyRow);

            // Act
            BlockState result = mockTestSubject.Object.ExposedTryContinueBlock(dummyBlockProcessor, dummyProxyTableBlock);

            // Assert
            _mockRepository.VerifyAll();
            Assert.Equal(dummyProxyTableBlock.Span.End, dummyText.Length - 1); // Block span end is updated
            Assert.Same(dummyProxyTableBlock.Rows.Last(), dummyRow);
            Assert.Equal(dummyText, dummyProxyTableBlock.Lines.ToString());
            Assert.Equal(BlockState.ContinueDiscard, result);
        }
        public void Create_CreatesFlexiTableBlock()
        {
            // Arrange
            const string         dummyBlockName         = "dummyBlockName";
            const string         dummyResolvedBlockName = "dummyResolvedBlockName";
            const FlexiTableType dummyType           = FlexiTableType.FixedTitles;
            BlockProcessor       dummyBlockProcessor = MarkdigTypesFactory.CreateBlockProcessor();
            var dummyAttributes = new ReadOnlyDictionary <string, string>(new Dictionary <string, string>());
            Mock <IFlexiTableBlockOptions> mockFlexiTableBlockOptions = _mockRepository.Create <IFlexiTableBlockOptions>();

            mockFlexiTableBlockOptions.Setup(f => f.BlockName).Returns(dummyBlockName);
            mockFlexiTableBlockOptions.Setup(f => f.Type).Returns(dummyType);
            mockFlexiTableBlockOptions.Setup(f => f.Attributes).Returns(dummyAttributes);
            Mock <IOptionsService <IFlexiTableBlockOptions, IFlexiTableBlocksExtensionOptions> > mockOptionsService = _mockRepository.
                                                                                                                      Create <IOptionsService <IFlexiTableBlockOptions, IFlexiTableBlocksExtensionOptions> >();

            mockOptionsService.Setup(f => f.CreateOptions(dummyBlockProcessor)).
            Returns((mockFlexiTableBlockOptions.Object, null));
            var             dummyProxyTableBlock          = new ProxyTableBlock(null);
            FlexiTableBlock dummyFlexiTableBlock          = CreateFlexiTableBlock();
            Mock <FlexiTableBlockFactory> mockTestSubject = CreateMockFlexiTableBlockFactory(mockOptionsService.Object);

            mockTestSubject.CallBase = true;
            mockTestSubject.Setup(t => t.ResolveBlockName(dummyBlockName)).Returns(dummyResolvedBlockName);
            mockTestSubject.Setup(t => t.ValidateType(dummyType));
            mockTestSubject.Setup(t => t.CreateFlexiTableBlock(dummyResolvedBlockName, dummyType, dummyAttributes, dummyProxyTableBlock, dummyBlockProcessor)).Returns(dummyFlexiTableBlock);

            // Act
            FlexiTableBlock result = mockTestSubject.Object.Create(dummyProxyTableBlock, dummyBlockProcessor);

            // Assert
            _mockRepository.VerifyAll();
        }
        public void Create_ThrowsBlockExceptionIfThereIsAnUnconsumedFlexiOptionsBlock()
        {
            // Arrange
            const int dummyLineIndex = 1;
            const int dummyColumn    = 2;
            var       dummyPendingFlexiOptionsBlock = new FlexiOptionsBlock(null)
            {
                Line   = dummyLineIndex,
                Column = dummyColumn
            };
            BlockProcessor dummyBlockProcessor = MarkdigTypesFactory.CreateBlockProcessor();

            dummyBlockProcessor.Document.SetData(FlexiOptionsBlockFactory.PENDING_FLEXI_OPTIONS_BLOCK, dummyPendingFlexiOptionsBlock);
            FlexiOptionsBlockFactory testSubject = CreateFlexiOptionsBlockFactory();

            // Act and assert
            BlockException result = Assert.Throws <BlockException>(() => testSubject.Create(new ProxyJsonBlock(null, null), dummyBlockProcessor));

            Assert.Equal(string.Format(Strings.BlockException_BlockException_InvalidBlock,
                                       nameof(FlexiOptionsBlock),
                                       dummyLineIndex + 1,
                                       dummyColumn,
                                       Strings.BlockException_FlexiOptionsBlockParser_UnconsumedBlock),
                         result.Message);
        }
Exemple #16
0
        public void UpdateOpenFlexiSectionBlocks_DiscardsStacksForClosedTreesAndCreatesANewStackForANewTree()
        {
            // Arrange
            var dummyCurrentBranch = new Stack <FlexiSectionBlock>();

            dummyCurrentBranch.Push(CreateFlexiSectionBlock());
            FlexiSectionBlock dummyClosedFlexiSectionBlock = CreateFlexiSectionBlock();

            dummyClosedFlexiSectionBlock.IsOpen = false;
            var dummyClosedBranchStack = new Stack <FlexiSectionBlock>();

            dummyClosedBranchStack.Push(dummyClosedFlexiSectionBlock);
            var dummyOpenSectionBlocks = new Stack <Stack <FlexiSectionBlock> >();

            dummyOpenSectionBlocks.Push(dummyCurrentBranch);
            dummyOpenSectionBlocks.Push(dummyClosedBranchStack);
            BlockProcessor dummyBlockProcessor = MarkdigTypesFactory.CreateBlockProcessor();

            dummyBlockProcessor.ProcessLine(new StringSlice("")); // This line sets BlockProcessor.CurrentContainer to a MarkdownDocument
            FlexiSectionBlock dummyNewFlexiSectionBlock     = CreateFlexiSectionBlock();
            Mock <FlexiSectionBlockFactory> mockTestSubject = CreateMockFlexiSectionBlockFactory();

            mockTestSubject.CallBase = true;
            mockTestSubject.Setup(t => t.GetOrCreateOpenFlexiSectionBlocks(dummyBlockProcessor.Document)).Returns(dummyOpenSectionBlocks);

            // Act
            mockTestSubject.Object.UpdateOpenFlexiSectionBlocks(dummyBlockProcessor, dummyNewFlexiSectionBlock);

            // Assert
            _mockRepository.VerifyAll();
            Assert.Equal(2, dummyOpenSectionBlocks.Count); // Closed tree removed, open tree remains, new tree added
            Assert.Same(dummyNewFlexiSectionBlock, dummyOpenSectionBlocks.Pop().Peek());
            Assert.Same(dummyCurrentBranch, dummyOpenSectionBlocks.Peek());
        }
        public void CreateFlexiTableBlock_CreatesFlexiTableBlock(FlexiTableType dummyType,
                                                                 Row[] dummyRows)
        {
            // Arrange
            const int      dummyNumColumns        = 6;
            const int      dummyColumn            = 4;
            const int      dummyLine              = 5;
            const int      dummyLineStart         = 3;
            const int      dummyLineEnd           = 10;
            const string   dummyBlockName         = "dummyBlockName";
            BlockParser    dummyBlockParser       = _mockRepository.Create <BlockParser>().Object;
            var            dummyColumnDefinitions = new List <ColumnDefinition>();
            var            dummyAttributes        = new ReadOnlyDictionary <string, string>(new Dictionary <string, string>());
            BlockProcessor dummyBlockProcessor    = MarkdigTypesFactory.CreateBlockProcessor();
            var            dummyProxyTableBlock   = new ProxyTableBlock(dummyBlockParser);

            dummyProxyTableBlock.Column = dummyColumn;
            dummyProxyTableBlock.Line   = dummyLine;
            dummyProxyTableBlock.Span   = new SourceSpan(dummyLineStart, dummyLineEnd);
            foreach (Row row in dummyRows)
            {
                dummyProxyTableBlock.Rows.Add(row);
            }
            dummyProxyTableBlock.ColumnDefinitions = dummyColumnDefinitions;
            dummyProxyTableBlock.NumColumns        = dummyNumColumns;
            var dummyFlexiTableRowBlock1 = new FlexiTableRowBlock(false);
            var dummyFlexiTableRowBlock2 = new FlexiTableRowBlock(false);
            var dummyFlexiTableRowBlock3 = new FlexiTableRowBlock(false);
            Mock <FlexiTableBlockFactory> mockTestSubject = CreateMockFlexiTableBlockFactory();

            mockTestSubject.CallBase = true;
            mockTestSubject.
            Setup(t => t.CreateFlexiTableRowBlock(dummyType, It.IsAny <BlockProcessor>(), dummyColumnDefinitions, dummyNumColumns, 0, dummyRows[0], dummyRows[0].IsHeaderRow)).
            Returns(dummyFlexiTableRowBlock1);
            mockTestSubject.
            Setup(t => t.CreateFlexiTableRowBlock(dummyType, It.IsAny <BlockProcessor>(), dummyColumnDefinitions, dummyNumColumns, 1, dummyRows[1], dummyRows[1].IsHeaderRow)).
            Returns(dummyFlexiTableRowBlock2);
            mockTestSubject.
            Setup(t => t.CreateFlexiTableRowBlock(dummyType, It.IsAny <BlockProcessor>(), dummyColumnDefinitions, dummyNumColumns, 2, dummyRows[2], dummyRows[2].IsHeaderRow)).
            Returns(dummyFlexiTableRowBlock3);

            // Act
            FlexiTableBlock result = mockTestSubject.Object.CreateFlexiTableBlock(dummyBlockName, dummyType, dummyAttributes, dummyProxyTableBlock, dummyBlockProcessor);

            // Assert
            _mockRepository.VerifyAll();
            Assert.Equal(dummyBlockName, result.BlockName);
            Assert.Equal(dummyType, result.Type);
            Assert.Same(dummyAttributes, result.Attributes);
            Assert.Same(dummyBlockParser, result.Parser);
            Assert.Equal(dummyColumn, result.Column);
            Assert.Equal(dummyLine, result.Line);
            Assert.Equal(dummyLineStart, result.Span.Start);
            Assert.Equal(dummyLineEnd, result.Span.End);
            Assert.Equal(3, result.Count);
            Assert.Same(dummyFlexiTableRowBlock1, result[0]);
            Assert.Same(dummyFlexiTableRowBlock2, result[1]);
            Assert.Same(dummyFlexiTableRowBlock3, result[2]);
        }
        public void Create_ThrowsArgumentNullExceptionIfProxyJsonBlockIsNull()
        {
            // Arrange
            FlexiOptionsBlockFactory testSubject = CreateFlexiOptionsBlockFactory();

            // Act and assert
            Assert.Throws <ArgumentNullException>(() => testSubject.Create(null, MarkdigTypesFactory.CreateBlockProcessor()));
        }
Exemple #19
0
        public void CreateCore_ThrowsArgumentNullExceptionIfProxyLeafBlockIsNull()
        {
            // Arrange
            BlockProcessor        dummyBlockProcessor = MarkdigTypesFactory.CreateBlockProcessor();
            FlexiCodeBlockFactory testSubject         = CreateFlexiCodeBlockFactory();

            // Act and assert
            Assert.Throws <ArgumentNullException>(() => testSubject.CreateCore(null, dummyBlockProcessor));
        }
Exemple #20
0
        public void Undo_ThrowsArgumentNullExceptionIfProxyTableBlockIsNull()
        {
            // Arrange
            BlockProcessor dummyBlockProcessor       = MarkdigTypesFactory.CreateBlockProcessor();
            ExposedFlexiTableBlockParser testSubject = CreateExposedFlexiTableBlockParser();

            // Act and assert
            Assert.Throws <ArgumentNullException>(() => testSubject.ExposedUndo(dummyBlockProcessor, null));
        }
        public void ExtractCiteUrl_DoesNothingIfThereAreNoLinkInlinesInCitationBlock()
        {
            // Arrange
            LeafBlock       dummyCitationBlock   = _mockRepository.Create <LeafBlock>(null).Object;
            InlineProcessor dummyInlineProcessor = MarkdigTypesFactory.CreateInlineProcessor();

            dummyInlineProcessor.ProcessInlineLeaf(dummyCitationBlock); // Sets InlineProcessor.Block to dummyCitationBlock
            FlexiQuoteBlockFactory testSubject = CreateFlexiQuoteBlockFactory();

            // Act and assert
            testSubject.ExtractCiteUrl(dummyInlineProcessor, null); // If this doesn't throw, we never attempted to extract cite URL
        }
Exemple #22
0
        public void Create_CreatesFlexiAlertBlock()
        {
            // Arrange
            const int      dummyColumn            = 2;
            var            dummyLine              = new StringSlice("dummyText", 3, 8);
            const string   dummyBlockName         = "dummyBlockName";
            const string   dummyResolvedBlockName = "dummyResolvedBlockName";
            const string   dummyType              = "dummyType";
            const string   dummyResolvedType      = "dummyResolvedType";
            const string   dummyIcon              = "dummyIcon";
            const string   dummyResolvedIcon      = "dummyResolvedIcon";
            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 <IFlexiAlertBlockOptions> mockFlexiAlertBlockOptions = _mockRepository.Create <IFlexiAlertBlockOptions>();

            mockFlexiAlertBlockOptions.Setup(f => f.BlockName).Returns(dummyBlockName);
            mockFlexiAlertBlockOptions.Setup(f => f.Type).Returns(dummyType);
            mockFlexiAlertBlockOptions.Setup(f => f.Icon).Returns(dummyIcon);
            mockFlexiAlertBlockOptions.Setup(f => f.Attributes).Returns(dummyAttributes);
            var dummyIcons = new ReadOnlyDictionary <string, string>(new Dictionary <string, string>());
            Mock <IFlexiAlertBlocksExtensionOptions> mockFlexiAlertBlockExtensionOptions = _mockRepository.Create <IFlexiAlertBlocksExtensionOptions>();

            mockFlexiAlertBlockExtensionOptions.Setup(f => f.Icons).Returns(dummyIcons);
            Mock <IOptionsService <IFlexiAlertBlockOptions, IFlexiAlertBlocksExtensionOptions> > mockOptionsService = _mockRepository.
                                                                                                                      Create <IOptionsService <IFlexiAlertBlockOptions, IFlexiAlertBlocksExtensionOptions> >();

            mockOptionsService.Setup(f => f.CreateOptions(dummyBlockProcessor)).
            Returns((mockFlexiAlertBlockOptions.Object, mockFlexiAlertBlockExtensionOptions.Object));
            Mock <FlexiAlertBlockFactory> mockTestSubject = CreateMockFlexiAlertBlockFactory(mockOptionsService.Object);

            mockTestSubject.CallBase = true;
            mockTestSubject.Setup(t => t.ResolveBlockName(dummyBlockName)).Returns(dummyResolvedBlockName);
            mockTestSubject.Setup(t => t.ResolveType(dummyType)).Returns(dummyResolvedType);
            mockTestSubject.Setup(t => t.ResolveIcon(dummyIcon, dummyResolvedType, dummyIcons)).Returns(dummyResolvedIcon);

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

            // Assert
            _mockRepository.VerifyAll();
            Assert.Equal(dummyResolvedBlockName, result.BlockName);
            Assert.Equal(dummyResolvedType, result.Type);
            Assert.Equal(dummyResolvedIcon, result.Icon);
            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(dummyLine.End, result.Span.End);
        }
Exemple #23
0
        public static IEnumerable <object[]> GetFlexiFigureBlockNumber_IfThereIsNoStoredNumberReturnsOneAndStoresTwo_Data()
        {
            BlockProcessor dummyBlockProcessorWithNonIntNextNumber = MarkdigTypesFactory.CreateBlockProcessor();

            dummyBlockProcessorWithNonIntNextNumber.Document.SetData(FlexiFigureBlockFactory.NEXT_FLEXI_FIGURE_BLOCK_NUMBER_KEY, new object());

            return(new object[][]
            {
                new object[] { MarkdigTypesFactory.CreateBlockProcessor() }, // No next number
                new object[] { dummyBlockProcessorWithNonIntNextNumber }
            });
        }
Exemple #24
0
        public void TryGetContextObjectsStore_ReturnsNullIfThereAreNoGlobalParsers()
        {
            // Arrange
            BlockProcessor        dummyBlockProcessor = MarkdigTypesFactory.CreateBlockProcessor(blockParsers: new BlockParserList(new BlockParser[0]));
            ContextObjectsService testSubject         = CreateContextObjectsService();

            // Act
            ContextObjectsStore result = testSubject.TryGetContextObjectsStore(dummyBlockProcessor);

            // Assert
            Assert.Null(result);
        }
Exemple #25
0
        public void TryGetContextObjectsStore_ReturnsNullIfNoGlobalParserIsAContextObjectsStore()
        {
            // Arrange
            BlockProcessor        dummyBlockProcessor = MarkdigTypesFactory.CreateBlockProcessor(); // Several global parsers registered by default
            ContextObjectsService testSubject         = CreateContextObjectsService();

            // Act
            ContextObjectsStore result = testSubject.TryGetContextObjectsStore(dummyBlockProcessor);

            // Assert
            Assert.Null(result);
        }
Exemple #26
0
        public void ParseLine_ReturnsBlockStateNoneIfCurrentLineDoesNotBeginWithExclamationMarkAndIsNotBlank()
        {
            // Arrange
            BlockProcessor dummyBlockProcessor = MarkdigTypesFactory.CreateBlockProcessor();

            dummyBlockProcessor.Line = new StringSlice("dummyString");
            ExposedFlexiAlertBlockParser testSubject = CreateExposedFlexiAlertBlockParser();

            // Act
            BlockState result = testSubject.ParseLine(dummyBlockProcessor, null);

            // Assert
            Assert.Equal(BlockState.None, result);
        }
Exemple #27
0
        public void ParseLine_ReturnsBlockStateNoneIfCurrentLineHasCodeIndent()
        {
            // Arrange
            BlockProcessor dummyBlockProcessor = MarkdigTypesFactory.CreateBlockProcessor();

            dummyBlockProcessor.Column = 4; // IsCodeIndent is an expression bodied member that derives its value from Column
            ExposedFlexiAlertBlockParser testSubject = CreateExposedFlexiAlertBlockParser();

            // Act
            BlockState result = testSubject.ParseLine(dummyBlockProcessor, null);

            // Assert
            Assert.Equal(BlockState.None, result);
        }
Exemple #28
0
        public void ParseLine_ReturnsBlockStateBreakDiscardIfCurrentLineIsBlank()
        {
            // Arrange
            BlockProcessor dummyBlockProcessor = MarkdigTypesFactory.CreateBlockProcessor();

            dummyBlockProcessor.Line = new StringSlice(string.Empty);
            ExposedFlexiAlertBlockParser testSubject = CreateExposedFlexiAlertBlockParser();

            // Act
            BlockState result = testSubject.ParseLine(dummyBlockProcessor, null);

            // Assert
            Assert.Equal(BlockState.BreakDiscard, result);
        }
        public void TryOpenBlock_ReturnsBlockStateNoneIfLineDoesNotStartWithTheExpectedCharacters(string dummyLineText)
        {
            // Arrange
            BlockProcessor dummyBlockProcessor = MarkdigTypesFactory.CreateBlockProcessor();

            dummyBlockProcessor.Line = new StringSlice(dummyLineText);
            ExposedFlexiSectionBlockParser testSubject = CreateExposedFlexiSectionBlockParser();

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

            // Assert
            Assert.Equal(BlockState.None, result);
        }
Exemple #30
0
        public void TryGetContextObjectsStore_ReturnsContextObjectsStoreIfItExists()
        {
            // Arrange
            var                   dummyContextObjectsStore = new ContextObjectsStore();
            BlockProcessor        dummyBlockProcessor      = MarkdigTypesFactory.CreateBlockProcessor(blockParsers: new BlockParserList(new BlockParser[] { dummyContextObjectsStore }));
            ContextObjectsService testSubject = CreateContextObjectsService();

            // Act
            ContextObjectsStore result = testSubject.TryGetContextObjectsStore(dummyBlockProcessor);

            // Assert
            _mockRepository.VerifyAll();
            Assert.Same(dummyContextObjectsStore, result);
        }