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