Merge lp:~anuraj.p/nunitv2/GUIFindTest into lp:nunitv2

Proposed by Anuraj P
Status: Needs review
Proposed branch: lp:~anuraj.p/nunitv2/GUIFindTest
Merge into: lp:nunitv2
Diff against target: 2593 lines (+1345/-1217)
3 files modified
src/GuiComponents/UiKit/TestTree.cs (+941/-815)
src/GuiComponents/UiKit/nunit.uikit.build (+1/-0)
src/GuiComponents/UiKit/nunit.uikit.dll.csproj (+403/-402)
To merge this branch: bzr merge lp:~anuraj.p/nunitv2/GUIFindTest
Reviewer Review Type Date Requested Status
Simone Busoli Needs Fixing
Review via email: mp+132950@code.launchpad.net
To post a comment you must log in.
Revision history for this message
Simone Busoli (simone.busoli) wrote :

The build fails on my machine with error:

     [exec] 1) Test Error : NUnit.UiKit.Tests.TestTreeTests.SameCategoryShouldNotBeSelectedMoreThanO
nce
     [exec] System.ArgumentException : Resource 'Images.search.png' cannot be found in class 'NUn
it.UiKit.TestTree'.

The reason is that although we have .csproj files to use in Visual Studio the build is done with NAnt scripts, so you would need to modify the nunit.uikit.build by including the new image in the patternset node with id resource-files.

After building successfully I can't run tests any longer in the GUI. For instance I open the NUnitTests.nunit project file and leaving aside the new search feature I try hitting the Run button. I get a null reference exception, and pretty much the same for anything else I try to run via the UI, either by right clicking a node or selecting one and clicking the Run button.

review: Needs Fixing
Revision history for this message
Anuraj P (anuraj.p) wrote :

I modified the build file. I was not using build.bat file. Sorry I missed that. I am not sure why the application is crashing while opening the project, because I didn't changed anything in those code. Anyway I will look into it.

lp:~anuraj.p/nunitv2/GUIFindTest updated
3456. By Anuraj P

Image resource added to the Build file

Revision history for this message
Charlie Poole (charlie.poole) wrote :

Since you requested a merge, I assume you were able to build at some
point - right?

Charlie

On Mon, Nov 5, 2012 at 6:08 PM, Anuraj P <email address hidden> wrote:
> I modified the build file. I was not using build.bat file. Sorry I missed that. I am not sure why the application is crashing while opening the project, because I didn't changed anything in those code. Anyway I will look into it.
> --
> https://code.launchpad.net/~anuraj.p/nunitv2/GUIFindTest/+merge/132950
> You are subscribed to branch lp:nunitv2.

Revision history for this message
Anuraj P (anuraj.p) wrote :

As I am using Visual Studio to build, it was working without any issue. No problem I modified the build file, and it is committed also.

> Since you requested a merge, I assume you were able to build at some
> point - right?
>
> Charlie
>
> On Mon, Nov 5, 2012 at 6:08 PM, Anuraj P <email address hidden> wrote:
> > I modified the build file. I was not using build.bat file. Sorry I missed
> that. I am not sure why the application is crashing while opening the project,
> because I didn't changed anything in those code. Anyway I will look into it.
> > --
> > https://code.launchpad.net/~anuraj.p/nunitv2/GUIFindTest/+merge/132950
> > You are subscribed to branch lp:nunitv2.

Revision history for this message
Simone Busoli (simone.busoli) wrote :

Hi Anuraj,

the GUI doesn't crash at startup but when I try to run a test. The repro is
simple, can you try what happens when you build it by:

- running *build.bat*
- executing builds\net\3.5\debug\nunit.exe
- loading the project file located in builds\net\3.5\debug\NUnitTests.nunit
- clicking the Run button

? At that point, where the GUI should run all the tests contained in the
project, I get a NRE.

Simone

On Tue, Nov 6, 2012 at 6:06 AM, Anuraj P <email address hidden> wrote:

> As I am using Visual Studio to build, it was working without any issue. No
> problem I modified the build file, and it is committed also.
>
> > Since you requested a merge, I assume you were able to build at some
> > point - right?
> >
> > Charlie
> >
> > On Mon, Nov 5, 2012 at 6:08 PM, Anuraj P <email address hidden> wrote:
> > > I modified the build file. I was not using build.bat file. Sorry I
> missed
> > that. I am not sure why the application is crashing while opening the
> project,
> > because I didn't changed anything in those code. Anyway I will look into
> it.
> > > --
> > > https://code.launchpad.net/~anuraj.p/nunitv2/GUIFindTest/+merge/132950
> > > You are subscribed to branch lp:nunitv2.
> --
> https://code.launchpad.net/~anuraj.p/nunitv2/GUIFindTest/+merge/132950
> You are reviewing the proposed merge of lp:~anuraj.p/nunitv2/GUIFindTest
> into lp:nunitv2.
>

Unmerged revisions

3456. By Anuraj P

Image resource added to the Build file

3455. By Anuraj P

