Example #1
0
        public void ContextObjectsExtension_ContextObjectsAddedToMarkdownParserContextPropertiesTakePrecedenceOver()
        {
            // Arrange
            var             dummyValue   = new object();
            Mock <Verifier> mockVerifier = _mockRepository.Create <Verifier>();

            mockVerifier.Setup(v => v.Verify(dummyValue)); // Verifies that correct value is returned by ContextObjectsService in DummyParser.TryOpen
            var dummyServices = new ServiceCollection();

            dummyServices.
            AddContextObjects().
            AddSingleton <DummyExtension>().
            AddSingleton <DummyParser>().
            AddSingleton(mockVerifier.Object);
            ServiceProvider         serviceProvider = dummyServices.BuildServiceProvider();
            ContextObjectsExtension testSubject     = serviceProvider.GetRequiredService <ContextObjectsExtension>();

            testSubject.ContextObjectsStore.Add(_dummyKey, new object()); // Add context object to ContextObjectsStore
            var markdownPipelineBuilder = new MarkdownPipelineBuilder();

            markdownPipelineBuilder.Extensions.Add(testSubject);
            markdownPipelineBuilder.Extensions.Add(serviceProvider.GetRequiredService <DummyExtension>());
            MarkdownPipeline markdownPipeline = markdownPipelineBuilder.Build();
            var markdownParserContext         = new MarkdownParserContext();

            markdownParserContext.Properties.Add(_dummyKey, dummyValue); // Add context object to MarkdownParserContext, this object should take precedence
            var dummyStringWriter = new StringWriter();

            // Act
            Markdown.ToHtml("dummyMarkdown", dummyStringWriter, markdownPipeline, markdownParserContext);

            // Assert
            _mockRepository.VerifyAll();
        }
        private static void AddContextObjectWithTypeAsKey <T>(MarkdownPipelineBuilder pipelineBuilder, T contextObject)
        {
            ContextObjectsExtension contextObjectsExtension = pipelineBuilder.Extensions.Find <ContextObjectsExtension>();

            if (contextObjectsExtension == null)
            {
                contextObjectsExtension = GetOrCreateServiceProvider().GetRequiredService <ContextObjectsExtension>();
                pipelineBuilder.Extensions.Add(contextObjectsExtension);
            }

            contextObjectsExtension.ContextObjectsStore.Add(typeof(T), contextObject);
        }
Example #3
0
        public void Setup_InsertsContextObjectsStoreIntoBlockParsersIfItDoesNotContainAContextObjectsStore()
        {
            // Arrange
            var dummyContextObjectsStore        = new ContextObjectsStore();
            ContextObjectsExtension testSubject = CreateContextObjectsExtension(dummyContextObjectsStore);
            var dummyMarkdownPipelineBuilder    = new MarkdownPipelineBuilder();

            // Act
            testSubject.Setup(dummyMarkdownPipelineBuilder);

            // Assert
            Assert.Contains(dummyContextObjectsStore, dummyMarkdownPipelineBuilder.BlockParsers);
        }
Example #4
0
        public void Setup_DoesNothingIfBlockParsersContainsAContextObjectsStore()
        {
            // Arrange
            var dummyContextObjectsStore        = new ContextObjectsStore();
            ContextObjectsExtension testSubject = CreateContextObjectsExtension(dummyContextObjectsStore);
            var dummyMarkdownPipelineBuilder    = new MarkdownPipelineBuilder();

            dummyMarkdownPipelineBuilder.BlockParsers.Add(new ContextObjectsStore());

            // Act
            testSubject.Setup(dummyMarkdownPipelineBuilder);

            // Assert
            // Can't use Assert.DoesNotContain here:
            // Because ContextObjectsStore implements IDictionary<object, object>, Xunit compares the ContextObjectsStore instances as dictionaries:
            // - https://github.com/xunit/assert.xunit/blob/92395f59e3ff47d6d5a1edeced9e99ccfef9fd37/Sdk/AssertEqualityComparer.cs#L84
            // They're found to be "equal" because they have the same contents. What we want to check is whether the same reference exists in the collection.
            Assert.NotSame(dummyContextObjectsStore, dummyMarkdownPipelineBuilder.BlockParsers.Find <ContextObjectsStore>());
        }