Exemplo n.º 1
0
        /// <summary>
        /// Replaces a <see cref="ProxyTableBlock"/> with a <see cref="ParagraphBlock"/>.
        /// </summary>
        /// <param name="blockProcessor">The <see cref="BlockProcessor"/> processing the <see cref="ProxyTableBlock"/> to undo.</param>
        /// <param name="proxyTableBlock">The <see cref="ProxyTableBlock"/> to undo.</param>
        /// <exception cref="ArgumentNullException">Thrown if <paramref name="blockProcessor"/> is <c>null</c>.</exception>
        /// <exception cref="ArgumentNullException">Thrown if <paramref name="proxyTableBlock"/> is <c>null</c>.</exception>
        protected virtual void Undo(BlockProcessor blockProcessor, ProxyTableBlock proxyTableBlock)
        {
            if (blockProcessor == null)
            {
                throw new ArgumentNullException(nameof(blockProcessor));
            }

            if (proxyTableBlock == null)
            {
                throw new ArgumentNullException(nameof(proxyTableBlock));
            }

            // Discard proxyTableBlock
            ContainerBlock parent = proxyTableBlock.Parent;

            blockProcessor.Discard(proxyTableBlock);

            // Replace with paragraph block
            ParagraphBlockParser parser = blockProcessor.Parsers.FindExact <ParagraphBlockParser>();
            var paragraphBlock          = new ParagraphBlock(parser)
            {
                Lines = proxyTableBlock.Lines,
            };

            parent.Add(paragraphBlock);
            blockProcessor.Open(paragraphBlock);
        }
        public void Setup_Parsers_InsertsExtensionBlockParsers()
        {
            // Arrange
            Mock <BlockParser> dummyGlobalBlockParser    = _mockRepository.Create <BlockParser>();
            Mock <BlockParser> dummyNonGlobalBlockParser = _mockRepository.Create <BlockParser>();

            dummyNonGlobalBlockParser.Object.OpeningCharacters = new char[] { 'a' }; // Arbitrary opening character, can't mock because OpeningCharacters isn't virtual
            var dummyMarkdownPipelineBuilder = new MarkdownPipelineBuilder();
            Mock <BlockExtension <Block> > mockTestSubject = CreateMockBlockExtension(null, dummyGlobalBlockParser.Object, dummyNonGlobalBlockParser.Object);

            mockTestSubject.CallBase = true;
            mockTestSubject.Protected().Setup("SetupParsers", dummyMarkdownPipelineBuilder);

            // Act
            mockTestSubject.Object.Setup(dummyMarkdownPipelineBuilder);

            // Assert
            OrderedList <BlockParser> blockParsers = dummyMarkdownPipelineBuilder.BlockParsers;

            Assert.Contains(dummyNonGlobalBlockParser.Object, blockParsers);
            Assert.Contains(dummyGlobalBlockParser.Object, blockParsers);
            ParagraphBlockParser paragraphBlockParser = blockParsers.Find <ParagraphBlockParser>();

            Assert.True(blockParsers.IndexOf(dummyGlobalBlockParser.Object) < blockParsers.IndexOf(paragraphBlockParser)); // Global parsers must be inserted before catch all ParagraphBlockParser
            _mockRepository.VerifyAll();
        }