public void TryMigrateDocumentsFromRemovedProject_MigratesDocumentsToMiscProject()
        {
            // Arrange
            var documentFilePath1      = "/C:/path/to/some/document1.cshtml";
            var documentFilePath2      = "/C:/path/to/some/document2.cshtml";
            var miscellaneousProject   = TestProjectSnapshot.Create("/__MISC_PROJECT__");
            var removedProject         = TestProjectSnapshot.Create("/C:/path/to/some/project.csproj", new[] { documentFilePath1, documentFilePath2 });
            var projectResolver        = new TestProjectResolver(new Dictionary <string, ProjectSnapshot>(), miscellaneousProject);
            var migratedDocuments      = new List <HostDocument>();
            var projectSnapshotManager = new Mock <ProjectSnapshotManagerBase>(MockBehavior.Strict);

            projectSnapshotManager.Setup(manager => manager.DocumentAdded(It.IsAny <HostProject>(), It.IsAny <HostDocument>(), It.IsAny <TextLoader>()))
            .Callback <HostProject, HostDocument, TextLoader>((hostProject, hostDocument, textLoader) =>
            {
                Assert.Same(miscellaneousProject.HostProject, hostProject);
                Assert.NotNull(textLoader);

                migratedDocuments.Add(hostDocument);
            });
            var projectService = CreateProjectService(projectResolver, projectSnapshotManager.Object);

            // Act
            projectService.TryMigrateDocumentsFromRemovedProject(removedProject);

            // Assert
            Assert.Collection(migratedDocuments.OrderBy(doc => doc.FilePath),
                              document => Assert.Equal(documentFilePath1, document.FilePath),
                              document => Assert.Equal(documentFilePath2, document.FilePath));
        }
        public void UpdateDocument_ChangesDocumentInMiscProject()
        {
            // Arrange
            var documentFilePath     = "/C:/path/to/document.cshtml";
            var miscellaneousProject = TestProjectSnapshot.Create("/__MISC_PROJECT__", new[] { documentFilePath });
            var projectResolver      = new TestProjectResolver(
                new Dictionary <string, ProjectSnapshot>(),
                TestProjectSnapshot.Create("/__MISC_PROJECT__"));
            var newText = SourceText.From("Something New");
            var projectSnapshotManager = new Mock <ProjectSnapshotManagerBase>(MockBehavior.Strict);

            projectSnapshotManager.Setup(manager => manager.DocumentChanged(miscellaneousProject.FilePath, documentFilePath, newText))
            .Callback <string, string, SourceText>((projectPath, documentPath, sourceText) =>
            {
                Assert.Equal(miscellaneousProject.FilePath, projectPath);
                Assert.Equal(documentFilePath, documentPath);
                Assert.Same(newText, sourceText);
            });
            var projectService = CreateProjectService(projectResolver, projectSnapshotManager.Object);

            // Act
            projectService.UpdateDocument(documentFilePath, newText, 1337);

            // Assert
            projectSnapshotManager.VerifyAll();
        }
        public void UpdateDocument_TracksKnownDocumentVersion()
        {
            // Arrange
            var documentFilePath = "/C:/path/to/document.cshtml";
            var ownerProject     = TestProjectSnapshot.Create("/C:/path/to/project.csproj", new[] { documentFilePath });
            var projectResolver  = new TestProjectResolver(
                new Dictionary <string, ProjectSnapshot>
            {
                [documentFilePath] = ownerProject
            },
                TestProjectSnapshot.Create("/__MISC_PROJECT__"));
            DocumentSnapshot documentSnapshot = TestDocumentSnapshot.Create(documentFilePath);
            var documentResolver     = Mock.Of <DocumentResolver>(resolver => resolver.TryResolveDocument(It.IsAny <string>(), out documentSnapshot) == true);
            var documentVersionCache = new Mock <DocumentVersionCache>(MockBehavior.Strict);

            documentVersionCache.Setup(cache => cache.TrackDocumentVersion(documentSnapshot, It.IsAny <long>()))
            .Callback <DocumentSnapshot, long>((snapshot, version) =>
            {
                Assert.Same(documentSnapshot, snapshot);
                Assert.Equal(1337, version);
            });
            var newText        = SourceText.From("Something New");
            var projectService = CreateProjectService(
                projectResolver,
                Mock.Of <ProjectSnapshotManagerBase>(),
                documentResolver,
                documentVersionCache.Object);

            // Act
            projectService.UpdateDocument(documentFilePath, newText, 1337);

            // Assert
            documentVersionCache.VerifyAll();
        }
        public void RemoveDocument_RemovesDocumentFromOwnerProject()
        {
            // Arrange
            var documentFilePath = "/C:/path/to/document.cshtml";
            var ownerProject     = TestProjectSnapshot.Create("/C:/path/to/project.csproj", new[] { documentFilePath });
            var projectResolver  = new TestProjectResolver(
                new Dictionary <string, ProjectSnapshot>
            {
                [documentFilePath] = ownerProject
            },
                TestProjectSnapshot.Create("/__MISC_PROJECT__"));
            var projectSnapshotManager = new Mock <ProjectSnapshotManagerBase>(MockBehavior.Strict);

            projectSnapshotManager.Setup(manager => manager.DocumentRemoved(It.IsAny <HostProject>(), It.IsAny <HostDocument>()))
            .Callback <HostProject, HostDocument>((hostProject, hostDocument) =>
            {
                Assert.Same(ownerProject.HostProject, hostProject);
                Assert.Equal(documentFilePath, hostDocument.FilePath);
            });
            var projectService = CreateProjectService(projectResolver, projectSnapshotManager.Object);

            // Act
            projectService.RemoveDocument(documentFilePath);

            // Assert
            projectSnapshotManager.VerifyAll();
        }
        public void OpenDocument_OpensAlreadyAddedDocumentInMiscellaneousProject()
        {
            // Arrange
            var expectedDocumentFilePath = "/C:/path/to/document.cshtml";
            var miscellaneousProject     = TestProjectSnapshot.Create("/__MISC_PROJECT__");
            var projectResolver          = new TestProjectResolver(
                new Dictionary <string, ProjectSnapshot>(),
                miscellaneousProject);
            var projectSnapshotManager = new Mock <ProjectSnapshotManagerBase>(MockBehavior.Strict);

            projectSnapshotManager.Setup(manager => manager.DocumentAdded(It.IsAny <HostProject>(), It.IsAny <HostDocument>(), It.IsAny <TextLoader>()))
            .Throws(new InvalidOperationException("This shouldn't have been called."));
            projectSnapshotManager.Setup(manager => manager.DocumentOpened(It.IsAny <string>(), It.IsAny <string>(), It.IsAny <SourceText>()))
            .Callback <string, string, SourceText>((projectFilePath, documentFilePath, text) =>
            {
                Assert.Equal(miscellaneousProject.FilePath, projectFilePath);
                Assert.Equal(expectedDocumentFilePath, documentFilePath);
                Assert.NotNull(text);
            });
            var documentSnapshot = Mock.Of <DocumentSnapshot>();
            var documentResolver = Mock.Of <DocumentResolver>(resolver => resolver.TryResolveDocument(It.IsAny <string>(), out documentSnapshot) == true);
            var projectService   = CreateProjectService(projectResolver, projectSnapshotManager.Object, documentResolver);
            var sourceText       = SourceText.From("Hello World");

            // Act
            projectService.OpenDocument(expectedDocumentFilePath, sourceText, 1);

            // Assert
            projectSnapshotManager.Verify(manager => manager.DocumentOpened(It.IsAny <string>(), It.IsAny <string>(), It.IsAny <SourceText>()));
        }
        public void CloseDocument_ClosesDocumentInMiscellaneousProject()
        {
            // Arrange
            var expectedDocumentFilePath = "/C:/path/to/document.cshtml";
            var miscellaneousProject     = TestProjectSnapshot.Create("/__MISC_PROJECT__");
            var projectResolver          = new TestProjectResolver(
                new Dictionary <string, ProjectSnapshot>(),
                miscellaneousProject);
            var projectSnapshotManager = new Mock <ProjectSnapshotManagerBase>(MockBehavior.Strict);

            projectSnapshotManager.Setup(manager => manager.DocumentClosed(It.IsAny <string>(), It.IsAny <string>(), It.IsAny <TextLoader>()))
            .Callback <string, string, TextLoader>((projectFilePath, documentFilePath, text) =>
            {
                Assert.Equal(miscellaneousProject.FilePath, projectFilePath);
                Assert.Equal(expectedDocumentFilePath, documentFilePath);
                Assert.NotNull(text);
            });
            var projectService = CreateProjectService(projectResolver, projectSnapshotManager.Object);

            // Act
            projectService.CloseDocument(expectedDocumentFilePath);

            // Assert
            projectSnapshotManager.VerifyAll();
        }
