#develop (short for SharpDevelop) is a free IDE for .NET programming languages.
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

215 lines
6.0 KiB

// <file>
// <copyright see="prj:///doc/copyright.txt">2002-2005 AlphaSierraPapa</copyright>
// <license see="prj:///doc/license.txt">GNU General Public License</license>
// <owner name="Mike Krüger" email="mike@icsharpcode.net"/>
// <version>$Revision$</version>
// </file>
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
{
/// <summary>
/// Description of the pad content
/// </summary>
public class NUnitPadContent : AbstractPadContent
{
TestTreeView testTreeView;
Panel contentPanel;
bool autoLoadItems = false;
ArrayList testDomains = new ArrayList();
#region AbstractPadContent requirements
/// <summary>
/// The <see cref="System.Windows.Forms.Control"/> representing the pad
/// </summary>
public override Control Control {
get {
return contentPanel;
}
}
/// <summary>
/// Creates a new NUnitPadContent object
/// </summary>
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);
}
/// <summary>
/// Refreshes the pad
/// </summary>
public override void RedrawContent()
{
}
/// <summary>
/// Cleans up all used resources
/// </summary>
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);
}
}
}
}
}