public void WriteBlock_OnlyWritesChildrenIfEnableHtmlForBlockIsFalse()
        {
            // Arrange
            const string dummyChildText       = "dummyChildText";
            var          dummyContainerInline = new ContainerInline();

            dummyContainerInline.AppendChild(new LiteralInline(dummyChildText));
            var dummyParagraphBlock = new ParagraphBlock()
            {
                Inline = dummyContainerInline
            };
            FlexiAlertBlock dummyFlexiAlertBlock = CreateFlexiAlertBlock();

            dummyFlexiAlertBlock.Add(dummyParagraphBlock);
            var dummyStringWriter = new StringWriter();
            var dummyHtmlRenderer = new HtmlRenderer(dummyStringWriter)
            {
                EnableHtmlForBlock = false
            };
            ExposedFlexiAlertBlockRenderer testSubject = CreateExposedFlexiAlertBlockRenderer();

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

            // Assert
            Assert.Equal(dummyChildText + "\n", result, ignoreLineEndingDifferences: true);
        }
Exemplo n.º 2
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);
        }
        public void WriteBlock_WritesBlock(FlexiAlertBlock dummyFlexiAlertBlock,
                                           string expectedResult)
        {
            // Arrange
            var dummyStringWriter = new StringWriter();
            var dummyHtmlRenderer = new HtmlRenderer(dummyStringWriter);
            ExposedFlexiAlertBlockRenderer testSubject = CreateExposedFlexiAlertBlockRenderer();

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

            // Assert
            Assert.Equal(expectedResult, result, ignoreLineEndingDifferences: true);
        }
Exemplo n.º 4
0
        public void TryContinueBlock_ParsesLine()
        {
            // Arrange
            BlockProcessor   dummyBlockProcessor  = MarkdigTypesFactory.CreateBlockProcessor();
            FlexiAlertBlock  dummyFlexiAlertBlock = CreateFlexiAlertBlock();
            const BlockState dummyBlockState      = BlockState.Continue;
            Mock <ExposedFlexiAlertBlockParser> mockTestSubject = CreateMockExposedFlexiAlertBlockParser();

            mockTestSubject.CallBase = true;
            mockTestSubject.Setup(t => t.ParseLine(dummyBlockProcessor, dummyFlexiAlertBlock)).Returns(dummyBlockState);

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

            // Assert
            _mockRepository.VerifyAll();
            Assert.Equal(dummyBlockState, result);
        }
Exemplo n.º 5
0
        public void ParseLine_UpdatesFlexiAlertBlockAndReturnsBlockStateContinueIfFlexiAlertBlockCanBeContinued()
        {
            // Arrange
            var            dummyLine           = new StringSlice("! dummyLine");
            BlockProcessor dummyBlockProcessor = MarkdigTypesFactory.CreateBlockProcessor();

            dummyBlockProcessor.Line = dummyLine;
            FlexiAlertBlock dummyFlexiAlertBlock     = CreateFlexiAlertBlock();
            ExposedFlexiAlertBlockParser testSubject = CreateExposedFlexiAlertBlockParser();

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

            // Assert
            Assert.Equal(BlockState.Continue, result);
            Assert.Equal(dummyLine.End, dummyFlexiAlertBlock.Span.End);
            Assert.Equal(2, dummyBlockProcessor.Start); // Skips ! and first space
        }
Exemplo n.º 6
0
        public void ParseLine_IfSuccessfullyParsedStartLineOfABlockCreatesNewFlexiAlertBlockAdvancesCurrentCharAndReturnsBlockStateContinue()
        {
            // Arrange
            var            dummyLine           = new StringSlice("! dummyLine");
            BlockProcessor dummyBlockProcessor = MarkdigTypesFactory.CreateBlockProcessor();

            dummyBlockProcessor.Line = dummyLine;
            FlexiAlertBlock dummyFlexiAlertBlock = CreateFlexiAlertBlock();
            Mock <IFlexiAlertBlockFactory> mockFlexiAlertBlockFactory = _mockRepository.Create <IFlexiAlertBlockFactory>();
            ExposedFlexiAlertBlockParser   testSubject = CreateExposedFlexiAlertBlockParser(mockFlexiAlertBlockFactory.Object);

            mockFlexiAlertBlockFactory.Setup(f => f.Create(dummyBlockProcessor, testSubject)).Returns(dummyFlexiAlertBlock);

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

            // Assert
            _mockRepository.VerifyAll();
            Assert.Equal(BlockState.Continue, result);
            var resultBlock = dummyBlockProcessor.NewBlocks.Peek() as FlexiAlertBlock;

            Assert.Same(dummyFlexiAlertBlock, resultBlock);
            Assert.Equal(2, dummyBlockProcessor.Start); // Skips ! and first space
        }