Beispiel #7
0
        public void AddDocument_AddsDocumentToOwnerProject()
        {
            // Arrange
            var documentFilePath = "/C:/path/to/document.cshtml";
            var ownerProject     = TestProjectSnapshot.Create("/C:/path/to/project.sproj");
            var projectResolver  = new TestProjectResolver(
                new Dictionary <string, ProjectSnapshot>
            {
                [documentFilePath] = ownerProject
            },
                TestProjectSnapshot.Create("__MISC_PROJECT__"));
            var projectSnapshotManager = new Mock <ProjectSnapshotManagerBase>(MockBehavior.Strict);

            projectSnapshotManager.Setup(manager => manager.DocumentAdded(It.IsAny <HostProject>(), It.IsAny <HostDocument>(), It.IsAny <TextLoader>()))
            .Callback <HostProject, HostDocument, TextLoader>((hostProject, hostDocument, loader) =>
            {
                Assert.Same(ownerProject.HostProject, hostProject);
                Assert.Equal(documentFilePath, hostDocument.FilePath);
                Assert.NotNull(loader);
            });
            var projectService = CreateProjectService(projectResolver, projectSnapshotManager.Object);
            var textLoader     = CreateTextLoader("Hello World");

            // Act
            projectService.AddDocument(documentFilePath, textLoader);

            // Assert
            projectSnapshotManager.VerifyAll();
        }
        public void RemoveProject_NoopsIfProjectIsNotLoaded()
        {
            // Arrange
            var projectFilePath        = "C:/path/to/project.csproj";
            var miscellaneousProject   = TestProjectSnapshot.Create("/__MISC_PROJECT__");
            var projectResolver        = new TestProjectResolver(new Dictionary <string, ProjectSnapshot>(), miscellaneousProject);
            var projectSnapshotManager = new Mock <ProjectSnapshotManagerBase>();

            projectSnapshotManager.Setup(manager => manager.ProjectRemoved(It.IsAny <HostProject>()))
            .Throws(new InvalidOperationException("Should not have been called."));
            var projectService = CreateProjectService(projectResolver, projectSnapshotManager.Object);

            // Act & Assert
            projectService.RemoveProject(projectFilePath);
        }
        public void TryMigrateMiscellaneousDocumentsToProject_DoesNotMigrateDocumentsIfNoOwnerProject()
        {
            // Arrange
            var documentFilePath1      = "/C:/path/to/document1.cshtml";
            var documentFilePath2      = "/C:/path/to/document2.cshtml";
            var miscellaneousProject   = TestProjectSnapshot.Create("/__MISC_PROJECT__", new[] { documentFilePath1, documentFilePath2 });
            var projectResolver        = new TestProjectResolver(new Dictionary <string, ProjectSnapshot>(), miscellaneousProject);
            var projectSnapshotManager = new Mock <ProjectSnapshotManagerBase>();

            projectSnapshotManager.Setup(manager => manager.DocumentAdded(It.IsAny <HostProject>(), It.IsAny <HostDocument>(), It.IsAny <TextLoader>()))
            .Throws(new InvalidOperationException("Should not have been called."));
            var projectService = CreateProjectService(projectResolver, projectSnapshotManager.Object);

            // Act & Assert
            projectService.TryMigrateMiscellaneousDocumentsToProject();
        }
        public void RemoveDocument_NoopsIfMiscellaneousProjectDoesNotContainDocument()
        {
            // Arrange
            var documentFilePath     = "C:/path/to/document.cshtml";
            var miscellaneousProject = TestProjectSnapshot.Create("/__MISC_PROJECT__", new string[0]);
            var projectResolver      = new TestProjectResolver(
                new Dictionary <string, ProjectSnapshot>(),
                miscellaneousProject);
            var projectSnapshotManager = new Mock <ProjectSnapshotManagerBase>();

            projectSnapshotManager.Setup(manager => manager.DocumentRemoved(It.IsAny <HostProject>(), It.IsAny <HostDocument>()))
            .Throws(new InvalidOperationException("Should not have been called."));
            var projectService = CreateProjectService(projectResolver, projectSnapshotManager.Object);

            // Act & Assert
            projectService.RemoveDocument(documentFilePath);
        }
