Merge pull request #980 from StephenMcConnel/bug-18638
[mono.git] / mcs / nunit24 / ClientUtilities / util / SummaryVisitor.cs
1 // ****************************************************************\r
2 // This is free software licensed under the NUnit license. You\r
3 // may obtain a copy of the license as well as information regarding\r
4 // copyright ownership at http://nunit.org/?p=license&r=2.4.\r
5 // ****************************************************************\r
6 \r
7 namespace NUnit.Util\r
8 {\r
9         using System;\r
10         using NUnit.Core;\r
11 \r
12         /// <summary>\r
13         /// SummaryVisitor examines a set of results and calculates \r
14         /// summary statistics for the run. Note that a test run\r
15         /// will only produce results for tests that were selected\r
16         /// to be run. Curently, tests excluded by the Explicit \r
17         /// attribute produce a result, while those excluded by\r
18         /// the Platform attribute do not. This anomaly will be\r
19         /// corrected in a later version.\r
20         /// </summary>\r
21         public class SummaryVisitor : ResultVisitor\r
22         {\r
23                 private int resultCount;\r
24                 private int failureCount;\r
25                 private int skipCount;\r
26                 private int ignoreCount;\r
27                 private int suitesNotRun;\r
28                 \r
29                 private double time;\r
30                 private string name;\r
31                 private bool initialized;\r
32 \r
33                 public SummaryVisitor()\r
34                 {\r
35                         resultCount = 0;\r
36                         initialized = false;\r
37                 }\r
38 \r
39                 public void Visit(TestCaseResult caseResult) \r
40                 {\r
41                         SetNameandTime(caseResult.Name, caseResult.Time);\r
42 \r
43                         switch( caseResult.RunState )\r
44                         {\r
45                                 case RunState.Executed:\r
46                                         resultCount++;\r
47                                         if(caseResult.IsFailure)\r
48                                                 failureCount++;\r
49                                         break;\r
50                                 case RunState.Ignored:\r
51                                         ignoreCount++;\r
52                                         break;\r
53                                 case RunState.Explicit:\r
54                                 case RunState.NotRunnable:\r
55                                 case RunState.Runnable:\r
56                                 case RunState.Skipped:\r
57                                 default:\r
58                                         skipCount++;\r
59                                         break;\r
60                         }\r
61                 }\r
62 \r
63                 public void Visit(TestSuiteResult suiteResult) \r
64                 {\r
65                         SetNameandTime(suiteResult.Name, suiteResult.Time);\r
66 \r
67                         \r
68                         \r
69                         foreach (TestResult result in suiteResult.Results)\r
70                         {\r
71                                 result.Accept(this);\r
72                         }\r
73                         \r
74                         if(!suiteResult.Executed)\r
75                                 suitesNotRun++;\r
76                 }\r
77 \r
78                 public double Time\r
79                 {\r
80                         get { return time; }\r
81                 }\r
82 \r
83                 private void SetNameandTime(string name, double time)\r
84                 {\r
85                         if(!initialized)\r
86                         {\r
87                                 this.time = time;\r
88                                 this.name = name;\r
89                                 initialized = true;\r
90                         }\r
91                 }\r
92 \r
93                 public bool Success\r
94                 {\r
95                         get { return (failureCount == 0); }\r
96                 }\r
97 \r
98                 public int ResultCount\r
99                 {\r
100                         get { return resultCount; }\r
101                 }\r
102 \r
103                 public int FailureCount\r
104                 {\r
105                         get { return failureCount; }\r
106                 }\r
107 \r
108                 public int SkipCount\r
109                 {\r
110                         get { return skipCount; }\r
111                 }\r
112 \r
113                 public int IgnoreCount\r
114                 {\r
115                         get { return ignoreCount; }\r
116                 }\r
117 \r
118                 public int TestsNotRun\r
119                 {\r
120                         get { return skipCount + ignoreCount; }\r
121                 }\r
122 \r
123                 public int SuitesNotRun\r
124                 {\r
125                         get { return suitesNotRun; }\r
126                 }\r
127 \r
128                 public string Name\r
129                 {\r
130                         get { return name; }\r
131                 }\r
132         }\r
133 }\r