197 lines
7.4 KiB
C#
197 lines
7.4 KiB
C#
// Copyright (c) .NET Foundation. All rights reserved.
|
|
// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
|
|
|
|
using System.Collections.Generic;
|
|
using Microsoft.CodeAnalysis;
|
|
using Microsoft.CodeAnalysis.Razor;
|
|
using Microsoft.CodeAnalysis.Razor.Editor;
|
|
using Microsoft.CodeAnalysis.Razor.ProjectSystem;
|
|
using Microsoft.VisualStudio.Shell.Interop;
|
|
using Microsoft.VisualStudio.Text;
|
|
using Microsoft.VisualStudio.Text.Editor;
|
|
using Microsoft.VisualStudio.Utilities;
|
|
using Moq;
|
|
using Xunit;
|
|
|
|
namespace Microsoft.VisualStudio.LanguageServices.Razor.Editor
|
|
{
|
|
public class DefaultVisualStudioDocumentTrackerTest
|
|
{
|
|
private IContentType RazorContentType { get; } = Mock.Of<IContentType>(c => c.IsOfType(RazorLanguage.ContentType) == true);
|
|
|
|
private ITextBuffer TextBuffer => Mock.Of<ITextBuffer>(b => b.ContentType == RazorContentType);
|
|
|
|
private string FilePath => "C:/Some/Path/TestDocumentTracker.cshtml";
|
|
|
|
private ProjectSnapshotManager ProjectManager => Mock.Of<ProjectSnapshotManager>(p => p.Projects == new List<ProjectSnapshot>());
|
|
|
|
private TextBufferProjectService ProjectService => Mock.Of<TextBufferProjectService>(
|
|
s => s.GetHierarchy(It.IsAny<ITextBuffer>()) == Mock.Of<IVsHierarchy>() &&
|
|
s.IsSupportedProject(It.IsAny<IVsHierarchy>()) == true &&
|
|
s.GetProjectPath(It.IsAny<IVsHierarchy>()) == "C:/Some/Path/TestProject.csproj");
|
|
|
|
private EditorSettingsManagerInternal EditorSettingsManager => new DefaultEditorSettingsManagerInternal();
|
|
|
|
private Workspace Workspace => new AdhocWorkspace();
|
|
|
|
[Fact]
|
|
public void EditorSettingsManager_Changed_TriggersContextChanged()
|
|
{
|
|
// Arrange
|
|
var documentTracker = new DefaultVisualStudioDocumentTracker(FilePath, ProjectManager, ProjectService, EditorSettingsManager, Workspace, TextBuffer);
|
|
var called = false;
|
|
documentTracker.ContextChanged += (sender, args) =>
|
|
{
|
|
called = true;
|
|
};
|
|
|
|
// Act
|
|
documentTracker.EditorSettingsManager_Changed(null, null);
|
|
|
|
// Assert
|
|
Assert.True(called);
|
|
}
|
|
|
|
[Fact]
|
|
public void AddTextView_AddsToTextViewCollection()
|
|
{
|
|
// Arrange
|
|
var documentTracker = new DefaultVisualStudioDocumentTracker(FilePath, ProjectManager, ProjectService, EditorSettingsManager, Workspace, TextBuffer);
|
|
var textView = Mock.Of<ITextView>();
|
|
|
|
// Act
|
|
documentTracker.AddTextView(textView);
|
|
|
|
// Assert
|
|
Assert.Collection(documentTracker.TextViews, v => Assert.Same(v, textView));
|
|
}
|
|
|
|
[Fact]
|
|
public void AddTextView_SubscribesAfterFirstTextViewAdded()
|
|
{
|
|
// Arrange
|
|
var documentTracker = new DefaultVisualStudioDocumentTracker(FilePath, ProjectManager, ProjectService, EditorSettingsManager, Workspace, TextBuffer);
|
|
var textView = Mock.Of<ITextView>();
|
|
|
|
// Assert - 1
|
|
Assert.False(documentTracker.IsSupportedProject);
|
|
|
|
// Act
|
|
documentTracker.AddTextView(textView);
|
|
|
|
// Assert - 2
|
|
Assert.True(documentTracker.IsSupportedProject);
|
|
}
|
|
|
|
[Fact]
|
|
public void AddTextView_DoesNotAddDuplicateTextViews()
|
|
{
|
|
// Arrange
|
|
var documentTracker = new DefaultVisualStudioDocumentTracker(FilePath, ProjectManager, ProjectService, EditorSettingsManager, Workspace, TextBuffer);
|
|
var textView = Mock.Of<ITextView>();
|
|
|
|
// Act
|
|
documentTracker.AddTextView(textView);
|
|
documentTracker.AddTextView(textView);
|
|
|
|
// Assert
|
|
Assert.Collection(documentTracker.TextViews, v => Assert.Same(v, textView));
|
|
}
|
|
|
|
[Fact]
|
|
public void AddTextView_AddsMultipleTextViewsToCollection()
|
|
{
|
|
// Arrange
|
|
var documentTracker = new DefaultVisualStudioDocumentTracker(FilePath, ProjectManager, ProjectService, EditorSettingsManager, Workspace, TextBuffer);
|
|
var textView1 = Mock.Of<ITextView>();
|
|
var textView2 = Mock.Of<ITextView>();
|
|
|
|
// Act
|
|
documentTracker.AddTextView(textView1);
|
|
documentTracker.AddTextView(textView2);
|
|
|
|
// Assert
|
|
Assert.Collection(
|
|
documentTracker.TextViews,
|
|
v => Assert.Same(v, textView1),
|
|
v => Assert.Same(v, textView2));
|
|
}
|
|
|
|
[Fact]
|
|
public void RemoveTextView_RemovesTextViewFromCollection_SingleItem()
|
|
{
|
|
// Arrange
|
|
var documentTracker = new DefaultVisualStudioDocumentTracker(FilePath, ProjectManager, ProjectService, EditorSettingsManager, Workspace, TextBuffer);
|
|
var textView = Mock.Of<ITextView>();
|
|
documentTracker.AddTextView(textView);
|
|
|
|
// Act
|
|
documentTracker.RemoveTextView(textView);
|
|
|
|
// Assert
|
|
Assert.Empty(documentTracker.TextViews);
|
|
}
|
|
|
|
[Fact]
|
|
public void RemoveTextView_RemovesTextViewFromCollection_MultipleItems()
|
|
{
|
|
// Arrange
|
|
var documentTracker = new DefaultVisualStudioDocumentTracker(FilePath, ProjectManager, ProjectService, EditorSettingsManager, Workspace, TextBuffer);
|
|
var textView1 = Mock.Of<ITextView>();
|
|
var textView2 = Mock.Of<ITextView>();
|
|
var textView3 = Mock.Of<ITextView>();
|
|
documentTracker.AddTextView(textView1);
|
|
documentTracker.AddTextView(textView2);
|
|
documentTracker.AddTextView(textView3);
|
|
|
|
// Act
|
|
documentTracker.RemoveTextView(textView2);
|
|
|
|
// Assert
|
|
Assert.Collection(
|
|
documentTracker.TextViews,
|
|
v => Assert.Same(v, textView1),
|
|
v => Assert.Same(v, textView3));
|
|
}
|
|
|
|
[Fact]
|
|
public void RemoveTextView_NoopsWhenRemovingTextViewNotInCollection()
|
|
{
|
|
// Arrange
|
|
var documentTracker = new DefaultVisualStudioDocumentTracker(FilePath, ProjectManager, ProjectService, EditorSettingsManager, Workspace, TextBuffer);
|
|
var textView1 = Mock.Of<ITextView>();
|
|
documentTracker.AddTextView(textView1);
|
|
var textView2 = Mock.Of<ITextView>();
|
|
|
|
// Act
|
|
documentTracker.RemoveTextView(textView2);
|
|
|
|
// Assert
|
|
Assert.Collection(documentTracker.TextViews, v => Assert.Same(v, textView1));
|
|
}
|
|
|
|
[Fact]
|
|
public void RemoveTextView_UnsubscribesAfterLastTextViewRemoved()
|
|
{
|
|
// Arrange
|
|
var documentTracker = new DefaultVisualStudioDocumentTracker(FilePath, ProjectManager, ProjectService, EditorSettingsManager, Workspace, TextBuffer);
|
|
var textView1 = Mock.Of<ITextView>();
|
|
var textView2 = Mock.Of<ITextView>();
|
|
documentTracker.AddTextView(textView1);
|
|
documentTracker.AddTextView(textView2);
|
|
|
|
// Act - 1
|
|
documentTracker.RemoveTextView(textView1);
|
|
|
|
// Assert - 1
|
|
Assert.True(documentTracker.IsSupportedProject);
|
|
|
|
// Act - 2
|
|
documentTracker.RemoveTextView(textView2);
|
|
|
|
// Assert - 2
|
|
Assert.False(documentTracker.IsSupportedProject);
|
|
}
|
|
}
|
|
}
|