public async Task nTextViewClosed_UnsubscribesAfterLastTextViewClosed() { // Arrange var textView1 = Mock.Of <ITextView>(MockBehavior.Strict); var textView2 = Mock.Of <ITextView>(MockBehavior.Strict); var buffers = new Collection <ITextBuffer>() { Mock.Of <ITextBuffer>(b => b.ContentType == RazorCoreContentType && b.Properties == new PropertyCollection(), MockBehavior.Strict), Mock.Of <ITextBuffer>(b => b.ContentType == NonRazorCoreContentType && b.Properties == new PropertyCollection(), MockBehavior.Strict), }; var documentTracker = new DefaultVisualStudioDocumentTracker( Dispatcher, JoinableTaskContext, FilePath, ProjectPath, ProjectManager, WorkspaceEditorSettings, Workspace, buffers[0], ImportDocumentManager); buffers[0].Properties.AddProperty(typeof(VisualStudioDocumentTracker), documentTracker); var editorFactoryService = Mock.Of <RazorEditorFactoryService>(MockBehavior.Strict); var documentManager = new DefaultRazorDocumentManager(Dispatcher, JoinableTaskContext, editorFactoryService); // Populate the text views documentTracker.Subscribe(); documentTracker.AddTextView(textView1); documentTracker.AddTextView(textView2); // Act 1 await documentManager.OnTextViewClosedAsync(textView2, buffers); // Assert 1 Assert.True(documentTracker.IsSupportedProject); // Act await documentManager.OnTextViewClosedAsync(textView1, buffers); // Assert 2 Assert.False(documentTracker.IsSupportedProject); }
public void ProjectManager_Changed_TagHelpersChanged_TriggersContextChanged() { // Arrange Project project = null; var workspace = TestWorkspace.Create(ws => { project = ws.AddProject(ProjectInfo.Create(ProjectId.CreateNewId(), new VersionStamp(), "Test1", "TestAssembly", LanguageNames.CSharp, filePath: "C:/Some/Path/TestProject.csproj")); }); var documentTracker = new DefaultVisualStudioDocumentTracker(Dispatcher, FilePath, ProjectPath, ProjectManager, WorkspaceEditorSettings, workspace, TextBuffer, ImportDocumentManager); var projectSnapshot = new DefaultProjectSnapshot(new HostProject(project.FilePath, RazorConfiguration.Default), project); var projectChangedArgs = new ProjectChangeEventArgs(projectSnapshot, ProjectChangeKind.TagHelpersChanged); var called = false; documentTracker.ContextChanged += (sender, args) => { Assert.Equal(ContextChangeKind.TagHelpersChanged, args.Kind); called = true; }; // Act documentTracker.ProjectManager_Changed(null, projectChangedArgs); // Assert Assert.True(called); }
public void ProjectManager_Changed_IgnoresUnknownProject() { // Arrange Project project = null; var workspace = TestWorkspace.Create(ws => { project = ws.AddProject(ProjectInfo.Create(ProjectId.CreateNewId(), new VersionStamp(), "Test1", "TestAssembly", LanguageNames.CSharp, filePath: "C:/Some/Other/Path/TestProject.csproj")); }); var documentTracker = new DefaultVisualStudioDocumentTracker(Dispatcher, FilePath, ProjectPath, ProjectManager, EditorSettingsManager, workspace, TextBuffer, ImportDocumentManager); var projectSnapshot = new DefaultProjectSnapshot(project); var projectChangedArgs = new ProjectChangeEventArgs(projectSnapshot, ProjectChangeKind.Changed); var called = false; documentTracker.ContextChanged += (sender, args) => { called = true; }; // Act documentTracker.ProjectManager_Changed(null, projectChangedArgs); // Assert Assert.False(called); }
public DefaultVisualStudioDocumentTrackerTest() { RazorCoreContentType = Mock.Of <IContentType>(c => c.IsOfType(RazorLanguage.ContentType) == true); TextBuffer = Mock.Of <ITextBuffer>(b => b.ContentType == RazorCoreContentType); FilePath = TestProjectData.SomeProjectFile1.FilePath; ProjectPath = TestProjectData.SomeProject.FilePath; ImportDocumentManager = Mock.Of <ImportDocumentManager>(); WorkspaceEditorSettings = new DefaultWorkspaceEditorSettings(Mock.Of <ForegroundDispatcher>(), Mock.Of <EditorSettingsManager>()); SomeTagHelpers = new List <TagHelperDescriptor>() { TagHelperDescriptorBuilder.Create("test", "test").Build(), }; ProjectManager = new TestProjectSnapshotManager(Dispatcher, Workspace) { AllowNotifyListeners = true }; HostProject = new HostProject(ProjectPath, FallbackRazorConfiguration.MVC_2_1); UpdatedHostProject = new HostProject(ProjectPath, FallbackRazorConfiguration.MVC_2_0); OtherHostProject = new HostProject(TestProjectData.AnotherProject.FilePath, FallbackRazorConfiguration.MVC_2_0); DocumentTracker = new DefaultVisualStudioDocumentTracker( Dispatcher, FilePath, ProjectPath, ProjectManager, WorkspaceEditorSettings, Workspace, TextBuffer, ImportDocumentManager); }
public override VisualStudioDocumentTracker Create(ITextBuffer textBuffer) { if (textBuffer == null) { throw new ArgumentNullException(nameof(textBuffer)); } if (!_textDocumentFactory.TryGetTextDocument(textBuffer, out var textDocument)) { Debug.Fail("Text document should be available from the text buffer."); return(null); } var filePath = textDocument.FilePath; var project = _projectService.GetHostProject(textBuffer); if (project == null) { Debug.Fail("Text buffer should belong to a project."); return(null); } var projectPath = _projectService.GetProjectPath(project); var tracker = new DefaultVisualStudioDocumentTracker(_foregroundDispatcher, filePath, projectPath, _projectManager, _editorSettingsManager, _workspace, textBuffer, _importDocumentManager); return(tracker); }
public void AddTextView_AddsToTextViewCollection() { // Arrange var documentTracker = new DefaultVisualStudioDocumentTracker(Dispatcher, FilePath, ProjectPath, ProjectManager, WorkspaceEditorSettings, Workspace, TextBuffer, ImportDocumentManager); var textView = Mock.Of <ITextView>(); // Act documentTracker.AddTextView(textView); // Assert Assert.Collection(documentTracker.TextViews, v => Assert.Same(v, textView)); }
public void AddTextView_DoesNotAddDuplicateTextViews() { // Arrange var documentTracker = new DefaultVisualStudioDocumentTracker(FilePath, ProjectPath, ProjectManager, EditorSettingsManager, Workspace, TextBuffer, ImportDocumentManager); var textView = Mock.Of <ITextView>(); // Act documentTracker.AddTextView(textView); documentTracker.AddTextView(textView); // Assert Assert.Collection(documentTracker.TextViews, v => Assert.Same(v, textView)); }
public DefaultVisualStudioDocumentTrackerTest() { RazorCoreContentType = Mock.Of <IContentType>(c => c.IsOfType(RazorLanguage.ContentType) == true); TextBuffer = Mock.Of <ITextBuffer>(b => b.ContentType == RazorCoreContentType); FilePath = "C:/Some/Path/TestDocumentTracker.cshtml"; ProjectPath = "C:/Some/Path/TestProject.csproj"; ImportDocumentManager = Mock.Of <ImportDocumentManager>(); WorkspaceEditorSettings = new DefaultWorkspaceEditorSettings(Mock.Of <ForegroundDispatcher>(), Mock.Of <EditorSettingsManager>()); TagHelperResolver = new TestTagHelperResolver(); SomeTagHelpers = new List <TagHelperDescriptor>() { TagHelperDescriptorBuilder.Create("test", "test").Build(), }; HostServices = TestServices.Create( new IWorkspaceService[] { }, new ILanguageService[] { TagHelperResolver, }); Workspace = TestWorkspace.Create(HostServices, w => { WorkspaceProject = w.AddProject(ProjectInfo.Create( ProjectId.CreateNewId(), new VersionStamp(), "Test1", "TestAssembly", LanguageNames.CSharp, filePath: ProjectPath)); }); ProjectManager = new TestProjectSnapshotManager(Dispatcher, Workspace) { AllowNotifyListeners = true }; HostProject = new HostProject(ProjectPath, FallbackRazorConfiguration.MVC_2_1); OtherHostProject = new HostProject(ProjectPath, FallbackRazorConfiguration.MVC_2_0); DocumentTracker = new DefaultVisualStudioDocumentTracker( Dispatcher, FilePath, ProjectPath, ProjectManager, WorkspaceEditorSettings, Workspace, TextBuffer, ImportDocumentManager); }
public void RemoveTextView_RemovesTextViewFromCollection_SingleItem() { // Arrange var documentTracker = new DefaultVisualStudioDocumentTracker(Dispatcher, FilePath, ProjectPath, ProjectManager, WorkspaceEditorSettings, Workspace, TextBuffer, ImportDocumentManager); var textView = Mock.Of <ITextView>(); documentTracker.AddTextView(textView); // Act documentTracker.RemoveTextView(textView); // Assert Assert.Empty(documentTracker.TextViews); }
public void RemoveTextView_NoopsWhenRemovingTextViewNotInCollection() { // Arrange var documentTracker = new DefaultVisualStudioDocumentTracker(Dispatcher, FilePath, ProjectPath, ProjectManager, WorkspaceEditorSettings, Workspace, TextBuffer, ImportDocumentManager); 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)); }
public void Import_Changed_UnrelatedImport_DoesNothing() { // Arrange var documentTracker = new DefaultVisualStudioDocumentTracker(Dispatcher, FilePath, ProjectPath, ProjectManager, WorkspaceEditorSettings, Workspace, TextBuffer, ImportDocumentManager); documentTracker.ContextChanged += (sender, args) => { throw new InvalidOperationException(); }; var importChangedArgs = new ImportChangedEventArgs("path/to/import", FileChangeKind.Changed, new[] { "path/to/differentfile" }); // Act & Assert (Does not throw) documentTracker.Import_Changed(null, importChangedArgs); }
public void OnTextViewOpened_ForRazorTextBuffer_AddsTextViewToTracker() { // Arrange var textView = Mock.Of <ITextView>(); var buffers = new Collection <ITextBuffer>() { Mock.Of <ITextBuffer>(b => b.ContentType == RazorCoreContentType && b.Properties == new PropertyCollection()), }; var documentTracker = new DefaultVisualStudioDocumentTracker(Dispatcher, FilePath, ProjectPath, ProjectManager, WorkspaceEditorSettings, Workspace, buffers[0], ImportDocumentManager) as VisualStudioDocumentTracker; var editorFactoryService = Mock.Of <RazorEditorFactoryService>(factoryService => factoryService.TryGetDocumentTracker(It.IsAny <ITextBuffer>(), out documentTracker) == true); var documentManager = new DefaultRazorDocumentManager(Dispatcher, editorFactoryService); // Act documentManager.OnTextViewOpened(textView, buffers); // Assert Assert.Collection(documentTracker.TextViews, v => Assert.Same(v, textView)); }
public DefaultVisualStudioDocumentTrackerTest() { RazorCoreContentType = Mock.Of <IContentType>(c => c.IsOfType(RazorLanguage.ContentType) && c.IsOfType(RazorConstants.LegacyContentType), MockBehavior.Strict); TextBuffer = Mock.Of <ITextBuffer>(b => b.ContentType == RazorCoreContentType, MockBehavior.Strict); FilePath = TestProjectData.SomeProjectFile1.FilePath; ProjectPath = TestProjectData.SomeProject.FilePath; RootNamespace = TestProjectData.SomeProject.RootNamespace; ImportDocumentManager = new Mock <ImportDocumentManager>(MockBehavior.Strict).Object; Mock.Get(ImportDocumentManager).Setup(m => m.OnSubscribed(It.IsAny <VisualStudioDocumentTracker>())).Verifiable(); Mock.Get(ImportDocumentManager).Setup(m => m.OnUnsubscribed(It.IsAny <VisualStudioDocumentTracker>())).Verifiable(); var projectSnapshotManagerDispatcher = new Mock <ProjectSnapshotManagerDispatcher>(MockBehavior.Strict); projectSnapshotManagerDispatcher.Setup(d => d.AssertDispatcherThread(It.IsAny <string>())).Verifiable(); WorkspaceEditorSettings = new DefaultWorkspaceEditorSettings(projectSnapshotManagerDispatcher.Object, Mock.Of <EditorSettingsManager>(MockBehavior.Strict)); SomeTagHelpers = new List <TagHelperDescriptor>() { TagHelperDescriptorBuilder.Create("test", "test").Build(), }; ProjectManager = new TestProjectSnapshotManager(Dispatcher, Workspace) { AllowNotifyListeners = true }; HostProject = new HostProject(ProjectPath, FallbackRazorConfiguration.MVC_2_1, RootNamespace); UpdatedHostProject = new HostProject(ProjectPath, FallbackRazorConfiguration.MVC_2_0, RootNamespace); OtherHostProject = new HostProject(TestProjectData.AnotherProject.FilePath, FallbackRazorConfiguration.MVC_2_0, TestProjectData.AnotherProject.RootNamespace); DocumentTracker = new DefaultVisualStudioDocumentTracker( Dispatcher, JoinableTaskFactory.Context, FilePath, ProjectPath, ProjectManager, WorkspaceEditorSettings, Workspace, TextBuffer, ImportDocumentManager); }
public void EditorSettingsManager_Changed_TriggersContextChanged() { // Arrange var documentTracker = new DefaultVisualStudioDocumentTracker(Dispatcher, FilePath, ProjectPath, ProjectManager, WorkspaceEditorSettings, Workspace, TextBuffer, ImportDocumentManager); var called = false; documentTracker.ContextChanged += (sender, args) => { Assert.Equal(ContextChangeKind.EditorSettingsChanged, args.Kind); called = true; Assert.Equal(ContextChangeKind.EditorSettingsChanged, args.Kind); }; // Act documentTracker.EditorSettingsManager_Changed(null, null); // Assert Assert.True(called); }
public void Subscribe_SetsSupportedProjectAndTriggersContextChanged() { // Arrange var documentTracker = new DefaultVisualStudioDocumentTracker(Dispatcher, FilePath, ProjectPath, ProjectManager, WorkspaceEditorSettings, Workspace, TextBuffer, ImportDocumentManager); var called = false; documentTracker.ContextChanged += (sender, args) => { called = true; Assert.Equal(ContextChangeKind.ProjectChanged, args.Kind); }; // Act documentTracker.Subscribe(); // Assert Assert.True(called); Assert.True(documentTracker.IsSupportedProject); }
public void RemoveTextView_RemovesTextViewFromCollection_MultipleItems() { // Arrange var documentTracker = new DefaultVisualStudioDocumentTracker(FilePath, ProjectPath, ProjectManager, EditorSettingsManager, Workspace, TextBuffer, ImportDocumentManager); 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)); }
public void Import_Changed_ImportAssociatedWithDocument_TriggersContextChanged() { // Arrange var documentTracker = new DefaultVisualStudioDocumentTracker(Dispatcher, FilePath, ProjectPath, ProjectManager, WorkspaceEditorSettings, Workspace, TextBuffer, ImportDocumentManager); var called = false; documentTracker.ContextChanged += (sender, args) => { Assert.Equal(ContextChangeKind.ImportsChanged, args.Kind); called = true; }; var importChangedArgs = new ImportChangedEventArgs("path/to/import", FileChangeKind.Changed, new[] { FilePath }); // Act documentTracker.Import_Changed(null, importChangedArgs); // Assert Assert.True(called); }
public async Task OnTextViewClosed_ForAnyTextBufferWithTracker_RemovesTextView() { // Arrange var textView1 = Mock.Of <ITextView>(MockBehavior.Strict); var textView2 = Mock.Of <ITextView>(MockBehavior.Strict); var buffers = new Collection <ITextBuffer>() { Mock.Of <ITextBuffer>(b => b.ContentType == RazorCoreContentType && b.Properties == new PropertyCollection(), MockBehavior.Strict), Mock.Of <ITextBuffer>(b => b.ContentType == NonRazorCoreContentType && b.Properties == new PropertyCollection(), MockBehavior.Strict), }; // Preload the buffer's properties with a tracker, so it's like we've already tracked this one. var documentTracker = new DefaultVisualStudioDocumentTracker( Dispatcher, JoinableTaskContext, FilePath, ProjectPath, ProjectManager, WorkspaceEditorSettings, Workspace, buffers[0], ImportDocumentManager); documentTracker.AddTextView(textView1); documentTracker.AddTextView(textView2); buffers[0].Properties.AddProperty(typeof(VisualStudioDocumentTracker), documentTracker); documentTracker = new DefaultVisualStudioDocumentTracker( Dispatcher, JoinableTaskContext, FilePath, ProjectPath, ProjectManager, WorkspaceEditorSettings, Workspace, buffers[1], ImportDocumentManager); documentTracker.AddTextView(textView1); documentTracker.AddTextView(textView2); buffers[1].Properties.AddProperty(typeof(VisualStudioDocumentTracker), documentTracker); var editorFactoryService = Mock.Of <RazorEditorFactoryService>(MockBehavior.Strict); var documentManager = new DefaultRazorDocumentManager(Dispatcher, JoinableTaskContext, editorFactoryService); // Act await documentManager.OnTextViewClosedAsync(textView2, buffers); // Assert documentTracker = buffers[0].Properties.GetProperty <DefaultVisualStudioDocumentTracker>(typeof(VisualStudioDocumentTracker)); Assert.Collection(documentTracker.TextViews, v => Assert.Same(v, textView1)); documentTracker = buffers[1].Properties.GetProperty <DefaultVisualStudioDocumentTracker>(typeof(VisualStudioDocumentTracker)); Assert.Collection(documentTracker.TextViews, v => Assert.Same(v, textView1)); }
public void OnTextViewOpened_SubscribesAfterFirstTextViewOpened() { // Arrange var textView = Mock.Of <ITextView>(); var buffers = new Collection <ITextBuffer>() { Mock.Of <ITextBuffer>(b => b.ContentType == RazorCoreContentType && b.Properties == new PropertyCollection()), Mock.Of <ITextBuffer>(b => b.ContentType == NonRazorCoreContentType && b.Properties == new PropertyCollection()), }; var documentTracker = new DefaultVisualStudioDocumentTracker(Dispatcher, FilePath, ProjectPath, ProjectManager, WorkspaceEditorSettings, Workspace, buffers[0], ImportDocumentManager) as VisualStudioDocumentTracker; var editorFactoryService = Mock.Of <RazorEditorFactoryService>(f => f.TryGetDocumentTracker(It.IsAny <ITextBuffer>(), out documentTracker) == true); var documentManager = new DefaultRazorDocumentManager(Dispatcher, editorFactoryService); // Assert 1 Assert.False(documentTracker.IsSupportedProject); // Act documentManager.OnTextViewOpened(textView, buffers); // Assert 2 Assert.True(documentTracker.IsSupportedProject); }
public void ProjectManager_Changed_ProjectChanged_TriggersContextChanged() { // Arrange var documentTracker = new DefaultVisualStudioDocumentTracker(FilePath, ProjectPath, ProjectManager, EditorSettingsManager, Workspace, TextBuffer, ImportDocumentManager); var project = new AdhocWorkspace().AddProject(ProjectInfo.Create(ProjectId.CreateNewId(), new VersionStamp(), "Test1", "TestAssembly", LanguageNames.CSharp, filePath: "C:/Some/Path/TestProject.csproj")); var projectSnapshot = new DefaultProjectSnapshot(project); var projectChangedArgs = new ProjectChangeEventArgs(projectSnapshot, ProjectChangeKind.Changed); var called = false; documentTracker.ContextChanged += (sender, args) => { Assert.Equal(ContextChangeKind.ProjectChanged, args.Kind); called = true; }; // Act documentTracker.ProjectManager_Changed(null, projectChangedArgs); // Assert Assert.True(called); }
public override VisualStudioDocumentTracker Create(ITextBuffer textBuffer) { if (textBuffer == null) { throw new ArgumentNullException(nameof(textBuffer)); } if (!_textDocumentFactory.TryGetTextDocument(textBuffer, out var textDocument)) { Debug.Fail("Text document should be available from the text buffer."); return(null); } if (!_projectPathProvider.TryGetProjectPath(textBuffer, out var projectPath)) { return(null); } var filePath = textDocument.FilePath; var tracker = new DefaultVisualStudioDocumentTracker( _projectSnapshotManagerDispatcher, _joinableTaskContext, filePath, projectPath, _projectManager, _workspaceEditorSettings, _workspace, textBuffer, _importDocumentManager); return(tracker); }