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:
parent
4f7aab7720
commit
4af7a47aac
|
|
@ -12,19 +12,6 @@ namespace Microsoft.VisualStudio.Editor.Razor
|
||||||
[Export(typeof(TextBufferCodeDocumentProvider))]
|
[Export(typeof(TextBufferCodeDocumentProvider))]
|
||||||
internal class DefaultTextBufferCodeDocumentProvider : 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)
|
public override bool TryGetFromBuffer(ITextBuffer textBuffer, out RazorCodeDocument codeDocument)
|
||||||
{
|
{
|
||||||
if (textBuffer == null)
|
if (textBuffer == null)
|
||||||
|
|
@ -32,7 +19,7 @@ namespace Microsoft.VisualStudio.Editor.Razor
|
||||||
throw new ArgumentNullException(nameof(textBuffer));
|
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;
|
codeDocument = parser.CodeDocument;
|
||||||
return true;
|
return true;
|
||||||
|
|
|
||||||
|
|
@ -3,6 +3,7 @@
|
||||||
|
|
||||||
using Microsoft.AspNetCore.Razor.Language;
|
using Microsoft.AspNetCore.Razor.Language;
|
||||||
using Microsoft.VisualStudio.Text;
|
using Microsoft.VisualStudio.Text;
|
||||||
|
using Microsoft.VisualStudio.Utilities;
|
||||||
using Moq;
|
using Moq;
|
||||||
using Xunit;
|
using Xunit;
|
||||||
|
|
||||||
|
|
@ -11,14 +12,17 @@ namespace Microsoft.VisualStudio.Editor.Razor
|
||||||
public class DefaultTextBufferCodeDocumentProviderTest
|
public class DefaultTextBufferCodeDocumentProviderTest
|
||||||
{
|
{
|
||||||
[Fact]
|
[Fact]
|
||||||
public void TryGetFromBuffer_SucceedsIfParserFromProviderHasCodeDocument()
|
public void TryGetFromBuffer_SucceedsIfParserHasCodeDocument()
|
||||||
{
|
{
|
||||||
// Arrange
|
// Arrange
|
||||||
var expectedCodeDocument = TestRazorCodeDocument.Create("Hello World");
|
var expectedCodeDocument = TestRazorCodeDocument.Create("Hello World");
|
||||||
VisualStudioRazorParser parser = new DefaultVisualStudioRazorParser(expectedCodeDocument);
|
VisualStudioRazorParser parser = new DefaultVisualStudioRazorParser(expectedCodeDocument);
|
||||||
var parserProvider = Mock.Of<RazorEditorFactoryService>(p => p.TryGetParser(It.IsAny<ITextBuffer>(), out parser) == true);
|
var properties = new PropertyCollection()
|
||||||
var textBuffer = Mock.Of<ITextBuffer>();
|
{
|
||||||
var provider = new DefaultTextBufferCodeDocumentProvider(parserProvider);
|
[typeof(VisualStudioRazorParser)] = parser
|
||||||
|
};
|
||||||
|
var textBuffer = Mock.Of<ITextBuffer>(buffer => buffer.Properties == properties);
|
||||||
|
var provider = new DefaultTextBufferCodeDocumentProvider();
|
||||||
|
|
||||||
// Act
|
// Act
|
||||||
var result = provider.TryGetFromBuffer(textBuffer, out var codeDocument);
|
var result = provider.TryGetFromBuffer(textBuffer, out var codeDocument);
|
||||||
|
|
@ -29,13 +33,16 @@ namespace Microsoft.VisualStudio.Editor.Razor
|
||||||
}
|
}
|
||||||
|
|
||||||
[Fact]
|
[Fact]
|
||||||
public void TryGetFromBuffer_FailsIfParserFromProviderMissingCodeDocument()
|
public void TryGetFromBuffer_FailsIfParserMissingCodeDocument()
|
||||||
{
|
{
|
||||||
// Arrange
|
// Arrange
|
||||||
VisualStudioRazorParser parser = new DefaultVisualStudioRazorParser(codeDocument: null);
|
VisualStudioRazorParser parser = new DefaultVisualStudioRazorParser(codeDocument: null);
|
||||||
var parserProvider = Mock.Of<RazorEditorFactoryService>(p => p.TryGetParser(It.IsAny<ITextBuffer>(), out parser) == true);
|
var properties = new PropertyCollection()
|
||||||
var textBuffer = Mock.Of<ITextBuffer>();
|
{
|
||||||
var provider = new DefaultTextBufferCodeDocumentProvider(parserProvider);
|
[typeof(VisualStudioRazorParser)] = parser
|
||||||
|
};
|
||||||
|
var textBuffer = Mock.Of<ITextBuffer>(buffer => buffer.Properties == properties);
|
||||||
|
var provider = new DefaultTextBufferCodeDocumentProvider();
|
||||||
|
|
||||||
// Act
|
// Act
|
||||||
var result = provider.TryGetFromBuffer(textBuffer, out var codeDocument);
|
var result = provider.TryGetFromBuffer(textBuffer, out var codeDocument);
|
||||||
|
|
@ -49,10 +56,8 @@ namespace Microsoft.VisualStudio.Editor.Razor
|
||||||
public void TryGetFromBuffer_FailsIfNoParserIsAvailable()
|
public void TryGetFromBuffer_FailsIfNoParserIsAvailable()
|
||||||
{
|
{
|
||||||
// Arrange
|
// Arrange
|
||||||
VisualStudioRazorParser parser = null;
|
var textBuffer = Mock.Of<ITextBuffer>(buffer => buffer.Properties == new PropertyCollection());
|
||||||
var parserProvider = Mock.Of<RazorEditorFactoryService>(p => p.TryGetParser(It.IsAny<ITextBuffer>(), out parser) == false);
|
var provider = new DefaultTextBufferCodeDocumentProvider();
|
||||||
var textBuffer = Mock.Of<ITextBuffer>();
|
|
||||||
var provider = new DefaultTextBufferCodeDocumentProvider(parserProvider);
|
|
||||||
|
|
||||||
// Act
|
// Act
|
||||||
var result = provider.TryGetFromBuffer(textBuffer, out var codeDocument);
|
var result = provider.TryGetFromBuffer(textBuffer, out var codeDocument);
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue