Update code doc provider to only rely on VSRazorParser.

- Prior to this change the code document provider took in many sub-providers to allow for understanding of the old RazorEditorParser AND VisualStudioRazorParser. Now that RazorEditorParser is gone we can also change the code doc provider.
This commit is contained in:
N. Taylor Mullen 2017-11-27 16:54:53 -08:00
parent 0a76ad7017
commit 345eb29c62
2 changed files with 10 additions and 67 deletions

View File

@ -14,25 +14,25 @@ namespace Microsoft.VisualStudio.Editor.Razor
internal class DefaultCodeDocumentProvider : RazorCodeDocumentProvider
{
private readonly RazorTextBufferProvider _bufferProvider;
private readonly IEnumerable<TextBufferCodeDocumentProvider> _codeDocumentProviders;
private readonly TextBufferCodeDocumentProvider _codeDocumentProvider;
[ImportingConstructor]
public DefaultCodeDocumentProvider(
RazorTextBufferProvider bufferProvider,
[ImportMany] IEnumerable<TextBufferCodeDocumentProvider> codeDocumentProviders)
TextBufferCodeDocumentProvider codeDocumentProvider)
{
if (bufferProvider == null)
{
throw new ArgumentNullException(nameof(bufferProvider));
}
if (codeDocumentProviders == null)
if (codeDocumentProvider == null)
{
throw new ArgumentNullException(nameof(codeDocumentProviders));
throw new ArgumentNullException(nameof(codeDocumentProvider));
}
_bufferProvider = bufferProvider;
_codeDocumentProviders = codeDocumentProviders;
_codeDocumentProvider = codeDocumentProvider;
}
public override bool TryGetFromDocument(TextDocument document, out RazorCodeDocument codeDocument)
@ -49,12 +49,9 @@ namespace Microsoft.VisualStudio.Editor.Razor
return false;
}
foreach (var codeDocumentProvider in _codeDocumentProviders)
if (_codeDocumentProvider.TryGetFromBuffer(textBuffer, out codeDocument))
{
if (codeDocumentProvider.TryGetFromBuffer(textBuffer, out codeDocument))
{
return true;
}
return true;
}
// A Razor code document has not yet been associated with the buffer yet.

View File

@ -23,7 +23,7 @@ namespace Microsoft.VisualStudio.Editor.Razor
var vsCodeDocumentProvider = new Mock<TextBufferCodeDocumentProvider>();
vsCodeDocumentProvider.Setup(provider => provider.TryGetFromBuffer(It.IsAny<ITextBuffer>(), out codeDocument))
.Returns(true);
var codeDocumentProvider = new DefaultCodeDocumentProvider(bufferProvider.Object, new[] { vsCodeDocumentProvider.Object });
var codeDocumentProvider = new DefaultCodeDocumentProvider(bufferProvider.Object, vsCodeDocumentProvider.Object);
var document = new Mock<TextDocument>();
// Act
@ -46,7 +46,7 @@ namespace Microsoft.VisualStudio.Editor.Razor
var vsCodeDocumentProvider = new Mock<TextBufferCodeDocumentProvider>();
vsCodeDocumentProvider.Setup(provider => provider.TryGetFromBuffer(It.Is<ITextBuffer>(val => val == textBuffer), out codeDocument))
.Returns(false);
var codeDocumentProvider = new DefaultCodeDocumentProvider(bufferProvider.Object, new[] { vsCodeDocumentProvider.Object });
var codeDocumentProvider = new DefaultCodeDocumentProvider(bufferProvider.Object, vsCodeDocumentProvider.Object);
var document = new Mock<TextDocument>();
// Act
@ -57,60 +57,6 @@ namespace Microsoft.VisualStudio.Editor.Razor
Assert.Null(codeDocument);
}
[Fact]
public void TryGetFromDocument_ReturnsTrueIfVSProviderCanGetCodeDocumentFromOneProvider()
{
// Arrange
var textBuffer = new Mock<ITextBuffer>().Object;
RazorCodeDocument codeDocument;
var expectedCodeDocument = new Mock<RazorCodeDocument>().Object;
var bufferProvider = new Mock<RazorTextBufferProvider>();
bufferProvider.Setup(provider => provider.TryGetFromDocument(It.IsAny<TextDocument>(), out textBuffer))
.Returns(true);
var failureVSCodeDocumentProvider = new Mock<TextBufferCodeDocumentProvider>();
failureVSCodeDocumentProvider.Setup(provider => provider.TryGetFromBuffer(It.Is<ITextBuffer>(val => val == textBuffer), out codeDocument))
.Returns(false);
var successVSCodeDocumentProvider = new Mock<TextBufferCodeDocumentProvider>();
successVSCodeDocumentProvider.Setup(provider => provider.TryGetFromBuffer(It.Is<ITextBuffer>(val => val == textBuffer), out expectedCodeDocument))
.Returns(true);
var codeDocumentProvider = new DefaultCodeDocumentProvider(bufferProvider.Object, new[] { failureVSCodeDocumentProvider.Object, successVSCodeDocumentProvider.Object });
var document = new Mock<TextDocument>();
// Act
var result = codeDocumentProvider.TryGetFromDocument(document.Object, out codeDocument);
// Assert
Assert.True(result);
Assert.Same(expectedCodeDocument, codeDocument);
}
[Fact]
public void TryGetFromDocument_ReturnsFirstProvidersResultThatGetsCodeDocument()
{
// Arrange
var textBuffer = new Mock<ITextBuffer>().Object;
var expectedCodeDocument1 = new Mock<RazorCodeDocument>().Object;
var expectedCodeDocument2 = new Mock<RazorCodeDocument>().Object;
var bufferProvider = new Mock<RazorTextBufferProvider>();
bufferProvider.Setup(provider => provider.TryGetFromDocument(It.IsAny<TextDocument>(), out textBuffer))
.Returns(true);
var vsCodeDocumentProvider1 = new Mock<TextBufferCodeDocumentProvider>();
vsCodeDocumentProvider1.Setup(provider => provider.TryGetFromBuffer(It.Is<ITextBuffer>(val => val == textBuffer), out expectedCodeDocument1))
.Returns(true);
var vsCodeDocumentProvider2 = new Mock<TextBufferCodeDocumentProvider>();
vsCodeDocumentProvider2.Setup(provider => provider.TryGetFromBuffer(It.Is<ITextBuffer>(val => val == textBuffer), out expectedCodeDocument2))
.Returns(true);
var codeDocumentProvider = new DefaultCodeDocumentProvider(bufferProvider.Object, new[] { vsCodeDocumentProvider1.Object, vsCodeDocumentProvider2.Object });
var document = new Mock<TextDocument>();
// Act
var result = codeDocumentProvider.TryGetFromDocument(document.Object, out var codeDocument);
// Assert
Assert.True(result);
Assert.Same(expectedCodeDocument1, codeDocument);
}
[Fact]
public void TryGetFromDocument_ReturnsTrueIfBothBufferAndVSProviderReturnTrue()
{
@ -123,7 +69,7 @@ namespace Microsoft.VisualStudio.Editor.Razor
var vsCodeDocumentProvider = new Mock<TextBufferCodeDocumentProvider>();
vsCodeDocumentProvider.Setup(provider => provider.TryGetFromBuffer(It.Is<ITextBuffer>(val => val == textBuffer), out expectedCodeDocument))
.Returns(true);
var codeDocumentProvider = new DefaultCodeDocumentProvider(bufferProvider.Object, new[] { vsCodeDocumentProvider.Object });
var codeDocumentProvider = new DefaultCodeDocumentProvider(bufferProvider.Object, vsCodeDocumentProvider.Object);
var document = new Mock<TextDocument>();
// Act