Exemplo n.º 7
0
 public BlockState ExposedTryContinueBlock(BlockProcessor processor, FlexiAlertBlock flexiAlertBlock)
 {
     return(TryContinueBlock(processor, flexiAlertBlock));
 }
        public static IEnumerable <object[]> WriteBlock_WritesBlock_Data()
        {
            const string dummyBlockName       = "dummyBlockName";
            const string dummyType            = "dummyType";
            const string dummyAttributeKey1   = "dummyAttributeKey1";
            const string dummyAttributeValue1 = "dummyAttributeValue1";
            const string dummyAttributeKey2   = "dummyAttributeKey2";
            const string dummyAttributeValue2 = "dummyAttributeValue2";
            const string dummyClass           = "dummyClass";
            const string dummyIcon            = "<dummyIcon></dummyIcon>";
            const string dummyIconWithClass   = "<dummyIcon class=\"__icon\"></dummyIcon>";
            const string dummyChildText       = "dummyChildText";

            var dummyChildContainerInline = new ContainerInline();

            dummyChildContainerInline.AppendChild(new LiteralInline(dummyChildText));
            var dummyChildBlock = new ParagraphBlock()
            {
                Inline = dummyChildContainerInline
            };
            FlexiAlertBlock dummyFlexiAlertBlockWithChild = CreateFlexiAlertBlock();

            dummyFlexiAlertBlockWithChild.Add(dummyChildBlock);

            return(new object[][]
            {
                // BlockName is assigned as a class of the root element and all default classes are prepended with it
                new object[] {
                    CreateFlexiAlertBlock(dummyBlockName),
                    $@"<div class=""{dummyBlockName} {dummyBlockName}_type_ {dummyBlockName}_no-icon"">
<div class=""{dummyBlockName}__content"">
</div>
</div>
"
                },
                // If type is specified, a language modifier class is rendered
                new object[] {
                    CreateFlexiAlertBlock(type: dummyType),
                    $@"<div class="" _type_{dummyType} _no-icon"">
<div class=""__content"">
</div>
</div>
"
                },
                // If icon is valid HTML, it is rendered with a default class and a _has-icon class is rendered
                new object[] {
                    CreateFlexiAlertBlock(icon: dummyIcon),
                    $@"<div class="" _type_ _has-icon"">
{dummyIconWithClass}
<div class=""__content"">
</div>
</div>
"
                },
                // If icon is null, whitespace or an empty string, no icon is rendered and a _no-icon class is rendered (null case already verified in other tests)
                new object[] {
                    CreateFlexiAlertBlock(icon: " "),
                    @"<div class="" _type_ _no-icon"">
<div class=""__content"">
</div>
</div>
"
                },
                new object[] {
                    CreateFlexiAlertBlock(icon: string.Empty),
                    @"<div class="" _type_ _no-icon"">
<div class=""__content"">
</div>
</div>
"
                },
                // If attributes specified, they're written
                new object[] {
                    CreateFlexiAlertBlock(attributes: new ReadOnlyDictionary <string, string>(new Dictionary <string, string> {
                        { dummyAttributeKey1, dummyAttributeValue1 }, { dummyAttributeKey2, dummyAttributeValue2 }
                    })),
                    $@"<div class="" _type_ _no-icon"" {dummyAttributeKey1}=""{dummyAttributeValue1}"" {dummyAttributeKey2}=""{dummyAttributeValue2}"">
<div class=""__content"">
</div>
</div>
"
                },
                // If classes are specified, they're appended to default classes
                new object[] {
                    CreateFlexiAlertBlock(attributes: new ReadOnlyDictionary <string, string>(new Dictionary <string, string> {
                        { "class", dummyClass }
                    })),
                    $@"<div class="" _type_ _no-icon {dummyClass}"">
<div class=""__content"">
</div>
</div>
"
                },
                // Children are rendered
                new object[] {
                    dummyFlexiAlertBlockWithChild,
                    $@"<div class="" _type_ _no-icon"">
<div class=""__content"">
<p>{dummyChildText}</p>
</div>
</div>
"
                }
            });
        }
 public void ExposedWriteBlock(HtmlRenderer htmlRenderer, FlexiAlertBlock flexiAlertBlock)
 {
     WriteBlock(htmlRenderer, flexiAlertBlock);
 }