コード例 #1
0
        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();
            }
        }
コード例 #2
0
        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();
        }
コード例 #3
0
        /// <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;
                }
            }
        }
コード例 #4
0
        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>");
            }
        }
コード例 #5
0
        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();
        }
コード例 #6
0
        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();
        }
コード例 #7
0
        /// <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");
        }
コード例 #8
0
        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;
        }
コード例 #9
0
        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();
            }
        }
コード例 #10
0
        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();
            }
        }
コード例 #11
0
 void OnChanged(object sender, TestFileChangedEventArgs e)
 {
     if (Changed != null)
     {
         Changed(sender, e);
     }
 }
コード例 #12
0
        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();
            }
        }