From 4af7a47aac9179aa3030ceba090ab614dc2adb2b Mon Sep 17 00:00:00 2001 From: "N. Taylor Mullen" Date: Mon, 20 Nov 2017 01:55:49 -0800 Subject: [PATCH] Change code document provider to work in old Razor. - Prior to this the old code document provider would utilize the editor factory service which would incorrectly create a parser for older Razor documents. This was wrong on many levels. - Updated tests to react to new expectations. --- .../DefaultTextBufferCodeDocumentProvider.cs | 15 +--------- ...faultTextBufferCodeDocumentProviderTest.cs | 29 +++++++++++-------- 2 files changed, 18 insertions(+), 26 deletions(-) diff --git a/src/Microsoft.VisualStudio.Editor.Razor/DefaultTextBufferCodeDocumentProvider.cs b/src/Microsoft.VisualStudio.Editor.Razor/DefaultTextBufferCodeDocumentProvider.cs index 3298c414d0..a9df7a9c45 100644 --- a/src/Microsoft.VisualStudio.Editor.Razor/DefaultTextBufferCodeDocumentProvider.cs +++ b/src/Microsoft.VisualStudio.Editor.Razor/DefaultTextBufferCodeDocumentProvider.cs @@ -12,19 +12,6 @@ namespace Microsoft.VisualStudio.Editor.Razor [Export(typeof(TextBufferCodeDocumentProvider))] internal class DefaultTextBufferCodeDocumentProvider : TextBufferCodeDocumentProvider { - private readonly RazorEditorFactoryService _editorFactoryService; - - [ImportingConstructor] - public DefaultTextBufferCodeDocumentProvider(RazorEditorFactoryService editorFactoryService) - { - if (editorFactoryService == null) - { - throw new ArgumentNullException(nameof(editorFactoryService)); - } - - _editorFactoryService = editorFactoryService; - } - public override bool TryGetFromBuffer(ITextBuffer textBuffer, out RazorCodeDocument codeDocument) { if (textBuffer == null) @@ -32,7 +19,7 @@ namespace Microsoft.VisualStudio.Editor.Razor throw new ArgumentNullException(nameof(textBuffer)); } - if (_editorFactoryService.TryGetParser(textBuffer, out var parser) && parser.CodeDocument != null) + if (textBuffer.Properties.TryGetProperty(typeof(VisualStudioRazorParser), out VisualStudioRazorParser parser) && parser.CodeDocument != null) { codeDocument = parser.CodeDocument; return true; diff --git a/test/Microsoft.VisualStudio.Editor.Razor.Test/DefaultTextBufferCodeDocumentProviderTest.cs b/test/Microsoft.VisualStudio.Editor.Razor.Test/DefaultTextBufferCodeDocumentProviderTest.cs index 12ebfd2330..8daedb4d73 100644 --- a/test/Microsoft.VisualStudio.Editor.Razor.Test/DefaultTextBufferCodeDocumentProviderTest.cs +++ b/test/Microsoft.VisualStudio.Editor.Razor.Test/DefaultTextBufferCodeDocumentProviderTest.cs @@ -3,6 +3,7 @@ using Microsoft.AspNetCore.Razor.Language; using Microsoft.VisualStudio.Text; +using Microsoft.VisualStudio.Utilities; using Moq; using Xunit; @@ -11,14 +12,17 @@ namespace Microsoft.VisualStudio.Editor.Razor public class DefaultTextBufferCodeDocumentProviderTest { [Fact] - public void TryGetFromBuffer_SucceedsIfParserFromProviderHasCodeDocument() + public void TryGetFromBuffer_SucceedsIfParserHasCodeDocument() { // Arrange var expectedCodeDocument = TestRazorCodeDocument.Create("Hello World"); VisualStudioRazorParser parser = new DefaultVisualStudioRazorParser(expectedCodeDocument); - var parserProvider = Mock.Of(p => p.TryGetParser(It.IsAny(), out parser) == true); - var textBuffer = Mock.Of(); - var provider = new DefaultTextBufferCodeDocumentProvider(parserProvider); + var properties = new PropertyCollection() + { + [typeof(VisualStudioRazorParser)] = parser + }; + var textBuffer = Mock.Of(buffer => buffer.Properties == properties); + var provider = new DefaultTextBufferCodeDocumentProvider(); // Act var result = provider.TryGetFromBuffer(textBuffer, out var codeDocument); @@ -29,13 +33,16 @@ namespace Microsoft.VisualStudio.Editor.Razor } [Fact] - public void TryGetFromBuffer_FailsIfParserFromProviderMissingCodeDocument() + public void TryGetFromBuffer_FailsIfParserMissingCodeDocument() { // Arrange VisualStudioRazorParser parser = new DefaultVisualStudioRazorParser(codeDocument: null); - var parserProvider = Mock.Of(p => p.TryGetParser(It.IsAny(), out parser) == true); - var textBuffer = Mock.Of(); - var provider = new DefaultTextBufferCodeDocumentProvider(parserProvider); + var properties = new PropertyCollection() + { + [typeof(VisualStudioRazorParser)] = parser + }; + var textBuffer = Mock.Of(buffer => buffer.Properties == properties); + var provider = new DefaultTextBufferCodeDocumentProvider(); // Act var result = provider.TryGetFromBuffer(textBuffer, out var codeDocument); @@ -49,10 +56,8 @@ namespace Microsoft.VisualStudio.Editor.Razor public void TryGetFromBuffer_FailsIfNoParserIsAvailable() { // Arrange - VisualStudioRazorParser parser = null; - var parserProvider = Mock.Of(p => p.TryGetParser(It.IsAny(), out parser) == false); - var textBuffer = Mock.Of(); - var provider = new DefaultTextBufferCodeDocumentProvider(parserProvider); + var textBuffer = Mock.Of(buffer => buffer.Properties == new PropertyCollection()); + var provider = new DefaultTextBufferCodeDocumentProvider(); // Act var result = provider.TryGetFromBuffer(textBuffer, out var codeDocument);