Beispiel #11
0
        public void TryMigrateMiscellaneousDocumentsToProject_MigratesDocumentsToNewOwnerProject()
        {
            // Arrange
            var documentFilePath1     = "C:/path/to/document1.cshtml";
            var documentFilePath2     = "C:/path/to/document2.cshtml";
            var miscellaneousProject  = TestProjectSnapshot.Create("__MISC_PROJECT__", new[] { documentFilePath1, documentFilePath2 });
            var projectToBeMigratedTo = TestProjectSnapshot.Create("C:/path/to/project.csproj");
            var projectResolver       = new TestProjectResolver(
                new Dictionary <string, ProjectSnapshot>
            {
                [documentFilePath1] = projectToBeMigratedTo,
                [documentFilePath2] = projectToBeMigratedTo,
            },
                miscellaneousProject);
            var migratedDocuments      = new List <HostDocument>();
            var projectSnapshotManager = new Mock <ProjectSnapshotManagerBase>(MockBehavior.Strict);

            projectSnapshotManager.Setup(manager => manager.DocumentAdded(It.IsAny <HostProject>(), It.IsAny <HostDocument>(), It.IsAny <TextLoader>()))
            .Callback <HostProject, HostDocument, TextLoader>((hostProject, hostDocument, textLoader) =>
            {
                Assert.Same(projectToBeMigratedTo.HostProject, hostProject);
                Assert.NotNull(textLoader);

                migratedDocuments.Add(hostDocument);
            });
            projectSnapshotManager.Setup(manager => manager.DocumentRemoved(It.IsAny <HostProject>(), It.IsAny <HostDocument>()))
            .Callback <HostProject, HostDocument>((hostProject, hostDocument) =>
            {
                Assert.Same(miscellaneousProject.HostProject, hostProject);

                Assert.DoesNotContain(hostDocument, migratedDocuments);
            });
            var projectService = CreateProjectService(projectResolver, projectSnapshotManager.Object);

            // Act
            projectService.TryMigrateMiscellaneousDocumentsToProject();

            // Assert
            Assert.Collection(migratedDocuments,
                              document => Assert.Equal(documentFilePath1, document.FilePath),
                              document => Assert.Equal(documentFilePath2, document.FilePath));
        }
        public void AddProject_AddsProjectWithDefaultConfiguration()
        {
            // Arrange
            var projectFilePath        = "/C:/path/to/project.csproj";
            var miscellaneousProject   = TestProjectSnapshot.Create("/__MISC_PROJECT__");
            var projectResolver        = new TestProjectResolver(new Dictionary <string, ProjectSnapshot>(), miscellaneousProject);
            var projectSnapshotManager = new Mock <ProjectSnapshotManagerBase>(MockBehavior.Strict);

            projectSnapshotManager.Setup(manager => manager.ProjectAdded(It.IsAny <HostProject>()))
            .Callback <HostProject>((hostProject) =>
            {
                Assert.Equal(projectFilePath, hostProject.FilePath);
                Assert.Same(RazorDefaults.Configuration, hostProject.Configuration);
            });
            var projectService = CreateProjectService(projectResolver, projectSnapshotManager.Object);

            // Act
            projectService.AddProject(projectFilePath);

            // Assert
            projectSnapshotManager.VerifyAll();
        }
