~halega/+junk/sharpdevelop

« back to all changes in this revision

Viewing changes to src/AddIns/Analysis/UnitTesting/Src/AllTestsTreeNode.cs

  • Committer: sk
  • Date: 2011-09-10 05:17:57 UTC
  • Revision ID: halega@halega.com-20110910051757-qfouz1llya9m6boy
4.1.0.7915 Release Candidate 1

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
// Copyright (c) AlphaSierraPapa for the SharpDevelop Team (for details please see \doc\copyright.txt)
 
2
// This code is distributed under the GNU LGPL (for details please see \doc\license.txt)
 
3
 
 
4
using System;
 
5
using ICSharpCode.Core;
 
6
 
 
7
namespace ICSharpCode.UnitTesting
 
8
{
 
9
        /// <summary>
 
10
        /// All Tests root tree node that is added to the test tree when the
 
11
        /// solution has multiple test projects.
 
12
        /// </summary>
 
13
        public class AllTestsTreeNode : TestTreeNode
 
14
        {
 
15
                public AllTestsTreeNode()
 
16
                        : base(null, StringParser.Parse("${res:ICSharpCode.UnitTesting.AllTestsTreeNode.Text}"))
 
17
                {
 
18
                }
 
19
                
 
20
                /// <summary>
 
21
                /// Raised when the all tests tree node is disposed.
 
22
                /// </summary>
 
23
                public event EventHandler Disposed;
 
24
                
 
25
                /// <summary>
 
26
                /// Disposes this tree node.
 
27
                /// </summary>
 
28
                public override void Dispose()
 
29
                {
 
30
                        base.Dispose();
 
31
                        if (Disposed != null) {
 
32
                                Disposed(this, new EventArgs());
 
33
                        }
 
34
                }
 
35
                
 
36
                /// <summary>
 
37
                /// Adds a new project node as a child of the All Tests node.
 
38
                /// </summary>
 
39
                public void AddProjectNode(TestProjectTreeNode node)
 
40
                {
 
41
                        node.AddTo(this);
 
42
                        node.ImageIndexChanged += TestProjectTreeNodeImageIndexChanged;
 
43
                }
 
44
                
 
45
                /// <summary>
 
46
                /// Removes the project node.
 
47
                /// </summary>
 
48
                public void RemoveProjectNode(TestProjectTreeNode node)
 
49
                {
 
50
                        if (Nodes.Contains(node)) {
 
51
                                node.ImageIndexChanged -= TestProjectTreeNodeImageIndexChanged;
 
52
                                node.Remove();
 
53
                        }
 
54
                }
 
55
                
 
56
                void TestProjectTreeNodeImageIndexChanged(object source, EventArgs e)
 
57
                {
 
58
                        UpdateImageListIndex();
 
59
                }
 
60
                
 
61
                /// <summary>
 
62
                /// Sets the All Tests image index based on the current image
 
63
                /// indexes of the child project tree nodes.
 
64
                /// </summary>
 
65
                void UpdateImageListIndex()
 
66
                {
 
67
                        int ignored = 0;
 
68
                        int failed = 0;
 
69
                        int passed = 0;
 
70
                        int notRun = 0;
 
71
                        int total = Nodes.Count;
 
72
                        
 
73
                        foreach (TestProjectTreeNode projectNode in Nodes) {
 
74
                                switch (projectNode.ImageIndex) {
 
75
                                        case (int)TestTreeViewImageListIndex.TestFailed:
 
76
                                                failed++;
 
77
                                                break;
 
78
                                        case (int)TestTreeViewImageListIndex.TestPassed:
 
79
                                                passed++;
 
80
                                                break;
 
81
                                        case (int)TestTreeViewImageListIndex.TestIgnored:
 
82
                                                ignored++;
 
83
                                                break;
 
84
                                        default: // Not run.
 
85
                                                notRun++;
 
86
                                                break;
 
87
                                }
 
88
                        }
 
89
                                
 
90
                        // Update the image index based on the test project results.
 
91
                        if (failed > 0) {
 
92
                                UpdateImageListIndex(TestResultType.Failure);
 
93
                        } else if (ignored > 0) {
 
94
                                UpdateImageListIndex(TestResultType.Ignored);
 
95
                        } else if (passed > 0 && notRun == 0) {
 
96
                                UpdateImageListIndex(TestResultType.Success);
 
97
                        } else {
 
98
                                UpdateImageListIndex(TestResultType.None);
 
99
                        }
 
100
                }
 
101
        }
 
102
}