Find test feature implemented for NUnit GUI

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1=== added file 'src/GuiComponents/UiKit/Images/search.png'
2Binary files src/GuiComponents/UiKit/Images/search.png 1970-01-01 00:00:00 +0000 and src/GuiComponents/UiKit/Images/search.png 2012-11-06 02:11:19 +0000 differ
3=== modified file 'src/GuiComponents/UiKit/TestTree.cs'
4--- src/GuiComponents/UiKit/TestTree.cs 2012-07-21 20:00:21 +0000
5+++ src/GuiComponents/UiKit/TestTree.cs 2012-11-06 02:11:19 +0000
6@@ -1,133 +1,132 @@
7-// ****************************************************************
8-// This is free software licensed under the NUnit license. You
9-// may obtain a copy of the license as well as information regarding
10-// copyright ownership at http://nunit.org.
11-// ****************************************************************
12-
13-using System;
14-using System.Collections;
15-using System.Collections.Generic;
16-using System.ComponentModel;
17-using System.Drawing;
18-using System.Data;
19-using System.Windows.Forms;
20-using NUnit.Core;
21-using NUnit.Util;
22-
23-namespace NUnit.UiKit
24-{
25- public delegate void SelectedTestsChangedEventHandler(object sender, SelectedTestsChangedEventArgs e);
26- /// <summary>
27- /// Summary description for TestTree.
28- /// </summary>
29- public class TestTree : System.Windows.Forms.UserControl
30- {
31- #region Instance Variables
32-
33- // Contains all available categories, whether
34- // selected or not. Unselected members of this
35- // list are displayed in selectedList
36- private IList availableCategories = new List<string>();
37-
38- // Our test loader
39- private TestLoader loader;
40-
41- private System.Windows.Forms.TabControl tabs;
42- private System.Windows.Forms.TabPage testPage;
43- private System.Windows.Forms.TabPage categoryPage;
44- private System.Windows.Forms.Panel testPanel;
45- private System.Windows.Forms.Panel categoryPanel;
46- private System.Windows.Forms.Panel treePanel;
47- private System.Windows.Forms.Panel buttonPanel;
48- private NUnit.UiKit.TestSuiteTreeView tests;
49- private System.Windows.Forms.GroupBox groupBox1;
50- private System.Windows.Forms.ListBox availableList;
51- private System.Windows.Forms.GroupBox selectedCategories;
52- private System.Windows.Forms.ListBox selectedList;
53- private System.Windows.Forms.Panel categoryButtonPanel;
54- private System.Windows.Forms.Button addCategory;
55- private System.Windows.Forms.Button removeCategory;
56- private System.Windows.Forms.Button clearAllButton;
57- private System.Windows.Forms.Button checkFailedButton;
58- private System.Windows.Forms.MenuItem treeMenu;
59- private System.Windows.Forms.MenuItem checkBoxesMenuItem;
60- private System.Windows.Forms.MenuItem treeMenuSeparatorItem1;
61- private System.Windows.Forms.MenuItem expandMenuItem;
62- private System.Windows.Forms.MenuItem collapseMenuItem;
63- private System.Windows.Forms.MenuItem treeMenuSeparatorItem2;
64- private System.Windows.Forms.MenuItem expandAllMenuItem;
65- private System.Windows.Forms.MenuItem collapseAllMenuItem;
66- private System.Windows.Forms.MenuItem hideTestsMenuItem;
67- private System.Windows.Forms.MenuItem treeMenuSeparatorItem3;
68- private System.Windows.Forms.MenuItem propertiesMenuItem;
69- private System.Windows.Forms.CheckBox excludeCheckbox;
70-
71- /// <summary>
72- /// Required designer variable.
73- /// </summary>
74- private System.ComponentModel.Container components = null;
75-
76- #endregion
77-
78- #region Properties
79-
80- public MenuItem TreeMenu
81- {
82- get { return treeMenu; }
83- }
84-
85- public string[] SelectedCategories
86- {
87- get
88- {
89- int n = this.selectedList.Items.Count;
90- string[] categories = new string[n];
91- for( int i = 0; i < n; i++ )
92- categories[i] = this.selectedList.Items[i].ToString();
93- return categories;
94- }
95- }
96-
97- [Browsable(false)]
98- public bool ShowCheckBoxes
99- {
100- get { return tests.CheckBoxes; }
101- set
102- {
103- tests.CheckBoxes = value;
104- buttonPanel.Visible = value;
105- clearAllButton.Visible = value;
106- checkFailedButton.Visible = value;
107- checkBoxesMenuItem.Checked = value;
108- }
109- }
110- #endregion
111-
112- #region Construction and Initialization
113-
114- public TestTree()
115- {
116- // This call is required by the Windows.Forms Form Designer.
117- InitializeComponent();
118- treeMenu = new MenuItem();
119- this.checkBoxesMenuItem = new System.Windows.Forms.MenuItem();
120- this.treeMenuSeparatorItem1 = new System.Windows.Forms.MenuItem();
121- this.expandMenuItem = new System.Windows.Forms.MenuItem();
122- this.collapseMenuItem = new System.Windows.Forms.MenuItem();
123- this.treeMenuSeparatorItem2 = new System.Windows.Forms.MenuItem();
124- this.expandAllMenuItem = new System.Windows.Forms.MenuItem();
125- this.collapseAllMenuItem = new System.Windows.Forms.MenuItem();
126- this.hideTestsMenuItem = new System.Windows.Forms.MenuItem();
127- this.treeMenuSeparatorItem3 = new System.Windows.Forms.MenuItem();
128- this.propertiesMenuItem = new System.Windows.Forms.MenuItem();
129-
130- //
131- // treeMenu
132- //
133- this.treeMenu.MergeType = MenuMerge.Add;
134- this.treeMenu.MergeOrder = 1;
135- this.treeMenu.MenuItems.AddRange(
136- new System.Windows.Forms.MenuItem[]
137+// ****************************************************************
138+// This is free software licensed under the NUnit license. You
139+// may obtain a copy of the license as well as information regarding
140+// copyright ownership at http://nunit.org.
141+// ****************************************************************
142+
143+using System;
144+using System.Collections;
145+using System.Collections.Generic;
146+using System.ComponentModel;
147+using System.Drawing;
148+using System.Data;
149+using System.Windows.Forms;
150+using NUnit.Core;
151+using NUnit.Util;
152+
153+namespace NUnit.UiKit
154+{
155+ public delegate void SelectedTestsChangedEventHandler(object sender, SelectedTestsChangedEventArgs e);
156+ /// <summary>
157+ /// Summary description for TestTree.
158+ /// </summary>
159+ public class TestTree : System.Windows.Forms.UserControl
160+ {
161+ #region Instance Variables
162+
163+ // Contains all available categories, whether
164+ // selected or not. Unselected members of this
165+ // list are displayed in selectedList
166+ private IList availableCategories = new List<string>();
167+
168+ // Our test loader
169+ private TestLoader loader;
170+
171+ private System.Windows.Forms.TabControl tabs;
172+ private System.Windows.Forms.TabPage testPage;
173+ private System.Windows.Forms.TabPage categoryPage;
174+ private System.Windows.Forms.Panel testPanel;
175+ private System.Windows.Forms.Panel categoryPanel;
176+ private System.Windows.Forms.Panel buttonPanel;
177+ private System.Windows.Forms.GroupBox groupBox1;
178+ private System.Windows.Forms.ListBox availableList;
179+ private System.Windows.Forms.GroupBox selectedCategories;
180+ private System.Windows.Forms.ListBox selectedList;
181+ private System.Windows.Forms.Panel categoryButtonPanel;
182+ private System.Windows.Forms.Button addCategory;
183+ private System.Windows.Forms.Button removeCategory;
184+ private System.Windows.Forms.Button clearAllButton;
185+ private System.Windows.Forms.Button checkFailedButton;
186+ private System.Windows.Forms.MenuItem treeMenu;
187+ private System.Windows.Forms.MenuItem checkBoxesMenuItem;
188+ private System.Windows.Forms.MenuItem treeMenuSeparatorItem1;
189+ private System.Windows.Forms.MenuItem expandMenuItem;
190+ private System.Windows.Forms.MenuItem collapseMenuItem;
191+ private System.Windows.Forms.MenuItem treeMenuSeparatorItem2;
192+ private System.Windows.Forms.MenuItem expandAllMenuItem;
193+ private System.Windows.Forms.MenuItem collapseAllMenuItem;
194+ private System.Windows.Forms.MenuItem hideTestsMenuItem;
195+ private System.Windows.Forms.MenuItem treeMenuSeparatorItem3;
196+ private System.Windows.Forms.MenuItem propertiesMenuItem;
197+ private System.Windows.Forms.CheckBox excludeCheckbox;
198+
199+ #endregion
200+ private Panel treePanel;
201+ private TestSuiteTreeView tests;
202+ private Panel FindTestsPanel;
203+ private PictureBox SearchImageButton;
204+ private TextBox TestNameTextBox;
205+ private IContainer components;
206+
207+ #region Properties
208+
209+ public MenuItem TreeMenu
210+ {
211+ get { return treeMenu; }
212+ }
213+
214+ public string[] SelectedCategories
215+ {
216+ get
217+ {
218+ int n = this.selectedList.Items.Count;
219+ string[] categories = new string[n];
220+ for (int i = 0; i < n; i++)
221+ categories[i] = this.selectedList.Items[i].ToString();
222+ return categories;
223+ }
224+ }
225+
226+ [Browsable(false)]
227+ public bool ShowCheckBoxes
228+ {
229+ get { return tests.CheckBoxes; }
230+ set
231+ {
232+ tests.CheckBoxes = value;
233+ buttonPanel.Visible = value;
234+ clearAllButton.Visible = value;
235+ checkFailedButton.Visible = value;
236+ checkBoxesMenuItem.Checked = value;
237+ }
238+ }
239+ #endregion
240+
241+ #region Construction and Initialization
242+
243+ public TestTree()
244+ {
245+ // This call is required by the Windows.Forms Form Designer.
246+ InitializeComponent();
247+ treeMenu = new MenuItem();
248+ this.checkBoxesMenuItem = new System.Windows.Forms.MenuItem();
249+ this.treeMenuSeparatorItem1 = new System.Windows.Forms.MenuItem();
250+ this.expandMenuItem = new System.Windows.Forms.MenuItem();
251+ this.collapseMenuItem = new System.Windows.Forms.MenuItem();
252+ this.treeMenuSeparatorItem2 = new System.Windows.Forms.MenuItem();
253+ this.expandAllMenuItem = new System.Windows.Forms.MenuItem();
254+ this.collapseAllMenuItem = new System.Windows.Forms.MenuItem();
255+ this.hideTestsMenuItem = new System.Windows.Forms.MenuItem();
256+ this.treeMenuSeparatorItem3 = new System.Windows.Forms.MenuItem();
257+ this.propertiesMenuItem = new System.Windows.Forms.MenuItem();
258+
259+ //
260+ // treeMenu
261+ //
262+ this.treeMenu.MergeType = MenuMerge.Add;
263+ this.treeMenu.MergeOrder = 1;
264+ this.treeMenu.MenuItems.AddRange(
265+ new System.Windows.Forms.MenuItem[]
266 {
267 this.checkBoxesMenuItem,
268 this.treeMenuSeparatorItem1,
269@@ -139,688 +138,815 @@
270 this.hideTestsMenuItem,
271 this.treeMenuSeparatorItem3,
272 this.propertiesMenuItem
273- } );
274- this.treeMenu.Text = "&Tree";
275- this.treeMenu.Visible = false;
276- this.treeMenu.Popup += new System.EventHandler(this.treeMenu_Popup);
277- //
278- // checkBoxesMenuItem
279- //
280- this.checkBoxesMenuItem.Index = 0;
281- this.checkBoxesMenuItem.Text = "Show Check&Boxes";
282- this.checkBoxesMenuItem.Click += new System.EventHandler(this.checkBoxesMenuItem_Click);
283- //
284- // treeMenuSeparatorItem1
285- //
286- this.treeMenuSeparatorItem1.Index = 1;
287- this.treeMenuSeparatorItem1.Text = "-";
288- //
289- // expandMenuItem
290- //
291- this.expandMenuItem.Index = 2;
292- this.expandMenuItem.Text = "&Expand";
293- this.expandMenuItem.Click += new System.EventHandler(this.expandMenuItem_Click);
294- //
295- // collapseMenuItem
296- //
297- this.collapseMenuItem.Index = 3;
298- this.collapseMenuItem.Text = "&Collapse";
299- this.collapseMenuItem.Click += new System.EventHandler(this.collapseMenuItem_Click);
300- //
301- // treeMenuSeparatorItem2
302- //
303- this.treeMenuSeparatorItem2.Index = 4;
304- this.treeMenuSeparatorItem2.Text = "-";
305- //
306- // expandAllMenuItem
307- //
308- this.expandAllMenuItem.Index = 5;
309- this.expandAllMenuItem.Text = "Expand All";
310- this.expandAllMenuItem.Click += new System.EventHandler(this.expandAllMenuItem_Click);
311- //
312- // collapseAllMenuItem
313- //
314- this.collapseAllMenuItem.Index = 6;
315- this.collapseAllMenuItem.Text = "Collapse All";
316- this.collapseAllMenuItem.Click += new System.EventHandler(this.collapseAllMenuItem_Click);
317- //
318- // hideTestsMenuItem
319- //
320- this.hideTestsMenuItem.Index = 7;
321- this.hideTestsMenuItem.Text = "Hide Tests";
322- this.hideTestsMenuItem.Click += new System.EventHandler(this.hideTestsMenuItem_Click);
323- //
324- // treeMenuSeparatorItem3
325- //
326- this.treeMenuSeparatorItem3.Index = 8;
327- this.treeMenuSeparatorItem3.Text = "-";
328- //
329- // propertiesMenuItem
330- //
331- this.propertiesMenuItem.Index = 9;
332- this.propertiesMenuItem.Text = "&Properties";
333- this.propertiesMenuItem.Click += new System.EventHandler(this.propertiesMenuItem_Click);
334-
335-
336- tests.SelectedTestChanged += new SelectedTestChangedHandler(tests_SelectedTestChanged);
337- tests.CheckedTestChanged += new CheckedTestChangedHandler(tests_CheckedTestChanged);
338-
339- this.excludeCheckbox.Enabled = false;
340- }
341-
342- protected override void OnLoad(EventArgs e)
343- {
344- if ( !this.DesignMode )
345- {
346- this.ShowCheckBoxes =
347- Services.UserSettings.GetSetting( "Options.ShowCheckBoxes", false );
348- Initialize( Services.TestLoader );
349- Services.UserSettings.Changed += new SettingsEventHandler(UserSettings_Changed);
350- }
351-
352- base.OnLoad (e);
353- }
354-
355- public void Initialize(TestLoader loader)
356- {
357- this.tests.Initialize(loader, loader.Events);
358- this.loader = loader;
359- loader.Events.TestLoaded += new NUnit.Util.TestEventHandler(events_TestLoaded);
360- loader.Events.TestReloaded += new NUnit.Util.TestEventHandler(events_TestReloaded);
361- loader.Events.TestUnloaded += new NUnit.Util.TestEventHandler(events_TestUnloaded);
362- }
363-
364- public void SelectCategories( string[] categories, bool exclude )
365- {
366- foreach( string category in categories )
367- {
368- if ( availableCategories.Contains( category ) )
369- {
370- if (!selectedList.Items.Contains(category))
371- {
372- selectedList.Items.Add(category);
373- }
374- availableList.Items.Remove( category );
375-
376- this.excludeCheckbox.Checked = exclude;
377- }
378- }
379-
380- UpdateCategoryFilter();
381- if (this.SelectedCategories.Length > 0)
382- this.excludeCheckbox.Enabled = true;
383- }
384-
385- /// <summary>
386- /// Clean up any resources being used.
387- /// </summary>
388- protected override void Dispose( bool disposing )
389- {
390- if( disposing )
391- {
392- if(components != null)
393- {
394- components.Dispose();
395- }
396- }
397- base.Dispose( disposing );
398- }
399-
400- #endregion
401-
402- #region View Menu Handlers
403-
404- private void treeMenu_Popup(object sender, System.EventArgs e)
405- {
406- TreeNode selectedNode = tests.SelectedNode;
407- if ( selectedNode != null && selectedNode.Nodes.Count > 0 )
408- {
409- bool isExpanded = selectedNode.IsExpanded;
410- collapseMenuItem.Enabled = isExpanded;
411- expandMenuItem.Enabled = !isExpanded;
412- }
413- else
414- {
415- collapseMenuItem.Enabled = expandMenuItem.Enabled = false;
416- }
417- }
418-
419- private void collapseMenuItem_Click(object sender, System.EventArgs e)
420- {
421- tests.SelectedNode.Collapse();
422- }
423-
424- private void expandMenuItem_Click(object sender, System.EventArgs e)
425- {
426- tests.SelectedNode.Expand();
427- }
428-
429- private void collapseAllMenuItem_Click(object sender, System.EventArgs e)
430- {
431- tests.BeginUpdate();
432- tests.CollapseAll();
433- tests.EndUpdate();
434-
435- // Compensate for a bug in the underlying control
436- if ( tests.Nodes.Count > 0 )
437- tests.SelectedNode = tests.Nodes[0];
438- }
439-
440- private void hideTestsMenuItem_Click(object sender, System.EventArgs e)
441- {
442- tests.HideTests();
443- }
444-
445- private void expandAllMenuItem_Click(object sender, System.EventArgs e)
446- {
447- tests.BeginUpdate();
448- tests.ExpandAll();
449- tests.EndUpdate();
450- }
451-
452- private void propertiesMenuItem_Click(object sender, System.EventArgs e)
453- {
454- if ( tests.SelectedTest != null )
455- tests.ShowPropertiesDialog( tests.SelectedTest );
456- }
457-
458- #endregion
459-
460- #region Component Designer generated code
461- /// <summary>
462- /// Required method for Designer support - do not modify
463- /// the contents of this method with the code editor.
464- /// </summary>
465- private void InitializeComponent()
466- {
467- this.tabs = new System.Windows.Forms.TabControl();
468- this.testPage = new System.Windows.Forms.TabPage();
469- this.testPanel = new System.Windows.Forms.Panel();
470- this.treePanel = new System.Windows.Forms.Panel();
471- this.tests = new NUnit.UiKit.TestSuiteTreeView();
472- this.buttonPanel = new System.Windows.Forms.Panel();
473- this.checkFailedButton = new System.Windows.Forms.Button();
474- this.clearAllButton = new System.Windows.Forms.Button();
475- this.categoryPage = new System.Windows.Forms.TabPage();
476- this.categoryPanel = new System.Windows.Forms.Panel();
477- this.categoryButtonPanel = new System.Windows.Forms.Panel();
478- this.removeCategory = new System.Windows.Forms.Button();
479- this.addCategory = new System.Windows.Forms.Button();
480- this.selectedCategories = new System.Windows.Forms.GroupBox();
481- this.selectedList = new System.Windows.Forms.ListBox();
482- this.excludeCheckbox = new System.Windows.Forms.CheckBox();
483- this.groupBox1 = new System.Windows.Forms.GroupBox();
484- this.availableList = new System.Windows.Forms.ListBox();
485- this.tabs.SuspendLayout();
486- this.testPage.SuspendLayout();
487- this.testPanel.SuspendLayout();
488- this.treePanel.SuspendLayout();
489- this.buttonPanel.SuspendLayout();
490- this.categoryPage.SuspendLayout();
491- this.categoryPanel.SuspendLayout();
492- this.categoryButtonPanel.SuspendLayout();
493- this.selectedCategories.SuspendLayout();
494- this.groupBox1.SuspendLayout();
495- this.SuspendLayout();
496- //
497- // tabs
498- //
499- this.tabs.Alignment = System.Windows.Forms.TabAlignment.Left;
500- this.tabs.Controls.Add(this.testPage);
501- this.tabs.Controls.Add(this.categoryPage);
502- this.tabs.Dock = System.Windows.Forms.DockStyle.Fill;
503- this.tabs.Location = new System.Drawing.Point(0, 0);
504- this.tabs.Multiline = true;
505- this.tabs.Name = "tabs";
506- this.tabs.SelectedIndex = 0;
507- this.tabs.Size = new System.Drawing.Size(248, 496);
508- this.tabs.TabIndex = 0;
509- //
510- // testPage
511- //
512- this.testPage.Controls.Add(this.testPanel);
513- this.testPage.Location = new System.Drawing.Point(25, 4);
514- this.testPage.Name = "testPage";
515- this.testPage.Size = new System.Drawing.Size(219, 488);
516- this.testPage.TabIndex = 0;
517- this.testPage.Text = "Tests";
518- //
519- // testPanel
520- //
521- this.testPanel.Controls.Add(this.treePanel);
522- this.testPanel.Controls.Add(this.buttonPanel);
523- this.testPanel.Dock = System.Windows.Forms.DockStyle.Fill;
524- this.testPanel.Location = new System.Drawing.Point(0, 0);
525- this.testPanel.Name = "testPanel";
526- this.testPanel.Size = new System.Drawing.Size(219, 488);
527- this.testPanel.TabIndex = 0;
528- //
529- // treePanel
530- //
531- this.treePanel.Controls.Add(this.tests);
532- this.treePanel.Dock = System.Windows.Forms.DockStyle.Fill;
533- this.treePanel.Location = new System.Drawing.Point(0, 0);
534- this.treePanel.Name = "treePanel";
535- this.treePanel.Size = new System.Drawing.Size(219, 448);
536- this.treePanel.TabIndex = 0;
537- //
538- // tests
539- //
540- this.tests.AllowDrop = true;
541- this.tests.Dock = System.Windows.Forms.DockStyle.Fill;
542- this.tests.HideSelection = false;
543- this.tests.Location = new System.Drawing.Point(0, 0);
544- this.tests.Name = "tests";
545- this.tests.Size = new System.Drawing.Size(219, 448);
546- this.tests.TabIndex = 0;
547- this.tests.CheckBoxesChanged += new System.EventHandler(this.tests_CheckBoxesChanged);
548- //
549- // buttonPanel
550- //
551- this.buttonPanel.Controls.Add(this.checkFailedButton);
552- this.buttonPanel.Controls.Add(this.clearAllButton);
553- this.buttonPanel.Dock = System.Windows.Forms.DockStyle.Bottom;
554- this.buttonPanel.Location = new System.Drawing.Point(0, 448);
555- this.buttonPanel.Name = "buttonPanel";
556- this.buttonPanel.Size = new System.Drawing.Size(219, 40);
557- this.buttonPanel.TabIndex = 1;
558- //
559- // checkFailedButton
560- //
561- this.checkFailedButton.Anchor = System.Windows.Forms.AnchorStyles.Top;
562- this.checkFailedButton.Location = new System.Drawing.Point(117, 8);
563- this.checkFailedButton.Name = "checkFailedButton";
564- this.checkFailedButton.Size = new System.Drawing.Size(96, 23);
565- this.checkFailedButton.TabIndex = 1;
566- this.checkFailedButton.Text = "Check Failed";
567- this.checkFailedButton.Click += new System.EventHandler(this.checkFailedButton_Click);
568- //
569- // clearAllButton
570- //
571- this.clearAllButton.Anchor = System.Windows.Forms.AnchorStyles.Top;
572- this.clearAllButton.Location = new System.Drawing.Point(13, 8);
573- this.clearAllButton.Name = "clearAllButton";
574- this.clearAllButton.Size = new System.Drawing.Size(96, 23);
575- this.clearAllButton.TabIndex = 0;
576- this.clearAllButton.Text = "Clear All";
577- this.clearAllButton.Click += new System.EventHandler(this.clearAllButton_Click);
578- //
579- // categoryPage
580- //
581- this.categoryPage.Controls.Add(this.categoryPanel);
582- this.categoryPage.Location = new System.Drawing.Point(25, 4);
583- this.categoryPage.Name = "categoryPage";
584- this.categoryPage.Size = new System.Drawing.Size(219, 488);
585- this.categoryPage.TabIndex = 1;
586- this.categoryPage.Text = "Categories";
587- //
588- // categoryPanel
589- //
590- this.categoryPanel.Controls.Add(this.categoryButtonPanel);
591- this.categoryPanel.Controls.Add(this.selectedCategories);
592- this.categoryPanel.Controls.Add(this.groupBox1);
593- this.categoryPanel.Dock = System.Windows.Forms.DockStyle.Fill;
594- this.categoryPanel.Location = new System.Drawing.Point(0, 0);
595- this.categoryPanel.Name = "categoryPanel";
596- this.categoryPanel.Size = new System.Drawing.Size(219, 488);
597- this.categoryPanel.TabIndex = 0;
598- //
599- // categoryButtonPanel
600- //
601- this.categoryButtonPanel.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)
602- | System.Windows.Forms.AnchorStyles.Right)));
603- this.categoryButtonPanel.Controls.Add(this.removeCategory);
604- this.categoryButtonPanel.Controls.Add(this.addCategory);
605- this.categoryButtonPanel.Location = new System.Drawing.Point(8, 280);
606- this.categoryButtonPanel.Name = "categoryButtonPanel";
607- this.categoryButtonPanel.Size = new System.Drawing.Size(203, 40);
608- this.categoryButtonPanel.TabIndex = 1;
609- //
610- // removeCategory
611- //
612- this.removeCategory.Anchor = System.Windows.Forms.AnchorStyles.Top;
613- this.removeCategory.Location = new System.Drawing.Point(109, 8);
614- this.removeCategory.Name = "removeCategory";
615- this.removeCategory.TabIndex = 1;
616- this.removeCategory.Text = "Remove";
617- this.removeCategory.Click += new System.EventHandler(this.removeCategory_Click);
618- //
619- // addCategory
620- //
621- this.addCategory.Anchor = System.Windows.Forms.AnchorStyles.Top;
622- this.addCategory.Location = new System.Drawing.Point(21, 8);
623- this.addCategory.Name = "addCategory";
624- this.addCategory.TabIndex = 0;
625- this.addCategory.Text = "Add";
626- this.addCategory.Click += new System.EventHandler(this.addCategory_Click);
627- //
628- // selectedCategories
629- //
630- this.selectedCategories.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)
631- | System.Windows.Forms.AnchorStyles.Right)));
632- this.selectedCategories.Controls.Add(this.selectedList);
633- this.selectedCategories.Controls.Add(this.excludeCheckbox);
634- this.selectedCategories.Location = new System.Drawing.Point(8, 328);
635- this.selectedCategories.Name = "selectedCategories";
636- this.selectedCategories.Size = new System.Drawing.Size(203, 144);
637- this.selectedCategories.TabIndex = 2;
638- this.selectedCategories.TabStop = false;
639- this.selectedCategories.Text = "Selected Categories";
640- //
641- // selectedList
642- //
643- this.selectedList.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
644- | System.Windows.Forms.AnchorStyles.Left)
645- | System.Windows.Forms.AnchorStyles.Right)));
646- this.selectedList.ItemHeight = 16;
647- this.selectedList.Location = new System.Drawing.Point(8, 16);
648- this.selectedList.Name = "selectedList";
649- this.selectedList.SelectionMode = System.Windows.Forms.SelectionMode.MultiExtended;
650- this.selectedList.Size = new System.Drawing.Size(187, 84);
651- this.selectedList.TabIndex = 0;
652- this.selectedList.DoubleClick += new System.EventHandler(this.removeCategory_Click);
653- //
654- // excludeCheckbox
655- //
656- this.excludeCheckbox.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
657- | System.Windows.Forms.AnchorStyles.Right)));
658- this.excludeCheckbox.Location = new System.Drawing.Point(8, 120);
659- this.excludeCheckbox.Name = "excludeCheckbox";
660- this.excludeCheckbox.Size = new System.Drawing.Size(179, 16);
661- this.excludeCheckbox.TabIndex = 1;
662- this.excludeCheckbox.Text = "Exclude these categories";
663- this.excludeCheckbox.CheckedChanged += new System.EventHandler(this.excludeCheckbox_CheckedChanged);
664- //
665- // groupBox1
666- //
667- this.groupBox1.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
668- | System.Windows.Forms.AnchorStyles.Left)
669- | System.Windows.Forms.AnchorStyles.Right)));
670- this.groupBox1.Controls.Add(this.availableList);
671- this.groupBox1.Location = new System.Drawing.Point(8, 0);
672- this.groupBox1.Name = "groupBox1";
673- this.groupBox1.Size = new System.Drawing.Size(203, 272);
674- this.groupBox1.TabIndex = 0;
675- this.groupBox1.TabStop = false;
676- this.groupBox1.Text = "Available Categories";
677- //
678- // availableList
679- //
680- this.availableList.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
681- | System.Windows.Forms.AnchorStyles.Left)
682- | System.Windows.Forms.AnchorStyles.Right)));
683- this.availableList.ItemHeight = 16;
684- this.availableList.Location = new System.Drawing.Point(8, 24);
685- this.availableList.Name = "availableList";
686- this.availableList.SelectionMode = System.Windows.Forms.SelectionMode.MultiExtended;
687- this.availableList.Size = new System.Drawing.Size(187, 244);
688- this.availableList.TabIndex = 0;
689- this.availableList.DoubleClick += new System.EventHandler(this.addCategory_Click);
690- //
691- // TestTree
692- //
693- this.Controls.Add(this.tabs);
694- this.Name = "TestTree";
695- this.Size = new System.Drawing.Size(248, 496);
696- this.tabs.ResumeLayout(false);
697- this.testPage.ResumeLayout(false);
698- this.testPanel.ResumeLayout(false);
699- this.treePanel.ResumeLayout(false);
700- this.buttonPanel.ResumeLayout(false);
701- this.categoryPage.ResumeLayout(false);
702- this.categoryPanel.ResumeLayout(false);
703- this.categoryButtonPanel.ResumeLayout(false);
704- this.selectedCategories.ResumeLayout(false);
705- this.groupBox1.ResumeLayout(false);
706- this.ResumeLayout(false);
707-
708- }
709- #endregion
710-
711- #region SelectedTestsChanged Event
712-
713- public event SelectedTestsChangedEventHandler SelectedTestsChanged;
714-
715- #endregion
716-
717-
718- public void RunAllTests()
719- {
720- RunAllTests(true);
721- }
722-
723- public void RunAllTests(bool ignoreTests)
724- {
725- tests.RunAllTests(ignoreTests);
726- }
727-
728- public void RunSelectedTests()
729- {
730- tests.RunSelectedTests();
731- }
732-
733- public void RunFailedTests()
734- {
735- tests.RunFailedTests();
736- }
737-
738- private void addCategory_Click(object sender, System.EventArgs e)
739- {
740- if (availableList.SelectedItems.Count > 0)
741- {
742- // Create a separate list to avoid exception
743- // when using the list box directly.
744- List<string> categories = new List<string>();
745- foreach ( string category in availableList.SelectedItems )
746- categories.Add(category);
747-
748- foreach ( string category in categories)
749- {
750- selectedList.Items.Add(category);
751- availableList.Items.Remove(category);
752- }
753-
754- UpdateCategoryFilter();
755- if (this.SelectedCategories.Length > 0)
756- this.excludeCheckbox.Enabled = true;
757- }
758- }
759-
760- private void removeCategory_Click(object sender, System.EventArgs e)
761- {
762- if (selectedList.SelectedItems.Count > 0)
763- {
764- // Create a separate list to avoid exception
765- // when using the list box directly.
766- List<string> categories = new List<string>();
767- foreach (string category in selectedList.SelectedItems)
768- categories.Add(category);
769-
770- foreach ( string category in categories )
771- {
772- selectedList.Items.Remove(category);
773- availableList.Items.Add(category);
774- }
775-
776- UpdateCategoryFilter();
777- if (this.SelectedCategories.Length == 0)
778- {
779- this.excludeCheckbox.Checked = false;
780- this.excludeCheckbox.Enabled = false;
781- }
782- }
783- }
784-
785- private void clearAllButton_Click(object sender, System.EventArgs e)
786- {
787- tests.ClearCheckedNodes();
788- }
789-
790- private void checkFailedButton_Click(object sender, System.EventArgs e)
791- {
792- tests.CheckFailedNodes();
793- }
794-
795- private void tests_SelectedTestChanged(ITest test)
796- {
797- if (SelectedTestsChanged != null)
798- {
799- SelectedTestsChangedEventArgs args = new SelectedTestsChangedEventArgs(test.TestName.Name, test.TestCount);
800- SelectedTestsChanged(tests, args);
801- }
802- }
803-
804- private void events_TestLoaded(object sender, NUnit.Util.TestEventArgs args)
805- {
806- treeMenu.Visible = true;
807-
808- availableCategories = this.loader.GetCategories();
809- availableList.Items.Clear();
810- selectedList.Items.Clear();
811-
812- availableList.SuspendLayout();
813- foreach (string category in availableCategories)
814- availableList.Items.Add(category);
815-
816- // tree may have restored visual state
817- if( !tests.CategoryFilter.IsEmpty )
818- {
819- ITestFilter filter = tests.CategoryFilter;
820- if ( filter is NUnit.Core.Filters.NotFilter )
821- {
822- filter = ((NUnit.Core.Filters.NotFilter)filter).BaseFilter;
823- this.excludeCheckbox.Checked = true;
824- }
825-
826- foreach( string cat in ((NUnit.Core.Filters.CategoryFilter)filter).Categories )
827- if ( this.availableCategories.Contains( cat ) )
828- {
829- this.availableList.Items.Remove( cat );
830- this.selectedList.Items.Add( cat );
831- this.excludeCheckbox.Enabled = true;
832- }
833-
834- UpdateCategoryFilter();
835- }
836-
837- availableList.ResumeLayout();
838- }
839-
840- private void events_TestReloaded(object sender, NUnit.Util.TestEventArgs args)
841- {
842- // Get new list of available categories
843- availableCategories = this.loader.GetCategories();
844-
845- // Remove any selected items that are no longer available
846- int index = selectedList.Items.Count;
847- selectedList.SuspendLayout();
848- while( --index >= 0 )
849- {
850- string category = selectedList.Items[index].ToString();
851- if ( !availableCategories.Contains( category ) )
852- selectedList.Items.RemoveAt( index );
853- }
854- selectedList.ResumeLayout();
855-
856- // Clear check box if there are no more selected items.
857- if (selectedList.Items.Count == 0)
858- excludeCheckbox.Checked = excludeCheckbox.Enabled = false;
859-
860- // Put any unselected available items on availableList
861- availableList.Items.Clear();
862- availableList.SuspendLayout();
863- foreach( string category in availableCategories )
864- if( selectedList.FindStringExact( category ) < 0 )
865- availableList.Items.Add( category );
866- availableList.ResumeLayout();
867-
868- // Tell the tree what is selected
869- UpdateCategoryFilter();
870- }
871-
872- private void excludeCheckbox_CheckedChanged(object sender, System.EventArgs e)
873- {
874- UpdateCategoryFilter();
875- }
876-
877- private void events_TestUnloaded(object sender, NUnit.Util.TestEventArgs args)
878- {
879- availableCategories.Clear();
880- availableList.Items.Clear();
881- selectedList.Items.Clear();
882- excludeCheckbox.Checked = false;
883- excludeCheckbox.Enabled = false;
884- treeMenu.Visible = false;
885- }
886-
887- private void tests_CheckedTestChanged(ITest[] tests)
888- {
889- if (SelectedTestsChanged != null)
890- {
891- SelectedTestsChangedEventArgs args = new SelectedTestsChangedEventArgs("", tests.Length);
892- SelectedTestsChanged(tests, args);
893- }
894-
895- if (tests.Length > 0)
896- {
897- }
898- }
899-
900- private void checkBoxesMenuItem_Click(object sender, System.EventArgs e)
901- {
902- Services.UserSettings.SaveSetting( "Options.ShowCheckBoxes",
903- ShowCheckBoxes = !checkBoxesMenuItem.Checked );
904-
905- // Temporary till we can save tree state and restore
906- //this.SetInitialExpansion();
907- }
908-
909- private void UpdateCategoryFilter()
910- {
911- TestFilter catFilter;
912-
913- if ( SelectedCategories == null || SelectedCategories.Length == 0 )
914- catFilter = TestFilter.Empty;
915- else
916- catFilter = new NUnit.Core.Filters.CategoryFilter( SelectedCategories );
917-
918- if ( excludeCheckbox.Checked )
919- catFilter = new NUnit.Core.Filters.NotFilter( catFilter, true );
920-
921- tests.CategoryFilter = catFilter;
922- }
923-
924- private void tests_CheckBoxesChanged(object sender, System.EventArgs e)
925- {
926- ShowCheckBoxes = tests.CheckBoxes;
927- }
928-
929- private void UserSettings_Changed(object sender, SettingsEventArgs args)
930- {
931- if ( args.SettingName == "Options.ShowCheckBoxes" )
932- this.ShowCheckBoxes = Services.UserSettings.GetSetting( args.SettingName, false );
933- }
934- }
935-
936- public class SelectedTestsChangedEventArgs : EventArgs
937- {
938- private string testName;
939- private int count;
940-
941- public SelectedTestsChangedEventArgs(string testName, int count)
942- {
943- this.testName = testName;
944- this.count = count;
945- }
946-
947- public string TestName
948- {
949- get { return testName; }
950- }
951-
952- public int TestCount
953- {
954- get { return count; }
955- }
956- }
957-}
958+ });
959+ this.treeMenu.Text = "&Tree";
960+ this.treeMenu.Visible = false;
961+ this.treeMenu.Popup += new System.EventHandler(this.treeMenu_Popup);
962+ //
963+ // checkBoxesMenuItem
964+ //
965+ this.checkBoxesMenuItem.Index = 0;
966+ this.checkBoxesMenuItem.Text = "Show Check&Boxes";
967+ this.checkBoxesMenuItem.Click += new System.EventHandler(this.checkBoxesMenuItem_Click);
968+ //
969+ // treeMenuSeparatorItem1
970+ //
971+ this.treeMenuSeparatorItem1.Index = 1;
972+ this.treeMenuSeparatorItem1.Text = "-";
973+ //
974+ // expandMenuItem
975+ //
976+ this.expandMenuItem.Index = 2;
977+ this.expandMenuItem.Text = "&Expand";
978+ this.expandMenuItem.Click += new System.EventHandler(this.expandMenuItem_Click);
979+ //
980+ // collapseMenuItem
981+ //
982+ this.collapseMenuItem.Index = 3;
983+ this.collapseMenuItem.Text = "&Collapse";
984+ this.collapseMenuItem.Click += new System.EventHandler(this.collapseMenuItem_Click);
985+ //
986+ // treeMenuSeparatorItem2
987+ //
988+ this.treeMenuSeparatorItem2.Index = 4;
989+ this.treeMenuSeparatorItem2.Text = "-";
990+ //
991+ // expandAllMenuItem
992+ //
993+ this.expandAllMenuItem.Index = 5;
994+ this.expandAllMenuItem.Text = "Expand All";
995+ this.expandAllMenuItem.Click += new System.EventHandler(this.expandAllMenuItem_Click);
996+ //
997+ // collapseAllMenuItem
998+ //
999+ this.collapseAllMenuItem.Index = 6;
1000+ this.collapseAllMenuItem.Text = "Collapse All";
1001+ this.collapseAllMenuItem.Click += new System.EventHandler(this.collapseAllMenuItem_Click);
1002+ //
1003+ // hideTestsMenuItem
1004+ //
1005+ this.hideTestsMenuItem.Index = 7;
1006+ this.hideTestsMenuItem.Text = "Hide Tests";
1007+ this.hideTestsMenuItem.Click += new System.EventHandler(this.hideTestsMenuItem_Click);
1008+ //
1009+ // treeMenuSeparatorItem3
1010+ //
1011+ this.treeMenuSeparatorItem3.Index = 8;
1012+ this.treeMenuSeparatorItem3.Text = "-";
1013+ //
1014+ // propertiesMenuItem
1015+ //
1016+ this.propertiesMenuItem.Index = 9;
1017+ this.propertiesMenuItem.Text = "&Properties";
1018+ this.propertiesMenuItem.Click += new System.EventHandler(this.propertiesMenuItem_Click);
1019+
1020+
1021+ tests.SelectedTestChanged += new SelectedTestChangedHandler(tests_SelectedTestChanged);
1022+ tests.CheckedTestChanged += new CheckedTestChangedHandler(tests_CheckedTestChanged);
1023+
1024+ this.excludeCheckbox.Enabled = false;
1025+
1026+ SearchImageButton.Image = new Bitmap(typeof(TestTree), "Images.search.png");
1027+ }
1028+
1029+ protected override void OnLoad(EventArgs e)
1030+ {
1031+ if (!this.DesignMode)
1032+ {
1033+ this.ShowCheckBoxes =
1034+ Services.UserSettings.GetSetting("Options.ShowCheckBoxes", false);
1035+ Initialize(Services.TestLoader);
1036+ Services.UserSettings.Changed += new SettingsEventHandler(UserSettings_Changed);
1037+ }
1038+
1039+ base.OnLoad(e);
1040+ }
1041+
1042+ public void Initialize(TestLoader loader)
1043+ {
1044+ this.tests.Initialize(loader, loader.Events);
1045+ this.loader = loader;
1046+ loader.Events.TestLoaded += new NUnit.Util.TestEventHandler(events_TestLoaded);
1047+ loader.Events.TestReloaded += new NUnit.Util.TestEventHandler(events_TestReloaded);
1048+ loader.Events.TestUnloaded += new NUnit.Util.TestEventHandler(events_TestUnloaded);
1049+ }
1050+
1051+ public void SelectCategories(string[] categories, bool exclude)
1052+ {
1053+ foreach (string category in categories)
1054+ {
1055+ if (availableCategories.Contains(category))
1056+ {
1057+ if (!selectedList.Items.Contains(category))
1058+ {
1059+ selectedList.Items.Add(category);
1060+ }
1061+ availableList.Items.Remove(category);
1062+
1063+ this.excludeCheckbox.Checked = exclude;
1064+ }
1065+ }
1066+
1067+ UpdateCategoryFilter();
1068+ if (this.SelectedCategories.Length > 0)
1069+ this.excludeCheckbox.Enabled = true;
1070+ }
1071+
1072+ /// <summary>
1073+ /// Clean up any resources being used.
1074+ /// </summary>
1075+ protected override void Dispose(bool disposing)
1076+ {
1077+ if (disposing)
1078+ {
1079+ if (components != null)
1080+ {
1081+ components.Dispose();
1082+ }
1083+ }
1084+ base.Dispose(disposing);
1085+ }
1086+
1087+ #endregion
1088+
1089+ #region View Menu Handlers
1090+
1091+ private void treeMenu_Popup(object sender, System.EventArgs e)
1092+ {
1093+ TreeNode selectedNode = tests.SelectedNode;
1094+ if (selectedNode != null && selectedNode.Nodes.Count > 0)
1095+ {
1096+ bool isExpanded = selectedNode.IsExpanded;
1097+ collapseMenuItem.Enabled = isExpanded;
1098+ expandMenuItem.Enabled = !isExpanded;
1099+ }
1100+ else
1101+ {
1102+ collapseMenuItem.Enabled = expandMenuItem.Enabled = false;
1103+ }
1104+ }
1105+
1106+ private void collapseMenuItem_Click(object sender, System.EventArgs e)
1107+ {
1108+ tests.SelectedNode.Collapse();
1109+ }
1110+
1111+ private void expandMenuItem_Click(object sender, System.EventArgs e)
1112+ {
1113+ tests.SelectedNode.Expand();
1114+ }
1115+
1116+ private void collapseAllMenuItem_Click(object sender, System.EventArgs e)
1117+ {
1118+ tests.BeginUpdate();
1119+ tests.CollapseAll();
1120+ tests.EndUpdate();
1121+
1122+ // Compensate for a bug in the underlying control
1123+ if (tests.Nodes.Count > 0)
1124+ tests.SelectedNode = tests.Nodes[0];
1125+ }
1126+
1127+ private void hideTestsMenuItem_Click(object sender, System.EventArgs e)
1128+ {
1129+ tests.HideTests();
1130+ }
1131+
1132+ private void expandAllMenuItem_Click(object sender, System.EventArgs e)
1133+ {
1134+ tests.BeginUpdate();
1135+ tests.ExpandAll();
1136+ tests.EndUpdate();
1137+ }
1138+
1139+ private void propertiesMenuItem_Click(object sender, System.EventArgs e)
1140+ {
1141+ if (tests.SelectedTest != null)
1142+ tests.ShowPropertiesDialog(tests.SelectedTest);
1143+ }
1144+
1145+ #endregion
1146+
1147+ #region Component Designer generated code
1148+ /// <summary>
1149+ /// Required method for Designer support - do not modify
1150+ /// the contents of this method with the code editor.
1151+ /// </summary>
1152+ private void InitializeComponent()
1153+ {
1154+ this.components = new System.ComponentModel.Container();
1155+ System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(TestTree));
1156+ this.tabs = new System.Windows.Forms.TabControl();
1157+ this.testPage = new System.Windows.Forms.TabPage();
1158+ this.testPanel = new System.Windows.Forms.Panel();
1159+ this.treePanel = new System.Windows.Forms.Panel();
1160+ this.FindTestsPanel = new System.Windows.Forms.Panel();
1161+ this.SearchImageButton = new System.Windows.Forms.PictureBox();
1162+ this.TestNameTextBox = new System.Windows.Forms.TextBox();
1163+ this.buttonPanel = new System.Windows.Forms.Panel();
1164+ this.checkFailedButton = new System.Windows.Forms.Button();
1165+ this.clearAllButton = new System.Windows.Forms.Button();
1166+ this.categoryPage = new System.Windows.Forms.TabPage();
1167+ this.categoryPanel = new System.Windows.Forms.Panel();
1168+ this.categoryButtonPanel = new System.Windows.Forms.Panel();
1169+ this.removeCategory = new System.Windows.Forms.Button();
1170+ this.addCategory = new System.Windows.Forms.Button();
1171+ this.selectedCategories = new System.Windows.Forms.GroupBox();
1172+ this.selectedList = new System.Windows.Forms.ListBox();
1173+ this.excludeCheckbox = new System.Windows.Forms.CheckBox();
1174+ this.groupBox1 = new System.Windows.Forms.GroupBox();
1175+ this.availableList = new System.Windows.Forms.ListBox();
1176+ this.tests = new NUnit.UiKit.TestSuiteTreeView();
1177+ this.tabs.SuspendLayout();
1178+ this.testPage.SuspendLayout();
1179+ this.testPanel.SuspendLayout();
1180+ this.treePanel.SuspendLayout();
1181+ this.FindTestsPanel.SuspendLayout();
1182+ ((System.ComponentModel.ISupportInitialize)(this.SearchImageButton)).BeginInit();
1183+ this.buttonPanel.SuspendLayout();
1184+ this.categoryPage.SuspendLayout();
1185+ this.categoryPanel.SuspendLayout();
1186+ this.categoryButtonPanel.SuspendLayout();
1187+ this.selectedCategories.SuspendLayout();
1188+ this.groupBox1.SuspendLayout();
1189+ this.SuspendLayout();
1190+ //
1191+ // tabs
1192+ //
1193+ this.tabs.Alignment = System.Windows.Forms.TabAlignment.Left;
1194+ this.tabs.Controls.Add(this.testPage);
1195+ this.tabs.Controls.Add(this.categoryPage);
1196+ this.tabs.Dock = System.Windows.Forms.DockStyle.Fill;
1197+ this.tabs.Location = new System.Drawing.Point(0, 0);
1198+ this.tabs.Multiline = true;
1199+ this.tabs.Name = "tabs";
1200+ this.tabs.SelectedIndex = 0;
1201+ this.tabs.Size = new System.Drawing.Size(248, 496);
1202+ this.tabs.TabIndex = 0;
1203+ //
1204+ // testPage
1205+ //
1206+ this.testPage.Controls.Add(this.testPanel);
1207+ this.testPage.Location = new System.Drawing.Point(23, 4);
1208+ this.testPage.Name = "testPage";
1209+ this.testPage.Size = new System.Drawing.Size(221, 488);
1210+ this.testPage.TabIndex = 0;
1211+ this.testPage.Text = "Tests";
1212+ //
1213+ // testPanel
1214+ //
1215+ this.testPanel.Controls.Add(this.treePanel);
1216+ this.testPanel.Controls.Add(this.FindTestsPanel);
1217+ this.testPanel.Controls.Add(this.buttonPanel);
1218+ this.testPanel.Dock = System.Windows.Forms.DockStyle.Fill;
1219+ this.testPanel.Location = new System.Drawing.Point(0, 0);
1220+ this.testPanel.Name = "testPanel";
1221+ this.testPanel.Size = new System.Drawing.Size(221, 488);
1222+ this.testPanel.TabIndex = 0;
1223+ //
1224+ // treePanel
1225+ //
1226+ this.treePanel.Controls.Add(this.tests);
1227+ this.treePanel.Dock = System.Windows.Forms.DockStyle.Fill;
1228+ this.treePanel.Location = new System.Drawing.Point(0, 27);
1229+ this.treePanel.Name = "treePanel";
1230+ this.treePanel.Size = new System.Drawing.Size(221, 421);
1231+ this.treePanel.TabIndex = 3;
1232+ //
1233+ // FindTestsPanel
1234+ //
1235+ this.FindTestsPanel.Controls.Add(this.SearchImageButton);
1236+ this.FindTestsPanel.Controls.Add(this.TestNameTextBox);
1237+ this.FindTestsPanel.Dock = System.Windows.Forms.DockStyle.Top;
1238+ this.FindTestsPanel.Location = new System.Drawing.Point(0, 0);
1239+ this.FindTestsPanel.Name = "FindTestsPanel";
1240+ this.FindTestsPanel.Size = new System.Drawing.Size(221, 27);
1241+ this.FindTestsPanel.TabIndex = 2;
1242+ //
1243+ // SearchImageButton
1244+ //
1245+ this.SearchImageButton.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
1246+ | System.Windows.Forms.AnchorStyles.Right)));
1247+ this.SearchImageButton.Location = new System.Drawing.Point(196, 3);
1248+ this.SearchImageButton.Name = "SearchImageButton";
1249+ this.SearchImageButton.Size = new System.Drawing.Size(22, 20);
1250+ this.SearchImageButton.SizeMode = System.Windows.Forms.PictureBoxSizeMode.CenterImage;
1251+ this.SearchImageButton.TabIndex = 1;
1252+ this.SearchImageButton.TabStop = false;
1253+ this.SearchImageButton.Click += new System.EventHandler(this.SearchImageButton_Click);
1254+ //
1255+ // TestNameTextBox
1256+ //
1257+ this.TestNameTextBox.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
1258+ | System.Windows.Forms.AnchorStyles.Left)
1259+ | System.Windows.Forms.AnchorStyles.Right)));
1260+ this.TestNameTextBox.Location = new System.Drawing.Point(0, 3);
1261+ this.TestNameTextBox.Name = "TestNameTextBox";
1262+ this.TestNameTextBox.Size = new System.Drawing.Size(192, 20);
1263+ this.TestNameTextBox.TabIndex = 0;
1264+ this.TestNameTextBox.KeyDown += new System.Windows.Forms.KeyEventHandler(this.TestNameTextBox_KeyDown);
1265+ //
1266+ // buttonPanel
1267+ //
1268+ this.buttonPanel.Controls.Add(this.checkFailedButton);
1269+ this.buttonPanel.Controls.Add(this.clearAllButton);
1270+ this.buttonPanel.Dock = System.Windows.Forms.DockStyle.Bottom;
1271+ this.buttonPanel.Location = new System.Drawing.Point(0, 448);
1272+ this.buttonPanel.Name = "buttonPanel";
1273+ this.buttonPanel.Size = new System.Drawing.Size(221, 40);
1274+ this.buttonPanel.TabIndex = 1;
1275+ //
1276+ // checkFailedButton
1277+ //
1278+ this.checkFailedButton.Anchor = System.Windows.Forms.AnchorStyles.Top;
1279+ this.checkFailedButton.Location = new System.Drawing.Point(118, 8);
1280+ this.checkFailedButton.Name = "checkFailedButton";
1281+ this.checkFailedButton.Size = new System.Drawing.Size(96, 23);
1282+ this.checkFailedButton.TabIndex = 1;
1283+ this.checkFailedButton.Text = "Check Failed";
1284+ this.checkFailedButton.Click += new System.EventHandler(this.checkFailedButton_Click);
1285+ //
1286+ // clearAllButton
1287+ //
1288+ this.clearAllButton.Anchor = System.Windows.Forms.AnchorStyles.Top;
1289+ this.clearAllButton.Location = new System.Drawing.Point(14, 8);
1290+ this.clearAllButton.Name = "clearAllButton";
1291+ this.clearAllButton.Size = new System.Drawing.Size(96, 23);
1292+ this.clearAllButton.TabIndex = 0;
1293+ this.clearAllButton.Text = "Clear All";
1294+ this.clearAllButton.Click += new System.EventHandler(this.clearAllButton_Click);
1295+ //
1296+ // categoryPage
1297+ //
1298+ this.categoryPage.Controls.Add(this.categoryPanel);
1299+ this.categoryPage.Location = new System.Drawing.Point(23, 4);
1300+ this.categoryPage.Name = "categoryPage";
1301+ this.categoryPage.Size = new System.Drawing.Size(221, 488);
1302+ this.categoryPage.TabIndex = 1;
1303+ this.categoryPage.Text = "Categories";
1304+ //
1305+ // categoryPanel
1306+ //
1307+ this.categoryPanel.Controls.Add(this.categoryButtonPanel);
1308+ this.categoryPanel.Controls.Add(this.selectedCategories);
1309+ this.categoryPanel.Controls.Add(this.groupBox1);
1310+ this.categoryPanel.Dock = System.Windows.Forms.DockStyle.Fill;
1311+ this.categoryPanel.Location = new System.Drawing.Point(0, 0);
1312+ this.categoryPanel.Name = "categoryPanel";
1313+ this.categoryPanel.Size = new System.Drawing.Size(221, 488);
1314+ this.categoryPanel.TabIndex = 0;
1315+ //
1316+ // categoryButtonPanel
1317+ //
1318+ this.categoryButtonPanel.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)
1319+ | System.Windows.Forms.AnchorStyles.Right)));
1320+ this.categoryButtonPanel.Controls.Add(this.removeCategory);
1321+ this.categoryButtonPanel.Controls.Add(this.addCategory);
1322+ this.categoryButtonPanel.Location = new System.Drawing.Point(8, 280);
1323+ this.categoryButtonPanel.Name = "categoryButtonPanel";
1324+ this.categoryButtonPanel.Size = new System.Drawing.Size(205, 40);
1325+ this.categoryButtonPanel.TabIndex = 1;
1326+ //
1327+ // removeCategory
1328+ //
1329+ this.removeCategory.Anchor = System.Windows.Forms.AnchorStyles.Top;
1330+ this.removeCategory.Location = new System.Drawing.Point(110, 8);
1331+ this.removeCategory.Name = "removeCategory";
1332+ this.removeCategory.Size = new System.Drawing.Size(75, 23);
1333+ this.removeCategory.TabIndex = 1;
1334+ this.removeCategory.Text = "Remove";
1335+ this.removeCategory.Click += new System.EventHandler(this.removeCategory_Click);
1336+ //
1337+ // addCategory
1338+ //
1339+ this.addCategory.Anchor = System.Windows.Forms.AnchorStyles.Top;
1340+ this.addCategory.Location = new System.Drawing.Point(22, 8);
1341+ this.addCategory.Name = "addCategory";
1342+ this.addCategory.Size = new System.Drawing.Size(75, 23);
1343+ this.addCategory.TabIndex = 0;
1344+ this.addCategory.Text = "Add";
1345+ this.addCategory.Click += new System.EventHandler(this.addCategory_Click);
1346+ //
1347+ // selectedCategories
1348+ //
1349+ this.selectedCategories.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)
1350+ | System.Windows.Forms.AnchorStyles.Right)));
1351+ this.selectedCategories.Controls.Add(this.selectedList);
1352+ this.selectedCategories.Controls.Add(this.excludeCheckbox);
1353+ this.selectedCategories.Location = new System.Drawing.Point(8, 328);
1354+ this.selectedCategories.Name = "selectedCategories";
1355+ this.selectedCategories.Size = new System.Drawing.Size(205, 144);
1356+ this.selectedCategories.TabIndex = 2;
1357+ this.selectedCategories.TabStop = false;
1358+ this.selectedCategories.Text = "Selected Categories";
1359+ //
1360+ // selectedList
1361+ //
1362+ this.selectedList.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
1363+ | System.Windows.Forms.AnchorStyles.Left)
1364+ | System.Windows.Forms.AnchorStyles.Right)));
1365+ this.selectedList.Location = new System.Drawing.Point(8, 16);
1366+ this.selectedList.Name = "selectedList";
1367+ this.selectedList.SelectionMode = System.Windows.Forms.SelectionMode.MultiExtended;
1368+ this.selectedList.Size = new System.Drawing.Size(189, 82);
1369+ this.selectedList.TabIndex = 0;
1370+ this.selectedList.DoubleClick += new System.EventHandler(this.removeCategory_Click);
1371+ //
1372+ // excludeCheckbox
1373+ //
1374+ this.excludeCheckbox.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
1375+ | System.Windows.Forms.AnchorStyles.Right)));
1376+ this.excludeCheckbox.Location = new System.Drawing.Point(8, 120);
1377+ this.excludeCheckbox.Name = "excludeCheckbox";
1378+ this.excludeCheckbox.Size = new System.Drawing.Size(181, 16);
1379+ this.excludeCheckbox.TabIndex = 1;
1380+ this.excludeCheckbox.Text = "Exclude these categories";
1381+ this.excludeCheckbox.CheckedChanged += new System.EventHandler(this.excludeCheckbox_CheckedChanged);
1382+ //
1383+ // groupBox1
1384+ //
1385+ this.groupBox1.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
1386+ | System.Windows.Forms.AnchorStyles.Left)
1387+ | System.Windows.Forms.AnchorStyles.Right)));
1388+ this.groupBox1.Controls.Add(this.availableList);
1389+ this.groupBox1.Location = new System.Drawing.Point(8, 0);
1390+ this.groupBox1.Name = "groupBox1";
1391+ this.groupBox1.Size = new System.Drawing.Size(205, 272);
1392+ this.groupBox1.TabIndex = 0;
1393+ this.groupBox1.TabStop = false;
1394+ this.groupBox1.Text = "Available Categories";
1395+ //
1396+ // availableList
1397+ //
1398+ this.availableList.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
1399+ | System.Windows.Forms.AnchorStyles.Left)
1400+ | System.Windows.Forms.AnchorStyles.Right)));
1401+ this.availableList.Location = new System.Drawing.Point(8, 24);
1402+ this.availableList.Name = "availableList";
1403+ this.availableList.SelectionMode = System.Windows.Forms.SelectionMode.MultiExtended;
1404+ this.availableList.Size = new System.Drawing.Size(189, 238);
1405+ this.availableList.TabIndex = 0;
1406+ this.availableList.DoubleClick += new System.EventHandler(this.addCategory_Click);
1407+ //
1408+ // tests
1409+ //
1410+ this.tests.AllowDrop = true;
1411+ this.tests.CategoryFilter = ((NUnit.Core.TestFilter)(resources.GetObject("tests.CategoryFilter")));
1412+ this.tests.Dock = System.Windows.Forms.DockStyle.Fill;
1413+ this.tests.HideSelection = false;
1414+ this.tests.ImageIndex = 0;
1415+ this.tests.Location = new System.Drawing.Point(0, 0);
1416+ this.tests.Name = "tests";
1417+ this.tests.SelectedImageIndex = 0;
1418+ this.tests.Size = new System.Drawing.Size(221, 421);
1419+ this.tests.TabIndex = 0;
1420+ this.tests.CheckBoxesChanged += new System.EventHandler(this.tests_CheckBoxesChanged);
1421+ //
1422+ // TestTree
1423+ //
1424+ this.Controls.Add(this.tabs);
1425+ this.Name = "TestTree";
1426+ this.Size = new System.Drawing.Size(248, 496);
1427+ this.tabs.ResumeLayout(false);
1428+ this.testPage.ResumeLayout(false);
1429+ this.testPanel.ResumeLayout(false);
1430+ this.treePanel.ResumeLayout(false);
1431+ this.FindTestsPanel.ResumeLayout(false);
1432+ this.FindTestsPanel.PerformLayout();
1433+ ((System.ComponentModel.ISupportInitialize)(this.SearchImageButton)).EndInit();
1434+ this.buttonPanel.ResumeLayout(false);
1435+ this.categoryPage.ResumeLayout(false);
1436+ this.categoryPanel.ResumeLayout(false);
1437+ this.categoryButtonPanel.ResumeLayout(false);
1438+ this.selectedCategories.ResumeLayout(false);
1439+ this.groupBox1.ResumeLayout(false);
1440+ this.ResumeLayout(false);
1441+
1442+ }
1443+ #endregion
1444+
1445+ #region SelectedTestsChanged Event
1446+
1447+ public event SelectedTestsChangedEventHandler SelectedTestsChanged;
1448+
1449+ #endregion
1450+
1451+
1452+ public void RunAllTests()
1453+ {
1454+ RunAllTests(true);
1455+ }
1456+
1457+ public void RunAllTests(bool ignoreTests)
1458+ {
1459+ tests.RunAllTests(ignoreTests);
1460+ }
1461+
1462+ public void RunSelectedTests()
1463+ {
1464+ tests.RunSelectedTests();
1465+ }
1466+
1467+ public void RunFailedTests()
1468+ {
1469+ tests.RunFailedTests();
1470+ }
1471+
1472+ private void addCategory_Click(object sender, System.EventArgs e)
1473+ {
1474+ if (availableList.SelectedItems.Count > 0)
1475+ {
1476+ // Create a separate list to avoid exception
1477+ // when using the list box directly.
1478+ List<string> categories = new List<string>();
1479+ foreach (string category in availableList.SelectedItems)
1480+ categories.Add(category);
1481+
1482+ foreach (string category in categories)
1483+ {
1484+ selectedList.Items.Add(category);
1485+ availableList.Items.Remove(category);
1486+ }
1487+
1488+ UpdateCategoryFilter();
1489+ if (this.SelectedCategories.Length > 0)
1490+ this.excludeCheckbox.Enabled = true;
1491+ }
1492+ }
1493+
1494+ private void removeCategory_Click(object sender, System.EventArgs e)
1495+ {
1496+ if (selectedList.SelectedItems.Count > 0)
1497+ {
1498+ // Create a separate list to avoid exception
1499+ // when using the list box directly.
1500+ List<string> categories = new List<string>();
1501+ foreach (string category in selectedList.SelectedItems)
1502+ categories.Add(category);
1503+
1504+ foreach (string category in categories)
1505+ {
1506+ selectedList.Items.Remove(category);
1507+ availableList.Items.Add(category);
1508+ }
1509+
1510+ UpdateCategoryFilter();
1511+ if (this.SelectedCategories.Length == 0)
1512+ {
1513+ this.excludeCheckbox.Checked = false;
1514+ this.excludeCheckbox.Enabled = false;
1515+ }
1516+ }
1517+ }
1518+
1519+ private void clearAllButton_Click(object sender, System.EventArgs e)
1520+ {
1521+ tests.ClearCheckedNodes();
1522+ }
1523+
1524+ private void checkFailedButton_Click(object sender, System.EventArgs e)
1525+ {
1526+ tests.CheckFailedNodes();
1527+ }
1528+
1529+ private void tests_SelectedTestChanged(ITest test)
1530+ {
1531+ if (SelectedTestsChanged != null)
1532+ {
1533+ SelectedTestsChangedEventArgs args = new SelectedTestsChangedEventArgs(test.TestName.Name, test.TestCount);
1534+ SelectedTestsChanged(tests, args);
1535+ }
1536+ }
1537+
1538+ private void events_TestLoaded(object sender, NUnit.Util.TestEventArgs args)
1539+ {
1540+ treeMenu.Visible = true;
1541+
1542+ availableCategories = this.loader.GetCategories();
1543+ availableList.Items.Clear();
1544+ selectedList.Items.Clear();
1545+
1546+ availableList.SuspendLayout();
1547+ foreach (string category in availableCategories)
1548+ availableList.Items.Add(category);
1549+
1550+ // tree may have restored visual state
1551+ if (!tests.CategoryFilter.IsEmpty)
1552+ {
1553+ ITestFilter filter = tests.CategoryFilter;
1554+ if (filter is NUnit.Core.Filters.NotFilter)
1555+ {
1556+ filter = ((NUnit.Core.Filters.NotFilter)filter).BaseFilter;
1557+ this.excludeCheckbox.Checked = true;
1558+ }
1559+
1560+ foreach (string cat in ((NUnit.Core.Filters.CategoryFilter)filter).Categories)
1561+ if (this.availableCategories.Contains(cat))
1562+ {
1563+ this.availableList.Items.Remove(cat);
1564+ this.selectedList.Items.Add(cat);
1565+ this.excludeCheckbox.Enabled = true;
1566+ }
1567+
1568+ UpdateCategoryFilter();
1569+ }
1570+
1571+ availableList.ResumeLayout();
1572+ }
1573+
1574+ private void events_TestReloaded(object sender, NUnit.Util.TestEventArgs args)
1575+ {
1576+ // Get new list of available categories
1577+ availableCategories = this.loader.GetCategories();
1578+
1579+ // Remove any selected items that are no longer available
1580+ int index = selectedList.Items.Count;
1581+ selectedList.SuspendLayout();
1582+ while (--index >= 0)
1583+ {
1584+ string category = selectedList.Items[index].ToString();
1585+ if (!availableCategories.Contains(category))
1586+ selectedList.Items.RemoveAt(index);
1587+ }
1588+ selectedList.ResumeLayout();
1589+
1590+ // Clear check box if there are no more selected items.
1591+ if (selectedList.Items.Count == 0)
1592+ excludeCheckbox.Checked = excludeCheckbox.Enabled = false;
1593+
1594+ // Put any unselected available items on availableList
1595+ availableList.Items.Clear();
1596+ availableList.SuspendLayout();
1597+ foreach (string category in availableCategories)
1598+ if (selectedList.FindStringExact(category) < 0)
1599+ availableList.Items.Add(category);
1600+ availableList.ResumeLayout();
1601+
1602+ // Tell the tree what is selected
1603+ UpdateCategoryFilter();
1604+ }
1605+
1606+ private void excludeCheckbox_CheckedChanged(object sender, System.EventArgs e)
1607+ {
1608+ UpdateCategoryFilter();
1609+ }
1610+
1611+ private void events_TestUnloaded(object sender, NUnit.Util.TestEventArgs args)
1612+ {
1613+ availableCategories.Clear();
1614+ availableList.Items.Clear();
1615+ selectedList.Items.Clear();
1616+ excludeCheckbox.Checked = false;
1617+ excludeCheckbox.Enabled = false;
1618+ treeMenu.Visible = false;
1619+ }
1620+
1621+ private void tests_CheckedTestChanged(ITest[] tests)
1622+ {
1623+ if (SelectedTestsChanged != null)
1624+ {
1625+ SelectedTestsChangedEventArgs args = new SelectedTestsChangedEventArgs("", tests.Length);
1626+ SelectedTestsChanged(tests, args);
1627+ }
1628+
1629+ if (tests.Length > 0)
1630+ {
1631+ }
1632+ }
1633+
1634+ private void checkBoxesMenuItem_Click(object sender, System.EventArgs e)
1635+ {
1636+ Services.UserSettings.SaveSetting("Options.ShowCheckBoxes",
1637+ ShowCheckBoxes = !checkBoxesMenuItem.Checked);
1638+
1639+ // Temporary till we can save tree state and restore
1640+ //this.SetInitialExpansion();
1641+ }
1642+
1643+ private void UpdateCategoryFilter()
1644+ {
1645+ TestFilter catFilter;
1646+
1647+ if (SelectedCategories == null || SelectedCategories.Length == 0)
1648+ catFilter = TestFilter.Empty;
1649+ else
1650+ catFilter = new NUnit.Core.Filters.CategoryFilter(SelectedCategories);
1651+
1652+ if (excludeCheckbox.Checked)
1653+ catFilter = new NUnit.Core.Filters.NotFilter(catFilter, true);
1654+
1655+ tests.CategoryFilter = catFilter;
1656+ }
1657+
1658+ private void tests_CheckBoxesChanged(object sender, System.EventArgs e)
1659+ {
1660+ ShowCheckBoxes = tests.CheckBoxes;
1661+ }
1662+
1663+ private void UserSettings_Changed(object sender, SettingsEventArgs args)
1664+ {
1665+ if (args.SettingName == "Options.ShowCheckBoxes")
1666+ this.ShowCheckBoxes = Services.UserSettings.GetSetting(args.SettingName, false);
1667+ }
1668+
1669+ private Queue<TreeNode> _testCache = new Queue<TreeNode>();
1670+
1671+ private void TestNameTextBox_KeyDown(object sender, KeyEventArgs e)
1672+ {
1673+ if (e.KeyCode == Keys.Enter)
1674+ {
1675+ e.SuppressKeyPress = true;
1676+ if (IsFindEnabled())
1677+ {
1678+ FindAndHighlightTest();
1679+ }
1680+
1681+ return;
1682+ }
1683+
1684+ if (_testCache.Count >= 1)
1685+ {
1686+ _testCache.Clear();
1687+ }
1688+ }
1689+
1690+ private void SearchImageButton_Click(object sender, EventArgs e)
1691+ {
1692+ if (IsFindEnabled())
1693+ {
1694+ FindAndHighlightTest();
1695+ }
1696+ }
1697+
1698+ private bool IsFindEnabled()
1699+ {
1700+ return !string.IsNullOrEmpty(TestNameTextBox.Text);
1701+ }
1702+
1703+ private void FindAndHighlightTest()
1704+ {
1705+ if (_testCache.Count <= 0)
1706+ {
1707+ FindTests();
1708+ }
1709+
1710+ if (_testCache.Count >= 1)
1711+ {
1712+ TreeNode selectedNode = _testCache.Dequeue();
1713+ tests.SelectedNode = selectedNode;
1714+ _testCache.Enqueue(selectedNode);
1715+ }
1716+ else
1717+ {
1718+ MessageDisplay messageDisplay = new MessageDisplay();
1719+ messageDisplay.Info("No tests found with name " + TestNameTextBox.Text);
1720+ }
1721+ }
1722+
1723+ private void FindTests()
1724+ {
1725+ TreeNodeCollection nodes = this.tests.Nodes;
1726+ foreach (TreeNode treenode in nodes)
1727+ {
1728+ FindTestsRecursive(treenode);
1729+ }
1730+ }
1731+
1732+ private void FindTestsRecursive(TreeNode treeNode)
1733+ {
1734+ foreach (TreeNode treenode in treeNode.Nodes)
1735+ {
1736+ if (TestNameTextBox.Text.Equals(treenode.Text, StringComparison.CurrentCultureIgnoreCase))
1737+ {
1738+ _testCache.Enqueue(treenode);
1739+ }
1740+
1741+ FindTestsRecursive(treenode);
1742+ }
1743+ }
1744+
1745+
1746+ }
1747+
1748+ public class SelectedTestsChangedEventArgs : EventArgs
1749+ {
1750+ private string testName;
1751+ private int count;
1752+
1753+ public SelectedTestsChangedEventArgs(string testName, int count)
1754+ {
1755+ this.testName = testName;
1756+ this.count = count;
1757+ }
1758+
1759+ public string TestName
1760+ {
1761+ get { return testName; }
1762+ }
1763+
1764+ public int TestCount
1765+ {
1766+ get { return count; }
1767+ }
1768+ }
1769+}
1770
1771=== modified file 'src/GuiComponents/UiKit/nunit.uikit.build'
1772--- src/GuiComponents/UiKit/nunit.uikit.build 2012-01-15 00:07:19 +0000
1773+++ src/GuiComponents/UiKit/nunit.uikit.build 2012-11-06 02:11:19 +0000
1774@@ -79,6 +79,7 @@
1775 <include name="Images/Ellipsis.gif"/>
1776 <include name="Images/pinned.gif"/>
1777 <include name="Images/unpinned.gif"/>
1778+ <include name="Images/search.png" />
1779 </patternset>
1780
1781 <patternset id="content-files">
1782
1783=== modified file 'src/GuiComponents/UiKit/nunit.uikit.dll.csproj'
1784--- src/GuiComponents/UiKit/nunit.uikit.dll.csproj 2012-08-08 03:34:12 +0000
1785+++ src/GuiComponents/UiKit/nunit.uikit.dll.csproj 2012-11-06 02:11:19 +0000
1786@@ -1,403 +1,404 @@
1787-<?xml version="1.0" encoding="utf-8"?>
1788-<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003" ToolsVersion="4.0">
1789- <PropertyGroup>
1790- <ProjectType>Local</ProjectType>
1791- <ProductVersion>9.0.30729</ProductVersion>
1792- <SchemaVersion>2.0</SchemaVersion>
1793- <ProjectGuid>{27531BBF-183D-4C3A-935B-D840B9F1A3A4}</ProjectGuid>
1794- <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
1795- <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
1796- <AssemblyKeyContainerName>
1797- </AssemblyKeyContainerName>
1798- <AssemblyName>nunit.uikit</AssemblyName>
1799- <DefaultClientScript>JScript</DefaultClientScript>
1800- <DefaultHTMLPageLayout>Grid</DefaultHTMLPageLayout>
1801- <DefaultTargetSchema>IE50</DefaultTargetSchema>
1802- <DelaySign>false</DelaySign>
1803- <OutputType>Library</OutputType>
1804- <RootNamespace>NUnit.UiKit</RootNamespace>
1805- <RunPostBuildEvent>OnBuildSuccess</RunPostBuildEvent>
1806- <FileUpgradeFlags>
1807- </FileUpgradeFlags>
1808- <UpgradeBackupLocation>
1809- </UpgradeBackupLocation>
1810- <OldToolsVersion>3.5</OldToolsVersion>
1811- <TargetFrameworkVersion>v2.0</TargetFrameworkVersion>
1812- <PublishUrl>publish\</PublishUrl>
1813- <Install>true</Install>
1814- <InstallFrom>Disk</InstallFrom>
1815- <UpdateEnabled>false</UpdateEnabled>
1816- <UpdateMode>Foreground</UpdateMode>
1817- <UpdateInterval>7</UpdateInterval>
1818- <UpdateIntervalUnits>Days</UpdateIntervalUnits>
1819- <UpdatePeriodically>false</UpdatePeriodically>
1820- <UpdateRequired>false</UpdateRequired>
1821- <MapFileExtensions>true</MapFileExtensions>
1822- <ApplicationRevision>0</ApplicationRevision>
1823- <ApplicationVersion>1.0.0.%2a</ApplicationVersion>
1824- <IsWebBootstrapper>false</IsWebBootstrapper>
1825- <UseApplicationTrust>false</UseApplicationTrust>
1826- <BootstrapperEnabled>true</BootstrapperEnabled>
1827- </PropertyGroup>
1828- <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
1829- <OutputPath>..\..\..\bin\Debug\lib\</OutputPath>
1830- <BaseAddress>285212672</BaseAddress>
1831- <ConfigurationOverrideFile>
1832- </ConfigurationOverrideFile>
1833- <DefineConstants>TRACE;DEBUG;CLR_2_0,NET_2_0,CS_3_0</DefineConstants>
1834- <DocumentationFile>
1835- </DocumentationFile>
1836- <DebugSymbols>true</DebugSymbols>
1837- <FileAlignment>4096</FileAlignment>
1838- <NoWarn>1699</NoWarn>
1839- <Optimize>false</Optimize>
1840- <RegisterForComInterop>false</RegisterForComInterop>
1841- <RemoveIntegerChecks>false</RemoveIntegerChecks>
1842- <WarningLevel>4</WarningLevel>
1843- <DebugType>full</DebugType>
1844- <ErrorReport>prompt</ErrorReport>
1845- <CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>
1846- </PropertyGroup>
1847- <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
1848- <OutputPath>..\..\..\bin\Release\lib\</OutputPath>
1849- <BaseAddress>285212672</BaseAddress>
1850- <ConfigurationOverrideFile>
1851- </ConfigurationOverrideFile>
1852- <DefineConstants>TRACE;CLR_2_0,NET_2_0,CS_3_0</DefineConstants>
1853- <DocumentationFile>
1854- </DocumentationFile>
1855- <FileAlignment>4096</FileAlignment>
1856- <NoWarn>1699</NoWarn>
1857- <Optimize>true</Optimize>
1858- <RegisterForComInterop>false</RegisterForComInterop>
1859- <RemoveIntegerChecks>false</RemoveIntegerChecks>
1860- <WarningLevel>4</WarningLevel>
1861- <DebugType>none</DebugType>
1862- <ErrorReport>prompt</ErrorReport>
1863- <CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>
1864- </PropertyGroup>
1865- <ItemGroup>
1866- <Reference Include="System">
1867- <Name>System</Name>
1868- </Reference>
1869- <Reference Include="System.Data">
1870- <Name>System.Data</Name>
1871- </Reference>
1872- <Reference Include="System.Drawing">
1873- <Name>System.Drawing</Name>
1874- </Reference>
1875- <Reference Include="System.Windows.Forms">
1876- <Name>System.Windows.Forms</Name>
1877- </Reference>
1878- <Reference Include="System.Xml">
1879- <Name>System.XML</Name>
1880- </Reference>
1881- <ProjectReference Include="..\..\ClientUtilities\util\nunit.util.dll.csproj">
1882- <Name>nunit.util.dll</Name>
1883- <Project>{61CE9CE5-943E-44D4-A381-814DC1406767}</Project>
1884- <Private>False</Private>
1885- </ProjectReference>
1886- <ProjectReference Include="..\..\NUnitCore\core\nunit.core.dll.csproj">
1887- <Project>{EBD43A7F-AFCA-4281-BB53-5CDD91F966A3}</Project>
1888- <Name>nunit.core.dll</Name>
1889- <Private>False</Private>
1890- </ProjectReference>
1891- <ProjectReference Include="..\..\NUnitCore\interfaces\nunit.core.interfaces.dll.csproj">
1892- <Name>nunit.core.interfaces.dll</Name>
1893- <Project>{435428F8-5995-4CE4-8022-93D595A8CC0F}</Project>
1894- <Private>False</Private>
1895- </ProjectReference>
1896- <ProjectReference Include="..\..\GuiException\UiException\nunit.uiexception.dll.csproj">
1897- <Project>{3E87A106-EB20-4147-84C8-95B0BB43A1D4}</Project>
1898- <Name>nunit.uiexception.dll</Name>
1899- <Private>False</Private>
1900- </ProjectReference>
1901- </ItemGroup>
1902- <ItemGroup>
1903- <Compile Include="..\..\CommonAssemblyInfo.cs">
1904- <Link>CommonAssemblyInfo.cs</Link>
1905- </Compile>
1906- <Compile Include="AddConfigurationDialog.cs">
1907- <SubType>Form</SubType>
1908- </Compile>
1909- <Compile Include="AddTabPageDialog.cs">
1910- <SubType>Form</SubType>
1911- </Compile>
1912- <Compile Include="AppContainer.cs" />
1913- <Compile Include="AssemblyInfo.cs" />
1914- <Compile Include="ConfigurationEditor.cs">
1915- <SubType>Form</SubType>
1916- </Compile>
1917- <Compile Include="EditTabPagesDialog.cs">
1918- <SubType>Form</SubType>
1919- </Compile>
1920- <Compile Include="ErrorDisplay.cs">
1921- <SubType>UserControl</SubType>
1922- </Compile>
1923- <Compile Include="ExpandingLabel.cs">
1924- <SubType>Component</SubType>
1925- </Compile>
1926- <Compile Include="ExpandingTextBox.cs">
1927- <SubType>Component</SubType>
1928- </Compile>
1929- <Compile Include="GuiAttachedConsole.cs" />
1930- <Compile Include="GuiTestEventDispatcher.cs" />
1931- <Compile Include="IMessageDisplay.cs" />
1932- <Compile Include="LongRunningOperationDisplay.cs">
1933- <SubType>Form</SubType>
1934- </Compile>
1935- <Compile Include="NotRunTree.cs">
1936- <SubType>Component</SubType>
1937- </Compile>
1938- <Compile Include="NUnitFormBase.cs">
1939- <SubType>Form</SubType>
1940- </Compile>
1941- <Compile Include="ProgressBar.cs">
1942- <SubType>Component</SubType>
1943- </Compile>
1944- <Compile Include="RenameConfigurationDialog.cs">
1945- <SubType>Form</SubType>
1946- </Compile>
1947- <Compile Include="ResultTabs.cs">
1948- <SubType>UserControl</SubType>
1949- </Compile>
1950- <Compile Include="ScrollingTextDisplayForm.cs">
1951- <SubType>Form</SubType>
1952- </Compile>
1953- <Compile Include="SettingsDialogBase.cs">
1954- <SubType>Form</SubType>
1955- </Compile>
1956- <Compile Include="SettingsPage.cs">
1957- <SubType>UserControl</SubType>
1958- </Compile>
1959- <Compile Include="SimpleSettingsDialog.cs">
1960- <SubType>Form</SubType>
1961- </Compile>
1962- <Compile Include="StatusBar.cs">
1963- <SubType>Component</SubType>
1964- </Compile>
1965- <Compile Include="TabbedSettingsDialog.cs">
1966- <SubType>Form</SubType>
1967- </Compile>
1968- <Compile Include="TestPropertiesDialog.cs">
1969- <SubType>Form</SubType>
1970- </Compile>
1971- <Compile Include="TestPropertiesDialog.Designer.cs">
1972- <DependentUpon>TestPropertiesDialog.cs</DependentUpon>
1973- </Compile>
1974- <Compile Include="TestSuiteTreeNode.cs" />
1975- <Compile Include="TestSuiteTreeView.cs">
1976- <SubType>Component</SubType>
1977- </Compile>
1978- <Compile Include="TestTree.cs">
1979- <SubType>UserControl</SubType>
1980- </Compile>
1981- <Compile Include="TextBoxDisplay.cs">
1982- <SubType>Component</SubType>
1983- </Compile>
1984- <Compile Include="TextDisplayContent.cs" />
1985- <Compile Include="TextDisplay.cs" />
1986- <Compile Include="TextDisplayTabPage.cs">
1987- <SubType>Component</SubType>
1988- </Compile>
1989- <Compile Include="TextDisplayTabSettings.cs" />
1990- <Compile Include="TextDisplayWriter.cs" />
1991- <Compile Include="TextOutputSettingsPage.cs">
1992- <SubType>UserControl</SubType>
1993- </Compile>
1994- <Compile Include="TipWindow.cs">
1995- <SubType>Form</SubType>
1996- </Compile>
1997- <Compile Include="TreeBasedSettingsDialog.cs">
1998- <SubType>Form</SubType>
1999- </Compile>
2000- <Compile Include="MessageDisplay.cs" />
2001- <Compile Include="VisualState.cs" />
2002- <Compile Include="WaitCursor.cs" />
2003- </ItemGroup>
2004- <ItemGroup>
2005- <EmbeddedResource Include="AddConfigurationDialog.resx">
2006- <DependentUpon>AddConfigurationDialog.cs</DependentUpon>
2007- <SubType>Designer</SubType>
2008- </EmbeddedResource>
2009- <EmbeddedResource Include="AddTabPageDialog.resx">
2010- <DependentUpon>AddTabPageDialog.cs</DependentUpon>
2011- <SubType>Designer</SubType>
2012- </EmbeddedResource>
2013- <EmbeddedResource Include="ConfigurationEditor.resx">
2014- <DependentUpon>ConfigurationEditor.cs</DependentUpon>
2015- <SubType>Designer</SubType>
2016- </EmbeddedResource>
2017- <EmbeddedResource Include="EditTabPagesDialog.resx">
2018- <DependentUpon>EditTabPagesDialog.cs</DependentUpon>
2019- <SubType>Designer</SubType>
2020- </EmbeddedResource>
2021- <EmbeddedResource Include="ErrorDisplay.resx">
2022- <DependentUpon>ErrorDisplay.cs</DependentUpon>
2023- <SubType>Designer</SubType>
2024- </EmbeddedResource>
2025- <EmbeddedResource Include="ExpandingLabel.resx">
2026- <DependentUpon>ExpandingLabel.cs</DependentUpon>
2027- <SubType>Designer</SubType>
2028- </EmbeddedResource>
2029- <EmbeddedResource Include="ExpandingTextBox.resx">
2030- <DependentUpon>ExpandingTextBox.cs</DependentUpon>
2031- <SubType>Designer</SubType>
2032- </EmbeddedResource>
2033- <EmbeddedResource Include="LongRunningOperationDisplay.resx">
2034- <DependentUpon>LongRunningOperationDisplay.cs</DependentUpon>
2035- <SubType>Designer</SubType>
2036- </EmbeddedResource>
2037- <EmbeddedResource Include="NotRunTree.resx">
2038- <DependentUpon>NotRunTree.cs</DependentUpon>
2039- <SubType>Designer</SubType>
2040- </EmbeddedResource>
2041- <EmbeddedResource Include="ProgressBar.resx">
2042- <DependentUpon>ProgressBar.cs</DependentUpon>
2043- <SubType>Designer</SubType>
2044- </EmbeddedResource>
2045- <EmbeddedResource Include="RenameConfigurationDialog.resx">
2046- <DependentUpon>RenameConfigurationDialog.cs</DependentUpon>
2047- <SubType>Designer</SubType>
2048- </EmbeddedResource>
2049- <EmbeddedResource Include="ResultTabs.resx">
2050- <DependentUpon>ResultTabs.cs</DependentUpon>
2051- <SubType>Designer</SubType>
2052- </EmbeddedResource>
2053- <EmbeddedResource Include="SettingsDialogBase.resx">
2054- <DependentUpon>SettingsDialogBase.cs</DependentUpon>
2055- <SubType>Designer</SubType>
2056- </EmbeddedResource>
2057- <EmbeddedResource Include="SettingsPage.resx">
2058- <DependentUpon>SettingsPage.cs</DependentUpon>
2059- <SubType>Designer</SubType>
2060- </EmbeddedResource>
2061- <EmbeddedResource Include="SimpleSettingsDialog.resx">
2062- <DependentUpon>SimpleSettingsDialog.cs</DependentUpon>
2063- <SubType>Designer</SubType>
2064- </EmbeddedResource>
2065- <EmbeddedResource Include="StatusBar.resx">
2066- <DependentUpon>StatusBar.cs</DependentUpon>
2067- <SubType>Designer</SubType>
2068- </EmbeddedResource>
2069- <EmbeddedResource Include="TabbedSettingsDialog.resx">
2070- <DependentUpon>TabbedSettingsDialog.cs</DependentUpon>
2071- <SubType>Designer</SubType>
2072- </EmbeddedResource>
2073- <EmbeddedResource Include="TestPropertiesDialog.resx">
2074- <DependentUpon>TestPropertiesDialog.cs</DependentUpon>
2075- </EmbeddedResource>
2076- <EmbeddedResource Include="TestSuiteTreeView.resx">
2077- <DependentUpon>TestSuiteTreeView.cs</DependentUpon>
2078- <SubType>Designer</SubType>
2079- </EmbeddedResource>
2080- <EmbeddedResource Include="TestTree.resx">
2081- <DependentUpon>TestTree.cs</DependentUpon>
2082- <SubType>Designer</SubType>
2083- </EmbeddedResource>
2084- <EmbeddedResource Include="TextOutputSettingsPage.resx">
2085- <DependentUpon>TextOutputSettingsPage.cs</DependentUpon>
2086- <SubType>Designer</SubType>
2087- </EmbeddedResource>
2088- <EmbeddedResource Include="TipWindow.resx">
2089- <DependentUpon>TipWindow.cs</DependentUpon>
2090- <SubType>Designer</SubType>
2091- </EmbeddedResource>
2092- <EmbeddedResource Include="TreeBasedSettingsDialog.resx">
2093- <DependentUpon>TreeBasedSettingsDialog.cs</DependentUpon>
2094- <SubType>Designer</SubType>
2095- </EmbeddedResource>
2096- <EmbeddedResource Include="Images\pinned.gif" />
2097- <EmbeddedResource Include="Images\unpinned.gif" />
2098- </ItemGroup>
2099- <ItemGroup>
2100- <Content Include="Images\Tree\Classic\Ignored.jpg">
2101- <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
2102- </Content>
2103- <Content Include="Images\Ellipsis.gif" />
2104- <Content Include="Images\Tree\Circles\Inconclusive.jpg">
2105- <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
2106- </Content>
2107- <Content Include="Images\Tree\Circles\Skipped.jpg">
2108- <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
2109- </Content>
2110- <Content Include="Images\Tree\Circles\Success.jpg">
2111- <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
2112- </Content>
2113- <Content Include="Images\Tree\Circles\Failure.jpg">
2114- <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
2115- </Content>
2116- <Content Include="Images\Tree\Circles\Ignored.jpg">
2117- <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
2118- </Content>
2119- <Content Include="Images\Tree\Classic\Failure.jpg">
2120- <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
2121- </Content>
2122- <Content Include="Images\Tree\Classic\Skipped.jpg">
2123- <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
2124- </Content>
2125- <Content Include="Images\Tree\Default\Failure.png">
2126- <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
2127- </Content>
2128- <Content Include="Images\Tree\Default\Ignored.png">
2129- <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
2130- </Content>
2131- <Content Include="Images\Tree\Classic\Inconclusive.jpg">
2132- <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
2133- </Content>
2134- <Content Include="Images\Tree\Default\Inconclusive.png">
2135- <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
2136- </Content>
2137- <Content Include="Images\Tree\Default\Skipped.png">
2138- <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
2139- </Content>
2140- <Content Include="Images\Tree\Classic\Success.jpg">
2141- <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
2142- </Content>
2143- <Content Include="Images\Tree\Default\Success.png">
2144- <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
2145- </Content>
2146- </ItemGroup>
2147- <ItemGroup>
2148- <Content Include="Images\Tree\Visual Studio\Failure.png">
2149- <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
2150- </Content>
2151- <Content Include="Images\Tree\Visual Studio\Ignored.png">
2152- <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
2153- </Content>
2154- <Content Include="Images\Tree\Visual Studio\Inconclusive.png">
2155- <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
2156- </Content>
2157- <Content Include="Images\Tree\Visual Studio\Skipped.png">
2158- <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
2159- </Content>
2160- <Content Include="Images\Tree\Visual Studio\Success.png">
2161- <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
2162- </Content>
2163- <None Include="nunit.uikit.build" />
2164- </ItemGroup>
2165- <ItemGroup>
2166- <BootstrapperPackage Include="Microsoft.Net.Client.3.5">
2167- <Visible>False</Visible>
2168- <ProductName>.NET Framework 3.5 SP1 Client Profile</ProductName>
2169- <Install>false</Install>
2170- </BootstrapperPackage>
2171- <BootstrapperPackage Include="Microsoft.Net.Framework.3.5.SP1">
2172- <Visible>False</Visible>
2173- <ProductName>.NET Framework 3.5 SP1</ProductName>
2174- <Install>true</Install>
2175- </BootstrapperPackage>
2176- <BootstrapperPackage Include="Microsoft.Windows.Installer.3.1">
2177- <Visible>False</Visible>
2178- <ProductName>Windows Installer 3.1</ProductName>
2179- <Install>true</Install>
2180- </BootstrapperPackage>
2181- </ItemGroup>
2182- <Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" />
2183- <PropertyGroup>
2184- <PreBuildEvent>
2185- </PreBuildEvent>
2186- <PostBuildEvent>
2187- </PostBuildEvent>
2188- </PropertyGroup>
2189+<?xml version="1.0" encoding="utf-8"?>
2190+<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003" ToolsVersion="4.0">
2191+ <PropertyGroup>
2192+ <ProjectType>Local</ProjectType>
2193+ <ProductVersion>9.0.30729</ProductVersion>
2194+ <SchemaVersion>2.0</SchemaVersion>
2195+ <ProjectGuid>{27531BBF-183D-4C3A-935B-D840B9F1A3A4}</ProjectGuid>
2196+ <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
2197+ <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
2198+ <AssemblyKeyContainerName>
2199+ </AssemblyKeyContainerName>
2200+ <AssemblyName>nunit.uikit</AssemblyName>
2201+ <DefaultClientScript>JScript</DefaultClientScript>
2202+ <DefaultHTMLPageLayout>Grid</DefaultHTMLPageLayout>
2203+ <DefaultTargetSchema>IE50</DefaultTargetSchema>
2204+ <DelaySign>false</DelaySign>
2205+ <OutputType>Library</OutputType>
2206+ <RootNamespace>NUnit.UiKit</RootNamespace>
2207+ <RunPostBuildEvent>OnBuildSuccess</RunPostBuildEvent>
2208+ <FileUpgradeFlags>
2209+ </FileUpgradeFlags>
2210+ <UpgradeBackupLocation>
2211+ </UpgradeBackupLocation>
2212+ <OldToolsVersion>3.5</OldToolsVersion>
2213+ <TargetFrameworkVersion>v2.0</TargetFrameworkVersion>
2214+ <PublishUrl>publish\</PublishUrl>
2215+ <Install>true</Install>
2216+ <InstallFrom>Disk</InstallFrom>
2217+ <UpdateEnabled>false</UpdateEnabled>
2218+ <UpdateMode>Foreground</UpdateMode>
2219+ <UpdateInterval>7</UpdateInterval>
2220+ <UpdateIntervalUnits>Days</UpdateIntervalUnits>
2221+ <UpdatePeriodically>false</UpdatePeriodically>
2222+ <UpdateRequired>false</UpdateRequired>
2223+ <MapFileExtensions>true</MapFileExtensions>
2224+ <ApplicationRevision>0</ApplicationRevision>
2225+ <ApplicationVersion>1.0.0.%2a</ApplicationVersion>
2226+ <IsWebBootstrapper>false</IsWebBootstrapper>
2227+ <UseApplicationTrust>false</UseApplicationTrust>
2228+ <BootstrapperEnabled>true</BootstrapperEnabled>
2229+ </PropertyGroup>
2230+ <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
2231+ <OutputPath>..\..\..\bin\Debug\lib\</OutputPath>
2232+ <BaseAddress>285212672</BaseAddress>
2233+ <ConfigurationOverrideFile>
2234+ </ConfigurationOverrideFile>
2235+ <DefineConstants>TRACE;DEBUG;CLR_2_0,NET_2_0,CS_3_0</DefineConstants>
2236+ <DocumentationFile>
2237+ </DocumentationFile>
2238+ <DebugSymbols>true</DebugSymbols>
2239+ <FileAlignment>4096</FileAlignment>
2240+ <NoWarn>1699</NoWarn>
2241+ <Optimize>false</Optimize>
2242+ <RegisterForComInterop>false</RegisterForComInterop>
2243+ <RemoveIntegerChecks>false</RemoveIntegerChecks>
2244+ <WarningLevel>4</WarningLevel>
2245+ <DebugType>full</DebugType>
2246+ <ErrorReport>prompt</ErrorReport>
2247+ <CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>
2248+ </PropertyGroup>
2249+ <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
2250+ <OutputPath>..\..\..\bin\Release\lib\</OutputPath>
2251+ <BaseAddress>285212672</BaseAddress>
2252+ <ConfigurationOverrideFile>
2253+ </ConfigurationOverrideFile>
2254+ <DefineConstants>TRACE;CLR_2_0,NET_2_0,CS_3_0</DefineConstants>
2255+ <DocumentationFile>
2256+ </DocumentationFile>
2257+ <FileAlignment>4096</FileAlignment>
2258+ <NoWarn>1699</NoWarn>
2259+ <Optimize>true</Optimize>
2260+ <RegisterForComInterop>false</RegisterForComInterop>
2261+ <RemoveIntegerChecks>false</RemoveIntegerChecks>
2262+ <WarningLevel>4</WarningLevel>
2263+ <DebugType>none</DebugType>
2264+ <ErrorReport>prompt</ErrorReport>
2265+ <CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>
2266+ </PropertyGroup>
2267+ <ItemGroup>
2268+ <Reference Include="System">
2269+ <Name>System</Name>
2270+ </Reference>
2271+ <Reference Include="System.Data">
2272+ <Name>System.Data</Name>
2273+ </Reference>
2274+ <Reference Include="System.Drawing">
2275+ <Name>System.Drawing</Name>
2276+ </Reference>
2277+ <Reference Include="System.Windows.Forms">
2278+ <Name>System.Windows.Forms</Name>
2279+ </Reference>
2280+ <Reference Include="System.Xml">
2281+ <Name>System.XML</Name>
2282+ </Reference>
2283+ <ProjectReference Include="..\..\ClientUtilities\util\nunit.util.dll.csproj">
2284+ <Name>nunit.util.dll</Name>
2285+ <Project>{61CE9CE5-943E-44D4-A381-814DC1406767}</Project>
2286+ <Private>False</Private>
2287+ </ProjectReference>
2288+ <ProjectReference Include="..\..\NUnitCore\core\nunit.core.dll.csproj">
2289+ <Project>{EBD43A7F-AFCA-4281-BB53-5CDD91F966A3}</Project>
2290+ <Name>nunit.core.dll</Name>
2291+ <Private>False</Private>
2292+ </ProjectReference>
2293+ <ProjectReference Include="..\..\NUnitCore\interfaces\nunit.core.interfaces.dll.csproj">
2294+ <Name>nunit.core.interfaces.dll</Name>
2295+ <Project>{435428F8-5995-4CE4-8022-93D595A8CC0F}</Project>
2296+ <Private>False</Private>
2297+ </ProjectReference>
2298+ <ProjectReference Include="..\..\GuiException\UiException\nunit.uiexception.dll.csproj">
2299+ <Project>{3E87A106-EB20-4147-84C8-95B0BB43A1D4}</Project>
2300+ <Name>nunit.uiexception.dll</Name>
2301+ <Private>False</Private>
2302+ </ProjectReference>
2303+ </ItemGroup>
2304+ <ItemGroup>
2305+ <Compile Include="..\..\CommonAssemblyInfo.cs">
2306+ <Link>CommonAssemblyInfo.cs</Link>
2307+ </Compile>
2308+ <Compile Include="AddConfigurationDialog.cs">
2309+ <SubType>Form</SubType>
2310+ </Compile>
2311+ <Compile Include="AddTabPageDialog.cs">
2312+ <SubType>Form</SubType>
2313+ </Compile>
2314+ <Compile Include="AppContainer.cs" />
2315+ <Compile Include="AssemblyInfo.cs" />
2316+ <Compile Include="ConfigurationEditor.cs">
2317+ <SubType>Form</SubType>
2318+ </Compile>
2319+ <Compile Include="EditTabPagesDialog.cs">
2320+ <SubType>Form</SubType>
2321+ </Compile>
2322+ <Compile Include="ErrorDisplay.cs">
2323+ <SubType>UserControl</SubType>
2324+ </Compile>
2325+ <Compile Include="ExpandingLabel.cs">
2326+ <SubType>Component</SubType>
2327+ </Compile>
2328+ <Compile Include="ExpandingTextBox.cs">
2329+ <SubType>Component</SubType>
2330+ </Compile>
2331+ <Compile Include="GuiAttachedConsole.cs" />
2332+ <Compile Include="GuiTestEventDispatcher.cs" />
2333+ <Compile Include="IMessageDisplay.cs" />
2334+ <Compile Include="LongRunningOperationDisplay.cs">
2335+ <SubType>Form</SubType>
2336+ </Compile>
2337+ <Compile Include="NotRunTree.cs">
2338+ <SubType>Component</SubType>
2339+ </Compile>
2340+ <Compile Include="NUnitFormBase.cs">
2341+ <SubType>Form</SubType>
2342+ </Compile>
2343+ <Compile Include="ProgressBar.cs">
2344+ <SubType>Component</SubType>
2345+ </Compile>
2346+ <Compile Include="RenameConfigurationDialog.cs">
2347+ <SubType>Form</SubType>
2348+ </Compile>
2349+ <Compile Include="ResultTabs.cs">
2350+ <SubType>UserControl</SubType>
2351+ </Compile>
2352+ <Compile Include="ScrollingTextDisplayForm.cs">
2353+ <SubType>Form</SubType>
2354+ </Compile>
2355+ <Compile Include="SettingsDialogBase.cs">
2356+ <SubType>Form</SubType>
2357+ </Compile>
2358+ <Compile Include="SettingsPage.cs">
2359+ <SubType>UserControl</SubType>
2360+ </Compile>
2361+ <Compile Include="SimpleSettingsDialog.cs">
2362+ <SubType>Form</SubType>
2363+ </Compile>
2364+ <Compile Include="StatusBar.cs">
2365+ <SubType>Component</SubType>
2366+ </Compile>
2367+ <Compile Include="TabbedSettingsDialog.cs">
2368+ <SubType>Form</SubType>
2369+ </Compile>
2370+ <Compile Include="TestPropertiesDialog.cs">
2371+ <SubType>Form</SubType>
2372+ </Compile>
2373+ <Compile Include="TestPropertiesDialog.Designer.cs">
2374+ <DependentUpon>TestPropertiesDialog.cs</DependentUpon>
2375+ </Compile>
2376+ <Compile Include="TestSuiteTreeNode.cs" />
2377+ <Compile Include="TestSuiteTreeView.cs">
2378+ <SubType>Component</SubType>
2379+ </Compile>
2380+ <Compile Include="TestTree.cs">
2381+ <SubType>UserControl</SubType>
2382+ </Compile>
2383+ <Compile Include="TextBoxDisplay.cs">
2384+ <SubType>Component</SubType>
2385+ </Compile>
2386+ <Compile Include="TextDisplayContent.cs" />
2387+ <Compile Include="TextDisplay.cs" />
2388+ <Compile Include="TextDisplayTabPage.cs">
2389+ <SubType>Component</SubType>
2390+ </Compile>
2391+ <Compile Include="TextDisplayTabSettings.cs" />
2392+ <Compile Include="TextDisplayWriter.cs" />
2393+ <Compile Include="TextOutputSettingsPage.cs">
2394+ <SubType>UserControl</SubType>
2395+ </Compile>
2396+ <Compile Include="TipWindow.cs">
2397+ <SubType>Form</SubType>
2398+ </Compile>
2399+ <Compile Include="TreeBasedSettingsDialog.cs">
2400+ <SubType>Form</SubType>
2401+ </Compile>
2402+ <Compile Include="MessageDisplay.cs" />
2403+ <Compile Include="VisualState.cs" />
2404+ <Compile Include="WaitCursor.cs" />
2405+ </ItemGroup>
2406+ <ItemGroup>
2407+ <EmbeddedResource Include="AddConfigurationDialog.resx">
2408+ <DependentUpon>AddConfigurationDialog.cs</DependentUpon>
2409+ <SubType>Designer</SubType>
2410+ </EmbeddedResource>
2411+ <EmbeddedResource Include="AddTabPageDialog.resx">
2412+ <DependentUpon>AddTabPageDialog.cs</DependentUpon>
2413+ <SubType>Designer</SubType>
2414+ </EmbeddedResource>
2415+ <EmbeddedResource Include="ConfigurationEditor.resx">
2416+ <DependentUpon>ConfigurationEditor.cs</DependentUpon>
2417+ <SubType>Designer</SubType>
2418+ </EmbeddedResource>
2419+ <EmbeddedResource Include="EditTabPagesDialog.resx">
2420+ <DependentUpon>EditTabPagesDialog.cs</DependentUpon>
2421+ <SubType>Designer</SubType>
2422+ </EmbeddedResource>
2423+ <EmbeddedResource Include="ErrorDisplay.resx">
2424+ <DependentUpon>ErrorDisplay.cs</DependentUpon>
2425+ <SubType>Designer</SubType>
2426+ </EmbeddedResource>
2427+ <EmbeddedResource Include="ExpandingLabel.resx">
2428+ <DependentUpon>ExpandingLabel.cs</DependentUpon>
2429+ <SubType>Designer</SubType>
2430+ </EmbeddedResource>
2431+ <EmbeddedResource Include="ExpandingTextBox.resx">
2432+ <DependentUpon>ExpandingTextBox.cs</DependentUpon>
2433+ <SubType>Designer</SubType>
2434+ </EmbeddedResource>
2435+ <EmbeddedResource Include="LongRunningOperationDisplay.resx">
2436+ <DependentUpon>LongRunningOperationDisplay.cs</DependentUpon>
2437+ <SubType>Designer</SubType>
2438+ </EmbeddedResource>
2439+ <EmbeddedResource Include="NotRunTree.resx">
2440+ <DependentUpon>NotRunTree.cs</DependentUpon>
2441+ <SubType>Designer</SubType>
2442+ </EmbeddedResource>
2443+ <EmbeddedResource Include="ProgressBar.resx">
2444+ <DependentUpon>ProgressBar.cs</DependentUpon>
2445+ <SubType>Designer</SubType>
2446+ </EmbeddedResource>
2447+ <EmbeddedResource Include="RenameConfigurationDialog.resx">
2448+ <DependentUpon>RenameConfigurationDialog.cs</DependentUpon>
2449+ <SubType>Designer</SubType>
2450+ </EmbeddedResource>
2451+ <EmbeddedResource Include="ResultTabs.resx">
2452+ <DependentUpon>ResultTabs.cs</DependentUpon>
2453+ <SubType>Designer</SubType>
2454+ </EmbeddedResource>
2455+ <EmbeddedResource Include="SettingsDialogBase.resx">
2456+ <DependentUpon>SettingsDialogBase.cs</DependentUpon>
2457+ <SubType>Designer</SubType>
2458+ </EmbeddedResource>
2459+ <EmbeddedResource Include="SettingsPage.resx">
2460+ <DependentUpon>SettingsPage.cs</DependentUpon>
2461+ <SubType>Designer</SubType>
2462+ </EmbeddedResource>
2463+ <EmbeddedResource Include="SimpleSettingsDialog.resx">
2464+ <DependentUpon>SimpleSettingsDialog.cs</DependentUpon>
2465+ <SubType>Designer</SubType>
2466+ </EmbeddedResource>
2467+ <EmbeddedResource Include="StatusBar.resx">
2468+ <DependentUpon>StatusBar.cs</DependentUpon>
2469+ <SubType>Designer</SubType>
2470+ </EmbeddedResource>
2471+ <EmbeddedResource Include="TabbedSettingsDialog.resx">
2472+ <DependentUpon>TabbedSettingsDialog.cs</DependentUpon>
2473+ <SubType>Designer</SubType>
2474+ </EmbeddedResource>
2475+ <EmbeddedResource Include="TestPropertiesDialog.resx">
2476+ <DependentUpon>TestPropertiesDialog.cs</DependentUpon>
2477+ </EmbeddedResource>
2478+ <EmbeddedResource Include="TestSuiteTreeView.resx">
2479+ <DependentUpon>TestSuiteTreeView.cs</DependentUpon>
2480+ <SubType>Designer</SubType>
2481+ </EmbeddedResource>
2482+ <EmbeddedResource Include="TestTree.resx">
2483+ <DependentUpon>TestTree.cs</DependentUpon>
2484+ <SubType>Designer</SubType>
2485+ </EmbeddedResource>
2486+ <EmbeddedResource Include="TextOutputSettingsPage.resx">
2487+ <DependentUpon>TextOutputSettingsPage.cs</DependentUpon>
2488+ <SubType>Designer</SubType>
2489+ </EmbeddedResource>
2490+ <EmbeddedResource Include="TipWindow.resx">
2491+ <DependentUpon>TipWindow.cs</DependentUpon>
2492+ <SubType>Designer</SubType>
2493+ </EmbeddedResource>
2494+ <EmbeddedResource Include="TreeBasedSettingsDialog.resx">
2495+ <DependentUpon>TreeBasedSettingsDialog.cs</DependentUpon>
2496+ <SubType>Designer</SubType>
2497+ </EmbeddedResource>
2498+ <EmbeddedResource Include="Images\pinned.gif" />
2499+ <EmbeddedResource Include="Images\unpinned.gif" />
2500+ </ItemGroup>
2501+ <ItemGroup>
2502+ <EmbeddedResource Include="Images\search.png" />
2503+ <Content Include="Images\Tree\Classic\Ignored.jpg">
2504+ <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
2505+ </Content>
2506+ <Content Include="Images\Ellipsis.gif" />
2507+ <Content Include="Images\Tree\Circles\Inconclusive.jpg">
2508+ <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
2509+ </Content>
2510+ <Content Include="Images\Tree\Circles\Skipped.jpg">
2511+ <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
2512+ </Content>
2513+ <Content Include="Images\Tree\Circles\Success.jpg">
2514+ <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
2515+ </Content>
2516+ <Content Include="Images\Tree\Circles\Failure.jpg">
2517+ <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
2518+ </Content>
2519+ <Content Include="Images\Tree\Circles\Ignored.jpg">
2520+ <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
2521+ </Content>
2522+ <Content Include="Images\Tree\Classic\Failure.jpg">
2523+ <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
2524+ </Content>
2525+ <Content Include="Images\Tree\Classic\Skipped.jpg">
2526+ <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
2527+ </Content>
2528+ <Content Include="Images\Tree\Default\Failure.png">
2529+ <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
2530+ </Content>
2531+ <Content Include="Images\Tree\Default\Ignored.png">
2532+ <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
2533+ </Content>
2534+ <Content Include="Images\Tree\Classic\Inconclusive.jpg">
2535+ <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
2536+ </Content>
2537+ <Content Include="Images\Tree\Default\Inconclusive.png">
2538+ <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
2539+ </Content>
2540+ <Content Include="Images\Tree\Default\Skipped.png">
2541+ <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
2542+ </Content>
2543+ <Content Include="Images\Tree\Classic\Success.jpg">
2544+ <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
2545+ </Content>
2546+ <Content Include="Images\Tree\Default\Success.png">
2547+ <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
2548+ </Content>
2549+ </ItemGroup>
2550+ <ItemGroup>
2551+ <Content Include="Images\Tree\Visual Studio\Failure.png">
2552+ <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
2553+ </Content>
2554+ <Content Include="Images\Tree\Visual Studio\Ignored.png">
2555+ <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
2556+ </Content>
2557+ <Content Include="Images\Tree\Visual Studio\Inconclusive.png">
2558+ <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
2559+ </Content>
2560+ <Content Include="Images\Tree\Visual Studio\Skipped.png">
2561+ <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
2562+ </Content>
2563+ <Content Include="Images\Tree\Visual Studio\Success.png">
2564+ <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
2565+ </Content>
2566+ <None Include="nunit.uikit.build" />
2567+ </ItemGroup>
2568+ <ItemGroup>
2569+ <BootstrapperPackage Include="Microsoft.Net.Client.3.5">
2570+ <Visible>False</Visible>
2571+ <ProductName>.NET Framework 3.5 SP1 Client Profile</ProductName>
2572+ <Install>false</Install>
2573+ </BootstrapperPackage>
2574+ <BootstrapperPackage Include="Microsoft.Net.Framework.3.5.SP1">
2575+ <Visible>False</Visible>
2576+ <ProductName>.NET Framework 3.5 SP1</ProductName>
2577+ <Install>true</Install>
2578+ </BootstrapperPackage>
2579+ <BootstrapperPackage Include="Microsoft.Windows.Installer.3.1">
2580+ <Visible>False</Visible>
2581+ <ProductName>Windows Installer 3.1</ProductName>
2582+ <Install>true</Install>
2583+ </BootstrapperPackage>
2584+ </ItemGroup>
2585+ <Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" />
2586+ <PropertyGroup>
2587+ <PreBuildEvent>
2588+ </PreBuildEvent>
2589+ <PostBuildEvent>
2590+ </PostBuildEvent>
2591+ </PropertyGroup>
2592 </Project>
2593\ No newline at end of file

Subscribers

People subscribed via source and target branches

to status/vote changes: