private SolutionInfoViewModel[] SetupSolutionInfoDataGrid() { var models = TestedSolutionsManager.RetrieveSlnInfoViewModels(); SlnInfoDataGrid.ItemsSource = models; return(models); }
/// <summary> /// Заполнение меню Testing Run существующими тестовыми запусками /// </summary> private void RefreshTestingRuns() { if (TestingRunMenuItem.Items.Count > 0) { TestingRunMenuItem.Items.Clear(); } var allTestRuns = TestedSolutionsManager.DeferredInitializeTestingRuns(ApplicationConfigReader.DefaultTopRecords).ToArray(); var testRunnersMap = allTestRuns.ToDictionary(topTestRun => topTestRun.Key, topTestRun => topTestRun.Value); var menuItems = new List <MenuItem>(); var eraseAllMenuItem = new MenuItem { Header = Properties.Resources.EraseAll }; var defaultBrush = eraseAllMenuItem.Background; eraseAllMenuItem.Click += (sender, args) => { UiUtils.ResetHighlighting(menuItems, defaultBrush); TestedSolutionsManager.CleanExistingTestRuns(); SetupSolutionInfoDataGrid(); RefreshTestingRuns(); }; var eraseAllSeparator = new Separator { Margin = new Thickness(0, 5, 0, 5) }; foreach (var testRun in testRunnersMap.OrderByDescending(pair => pair.Key)) { var testRunItem = new MenuItem { Header = testRun.Key.ToString() }; menuItems.Add(testRunItem); var localTestRun = testRun; testRunItem.Click += (sender, args) => { UiUtils.ResetHighlighting(menuItems, defaultBrush); testRunItem.Background = UiUtils.DefaulHighlightBrush; SlnInfoDataGrid.ItemsSource = localTestRun.Value.Value; _selectedRunFolder = localTestRun.Key.TestRunDirectory; }; TestingRunMenuItem.Items.Add(testRunItem); } if (allTestRuns.Any()) { TestingRunMenuItem.Items.Add(eraseAllSeparator); } TestingRunMenuItem.Items.Add(eraseAllMenuItem); }
private bool StopPrepare(out string warningMessage) { if (_killingTimer != null) { _killingTimer.Dispose(); _killingTimer = null; } this.BlurApply(UiUtils.DefaultBlurRadius, TimeSpan.FromMilliseconds(200), TimeSpan.Zero); var killingWaitWindow = new WaitWindow(_selfTesterAppName, "Killing Visual Studio's...") { Owner = this }; var countdownThreshold = 10; const int launchTimerInterval = 500; /* В течении countdownThreshold * launchTimerInterval миллисекунд будем * принудительно завершать процессы, порожденные SelfTester'ом */ _killingTimer = AutoResetTimer.Create(() => { if (countdownThreshold-- > 0) { ProcessUtils.MandatoryKill(Process.GetCurrentProcess(), false); } else { _killingTimer.Dispose(); RunInUiSynchronizationContext(() => { killingWaitWindow.Close(); this.BlurDisable(TimeSpan.FromSeconds(1), TimeSpan.Zero); }); } }, launchTimerInterval) .Shedule(() => { RunInUiSynchronizationContext(() => killingWaitWindow.ShowDialogAlt()); }); if (_testWorker != null && _testWorker.IsBusy) { _testWorker.CancelAsync(); SetupSolutionInfoDataGrid(TestedSolutionsManager.RefreshTestingRunModel(_selectedRunFolder)); SetUiCompletedState(); UiUtils.ResetActiveStatuses(_currentSelectedSolutions, true); warningMessage = string.Empty; return(true); } warningMessage = Properties.Resources.AnalisysNotRunningNow; return(false); }
private async void ApproveButton_OnClick(object sender, RoutedEventArgs e) { bool success; string caption, errorMessage; var selectedSolutions = ExistSelectedSolutions(out success, out caption, out errorMessage); var filteredSolutions = new List <Tuple <StartupConfigurationMode, SolutionInfoViewModel> >(); var solutions = selectedSolutions as Tuple <StartupConfigurationMode, SolutionInfoViewModel>[] ?? selectedSolutions.ToArray(); // Фильтруем решения, с подходящей конфигурацией для замены эталонов и с подходящим статусом анализа foreach (var selectedSolution in solutions.Where(selectedSolution => selectedSolution.Item1.IsSuitForEtalons())) { switch (selectedSolution.Item1) { case StartupConfigurationMode.PvsVs2010: if (selectedSolution.Item2.LaunchStatusOnPvsVs2010.IsInApproveSuitableStatus()) { filteredSolutions.Add(selectedSolution); } break; case StartupConfigurationMode.PvsVs2012: if (selectedSolution.Item2.LaunchStatusOnPvsVs2012.IsInApproveSuitableStatus()) { filteredSolutions.Add(selectedSolution); } break; case StartupConfigurationMode.PvsVs2013: if (selectedSolution.Item2.LaunchStatusOnPvsVs2013.IsInApproveSuitableStatus()) { filteredSolutions.Add(selectedSolution); } break; case StartupConfigurationMode.PvsVs2015: if (selectedSolution.Item2.LaunchStatusOnPvsVs2015.IsInApproveSuitableStatus()) { filteredSolutions.Add(selectedSolution); } break; } } if (!success) { MessageBox.Show(this, caption, errorMessage, MessageBoxButton.OK, MessageBoxImage.Information); return; } if (filteredSolutions.Count == 0) { MessageBox.Show(this, Properties.Resources.NoSuitableSolutionsMsg, _selfTesterAppName, MessageBoxButton.OK, MessageBoxImage.Warning); return; } var messageBoxResult = MessageBox.Show(this, string.Format(Properties.Resources.WannaContinue, Environment.NewLine), _selfTesterAppName, MessageBoxButton.YesNo, MessageBoxImage.Exclamation); if (messageBoxResult != MessageBoxResult.Yes) { return; } // Заменяем эталонные логи локально... var logsToReplace = await AnalyzerUtilities.GetLogsToReplaceAsync(filteredSolutions, _selectedRunFolder).ConfigureAwait(true); var localReplaceExecutor = new ReplaceEtalonsExecutor(ApplicationConfigReader.Instance.EtalonLogFolder, logsToReplace); await localReplaceExecutor.UpdateEtalonsAsync().ConfigureAwait(true); // ... И на build-сервере if (Directory.Exists(ApplicationConfigReader.Instance.BldSrvEtalonsFolder)) { var buildServerReplaceExecutor = new ReplaceEtalonsExecutor(ApplicationConfigReader.Instance.BldSrvEtalonsFolder, logsToReplace); await buildServerReplaceExecutor.UpdateEtalonsAsync().ConfigureAwait(true); } else { MessageBox.Show(this, string.Format(Properties.Resources.EtalonApproveBuildServerPathNotFound, ApplicationConfigReader.Instance.BldSrvEtalonsFolder), _selfTesterAppName, MessageBoxButton.OK, MessageBoxImage.Error); } var sourceVerticalOffset = 0.0; var slnScrollViewer = UiUtils.GetScrollViewer(SlnInfoDataGrid) as ScrollViewer; if (slnScrollViewer != null) { sourceVerticalOffset = slnScrollViewer.ContentVerticalOffset; } SetupSolutionInfoDataGrid(TestedSolutionsManager.RefreshTestingRunModel(_selectedRunFolder)); RefreshTestingRuns(); HighlightSelectedRun(); if (slnScrollViewer != null) { slnScrollViewer.ScrollToVerticalOffset(sourceVerticalOffset); } }
internal static int Start(IEnumerable <string> args) { var summaryWrapper = new SummaryWrapper(); var selectionMode = ParseArgs(args); var testedViewModels = TestedSolutionsManager.RetrieveSlnInfoViewModels(); var summaryResults = summaryWrapper.SummaryResults; switch (selectionMode) { case RunSelectionMode.All: using (var controller = new AnalyzerController(testedViewModels)) { controller.AnalysisManagers.CollectionChanged += (sender, changedEventArgs) => { if (changedEventArgs.Action != NotifyCollectionChangedAction.Add) { return; } var newManager = changedEventArgs.NewItems.Cast <AnalysisManager>().FirstOrDefault(); if (newManager == null) { throw new InvalidOperationException("newManager can't be null"); } newManager.AnalysisStatusChanged += (o, e) => { var localSlnInfo = e.SolutionInfo; var startupMode = e.StartupMode; var newStatus = e.NewStatus; var exitCode = e.DevenvExitCode; var statDesc = newStatus.GetAnalysisStatusDescription(); var slnFileName = newManager.SolutionInfo.SolutionFileName; StatWrapper summaryResult; if (summaryResults.TryGetValue(startupMode, out summaryResult)) { switch (newStatus) { case AnalysisStatus.OkFinished: Interlocked.Increment(ref summaryResult.OkCount); CisTsLog(() => { _DefaultWriter.WriteLine(CisFormatString, startupMode, slnFileName, statDesc); }); break; case AnalysisStatus.DiffFinished: Interlocked.Increment(ref summaryResult.DiffCount); CisTsLog(() => { _DefaultWriter.WriteLine(CisFormatString, startupMode, slnFileName, statDesc); }); break; case AnalysisStatus.PluginCrashed: Interlocked.Increment(ref summaryResult.FailCount); CisTsLog(() => { _DefaultWriter.WriteLine(CisFormatString, startupMode, slnFileName, statDesc); _DefaultWriter.WriteLine(Resources.CisFailMsg, slnFileName, startupMode, e.CrashReason.GetCrashMessage()); _DefaultWriter.WriteLine(Resources.WatchActivityLog, newManager.LogFileName.GetDevenvActivityLog()); if (exitCode != default(int)) { _DefaultWriter.WriteLine(Resources.ExitCodeMessage, exitCode); } }); break; } } localSlnInfo.SetStatusValue(startupMode, newStatus); }; }; controller.RunAll(); } break; default: _DefaultWriter.WriteLine("Unknown option {0}. Press any key to exit...", selectionMode); Environment.Exit(0); break; } _DefaultWriter.WriteLine( "----------------------------------------------------------Stat----------------------------------------------------------"); foreach (var mode in summaryResults.Keys) { var oks = summaryResults[mode].OkCount; var diffs = summaryResults[mode].DiffCount; var fails = summaryResults[mode].FailCount; _DefaultWriter.WriteLine("Mode: {0}. Oks: {1}. Diffs: {2}. Fails: {3}", mode, oks, diffs, fails); } return (summaryResults.Keys.Sum(startMode => summaryResults[startMode].DiffCount) + // Кол-во Diff'ов... summaryResults.Keys.Sum(startMode => summaryResults[startMode].FailCount)); // ... + Кол-во Fail'ов }