Example #1
0
        private void CreateTargetForm()
        {
            m_canClose = false;
            var viewResolver = Locator.Resolve <IResolver>("View");

            if (m_args != null && m_args.Length > 0)
            {
                m_view = viewResolver.Resolve <T>(m_args);
            }
            else
            {
                m_view = viewResolver.Resolve <T>();
            }
            m_view.ViewClosed += (s, e) =>
            {
                m_view = default(T);
            };
            m_view.ViewClosing += (s, e) =>
            {
                if (m_view != null && !m_canClose)
                {
                    e.Cancel = true;
                    m_view.Hide();
                    if (m_hostView != null)
                    {
                        m_hostView.Activate();
                    }
                }
            };
        }
Example #2
0
        private void WireUpEvents()
        {
            #region Model Events

            _model.Events.TestsLoading += (TestFilesLoadingEventArgs e) =>
            {
                UpdateViewCommands(testLoading: true);

                _longOpDisplay = _view.LongOperationDisplay("Loading...");
            };

            _model.Events.TestLoaded += (TestNodeEventArgs e) =>
            {
                if (_longOpDisplay != null)
                {
                    _longOpDisplay.Dispose();
                    _longOpDisplay = null;
                }

                foreach (var assembly in _model.TestAssemblies)
                {
                    if (assembly.RunState == RunState.NotRunnable)
                    {
                        _view.MessageDisplay.Error(assembly.GetProperty("_SKIPREASON"));
                    }
                }

                UpdateViewCommands();
            };

            _model.Events.TestsUnloading += (TestEventArgse) =>
            {
                UpdateViewCommands();
            };

            _model.Events.TestUnloaded += (TestEventArgs e) =>
            {
                _view.RunSummary.Text = null;

                UpdateViewCommands();
            };

            _model.Events.TestsReloading += (TestEventArgs e) =>
            {
                UpdateViewCommands();

                _longOpDisplay = _view.LongOperationDisplay("Reloading...");
            };

            _model.Events.TestReloaded += (TestNodeEventArgs e) =>
            {
                if (_longOpDisplay != null)
                {
                    _longOpDisplay.Dispose();
                    _longOpDisplay = null;
                }

                //SetTitleBar(TestProject.Name);

                if (_settings.Gui.ClearResultsOnReload)
                {
                    _view.RunSummary.Text = null;
                }

                UpdateViewCommands();
            };

            _model.Events.RunStarting += (RunStartingEventArgs e) =>
            {
                UpdateViewCommands();
            };

            _model.Events.RunFinished += (TestResultEventArgs e) =>
            {
                UpdateViewCommands();

                ResultSummary summary = ResultSummaryCreator.FromResultNode(e.Result);
                _view.RunSummary.Text = string.Format(
                    "Passed: {0}   Failed: {1}   Errors: {2}   Inconclusive: {3}   Invalid: {4}   Ignored: {5}   Skipped: {6}   Time: {7}",
                    summary.PassCount, summary.FailedCount, summary.ErrorCount, summary.InconclusiveCount, summary.InvalidCount, summary.IgnoreCount, summary.SkipCount, summary.Duration);

                //string resultPath = Path.Combine(TestProject.BasePath, "TestResult.xml");
                // TODO: Use Work Directory
                string resultPath = "TestResult.xml";
                _model.SaveResults(resultPath);
                //try
                //{
                //    _model.SaveResults(resultPath);
                //    //log.Debug("Saved result to {0}", resultPath);
                //}
                //catch (Exception ex)
                //{
                //    //log.Warning("Unable to save result to {0}\n{1}", resultPath, ex.ToString());
                //}

                if (e.Result.Outcome.Status == TestStatus.Failed)
                {
                    _view.Activate();
                }
            };

            _settings.Changed += (s, e) =>
            {
                if (e.SettingName == "Gui.Options.DisplayFormat")
                {
                    InitializeDisplay();
                }
            };

            #endregion

            #region View Events

            _view.Load += (s, e) =>
            {
                InitializeDisplay(_settings.Gui.DisplayFormat);

                // Temporary call, so long as IViewControl is used
                InitializeControls((Control)_view);
            };

            _view.Shown += (s, e) =>
            {
                Application.DoEvents();

                // Load test specified on command line or
                // the most recent one if options call for it
                if (_options.InputFiles.Count != 0)
                {
                    LoadTests(_options.InputFiles);
                }
                else if (_settings.Gui.LoadLastProject && !_options.NoLoad)
                {
                    foreach (string entry in _recentFiles.Entries)
                    {
                        if (entry != null && File.Exists(entry))
                        {
                            LoadTests(entry);
                            break;
                        }
                    }
                }

                //if ( guiOptions.include != null || guiOptions.exclude != null)
                //{
                //    testTree.ClearSelectedCategories();
                //    bool exclude = guiOptions.include == null;
                //    string[] categories = exclude
                //        ? guiOptions.exclude.Split(',')
                //        : guiOptions.include.Split(',');
                //    if ( categories.Length > 0 )
                //        testTree.SelectCategories( categories, exclude );
                //}

                // Run loaded test automatically if called for
                if (_model.IsPackageLoaded && _options.RunAllTests)
                {
                    // TODO: Temporary fix to avoid problem when /run is used
                    // with ReloadOnRun turned on. Refactor TestModel so
                    // we can just do a run without reload.
                    bool reload = _settings.Gui.ReloadOnRun;

                    try
                    {
                        _settings.Gui.ReloadOnRun = false;
                        RunAllTests();
                    }
                    finally
                    {
                        _settings.Gui.ReloadOnRun = reload;
                    }
                }
            };

            _view.Move += (s, e) =>
            {
                if (!_view.Maximized)
                {
                    var location = _view.Location;

                    switch (_view.DisplayFormat.SelectedItem)
                    {
                    case "Full":
                    default:
                        _settings.Gui.MainForm.Left      = location.X;
                        _settings.Gui.MainForm.Top       = location.Y;
                        _settings.Gui.MainForm.Maximized = false;
                        break;

                    case "Mini":
                        _settings.Gui.MiniForm.Left      = location.X;
                        _settings.Gui.MiniForm.Top       = location.Y;
                        _settings.Gui.MiniForm.Maximized = false;
                        break;
                    }
                }
            };

            _view.Resize += (s, e) =>
            {
                if (!_view.Maximized)
                {
                    var size = _view.Size;

                    if (_view.DisplayFormat.SelectedItem == "Full")
                    {
                        _settings.Gui.MainForm.Width  = size.Width;
                        _settings.Gui.MainForm.Height = size.Height;
                    }
                    else
                    {
                        _settings.Gui.MiniForm.Width  = size.Width;
                        _settings.Gui.MiniForm.Height = size.Height;
                    }
                }
            };

            _view.SplitterPosition.Changed += () =>
            {
                _settings.Gui.MainForm.SplitPosition = _view.SplitterPosition.Value;
            };

            _view.FormClosing += (s, e) =>
            {
                if (_model.IsPackageLoaded)
                {
                    if (_model.IsTestRunning)
                    {
                        DialogResult dialogResult = _view.MessageDisplay.Ask(
                            "A test is running, do you want to stop the test and exit?");

                        if (dialogResult == DialogResult.No)
                        {
                            e.Cancel = true;
                            return;
                        }

                        _model.CancelTestRun();
                    }

                    if (CloseProject() == DialogResult.Cancel)
                    {
                        e.Cancel = true;
                    }
                }
            };

            _view.RunButton.Execute  += () => RunSelectedTests();
            _view.StopButton.Execute += () => CancelRun();

            _view.FileMenu.Popup += () =>
            {
                bool isPackageLoaded = _model.IsPackageLoaded;
                bool isTestRunning   = _model.IsTestRunning;

                _view.OpenCommand.Enabled  = !isTestRunning;
                _view.CloseCommand.Enabled = isPackageLoaded && !isTestRunning;

                _view.ReloadTestsCommand.Enabled = isPackageLoaded && !isTestRunning;

                var frameworks  = _model.AvailableRuntimes;
                var runtimeMenu = _view.RuntimeMenu;

                runtimeMenu.Visible = frameworks.Count > 1;

                if (runtimeMenu.Visible && runtimeMenu.Enabled && runtimeMenu.MenuItems.Count == 0)
                {
                    var defaultMenuItem = new MenuItem("Default");
                    defaultMenuItem.Name    = "defaultMenuItem";
                    defaultMenuItem.Tag     = "DEFAULT";
                    defaultMenuItem.Checked = true;

                    runtimeMenu.MenuItems.Add(defaultMenuItem);

                    // TODO: Disable selections that are not supported for the target?
                    foreach (IRuntimeFramework framework in frameworks)
                    {
                        MenuItem item = new MenuItem(framework.DisplayName);
                        item.Tag = framework.Id;
                        runtimeMenu.MenuItems.Add(item);
                    }

                    _view.SelectedRuntime.Refresh();
                }

                _view.RecentFilesMenu.Enabled = !isTestRunning;

                //if (!isTestRunning)
                //{
                //    _recentProjectsMenuHandler.Load();
                //}
            };

            _view.OpenCommand.Execute        += () => OpenProject();
            _view.CloseCommand.Execute       += () => CloseProject();
            _view.AddTestFileCommand.Execute += () => AddTestFile();
            _view.ReloadTestsCommand.Execute += () => ReloadTests();

            _view.SelectedRuntime.SelectionChanged += () =>
            {
                ChangePackageSetting(EnginePackageSettings.RuntimeFramework, _view.SelectedRuntime.SelectedItem);
            };

            _view.RecentFilesMenu.Popup += () =>
            {
                var menuItems = _view.RecentFilesMenu.MenuItems;
                // Test for null, in case we are running tests with a mock
                if (menuItems == null)
                {
                    return;
                }

                menuItems.Clear();
                int num = 0;
                foreach (string entry in _model.Services.RecentFiles.Entries)
                {
                    var menuText = string.Format("{0} {1}", ++num, entry);
                    var menuItem = new MenuItem(menuText);
                    menuItem.Click += (sender, ea) =>
                    {
                        string path = ((MenuItem)sender).Text.Substring(2);
                        _model.LoadTests(new[] { path });
                    };
                    menuItems.Add(menuItem);
                }
            };

            _view.ExitCommand.Execute += () => _view.Close();

            _view.DisplayFormat.SelectionChanged += () =>
            {
                _settings.Gui.DisplayFormat = _view.DisplayFormat.SelectedItem;
                InitializeDisplay(_view.DisplayFormat.SelectedItem);
            };

            _view.TreeMenu.Popup += () =>
            {
                TreeNode selectedNode = _view.TreeView.SelectedNode;

                _view.CheckboxesCommand.Checked = _settings.Gui.TestTree.ShowCheckBoxes;

                if (selectedNode != null && selectedNode.Nodes.Count > 0)
                {
                    bool isExpanded = selectedNode.IsExpanded;
                    _view.CollapseCommand.Enabled = isExpanded;
                    _view.ExpandCommand.Enabled   = !isExpanded;
                }
                else
                {
                    _view.CollapseCommand.Enabled = _view.ExpandCommand.Enabled = false;
                }
            };

            _view.CheckboxesCommand.CheckedChanged += () =>
            {
                _settings.Gui.TestTree.ShowCheckBoxes = _view.TreeView.CheckBoxes = _view.CheckboxesCommand.Checked;
            };

            _view.ExpandCommand.Execute += () =>
            {
                _view.TreeView.SelectedNode.Expand();
            };

            _view.CollapseCommand.Execute += () =>
            {
                _view.TreeView.SelectedNode.Collapse();
            };

            _view.ExpandAllCommand.Execute += () =>
            {
                _view.TreeView.ExpandAll();
            };

            _view.CollapseAllCommand.Execute += () =>
            {
                _view.TreeView.CollapseAll();
            };

            _view.HideTestsCommand.Execute += () =>
            {
                _view.TreeView.HideTests();
            };

            _view.PropertiesCommand.Execute += () =>
            {
                if (_view.TreeView.SelectedNode != null)
                {
                    _view.TreeView.ShowPropertiesDialog((TestSuiteTreeNode)_view.TreeView.SelectedNode);
                }
            };

            _view.IncreaseFontCommand.Execute += () =>
            {
                applyFont(IncreaseFont(_settings.Gui.Font));
            };

            _view.DecreaseFontCommand.Execute += () =>
            {
                applyFont(DecreaseFont(_settings.Gui.Font));
            };

            _view.ChangeFontCommand.Execute += () =>
            {
                FontDialog fontDialog = new FontDialog();
                fontDialog.FontMustExist    = true;
                fontDialog.Font             = _settings.Gui.Font;
                fontDialog.MinSize          = 6;
                fontDialog.MaxSize          = 12;
                fontDialog.AllowVectorFonts = false;
                fontDialog.ScriptsOnly      = true;
                fontDialog.ShowEffects      = false;
                fontDialog.ShowApply        = true;
                fontDialog.Apply           += (s, e) =>
                {
                    applyFont(((FontDialog)s).Font);
                };
                if (fontDialog.ShowDialog() == DialogResult.OK)
                {
                    applyFont(fontDialog.Font);
                }
            };

            _view.RestoreFontCommand.Execute += () =>
            {
                applyFont(Form.DefaultFont);
            };

            _view.IncreaseFixedFontCommand.Execute += () =>
            {
                _settings.Gui.FixedFont = IncreaseFont(_settings.Gui.FixedFont);
            };

            _view.DecreaseFixedFontCommand.Execute += () =>
            {
                _settings.Gui.FixedFont = DecreaseFont(_settings.Gui.FixedFont);
            };

            _view.RestoreFixedFontCommand.Execute += () =>
            {
                _settings.Gui.FixedFont = new Font(FontFamily.GenericMonospace, 8.0f);
            };

            _view.StatusBarCommand.CheckedChanged += () =>
            {
                _view.StatusBarView.Visible = _view.StatusBarCommand.Checked;
            };

            _view.RunAllCommand.Execute      += () => RunAllTests();
            _view.RunSelectedCommand.Execute += () => RunSelectedTests();
            _view.RunFailedCommand.Execute   += () => RunFailedTests();
            _view.StopRunCommand.Execute     += () => CancelRun();

            _view.ToolsMenu.Popup += () =>
            {
                _view.ProjectEditorCommand.Enabled = File.Exists(_model.ProjectEditorPath);
            };

            _view.ProjectEditorCommand.Execute += () =>
            {
                string editorPath = _settings.Gui.ProjectEditorPath;
                if (editorPath != null && File.Exists(editorPath))
                {
                    System.Diagnostics.Process.Start(editorPath);
                }
            };

            _view.SaveResultsCommand.Execute += () => SaveResults();

            _view.ExtensionsCommand.Execute += () =>
            {
                using (var extensionsDialog = new ExtensionDialog(_model.Services.ExtensionService))
                {
                    extensionsDialog.Font = _settings.Gui.Font;
                    extensionsDialog.ShowDialog();
                }
            };

            _view.SettingsCommand.Execute += () =>
            {
                SettingsDialog.Display(this, _model);
            };

            _view.TestCentricHelpCommand.Execute += () =>
            {
                _view.MessageDisplay.Error("Not Yet Implemented");
            };

            _view.NUnitHelpCommand.Execute += () =>
            {
                System.Diagnostics.Process.Start("https://github.com/nunit/docs/wiki/NUnit-Documentation");
            };

            _view.AboutCommand.Execute += () =>
            {
                using (AboutBox aboutBox = new AboutBox())
                {
                    aboutBox.ShowDialog();
                }
            };

            _view.ResultTabs.SelectionChanged += () =>
            {
                _settings.Gui.SelectedTab = _view.ResultTabs.SelectedIndex;
            };

            #endregion
        }