public void OnUnsubscribed_AnotherDocumentTrackingImport_DoesNotStopFileChangeTracker()
        {
            // Arrange
            var tracker = Mock.Of <VisualStudioDocumentTracker>(
                t => t.FilePath == "C:\\path\\to\\project\\file.cshtml" &&
                t.ProjectPath == ProjectPath &&
                t.ProjectSnapshot == Mock.Of <ProjectSnapshot>(p => p.GetProjectEngine() == ProjectEngine));

            var anotherTracker = Mock.Of <VisualStudioDocumentTracker>(
                t => t.FilePath == "C:\\path\\to\\project\\anotherFile.cshtml" &&
                t.ProjectPath == ProjectPath &&
                t.ProjectSnapshot == Mock.Of <ProjectSnapshot>(p => p.GetProjectEngine() == ProjectEngine));

            var fileChangeTrackerFactory = new Mock <FileChangeTrackerFactory>();
            var fileChangeTracker        = new Mock <FileChangeTracker>();

            fileChangeTracker
            .Setup(f => f.StopListening())
            .Throws(new InvalidOperationException());
            fileChangeTrackerFactory
            .Setup(f => f.Create(It.IsAny <string>()))
            .Returns(fileChangeTracker.Object);

            var manager = new DefaultImportDocumentManager(Dispatcher, new DefaultErrorReporter(), fileChangeTrackerFactory.Object);

            manager.OnSubscribed(tracker);        // Starts tracking import for the first document.

            manager.OnSubscribed(anotherTracker); // Starts tracking import for the second document.

            // Act & Assert (Does not throw)
            manager.OnUnsubscribed(tracker);
            manager.OnUnsubscribed(tracker);
        }
Example #2
0
        public void OnUnsubscribed_StopsFileChangeTracker()
        {
            // Arrange
            var filePath    = "C:\\path\\to\\project\\file.cshtml";
            var projectPath = "C:\\path\\to\\project\\project.csproj";
            var tracker     = Mock.Of <VisualStudioDocumentTracker>(t => t.FilePath == filePath && t.ProjectPath == projectPath);
            var templateEngineFactoryService = GetTemplateEngineFactoryService();

            var fileChangeTracker = new Mock <FileChangeTracker>();

            fileChangeTracker.Setup(f => f.StopListening()).Verifiable();
            var fileChangeTrackerFactory = new Mock <FileChangeTrackerFactory>(MockBehavior.Strict);

            fileChangeTrackerFactory
            .Setup(f => f.Create("C:\\path\\to\\project\\_ViewImports.cshtml"))
            .Returns(fileChangeTracker.Object)
            .Verifiable();

            var manager = new DefaultImportDocumentManager(Dispatcher, new DefaultErrorReporter(), fileChangeTrackerFactory.Object, templateEngineFactoryService);

            manager.OnSubscribed(tracker); // Start tracking the import.

            // Act
            manager.OnUnsubscribed(tracker);

            // Assert
            fileChangeTrackerFactory.Verify();
            fileChangeTracker.Verify();
        }
        public void OnUnsubscribed_StopsFileChangeTracker()
        {
            // Arrange
            var tracker = Mock.Of <VisualStudioDocumentTracker>(
                t => t.FilePath == Path.Combine(DirectoryPath, "file.cshtml") &&
                t.ProjectPath == ProjectPath &&
                t.ProjectSnapshot == Mock.Of <ProjectSnapshot>(p => p.GetProjectEngine() == ProjectEngine && p.GetDocument(It.IsAny <string>()) == null, MockBehavior.Strict), MockBehavior.Strict);

            var fileChangeTrackerFactory = new Mock <FileChangeTrackerFactory>(MockBehavior.Strict);
            var fileChangeTracker        = new Mock <FileChangeTracker>(MockBehavior.Strict);

            fileChangeTracker.Setup(f => f.StartListening()).Verifiable();
            fileChangeTracker
            .Setup(f => f.StopListening())
            .Verifiable();
            fileChangeTrackerFactory
            .Setup(f => f.Create(Path.Combine(DirectoryPath, "_ViewImports.cshtml")))
            .Returns(fileChangeTracker.Object)
            .Verifiable();

            var manager = new DefaultImportDocumentManager(Dispatcher, new DefaultErrorReporter(), fileChangeTrackerFactory.Object);

            manager.OnSubscribed(tracker); // Start tracking the import.

            // Act
            manager.OnUnsubscribed(tracker);

            // Assert
            fileChangeTrackerFactory.Verify();
            fileChangeTracker.Verify();
        }