Ejemplo n.º 1
0
        private SolutionInfoViewModel[] SetupSolutionInfoDataGrid()
        {
            var models = TestedSolutionsManager.RetrieveSlnInfoViewModels();

            SlnInfoDataGrid.ItemsSource = models;
            return(models);
        }
Ejemplo n.º 2
0
        /// <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);
        }
Ejemplo n.º 3
0
        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);
        }
Ejemplo n.º 4
0
        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);
            }
        }
Ejemplo n.º 5
0
        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'ов
        }