private void OnProjectItemChanged(object sender, TestFileChangedEventArgs e) { if (e != null) { // Don't do anything for files we are sure can't be test files if (!IsPs1File(e.File)) { return; } switch (e.ChangedReason) { case TestFileChangedReason.Added: testFilesUpdateWatcher.AddWatch(e.File); AddTestContainerIfTestFile(e.File); break; case TestFileChangedReason.Removed: testFilesUpdateWatcher.RemoveWatch(e.File); RemoveTestContainer(e.File); break; case TestFileChangedReason.Changed: AddTestContainerIfTestFile(e.File); break; } OnTestContainersChanged(); } }
private void HandleSettingsChanged(TestFileChangedEventArgs e) { switch (e.ChangedReason) { case TestFileChangedReason.None: break; case TestFileChangedReason.Renamed: _testFilesUpdateWatcher.RemoveWatch(e.OldFile); _testFilesUpdateWatcher.AddWatch(e.File); break; case TestFileChangedReason.Added: _testFilesUpdateWatcher.AddWatch(e.File); break; case TestFileChangedReason.Changed: _testFilesUpdateWatcher.AddWatch(e.File); break; case TestFileChangedReason.Removed: _testFilesUpdateWatcher.RemoveWatch(e.File); break; } _isRefresh = true; NotifyContainerChanged(); }
/// <summary> /// Handler to react to test file Add/remove/rename events /// </summary> private void OnProjectItemChanged(object sender, TestFileChangedEventArgs e) { if (e != null && ShouldDiscover(e.File)) { string root = null; switch (e.ChangedReason) { case TestFileChangedReason.Added: Debug.Assert(e.Project != null); if (e.Project.IsTestProject(GuidList.guidPythonProjectGuid)) { root = e.Project.GetProjectHome(); if (!string.IsNullOrEmpty(root) && CommonUtils.IsSubpathOf(root, e.File)) { _testFilesUpdateWatcher.AddDirectoryWatch(root); _fileRootMap[e.File] = root; } else { _testFilesUpdateWatcher.AddWatch(e.File); } OnTestContainersChanged(e.Project); } break; case TestFileChangedReason.Removed: Debug.Assert(e.Project != null); if (_fileRootMap.TryGetValue(e.File, out root)) { _fileRootMap.Remove(e.File); if (!_fileRootMap.Values.Contains(root)) { _testFilesUpdateWatcher.RemoveWatch(root); } } else { _testFilesUpdateWatcher.RemoveWatch(e.File); } // https://pytools.codeplex.com/workitem/1546 // track the last delete as an update as our file system scan won't see it _lastWrite = DateTime.Now.ToUniversalTime(); OnTestContainersChanged(e.Project); break; // VS renames files instead of overwriting them when // saving, so we need to listen for renames where the new // path is part of the project. case TestFileChangedReason.Renamed: case TestFileChangedReason.Changed: OnTestContainersChanged(GetTestProjectFromFile(e.File)); break; } } }
private void OnProjectItemChanged(object sender, TestFileChangedEventArgs e) { if (e != null) { switch (e.ChangedReason) { case TestFileChangedReason.Added: _files.Add(e.File); _testFilesUpdateWatcher.AddWatch(e.File); AddTestContainerIfTestFile(e.File); break; case TestFileChangedReason.Removed: _files.Remove(e.File); _testFilesUpdateWatcher.RemoveWatch(e.File); RemoveTestContainer(e.File); break; case TestFileChangedReason.Changed: case TestFileChangedReason.Saved: AddTestContainerIfTestFile(e.File); break; } RefreshTestContainers(); } else { Logger.Info("OnProjectItemChanged: <unknown>"); } }
private void OnWorkspaceFileChanged(object sender, TestFileChangedEventArgs e) { if (String.IsNullOrEmpty(e.File)) { return; } if (IsSettingsFile(e.File)) { NotifyContainerChanged(); _isRefresh = true; return; } if (!IsTestFile(e.File)) { return; } IPythonWorkspaceContext workspace = _workspaceContextProvider.Workspace; if (workspace == null) { return; } var projInfo = GetProjectInfo(workspace.Location); if (projInfo == null || IsFileExcluded(projInfo, e.File)) { return; } switch (e.ChangedReason) { case TestFileChangedReason.Added: projInfo.AddTestContainer(this, e.File); break; case TestFileChangedReason.Changed: projInfo.AddTestContainer(this, e.File); break; case TestFileChangedReason.Removed: projInfo.RemoveTestContainer(e.File); break; case TestFileChangedReason.Renamed: projInfo.RemoveTestContainer(e.OldFile); projInfo.AddTestContainer(this, e.File); break; default: break; } NotifyContainerChanged(); }
private void HandleSourcesChanged(TestFileChangedEventArgs e) { var projectInfo = FindProjectInfo(e.File, e.Project); if (projectInfo == null) { return; } var sources = new List <string>() { e.File }; switch (e.ChangedReason) { case TestFileChangedReason.Added: UpdateContainersAndListeners(sources, projectInfo, isAdd: true); break; case TestFileChangedReason.Changed: //Need to increment version number so Test Explorer notices a change UpdateContainersAndListeners(sources, projectInfo, isAdd: true); break; case TestFileChangedReason.Removed: UpdateContainersAndListeners(sources, projectInfo, isAdd: false); break; case TestFileChangedReason.Renamed: var oldFileProjectInfo = FindProjectInfo(e.OldFile); UpdateContainersAndListeners(new List <string>() { e.OldFile }, oldFileProjectInfo, isAdd: false); UpdateContainersAndListeners(sources, projectInfo, isAdd: true); break; default: //In changed case file watcher observed a file changed event //In this case we just have to fire TestContainerChnaged event break; } if (ShouldRebuild(e.File) || ShouldRebuild(e.OldFile)) { _isRefresh = true; } NotifyContainerChanged(); }
/// <summary> /// Handler to react to test file Add/remove/rename andcontents changed events /// </summary> private void OnProjectItemChanged(object sender, TestFileChangedEventArgs e) { ChutzpahTracer.TraceInformation("Begin OnProjectItemChanged"); if (e != null) { // If a chutzpah.json file changed then we set the flag to // ensure next time get if (fileProbe.IsChutzpahSettingsFile(e.File.Path)) { forceFullContainerRefresh = true; return; } // Don't do anything for files we are sure can't be test files if (!HasTestFileExtension(e.File.Path)) { return; } logger.Log(string.Format("Changed detected for {0} with change type of {1}", e.File, e.ChangedReason), "ChutzpahTestContainerDiscoverer", LogType.Information); switch (e.ChangedReason) { case TestFileChangedReason.Added: ChutzpahTracer.TraceInformation("Adding watch on {0}", e.File.Path); testFilesUpdateWatcher.AddWatch(e.File.Path); AddTestContainerIfTestFile(e.File); break; case TestFileChangedReason.Removed: ChutzpahTracer.TraceInformation("Removing watch on {0}", e.File.Path); testFilesUpdateWatcher.RemoveWatch(e.File.Path); RemoveTestContainer(e.File); break; case TestFileChangedReason.Changed: AddTestContainerIfTestFile(e.File); break; } OnTestContainersChanged(); } ChutzpahTracer.TraceInformation("End OnProjectItemChanged"); }
private void OnProjectItemChanged(object sender, TestFileChangedEventArgs e) { if (String.IsNullOrEmpty(e.File)) { return; } if (IsSettingsFile(e.File)) { HandleSettingsChanged(e); } // VS uses temp files we need to ignore else if (IsTestFile(e.File)) { HandleSourcesChanged(e); } return; }
private void OnProjectItemChanged(object sender, TestFileChangedEventArgs e) { _logger.Log(MessageLevel.Diagnostic, "PowerShellTestContainerDiscoverer:OnProjectItemChanged"); if (e != null) { // Don't do anything for files we are sure can't be test files if (!IsPowerShellTestFile(e.File)) { return; } _logger.Log(MessageLevel.Diagnostic, "PowerShellTestContainerDiscoverer:OnProjectItemChanged - IsPs1File"); switch (e.ChangedReason) { case TestFileChangedReason.Added: _logger.Log(MessageLevel.Diagnostic, "PowerShellTestContainerDiscoverer:OnProjectItemChanged - Added"); _testFilesUpdateWatcher.AddWatch(e.File); AddTestContainerIfTestFile(e.File); break; case TestFileChangedReason.Removed: _logger.Log(MessageLevel.Diagnostic, "PowerShellTestContainerDiscoverer:OnProjectItemChanged - Removed"); _testFilesUpdateWatcher.RemoveWatch(e.File); RemoveTestContainer(e.File); break; case TestFileChangedReason.Changed: _logger.Log(MessageLevel.Diagnostic, "PowerShellTestContainerDiscoverer:OnProjectItemChanged - Changed"); AddTestContainerIfTestFile(e.File); break; } OnTestContainersChanged(); } }
private void OnProjectItemChanged(object sender, TestFileChangedEventArgs e) { if (e != null) { switch (e.ChangedReason) { case TestFileChangedReason.Added: testFilesUpdateWatcher.AddWatch(e.File); Add(testContainerDiscoverer, e.File); break; case TestFileChangedReason.Removed: testFilesUpdateWatcher.RemoveWatch(e.File); Remove(e.File); break; case TestFileChangedReason.Changed: Add(testContainerDiscoverer, e.File); break; } OnCacheUpdated(); } }
void OnChanged(object sender, TestFileChangedEventArgs e) { if (Changed != null) { Changed(sender, e); } }
private void OnProjectItemChanged(object sender, TestFileChangedEventArgs e) { if (String.IsNullOrEmpty(e.File)) { return; } if (IsSettingsFile(e.File)) { switch (e.ChangedReason) { case TestFileChangedReason.None: break; case TestFileChangedReason.Renamed: // TestFileAddRemoveListener rename triggers Added and Removed break; case TestFileChangedReason.Added: _testFilesUpdateWatcher.AddWatch(e.File); break; case TestFileChangedReason.Changed: _testFilesUpdateWatcher.AddWatch(e.File); break; case TestFileChangedReason.Removed: _testFilesUpdateWatcher.RemoveWatch(e.File); break; } _isRefresh = true; NotifyContainerChanged(); return; } if (!IsTestFile(e.File)) { return; } // bschnurr todo: this is only looking at opened files IVsProject vsProject = e.Project; if (vsProject == null) { var rdt = (IVsRunningDocumentTable)_serviceProvider.GetService(typeof(SVsRunningDocumentTable)); vsProject = VsProjectExtensions.PathToProject(e.File, rdt); } if (vsProject == null) { return; } string projectHome = vsProject.GetProjectHome(); if (projectHome != null && _projectMap.TryGetValue(projectHome, out ProjectInfo projectInfo)) { var sources = new List <string>() { e.File }; switch (e.ChangedReason) { case TestFileChangedReason.Added: UpdateSolutionTestContainersAndFileWatchers(sources, projectInfo, isAdd: true); break; case TestFileChangedReason.Changed: //Need to increment version number so Test Explorer notices a change UpdateSolutionTestContainersAndFileWatchers(sources, projectInfo, isAdd: true); break; case TestFileChangedReason.Removed: UpdateSolutionTestContainersAndFileWatchers(sources, projectInfo, isAdd: false); break; default: //In changed case file watcher observed a file changed event //In this case we just have to fire TestContainerChnaged event //TestFileAddRemoveListener rename event triggers Added and Removed so Rename isn't needed break; } NotifyContainerChanged(); } }
// Handler to react to test file Add/remove/rename andcontents changed events private void OnProjectItemChanged(object sender, TestFileChangedEventArgs e) { if (e != null) { // Don't do anything for files we are sure can't be test files if (!HasTestFileExtension(e.File.Path)) { return; } switch (e.ChangedReason) { case TestFileChangedReason.Added: this.testFilesUpdateWatcher.AddWatch(e.File.Path); this.AddTestContainerIfTestFile(e.File); break; case TestFileChangedReason.Removed: this.testFilesUpdateWatcher.RemoveWatch(e.File.Path); this.RemoveTestContainer(e.File); break; case TestFileChangedReason.Changed: this.AddTestContainerIfTestFile(e.File); break; } this.OnTestContainersChanged(); } }