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(); } } }; }
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 }