// we should raise this event if we update the test containers (due to user file changes) so that VS can update tests
        // currently we have no file watchers implemented, so this isn't used yet
        protected virtual void OnTestContainersUpdated(EventArgs e)
        {
            Log($"OnTestContainersUpdated() called - file changes detected");

            // execute delgate chain for all attached handlers
            TestContainersUpdated?.Invoke(this, e);
        }
        /// <summary>
        /// Raises the test containers changed event, returns true if the event was delivered
        /// or would be delivered and there were no listeners.
        /// </summary>
        /// <param name="project">The project which the event is being raised for</param>
        private bool OnTestContainersChanged(IVsProject project)
        {
            // https://pytools.codeplex.com/workitem/1271
            // When test explorer kicks off a run it kicks off a test discovery
            // phase, which kicks off a build, which results in us saving files.
            // If we raise the files changed event then test explorer immediately turns
            // around and queries us for the changed files.  Then it continues
            // along with the test discovery phase it was already initiating, and
            // discovers that no changes have occured - because it already updated
            // to the latest changes when we informed it our containers had changed.
            // Therefore if we are both building and detecting changes then we
            // don't want to raise the event, instead it'll query us in a little
            // bit and get the most recent changes.

            if (project != null &&
                project.TryGetProjectPath(out var projectPath) &&
                this.knownProjects.TryGetValue(projectPath, out var projectInfo) &&
                projectInfo != null &&
                projectInfo.HasRequestedContainers)
            {
                if (!this.building || !this.detectingChanges)
                {
                    TestContainersUpdated?.Invoke(this, EventArgs.Empty);
                    return(true);
                }
            }
            return(false);
        }
        internal TestContainerDiscoverer
        (
            [Import(typeof(IOperationState))]
            IOperationState operationState,

            [Import(typeof(SVsServiceProvider))]
            IServiceProvider serviceProvider
        )
        {
            TestContainersUpdated?.ToString();

            Logger.Clear();
            Logger.Initialize(serviceProvider, Vsix.Name);

            CoverageUtil.InstallOrUpdateCoverlet(exception =>
            {
                if (exception != null)
                {
                    Logger.Log(exception);
                    return;
                }

                operationState.StateChanged += OperationState_StateChanged;
                Logger.Log("Initialized!");
            });
        }
        internal TestContainerDiscoverer
        (
            [Import(typeof(IOperationState))]
            IOperationState operationState,

            [Import(typeof(SVsServiceProvider))]
            IServiceProvider serviceProvider
        )
        {
            _serviceProvider = serviceProvider;

            new Thread(() =>
            {
                try
                {
                    Logger.Initialize(_serviceProvider);

                    FCCEngine.Initialize();
                    Initialize(_serviceProvider);
                    TestContainersUpdated.ToString();
                    operationState.StateChanged += OperationState_StateChanged;

                    Logger.Log($"Initialized");
                }
                catch (Exception exception)
                {
                    Logger.Log($"Failed Initialization", exception);
                }
            }).Start();
        }
 private void OnDeferredTestChanged(object state)
 {
     // guard against triggering multiple updates during initial load until setup is complete
     if (!_firstLoad)
     {
         TestContainersUpdated?.Invoke(this, EventArgs.Empty);
     }
 }
Example #6
0
        private void OnProjectLoaded(object sender, ProjectEventArgs e)
        {
            var pyProj = PythonProject.FromObject(e.Project);

            if (pyProj != null)
            {
                var analyzer = pyProj.Analyzer;
                _projectInfo[pyProj] = new ProjectInfo(this, pyProj);
            }

            TestContainersUpdated?.Invoke(this, EventArgs.Empty);
        }
Example #7
0
 private void UpdateTestContainersIfGaugeSpecFile(ProjectItem projectItem)
 {
     if (projectItem?.ContainingProject == null)
     {
         return;
     }
     if (projectItem.ContainingProject.IsGaugeProject() &&
         projectItem.FileNames[0].IsGaugeSpecFile())
     {
         TestContainersUpdated?.Invoke(this, EventArgs.Empty);
     }
 }
Example #8
0
        private void OnProjectUnloaded(object sender, ProjectEventArgs e)
        {
            if (e.Project != null)
            {
                var         pyProj = PythonProject.FromObject(e.Project);
                ProjectInfo events;
                if (pyProj != null &&
                    _projectInfo.TryGetValue(pyProj, out events) &&
                    _projectInfo.Remove(pyProj))
                {
                    events.Dispose();
                }
            }

            TestContainersUpdated?.Invoke(this, EventArgs.Empty);
        }
Example #9
0
        private async Task OnProjectLoadedAsync(IVsProject project)
        {
            var pyProj = PythonProject.FromObject(project);

            if (pyProj != null)
            {
                var analyzer = await pyProj.GetAnalyzerAsync();

                if (analyzer != null)
                {
                    _projectInfo[pyProj] = new ProjectInfo(this, pyProj);
                }
            }

            TestContainersUpdated?.Invoke(this, EventArgs.Empty);
        }
Example #10
0
        private void OnProjectUnloaded(object sender, ProjectEventArgs e)
        {
            if (e.Project != null)
            {
                var         provider = e.Project as IPythonProjectProvider;
                ProjectInfo events;
                if (provider != null && _projectInfo.TryGetValue(provider.Project, out events))
                {
                    var analyzer = provider.Project.Analyzer;

                    provider.Project.ProjectAnalyzerChanged -= events.ProjectAnalyzerChanged;
                    analyzer.AnalysisComplete -= events.AnalysisComplete;

                    _projectInfo.Remove(provider.Project);
                }
            }

            TestContainersUpdated?.Invoke(this, EventArgs.Empty);
        }
Example #11
0
        private void OnProjectLoaded(object sender, ProjectEventArgs e)
        {
            if (e.Project != null)
            {
                var provider = e.Project as IPythonProjectProvider;
                if (provider != null)
                {
                    var analyzer    = provider.Project.Analyzer;
                    var projectInfo = new ProjectInfo(this, provider.Project);
                    _projectInfo[provider.Project] = projectInfo;

                    foreach (var file in analyzer.Files)
                    {
                        projectInfo.AnalysisComplete(this, new AnalysisCompleteEventArgs(file));
                    }
                }
            }

            TestContainersUpdated?.Invoke(this, EventArgs.Empty);
        }