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));
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]); }
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); }
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)); }