~halega/+junk/sharpdevelop

« back to all changes in this revision

Viewing changes to src/AddIns/Analysis/CodeCoverage/Project/Src/PartCoverApplication.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 System.Collections.Specialized;
 
6
using System.Diagnostics;
 
7
using System.IO;
 
8
using System.Text;
 
9
using ICSharpCode.Core;
 
10
using ICSharpCode.SharpDevelop.Project;
 
11
using ICSharpCode.UnitTesting;
 
12
 
 
13
namespace ICSharpCode.CodeCoverage
 
14
{
 
15
        public class PartCoverApplication
 
16
        {
 
17
                string fileName = String.Empty;
 
18
                NUnitConsoleApplication nunitConsoleApp;
 
19
                PartCoverSettings settings;
 
20
                StringBuilder arguments;
 
21
                
 
22
                public PartCoverApplication(string fileName, NUnitConsoleApplication nunitConsoleApp, PartCoverSettings settings)
 
23
                {
 
24
                        this.fileName = fileName;
 
25
                        this.nunitConsoleApp = nunitConsoleApp;
 
26
                        this.settings = settings;
 
27
                        
 
28
                        if (String.IsNullOrEmpty(fileName)) {
 
29
                                GetPartCoverApplicationFileName();
 
30
                        }
 
31
                }
 
32
                
 
33
                public PartCoverApplication(NUnitConsoleApplication nunitConsoleApp, PartCoverSettings settings)
 
34
                        : this(null, nunitConsoleApp, settings)
 
35
                {
 
36
                }
 
37
                
 
38
                void GetPartCoverApplicationFileName()
 
39
                {
 
40
                        fileName = Path.Combine(FileUtility.ApplicationRootPath, @"bin\Tools\PartCover\PartCover.exe");
 
41
                        fileName = Path.GetFullPath(fileName);
 
42
                }
 
43
                
 
44
                public PartCoverSettings Settings {
 
45
                        get { return settings; }
 
46
                }
 
47
                
 
48
                public string FileName {
 
49
                        get { return fileName; }
 
50
                        set { fileName = value; }
 
51
                }
 
52
                
 
53
                public string Target {
 
54
                        get { return nunitConsoleApp.FileName; }
 
55
                }
 
56
                
 
57
                public string GetTargetArguments()
 
58
                {
 
59
                        return nunitConsoleApp.GetArguments();
 
60
                }
 
61
                
 
62
                public string GetTargetWorkingDirectory()
 
63
                {
 
64
                        return Path.GetDirectoryName(nunitConsoleApp.Assemblies[0]);
 
65
                }
 
66
                
 
67
                public string CodeCoverageResultsFileName {
 
68
                        get { return GetCodeCoverageResultsFileName(); }
 
69
                }
 
70
                
 
71
                string GetCodeCoverageResultsFileName()
 
72
                {
 
73
                        string  outputDirectory = GetOutputDirectory(nunitConsoleApp.Project);
 
74
                        return Path.Combine(outputDirectory, "coverage.xml");
 
75
                }
 
76
                
 
77
                string GetOutputDirectory(IProject project)
 
78
                {
 
79
                        return Path.Combine(project.Directory, "PartCover");
 
80
                }
 
81
                
 
82
                public ProcessStartInfo GetProcessStartInfo()
 
83
                {
 
84
                        ProcessStartInfo processStartInfo = new ProcessStartInfo();
 
85
                        processStartInfo.FileName = FileName;
 
86
                        processStartInfo.Arguments = GetArguments();
 
87
                        return processStartInfo;
 
88
                }
 
89
                
 
90
                string GetArguments()
 
91
                {
 
92
                        arguments = new StringBuilder();
 
93
                        
 
94
                        AppendTarget();
 
95
                        AppendTargetWorkingDirectory();
 
96
                        AppendTargetArguments();
 
97
                        AppendCodeCoverageResultsFileName();
 
98
                        AppendIncludedItems();
 
99
                        AppendExcludedItems();
 
100
                        
 
101
                        return arguments.ToString().Trim();
 
102
                }
 
103
                
 
104
                void AppendTarget()
 
105
                {
 
106
                        arguments.AppendFormat("--target \"{0}\" ", Target);
 
107
                }
 
108
                
 
109
                void AppendTargetWorkingDirectory()
 
110
                {
 
111
                        arguments.AppendFormat("--target-work-dir \"{0}\" ", GetTargetWorkingDirectory());
 
112
                }
 
113
                
 
114
                void AppendTargetArguments()
 
115
                {
 
116
                        string targetArguments = GetTargetArguments();
 
117
                        arguments.AppendFormat("--target-args \"{0}\" ", targetArguments.Replace("\"", "\\\""));
 
118
                }
 
119
                
 
120
                void AppendCodeCoverageResultsFileName()
 
121
                {
 
122
                        arguments.AppendFormat("--output \"{0}\" ", CodeCoverageResultsFileName);
 
123
                }
 
124
                
 
125
                void AppendIncludedItems()
 
126
                {
 
127
                        StringCollection includedItems = settings.Include;
 
128
                        if (includedItems.Count == 0) {
 
129
                                includedItems.Add("[*]*");
 
130
                        }
 
131
                        AppendItems("--include", includedItems);
 
132
                }
 
133
                
 
134
                void AppendExcludedItems()
 
135
                {
 
136
                        AppendEmptySpace();
 
137
                        AppendItems("--exclude", settings.Exclude);
 
138
                }
 
139
                
 
140
                void AppendEmptySpace()
 
141
                {
 
142
                        arguments.Append(' ');
 
143
                }
 
144
                
 
145
                void AppendItems(string optionName, StringCollection items)
 
146
                {
 
147
                        string itemArgs = GetItemArguments(optionName, items);
 
148
                        arguments.Append(itemArgs);
 
149
                }
 
150
                
 
151
                string GetItemArguments(string optionName, StringCollection items)
 
152
                {
 
153
                        StringBuilder itemArgs = new StringBuilder();
 
154
                        foreach (string item in items) {
 
155
                                itemArgs.AppendFormat("{0} {1} ", optionName, item);
 
156
                        }
 
157
                        return itemArgs.ToString().Trim();
 
158
                }
 
159
        }
 
160
}