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));
Beispiel #2
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 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 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 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]);
        }
Beispiel #8
0
        public void Undo_ThrowsArgumentNullExceptionIfBlockProcessorIsNull()
        {
            // Arrange
            var dummyProxyTableBlock = new ProxyTableBlock(null);
            ExposedFlexiTableBlockParser testSubject = CreateExposedFlexiTableBlockParser();

            // Act and assert
            Assert.Throws <ArgumentNullException>(() => testSubject.ExposedUndo(null, dummyProxyTableBlock));
        }
        public void TryOpenBlock_ReturnsBlockStateContinueDiscardIfCurrentLineIsARowLine()
        {
            // Arrange
            const int      dummyNumCells       = 6;
            const string   dummyText           = "dummyText";
            BlockProcessor dummyBlockProcessor = MarkdigTypesFactory.CreateBlockProcessor();

            dummyBlockProcessor.Line = new StringSlice(dummyText);
            var dummyProxyTableBlock = new ProxyTableBlock(null);
            Mock <IFlexiTableBlockFactory> mockFlexiTableBlockFactory = _mockRepository.Create <IFlexiTableBlockFactory>();
            var dummyRow = new Row();

            for (int i = 0; i < dummyNumCells; i++)
            {
                dummyRow.Add(CreateCell());
            }
            Mock <ExposedBasicFlexiTableBlockParser> mockTestSubject = CreateMockExposedBasicFlexiTableBlockParser(mockFlexiTableBlockFactory.Object);

            mockTestSubject.CallBase = true;
            mockTestSubject.
            Protected().
            Setup <List <ColumnDefinition> >("TryParseColumnDefinitionsLine", ItExpr.Is <StringSlice>(line => line.Text == dummyText), '|', -1).
            Returns((List <ColumnDefinition>)null);
            mockTestSubject.Setup(t => t.TryParseRowLine(dummyBlockProcessor, 0, -1)).Returns(dummyRow);
            mockFlexiTableBlockFactory.Setup(f => f.CreateProxy(dummyBlockProcessor, mockTestSubject.Object)).Returns(dummyProxyTableBlock);

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

            // Assert
            _mockRepository.VerifyAll();
            Assert.Equal(BlockState.ContinueDiscard, result);
            Assert.Single(dummyBlockProcessor.NewBlocks);
            var resultProxyTableBlock = dummyBlockProcessor.NewBlocks.Pop() as ProxyTableBlock;

            Assert.Same(dummyProxyTableBlock, resultProxyTableBlock);
            Assert.Equal(dummyNumCells, resultProxyTableBlock.NumColumns);
            Assert.Equal(dummyText, resultProxyTableBlock.Lines.ToString());
            Assert.Single(dummyProxyTableBlock.Rows);
            Assert.Same(dummyRow, dummyProxyTableBlock.Rows[0]);
        }
        public void TryContinueBlock_ReturnsBlockStateContinueDiscardIfColumnDefinitionsHasNotBeenDefinedAndTheCurrentLineIsAValidColumnDefinitionsLinee()
        {
            // Arrange
            const string dummyText            = "| dummyText";
            const int    dummyNumColumns      = 8;
            var          dummyProxyTableBlock = new ProxyTableBlock(null);

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

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

            mockTestSubject.CallBase = true;
            mockTestSubject.
            Protected().
            Setup <List <ColumnDefinition> >("TryParseColumnDefinitionsLine", ItExpr.Is <StringSlice>(line => line.Text == dummyText), '|', dummyNumColumns).
            Returns(dummyColumnDefinitions);

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

            // Assert
            _mockRepository.VerifyAll();
            foreach (Row row in dummyProxyTableBlock.Rows)
            {
                Assert.True(row.IsHeaderRow);
            }
            Assert.Same(dummyColumnDefinitions, dummyProxyTableBlock.ColumnDefinitions);
            Assert.Equal(dummyText.Length - 1, dummyProxyTableBlock.Span.End); // Block span end is updated
            Assert.Equal(dummyText, dummyProxyTableBlock.Lines.ToString());
            Assert.Equal(BlockState.ContinueDiscard, result);
        }
        public void CreateProxy_CreatesProxyTableBlock()
        {
            // Arrange
            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>();
            FlexiTableBlockFactory testSubject      = CreateFlexiTableBlockFactory();

            // Act
            ProxyTableBlock result = testSubject.CreateProxy(dummyBlockProcessor, dummyBlockParser.Object);

            // Assert
            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(FlexiTableBlock), result.MainTypeName);
        }
Beispiel #12
0
 public void CloseProxy_ReturnsNewFlexiTableBlock()
 {
     // Arrange
     BlockProcessor dummyBlockProcessor  = MarkdigTypesFactory.CreateBlockProcessor();
     var            dummyProxyTableBlock = new ProxyTableBlock(null);
     var            dummyFlexiTableBlock = new FlexiTableBlock(default, default, default, default);
 public BlockState ExposedTryContinueBlock(BlockProcessor blockProcessor, ProxyTableBlock proxyTableBlock)
 {
     return(TryContinueBlock(blockProcessor, proxyTableBlock));
 }