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
        }
        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);
        }
        public void Create_ThrowsArgumentNullExceptionIfBlockProcessorIsNull()
        {
            // Arrange
            FlexiOptionsBlockFactory testSubject = CreateFlexiOptionsBlockFactory();

            // Act and assert
            Assert.Throws <ArgumentNullException>(() => testSubject.Create(new ProxyJsonBlock(null, null), null));
        }
        public void Create_ThrowsArgumentNullExceptionIfProxyJsonBlockIsNull()
        {
            // Arrange
            FlexiOptionsBlockFactory testSubject = CreateFlexiOptionsBlockFactory();

            // Act and assert
            Assert.Throws <ArgumentNullException>(() => testSubject.Create(null, MarkdigTypesFactory.CreateBlockProcessor()));
        }
        public void CreateProxyJsonBlock_ThrowsArgumentNullExceptionIfBlockProcessorIsNull()
        {
            // Arrange
            FlexiOptionsBlockFactory testSubject = CreateFlexiOptionsBlockFactory();

            // Act and assert
            Assert.Throws <ArgumentNullException>(() => testSubject.CreateProxyJsonBlock(null, _mockRepository.Create <BlockParser>().Object));
        }
        public void CreateProxyJsonBlock_CreatesProxyJsonBlock()
        {
            // Arrange
            const int      dummyColumn         = 4;
            const int      dummyLineStart      = 2;
            BlockProcessor dummyBlockProcessor = MarkdigTypesFactory.CreateBlockProcessor();

            dummyBlockProcessor.Column = dummyColumn;
            dummyBlockProcessor.Line   = new StringSlice("", dummyLineStart, 10);
            Mock <BlockParser>       dummyBlockParser = _mockRepository.Create <BlockParser>();
            FlexiOptionsBlockFactory testSubject      = CreateFlexiOptionsBlockFactory();

            // Act
            ProxyJsonBlock result = testSubject.CreateProxyJsonBlock(dummyBlockProcessor, dummyBlockParser.Object);

            // Assert
            Assert.Equal(result.Column, dummyColumn);
            Assert.Equal(result.Span.Start, dummyLineStart);
            Assert.Equal(nameof(FlexiOptionsBlock), result.MainTypeName);
            Assert.Same(dummyBlockParser.Object, result.Parser);
        }