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.
This commit is contained in:
N. Taylor Mullen 2017-11-20 01:55:49 -08:00
parent 4f7aab7720
commit 4af7a47aac
2 changed files with 18 additions and 26 deletions

View File

@ -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;

View File

@ -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<RazorEditorFactoryService>(p => p.TryGetParser(It.IsAny<ITextBuffer>(), out parser) == true);
var textBuffer = Mock.Of<ITextBuffer>();
var provider = new DefaultTextBufferCodeDocumentProvider(parserProvider);
var properties = new PropertyCollection()
{
[typeof(VisualStudioRazorParser)] = parser
};
var textBuffer = Mock.Of<ITextBuffer>(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<RazorEditorFactoryService>(p => p.TryGetParser(It.IsAny<ITextBuffer>(), out parser) == true);
var textBuffer = Mock.Of<ITextBuffer>();
var provider = new DefaultTextBufferCodeDocumentProvider(parserProvider);
var properties = new PropertyCollection()
{
[typeof(VisualStudioRazorParser)] = parser
};
var textBuffer = Mock.Of<ITextBuffer>(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<RazorEditorFactoryService>(p => p.TryGetParser(It.IsAny<ITextBuffer>(), out parser) == false);
var textBuffer = Mock.Of<ITextBuffer>();
var provider = new DefaultTextBufferCodeDocumentProvider(parserProvider);
var textBuffer = Mock.Of<ITextBuffer>(buffer => buffer.Properties == new PropertyCollection());
var provider = new DefaultTextBufferCodeDocumentProvider();
// Act
var result = provider.TryGetFromBuffer(textBuffer, out var codeDocument);