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)
5
using System.Collections.Specialized;
6
using System.Diagnostics;
9
using ICSharpCode.Core;
10
using ICSharpCode.SharpDevelop.Project;
11
using ICSharpCode.UnitTesting;
13
namespace ICSharpCode.CodeCoverage
15
public class PartCoverApplication
17
string fileName = String.Empty;
18
NUnitConsoleApplication nunitConsoleApp;
19
PartCoverSettings settings;
20
StringBuilder arguments;
22
public PartCoverApplication(string fileName, NUnitConsoleApplication nunitConsoleApp, PartCoverSettings settings)
24
this.fileName = fileName;
25
this.nunitConsoleApp = nunitConsoleApp;
26
this.settings = settings;
28
if (String.IsNullOrEmpty(fileName)) {
29
GetPartCoverApplicationFileName();
33
public PartCoverApplication(NUnitConsoleApplication nunitConsoleApp, PartCoverSettings settings)
34
: this(null, nunitConsoleApp, settings)
38
void GetPartCoverApplicationFileName()
40
fileName = Path.Combine(FileUtility.ApplicationRootPath, @"bin\Tools\PartCover\PartCover.exe");
41
fileName = Path.GetFullPath(fileName);
44
public PartCoverSettings Settings {
45
get { return settings; }
48
public string FileName {
49
get { return fileName; }
50
set { fileName = value; }
53
public string Target {
54
get { return nunitConsoleApp.FileName; }
57
public string GetTargetArguments()
59
return nunitConsoleApp.GetArguments();
62
public string GetTargetWorkingDirectory()
64
return Path.GetDirectoryName(nunitConsoleApp.Assemblies[0]);
67
public string CodeCoverageResultsFileName {
68
get { return GetCodeCoverageResultsFileName(); }
71
string GetCodeCoverageResultsFileName()
73
string outputDirectory = GetOutputDirectory(nunitConsoleApp.Project);
74
return Path.Combine(outputDirectory, "coverage.xml");
77
string GetOutputDirectory(IProject project)
79
return Path.Combine(project.Directory, "PartCover");
82
public ProcessStartInfo GetProcessStartInfo()
84
ProcessStartInfo processStartInfo = new ProcessStartInfo();
85
processStartInfo.FileName = FileName;
86
processStartInfo.Arguments = GetArguments();
87
return processStartInfo;
92
arguments = new StringBuilder();
95
AppendTargetWorkingDirectory();
96
AppendTargetArguments();
97
AppendCodeCoverageResultsFileName();
98
AppendIncludedItems();
99
AppendExcludedItems();
101
return arguments.ToString().Trim();
106
arguments.AppendFormat("--target \"{0}\" ", Target);
109
void AppendTargetWorkingDirectory()
111
arguments.AppendFormat("--target-work-dir \"{0}\" ", GetTargetWorkingDirectory());
114
void AppendTargetArguments()
116
string targetArguments = GetTargetArguments();
117
arguments.AppendFormat("--target-args \"{0}\" ", targetArguments.Replace("\"", "\\\""));
120
void AppendCodeCoverageResultsFileName()
122
arguments.AppendFormat("--output \"{0}\" ", CodeCoverageResultsFileName);
125
void AppendIncludedItems()
127
StringCollection includedItems = settings.Include;
128
if (includedItems.Count == 0) {
129
includedItems.Add("[*]*");
131
AppendItems("--include", includedItems);
134
void AppendExcludedItems()
137
AppendItems("--exclude", settings.Exclude);
140
void AppendEmptySpace()
142
arguments.Append(' ');
145
void AppendItems(string optionName, StringCollection items)
147
string itemArgs = GetItemArguments(optionName, items);
148
arguments.Append(itemArgs);
151
string GetItemArguments(string optionName, StringCollection items)
153
StringBuilder itemArgs = new StringBuilder();
154
foreach (string item in items) {
155
itemArgs.AppendFormat("{0} {1} ", optionName, item);
157
return itemArgs.ToString().Trim();