Beispiel #13
0
        public void AddProject_AddsProjectWithProvidedConfiguration()
        {
            // Arrange
            var projectConfiguration   = RazorConfiguration.Create(RazorLanguageVersion.Version_1_0, "Test", Array.Empty <RazorExtension>());
            var projectFilePath        = "/C:/path/to/document.cshtml";
            var miscellaneousProject   = TestProjectSnapshot.Create("__MISC_PROJECT__");
            var projectResolver        = new TestProjectResolver(new Dictionary <string, ProjectSnapshot>(), miscellaneousProject);
            var projectSnapshotManager = new Mock <ProjectSnapshotManagerBase>(MockBehavior.Strict);

            projectSnapshotManager.Setup(manager => manager.HostProjectAdded(It.IsAny <HostProject>()))
            .Callback <HostProject>((hostProject) =>
            {
                Assert.Equal(projectFilePath, hostProject.FilePath);
                Assert.Same(projectConfiguration, hostProject.Configuration);
            });
            var projectService = CreateProjectService(projectResolver, projectSnapshotManager.Object);

            // Act
            projectService.AddProject(projectFilePath, projectConfiguration);

            // Assert
            projectSnapshotManager.VerifyAll();
        }
        public void RemoveProject_RemovesProject()
        {
            // Arrange
            var projectFilePath        = "/C:/path/to/project.csproj";
            var ownerProject           = TestProjectSnapshot.Create(projectFilePath);
            var miscellaneousProject   = TestProjectSnapshot.Create("/__MISC_PROJECT__");
            var projectResolver        = new TestProjectResolver(new Dictionary <string, ProjectSnapshot>(), miscellaneousProject);
            var projectSnapshotManager = new Mock <ProjectSnapshotManagerBase>(MockBehavior.Strict);

            projectSnapshotManager.Setup(manager => manager.GetLoadedProject(projectFilePath))
            .Returns(ownerProject);
            projectSnapshotManager.Setup(manager => manager.ProjectRemoved(ownerProject.HostProject))
            .Callback <HostProject>((hostProject) =>
            {
                Assert.Equal(projectFilePath, hostProject.FilePath);
            });
            var projectService = CreateProjectService(projectResolver, projectSnapshotManager.Object);

            // Act
            projectService.RemoveProject(projectFilePath);

            // Assert
            projectSnapshotManager.VerifyAll();
        }
        public void UpdateDocument_IgnoresUnknownDocumentVersions()
        {
            // Arrange
            var documentFilePath = "/C:/path/to/document.cshtml";
            var ownerProject     = TestProjectSnapshot.Create("/C:/path/to/project.csproj", new[] { documentFilePath });
            var projectResolver  = new TestProjectResolver(
                new Dictionary <string, ProjectSnapshot>
            {
                [documentFilePath] = ownerProject
            },
                TestProjectSnapshot.Create("/__MISC_PROJECT__"));
            var documentVersionCache = new Mock <DocumentVersionCache>();

            documentVersionCache.Setup(cache => cache.TrackDocumentVersion(It.IsAny <DocumentSnapshot>(), It.IsAny <long>()))
            .Throws <XunitException>();
            var newText        = SourceText.From("Something New");
            var projectService = CreateProjectService(
                projectResolver,
                Mock.Of <ProjectSnapshotManagerBase>(),
                documentVersionCache: documentVersionCache.Object);

            // Act & Assert
            projectService.UpdateDocument(documentFilePath, newText, 1337);
        }