// // 2002-2005 AlphaSierraPapa // GNU General Public License // // $Revision$ // using System; using System.Collections; using System.Threading; using System.Windows.Forms; using NUnit.Util; using NUnit.Core; using NUnit.Framework; using NUnit.Extensions; using ICSharpCode.SharpDevelop.Project; using ICSharpCode.Core; using ICSharpCode.SharpDevelop.Gui; namespace ICSharpCode.NUnitPad { /// /// Description of the pad content /// public class NUnitPadContent : AbstractPadContent { TestTreeView testTreeView; Panel contentPanel; bool autoLoadItems = false; ArrayList testDomains = new ArrayList(); #region AbstractPadContent requirements /// /// The representing the pad /// public override Control Control { get { return contentPanel; } } /// /// Creates a new NUnitPadContent object /// public NUnitPadContent() { testTreeView = new TestTreeView(); testTreeView.Dock = DockStyle.Fill; ToolStrip toolStrip = new ToolStrip(); toolStrip.Dock = DockStyle.Top; toolStrip.Stretch = true; toolStrip.GripStyle = System.Windows.Forms.ToolStripGripStyle.Hidden; ToolStripButton refreshItem = new ToolStripButton(); refreshItem.ToolTipText = StringParser.Parse("${res:NUnitPad.NUnitPadContent.RefreshItem}"); refreshItem.Image = IconService.GetBitmap("Icons.16x16.BrowserRefresh"); refreshItem.Click += new EventHandler(RefreshItemClick); toolStrip.Items.Add(refreshItem); ToolStripButton cancelItem = new ToolStripButton(); cancelItem.ToolTipText = StringParser.Parse("${res:NUnitPad.NUnitPadContent.CancelItem}"); cancelItem.Image = IconService.GetBitmap("Icons.16x16.BrowserCancel"); cancelItem.Click += new EventHandler(CancelItemClick); toolStrip.Items.Add(cancelItem); toolStrip.Items.Add(new ToolStripSeparator()); ToolStripButton referenceItem = new ToolStripButton(); referenceItem.ToolTipText = StringParser.Parse("${res:NUnitPad.NUnitPadContent.ReferenceItem}"); referenceItem.Image = IconService.GetBitmap("Icons.16x16.Reference"); referenceItem.Click += new EventHandler(AddNUnitReference); toolStrip.Items.Add(referenceItem); toolStrip.Items.Add(new ToolStripSeparator()); ToolStripButton runItem = new ToolStripButton(); runItem.ToolTipText = StringParser.Parse("${res:NUnitPad.NUnitPadContent.RunItem}"); runItem.Image = IconService.GetBitmap("Icons.16x16.RunProgramIcon"); runItem.Click += new EventHandler(RunItemClick); toolStrip.Items.Add(runItem); contentPanel = new Panel(); contentPanel.Controls.Add(testTreeView); contentPanel.Controls.Add(toolStrip); ProjectService.SolutionLoaded += new SolutionEventHandler(CombineEventHandler); ProjectService.SolutionClosed += new EventHandler(ProjectServiceCombineClosed); ProjectService.StartBuild += new EventHandler(ProjectServiceStartBuild); ProjectService.EndBuild += new EventHandler(ProjectServiceEndBuild); testTreeView.SetAutoLoadState(autoLoadItems); } /// /// Refreshes the pad /// public override void RedrawContent() { } /// /// Cleans up all used resources /// public override void Dispose() { base.Dispose(); UnloadAppDomains(); testTreeView.Dispose(); contentPanel.Dispose(); ProjectService.StartBuild -= new EventHandler(ProjectServiceStartBuild); ProjectService.EndBuild -= new EventHandler(ProjectServiceEndBuild); } #endregion void ProjectServiceStartBuild(object sender, EventArgs e) { } void CombineEventHandler(object sender, SolutionEventArgs e) { if (autoLoadItems) { RefreshProjectAssemblies(); } } void ProjectServiceEndBuild(object sender, EventArgs e) { if (autoLoadItems) { RefreshProjectAssemblies(); } } void AddNUnitReference(object sender, EventArgs e) { if (ProjectService.CurrentProject != null) { ProjectService.AddProjectItem(ProjectService.CurrentProject, new ReferenceProjectItem(ProjectService.CurrentProject, "nunit.framework")); ProjectService.CurrentProject.Save(); } } void RunItemClick(object sender, EventArgs e) { RunTests(); } void RefreshItemClick(object sender, EventArgs e) { autoLoadItems = true; RefreshProjectAssemblies(); } void CancelItemClick(object sender, EventArgs e) { autoLoadItems = false; UnloadAppDomains(); testTreeView.SetAutoLoadState(autoLoadItems); } void ProjectServiceCombineClosed(object sender, EventArgs e) { UnloadAppDomains(); } void UnloadAppDomains() { /*foreach (TestDomain domain in testDomains) { try { domain.Unload(); } catch (Exception) {} }*/ testDomains.Clear(); testTreeView.ClearTests(); } public void RunTests() { if (ProjectService.OpenSolution == null) return; if (!autoLoadItems) { autoLoadItems = true; RefreshProjectAssemblies(); } testTreeView.RunTests(); } public void RefreshProjectAssemblies() { UnloadAppDomains(); if (ProjectService.OpenSolution == null) { return; } foreach (IProject project in ProjectService.OpenSolution.Projects) { string outputAssembly = project.OutputAssemblyFullPath; try { TestDomain testDomain = new TestDomain(); NUnitProject prj = NUnitProject.LoadProject(outputAssembly); Test test = testDomain.Load(prj); // TestSuiteBuilder builder = new TestSuiteBuilder(); // Console.WriteLine("Try to load '" + outputAssembly +"'"); // Test testDomain = builder.Build(outputAssembly); testTreeView.PrintTests(outputAssembly, test, project); } catch (Exception e) { testTreeView.PrintTestErrors(outputAssembly, e); } } } } }