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))]
|
||||
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;
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
|
|
|||
Loading…
Reference in New Issue