Browse Source

Changed CodeCoverage addin to use PartCover 2.2 instead of NCover.

git-svn-id: svn://svn.sharpdevelop.net/sharpdevelop/trunk@2744 1ccf3a8d-04fe-1044-b7c0-cef0b8235c61
shortcuts
Matt Ward 18 years ago
parent
commit
5b47018d7e
  1. 6
      src/AddIns/Misc/CodeCoverage/CodeCoverage.sln
  2. 6
      src/AddIns/Misc/CodeCoverage/Project/CodeCoverage.addin
  3. 6
      src/AddIns/Misc/CodeCoverage/Project/CodeCoverage.csproj
  4. 128
      src/AddIns/Misc/CodeCoverage/Project/Resources/CodeCoverageOptionsPanel.xfrm
  5. 40
      src/AddIns/Misc/CodeCoverage/Project/Resources/CodeCoverageProjectOptionsPanel.xfrm
  6. 91
      src/AddIns/Misc/CodeCoverage/Project/Src/CodeCoverageOptions.cs
  7. 26
      src/AddIns/Misc/CodeCoverage/Project/Src/CodeCoverageOptionsPanel.cs
  8. 73
      src/AddIns/Misc/CodeCoverage/Project/Src/CodeCoverageProjectOptionsPanel.cs
  9. 178
      src/AddIns/Misc/CodeCoverage/Project/Src/CodeCoverageResults.cs
  10. 277
      src/AddIns/Misc/CodeCoverage/Project/Src/NCoverRunner.cs
  11. 116
      src/AddIns/Misc/CodeCoverage/Project/Src/NCoverSettings.cs
  12. 30
      src/AddIns/Misc/CodeCoverage/Project/Src/PartCoverExitEventArgs.cs
  13. 265
      src/AddIns/Misc/CodeCoverage/Project/Src/PartCoverRunner.cs
  14. 147
      src/AddIns/Misc/CodeCoverage/Project/Src/PartCoverSettings.cs
  15. 131
      src/AddIns/Misc/CodeCoverage/Project/Src/RunTestWithCodeCoverageCommand.cs
  16. 19
      src/AddIns/Misc/CodeCoverage/Test/AddCodeCoverageMarkersTestFixture.cs
  17. 9
      src/AddIns/Misc/CodeCoverage/Test/CodeCoverage.Tests.csproj
  18. 20
      src/AddIns/Misc/CodeCoverage/Test/CodeCoverageMarkersCoverMultipleLinesTestFixture.cs
  19. 19
      src/AddIns/Misc/CodeCoverage/Test/CodeCoverageMarkersCoverTwoLinesTestFixture.cs
  20. 21
      src/AddIns/Misc/CodeCoverage/Test/CodeCoverageMarkersInvalidEndColumnTestFixture.cs
  21. 16
      src/AddIns/Misc/CodeCoverage/Test/CodeCoverageMarkersInvalidEndLineTestFixture.cs
  22. 19
      src/AddIns/Misc/CodeCoverage/Test/CodeCoverageMarkersInvalidStartColumnTestFixture.cs
  23. 19
      src/AddIns/Misc/CodeCoverage/Test/CodeCoverageMarkersInvalidStartLineTestFixture.cs
  24. 73
      src/AddIns/Misc/CodeCoverage/Test/CodeCoverageResultsMissingFileIdTestFixture.cs
  25. 36
      src/AddIns/Misc/CodeCoverage/Test/CodeCoverageResultsTestFixture.cs
  26. 52
      src/AddIns/Misc/CodeCoverage/Test/ExcludedMethodResultsTestFixture.cs
  27. 31
      src/AddIns/Misc/CodeCoverage/Test/ExcludedMethodTestFixture.cs
  28. 90
      src/AddIns/Misc/CodeCoverage/Test/ExcludedModuleResultsTestFixture.cs
  29. 45
      src/AddIns/Misc/CodeCoverage/Test/GetSequencePointsForFileNameTestFixture.cs
  30. 27
      src/AddIns/Misc/CodeCoverage/Test/InvalidSequencePointDataTestFixture.cs
  31. 53
      src/AddIns/Misc/CodeCoverage/Test/ModuleVisitedSequencePointsTestFixture.cs
  32. 56
      src/AddIns/Misc/CodeCoverage/Test/NCoverSettingsTestFixture.cs
  33. 176
      src/AddIns/Misc/CodeCoverage/Test/PartCoverCommandLineTests.cs
  34. 49
      src/AddIns/Misc/CodeCoverage/Test/PartCoverExitEventArgsTestFixture.cs
  35. 47
      src/AddIns/Misc/CodeCoverage/Test/PartCoverSettingsMissingRulePrefixTestFixture.cs
  36. 82
      src/AddIns/Misc/CodeCoverage/Test/PartCoverSettingsTestFixture.cs
  37. 19
      src/AddIns/Misc/CodeCoverage/Test/RemoveCodeCoverageMarkersTestFixture.cs
  38. 69
      src/Setup/Files.wxs
  39. 11
      src/Setup/Setup.wxs
  40. 6
      src/Tools/Tools.build

6
src/AddIns/Misc/CodeCoverage/CodeCoverage.sln

@ -1,7 +1,7 @@ @@ -1,7 +1,7 @@

Microsoft Visual Studio Solution File, Format Version 9.00
# Visual Studio 2005
# SharpDevelop 2.1.0.2312
Microsoft Visual Studio Solution File, Format Version 10.00
# Visual Studio 2008
# SharpDevelop 3.0.0.2743
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "CodeCoverage", "Project\CodeCoverage.csproj", "{08CE9972-283B-44F4-82FA-966F7DFA6B7A}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "CodeCoverage.Tests", "Test\CodeCoverage.Tests.csproj", "{A5C0E8F8-9D04-46ED-91D6-1DEF1575313B}"

6
src/AddIns/Misc/CodeCoverage/Project/CodeCoverage.addin

@ -1,7 +1,7 @@ @@ -1,7 +1,7 @@
<AddIn name = "CodeCoverageAddIn"
author = "Matt Ward"
url = "http://ncover.org"
description = "Code Coverage AddIn for SharpDevelop using NCover">
copyright = "prj:///doc/copyright.txt"
description = "Code Coverage AddIn for SharpDevelop using PartCover">
<Manifest>
<Identity name = "ICSharpCode.CodeCoverage"/>
@ -49,7 +49,7 @@ @@ -49,7 +49,7 @@
<Path name = "/SharpDevelop/Dialogs/OptionsDialog/ToolsOptions">
<DialogPanel id = "CodeCoverageOptionsPanel"
label = "${res:ICSharpCode.UnitTesting.CodeCoverage}"
insertafter = "NAnt"
insertafter = "CodeAnalysisOptionPanel"
class = "ICSharpCode.CodeCoverage.CodeCoverageOptionsPanel"/>
</Path>

6
src/AddIns/Misc/CodeCoverage/Project/CodeCoverage.csproj

@ -53,6 +53,9 @@ @@ -53,6 +53,9 @@
<Compile Include="Src\CodeCoverageMethodTreeNode.cs" />
<Compile Include="Src\CodeCoverageClassTreeNode.cs" />
<Compile Include="Src\CodeCoverageNamespaceTreeNode.cs" />
<Compile Include="Src\PartCoverExitEventArgs.cs" />
<Compile Include="Src\PartCoverRunner.cs" />
<Compile Include="Src\PartCoverSettings.cs" />
<Compile Include="Src\SequencePointListViewSorter.cs" />
<Compile Include="Src\ToggleCodeCoverageCommand.cs" />
<Compile Include="Src\CodeCoverageHighlighter.cs" />
@ -62,11 +65,8 @@ @@ -62,11 +65,8 @@
<EmbeddedResource Include="Resources\CodeCoverageOptionsPanel.xfrm" />
<Compile Include="Src\CodeCoverageDisplayItem.cs" />
<Compile Include="Src\ColorPickerComboBox.cs" />
<Compile Include="Src\NCoverRunner.cs" />
<Compile Include="Src\NCoverExitEventArgs.cs" />
<Compile Include="Src\CodeCoverageProjectOptionsPanel.cs" />
<EmbeddedResource Include="Resources\CodeCoverageProjectOptionsPanel.xfrm" />
<Compile Include="Src\NCoverSettings.cs" />
<Compile Include="Src\CodeCoverageService.cs" />
<Compile Include="Src\RunTestWithCodeCoverageCommand.cs" />
<EmbeddedResource Include="Resources\CodeCoverageRunnerNotFoundForm.xfrm" />

128
src/AddIns/Misc/CodeCoverage/Project/Resources/CodeCoverageOptionsPanel.xfrm

@ -5,136 +5,136 @@ @@ -5,136 +5,136 @@
<Controls>
<System.Windows.Forms.GroupBox>
<Name value="codeCoverageColoursGroupBox" />
<Location value="{X=10,Y=85}" />
<Location value="10, 13" />
<UseCompatibleTextRendering value="True" />
<Text value="${res:ICSharpCode.CodeCoverage.OptionsPanel.CodeCoverageColoursGroupBoxText}" />
<Size value="333, 159" />
<Anchor value="Top, Left, Right" />
<Size value="{Width=333, Height=159}" />
<TabIndex value="1" />
<Controls>
<ICSharpCode.CodeCoverage.ColorPickerComboBox>
<Name value="backgroundColorPickerComboBox" />
<Size value="{Width=116, Height=22}" />
<TabIndex value="6" />
<SelectedColor value="Color [Black]" />
<DrawMode value="OwnerDrawFixed" />
<Location value="177, 91" />
<Anchor value="Top, Left, Right" />
<Size value="116, 21" />
<FormattingEnabled value="True" />
<DropDownStyle value="DropDownList" />
<Location value="{X=177,Y=91}" />
<Anchor value="Top, Left, Right" />
<SelectedColor value="Color [Black]" />
<Items>
<System.Drawing.Color value="Color [Black]" />
<System.Drawing.Color value="Color [White]" />
<System.Drawing.Color value="Color [Maroon]" />
<System.Drawing.Color value="Color [Green]" />
<System.Drawing.Color value="Color [Olive]" />
<System.Drawing.Color value="Color [Navy]" />
<System.Drawing.Color value="Color [Purple]" />
<System.Drawing.Color value="Color [Teal]" />
<System.Drawing.Color value="Color [Silver]" />
<System.Drawing.Color value="Color [Gray]" />
<System.Drawing.Color value="Color [Red]" />
<System.Drawing.Color value="Color [Lime]" />
<System.Drawing.Color value="Color [Yellow]" />
<System.Drawing.Color value="Color [Blue]" />
<System.Drawing.Color value="Color [Magenta]" />
<System.Drawing.Color value="Color [Cyan]" />
</Items>
</ICSharpCode.CodeCoverage.ColorPickerComboBox>
<ICSharpCode.CodeCoverage.ColorPickerComboBox>
<Name value="foregroundColorPickerComboBox" />
<Size value="{Width=116, Height=22}" />
<TabIndex value="3" />
<SelectedColor value="Color [Black]" />
<DrawMode value="OwnerDrawFixed" />
<Location value="179, 44" />
<Anchor value="Top, Left, Right" />
<Size value="116, 21" />
<FormattingEnabled value="True" />
<DropDownStyle value="DropDownList" />
<Location value="{X=179,Y=44}" />
<Anchor value="Top, Left, Right" />
<SelectedColor value="Color [Black]" />
<Items>
<System.Drawing.Color value="Color [Black]" />
<System.Drawing.Color value="Color [White]" />
<System.Drawing.Color value="Color [Maroon]" />
<System.Drawing.Color value="Color [Green]" />
<System.Drawing.Color value="Color [Olive]" />
<System.Drawing.Color value="Color [Navy]" />
<System.Drawing.Color value="Color [Purple]" />
<System.Drawing.Color value="Color [Teal]" />
<System.Drawing.Color value="Color [Silver]" />
<System.Drawing.Color value="Color [Gray]" />
<System.Drawing.Color value="Color [Red]" />
<System.Drawing.Color value="Color [Lime]" />
<System.Drawing.Color value="Color [Yellow]" />
<System.Drawing.Color value="Color [Blue]" />
<System.Drawing.Color value="Color [Magenta]" />
<System.Drawing.Color value="Color [Cyan]" />
</Items>
</ICSharpCode.CodeCoverage.ColorPickerComboBox>
<System.Windows.Forms.Label>
<Name value="sampleTextLabel" />
<Location value="{X=6,Y=117}" />
<Location value="6, 117" />
<UseCompatibleTextRendering value="True" />
<Text value="${res:ICSharpCode.CodeCoverage.OptionsPanel.SampleText}" />
<Anchor value="Top, Bottom, Left, Right" />
<Size value="321, 39" />
<TextAlign value="MiddleCenter" />
<Size value="{Width=321, Height=39}" />
<Anchor value="Top, Bottom, Left, Right" />
<TabIndex value="8" />
</System.Windows.Forms.Label>
<System.Windows.Forms.ListBox>
<Name value="displayItemsListBox" />
<Size value="{Width=164, Height=69}" />
<TabIndex value="1" />
<Location value="6, 44" />
<Size value="164, 69" />
<FormattingEnabled value="True" />
<Location value="{X=6,Y=44}" />
</System.Windows.Forms.ListBox>
<System.Windows.Forms.Label>
<Name value="displayItemsLabel" />
<Location value="{X=6,Y=29}" />
<Location value="6, 29" />
<UseCompatibleTextRendering value="True" />
<Text value="${res:ICSharpCode.CodeCoverage.OptionsPanel.DisplayItemsLabel}" />
<Size value="{Width=107, Height=21}" />
<Size value="107, 21" />
<TabIndex value="0" />
</System.Windows.Forms.Label>
<System.Windows.Forms.Button>
<Name value="backgroundCustomColourButton" />
<Location value="{X=299,Y=91}" />
<Location value="299, 91" />
<UseCompatibleTextRendering value="True" />
<Text value="..." />
<Anchor value="Top, Right" />
<UseVisualStyleBackColor value="True" />
<Size value="{Width=28, Height=22}" />
<Size value="28, 22" />
<Anchor value="Top, Right" />
<TabIndex value="7" />
</System.Windows.Forms.Button>
<System.Windows.Forms.Label>
<Name value="itemBackgroundColourLabel" />
<Location value="{X=176,Y=73}" />
<Location value="176, 73" />
<UseCompatibleTextRendering value="True" />
<Text value="${res:ICSharpCode.CodeCoverage.OptionsPanel.ItemBackgroundLabel}" />
<Size value="151, 21" />
<Anchor value="Top, Left, Right" />
<Size value="{Width=151, Height=21}" />
<TabIndex value="5" />
</System.Windows.Forms.Label>
<System.Windows.Forms.Button>
<Name value="foregroundCustomColourButton" />
<Location value="{X=299,Y=44}" />
<Location value="299, 44" />
<UseCompatibleTextRendering value="True" />
<Text value="..." />
<Anchor value="Top, Right" />
<UseVisualStyleBackColor value="True" />
<Size value="{Width=28, Height=22}" />
<Size value="28, 22" />
<Anchor value="Top, Right" />
<TabIndex value="4" />
</System.Windows.Forms.Button>
<System.Windows.Forms.Label>
<Name value="itemForegroundColourLabel" />
<Location value="{X=176,Y=29}" />
<Location value="176, 29" />
<UseCompatibleTextRendering value="True" />
<Text value="${res:ICSharpCode.CodeCoverage.OptionsPanel.ItemForegroundLabel}" />
<Size value="151, 22" />
<Anchor value="Top, Left, Right" />
<Size value="{Width=151, Height=22}" />
<TabIndex value="2" />
</System.Windows.Forms.Label>
</Controls>
</System.Windows.Forms.GroupBox>
<System.Windows.Forms.GroupBox>
<Name value="configurationGroupBox" />
<Location value="{X=10,Y=7}" />
<UseCompatibleTextRendering value="True" />
<Text value="${res:ICSharpCode.CodeCoverage.OptionsPanel.NCoverConfigurationGroupBoxText}" />
<Anchor value="Top, Left, Right" />
<Size value="{Width=334, Height=72}" />
<TabIndex value="0" />
<Controls>
<System.Windows.Forms.Button>
<Name value="browseButton" />
<Location value="{X=299,Y=24}" />
<UseCompatibleTextRendering value="True" />
<Text value="..." />
<Anchor value="Top, Right" />
<UseVisualStyleBackColor value="True" />
<Size value="{Width=30, Height=21}" />
<TabIndex value="2" />
</System.Windows.Forms.Button>
<System.Windows.Forms.TextBox>
<Name value="commandTextBox" />
<TabIndex value="1" />
<Size value="{Width=187, Height=21}" />
<Location value="{X=106,Y=24}" />
<Anchor value="Top, Left, Right" />
</System.Windows.Forms.TextBox>
<System.Windows.Forms.Label>
<Name value="commandLabel" />
<Location value="{X=6,Y=24}" />
<UseCompatibleTextRendering value="True" />
<Text value="${res:ICSharpCode.CodeCoverage.OptionsPanel.CommandLineLabel}" />
<Size value="{Width=103, Height=26}" />
<TabIndex value="0" />
</System.Windows.Forms.Label>
</Controls>
</System.Windows.Forms.GroupBox>
</Controls>
</System.Windows.Forms.UserControl>
</Components>
</Components>

40
src/AddIns/Misc/CodeCoverage/Project/Resources/CodeCoverageProjectOptionsPanel.xfrm

@ -1,39 +1,47 @@ @@ -1,39 +1,47 @@
<Components version="1.0">
<System.Windows.Forms.UserControl>
<Name value="CodeCoverageProjectOptionsPanel" />
<ClientSize value="{Width=342, Height=266}" />
<ClientSize value="{Width=342, Height=396}" />
<Controls>
<System.Windows.Forms.TextBox>
<Name value="excludedAttributesTextBox" />
<Name value="excludeListTextBox" />
<TabIndex value="3" />
<Size value="{Width=317, Height=21}" />
<Location value="{X=12,Y=92}" />
<Location value="12, 229" />
<WordWrap value="False" />
<Anchor value="Top, Left, Right" />
<ScrollBars value="Vertical" />
<AcceptsReturn value="True" />
<Size value="317, 154" />
<Multiline value="True" />
</System.Windows.Forms.TextBox>
<System.Windows.Forms.Label>
<Name value="excludedAttributesListLabel" />
<Location value="{X=12,Y=69}" />
<Text value="${res:ICSharpCode.CodeCoverage.ProjectOptionsPanel.ExcludeAttributes}:" />
<Name value="excludeListLabel" />
<Location value="12, 206" />
<Text value="${res:ICSharpCode.CodeCoverage.ProjectOptionsPanel.ExcludeListLabel}:" />
<Size value="317, 20" />
<Anchor value="Top, Left, Right" />
<Size value="{Width=317, Height=20}" />
<TabIndex value="2" />
</System.Windows.Forms.Label>
<System.Windows.Forms.TextBox>
<Name value="assemblyListTextBox" />
<Name value="includeListTextBox" />
<TabIndex value="1" />
<Size value="{Width=317, Height=21}" />
<Location value="{X=12,Y=36}" />
<Location value="12, 36" />
<WordWrap value="False" />
<Anchor value="Top, Left, Right" />
<ScrollBars value="Vertical" />
<AcceptsReturn value="True" />
<Size value="317, 154" />
<Multiline value="True" />
</System.Windows.Forms.TextBox>
<System.Windows.Forms.Label>
<Name value="assemblyListLabel" />
<Location value="{X=12,Y=12}" />
<Name value="includeListLabel" />
<Location value="12, 12" />
<UseCompatibleTextRendering value="True" />
<Text value="${res:ICSharpCode.CodeCoverage.ProjectOptionsPanel.AssemblyListLabel}" />
<Text value="${res:ICSharpCode.CodeCoverage.ProjectOptionsPanel.IncludeListLabel}" />
<Size value="317, 21" />
<Anchor value="Top, Left, Right" />
<Size value="{Width=317, Height=21}" />
<TabIndex value="0" />
</System.Windows.Forms.Label>
</Controls>
</System.Windows.Forms.UserControl>
</Components>
</Components>

91
src/AddIns/Misc/CodeCoverage/Project/Src/CodeCoverageOptions.cs

@ -20,7 +20,6 @@ namespace ICSharpCode.CodeCoverage @@ -20,7 +20,6 @@ namespace ICSharpCode.CodeCoverage
public static readonly string VisitedForeColorProperty = "VisitedForeColor";
public static readonly string NotVisitedColorProperty = "NotVisitedColor";
public static readonly string NotVisitedForeColorProperty = "NotVisitedForeColor";
public static readonly string NCoverFileNameProperty = "NCoverFileName";
// This name is also referenced by CodeCoverage.addin
public static readonly string CodeCoverageHighlightedProperty = "CodeCoverageHighlighted";
@ -36,116 +35,66 @@ namespace ICSharpCode.CodeCoverage @@ -36,116 +35,66 @@ namespace ICSharpCode.CodeCoverage
}
public static Properties Properties {
get {
return properties;
}
get { return properties; }
}
/// <summary>
/// The full path to the NCover console executable.
/// </summary>
public static string NCoverFileName {
get {
return Properties.Get<String>(NCoverFileNameProperty, String.Empty);
}
set {
Properties.Set<String>(NCoverFileNameProperty, value);
}
}
/// <summary>
/// Enables/disables code coverage highlighting.
/// </summary>
public static bool CodeCoverageHighlighted {
get {
return Properties.Get<bool>(CodeCoverageHighlightedProperty, false);
}
set {
Properties.Set<bool>(CodeCoverageHighlightedProperty, value);
}
get { return Properties.Get<bool>(CodeCoverageHighlightedProperty, false); }
set { Properties.Set<bool>(CodeCoverageHighlightedProperty, value); }
}
/// <summary>
/// Shows/hides the source code panel in the code coverage pad.
/// </summary>
public static bool ShowSourceCodePanel {
get {
return Properties.Get<bool>(ShowSourceCodePanelProperty, false);
}
set {
Properties.Set<bool>(ShowSourceCodePanelProperty, value);
}
get { return Properties.Get<bool>(ShowSourceCodePanelProperty, false); }
set { Properties.Set<bool>(ShowSourceCodePanelProperty, value); }
}
/// <summary>
/// Shows/hides the visit count panel in the code coverage pad.
/// </summary>
public static bool ShowVisitCountPanel {
get {
return Properties.Get<bool>(ShowVisitCountPanelProperty, true);
}
set {
Properties.Set<bool>(ShowVisitCountPanelProperty, value);
}
get { return Properties.Get<bool>(ShowVisitCountPanelProperty, true); }
set { Properties.Set<bool>(ShowVisitCountPanelProperty, value); }
}
/// <summary>
/// Gets the colour that will be used when highlighting visited code.
/// </summary>
public static Color VisitedColor
{
get {
return Properties.Get<Color>(VisitedColorProperty, Color.Lime);
}
set {
Properties.Set<Color>(VisitedColorProperty, value);
}
public static Color VisitedColor {
get { return Properties.Get<Color>(VisitedColorProperty, Color.Lime); }
set { Properties.Set<Color>(VisitedColorProperty, value); }
}
/// <summary>
/// Gets the foreground colour that will be used when highlighting
/// visited code.
/// </summary>
public static Color VisitedForeColor
{
get {
return Properties.Get<Color>(VisitedForeColorProperty, Color.Black);
}
set {
Properties.Set<Color>(VisitedForeColorProperty, value);
}
public static Color VisitedForeColor {
get { return Properties.Get<Color>(VisitedForeColorProperty, Color.Black); }
set { Properties.Set<Color>(VisitedForeColorProperty, value); }
}
/// <summary>
/// Gets the colour that will be used when highlighting code that has not
/// been visited.
/// </summary>
public static Color NotVisitedColor
{
get {
return Properties.Get<Color>(NotVisitedColorProperty, Color.Red);
}
set {
Properties.Set<Color>(NotVisitedColorProperty, value);
}
public static Color NotVisitedColor {
get { return Properties.Get<Color>(NotVisitedColorProperty, Color.Red); }
set { Properties.Set<Color>(NotVisitedColorProperty, value); }
}
/// <summary>
/// Gets the foreground colour that will be used when highlighting
/// code that has not been visited.
/// </summary>
public static Color NotVisitedForeColor
{
get {
return Properties.Get<Color>(NotVisitedForeColorProperty, Color.White);
}
set {
Properties.Set<Color>(NotVisitedForeColorProperty, value);
}
public static Color NotVisitedForeColor {
get { return Properties.Get<Color>(NotVisitedForeColorProperty, Color.White); }
set { Properties.Set<Color>(NotVisitedForeColorProperty, value); }
}
}
}

26
src/AddIns/Misc/CodeCoverage/Project/Src/CodeCoverageOptionsPanel.cs

@ -22,22 +22,18 @@ namespace ICSharpCode.CodeCoverage @@ -22,22 +22,18 @@ namespace ICSharpCode.CodeCoverage
static readonly string backgroundColourComboBoxName = "backgroundColorPickerComboBox";
static readonly string displayItemsListBoxName = "displayItemsListBox";
static readonly string sampleTextLabelName = "sampleTextLabel";
static readonly string browseButtonName = "browseButton";
static readonly string commandTextBoxName = "commandTextBox";
ColorPickerComboBox foregroundColorPickerComboBox;
ColorPickerComboBox backgroundColorPickerComboBox;
ListBox displayItemsListBox;
Label sampleTextLabel;
TextBox commandTextBox;
public override void LoadPanelContents()
{
SetupFromXmlStream(this.GetType().Assembly.GetManifestResourceStream("ICSharpCode.CodeCoverage.Resources.CodeCoverageOptionsPanel.xfrm"));
ControlDictionary[foregroundCustomColourButtonName].Click += new EventHandler(ForegroundCustomColourButtonClick);
ControlDictionary[backgroundCustomColourButtonName].Click += new EventHandler(BackgroundCustomColourButtonClick);
ControlDictionary[browseButtonName].Click += new EventHandler(BrowseButtonClick);
ControlDictionary[foregroundCustomColourButtonName].Click += ForegroundCustomColourButtonClick;
ControlDictionary[backgroundCustomColourButtonName].Click += BackgroundCustomColourButtonClick;
foregroundColorPickerComboBox = (ColorPickerComboBox)ControlDictionary[foregroundColourComboBoxName];
foregroundColorPickerComboBox.SelectedIndexChanged += ForegroundColorPickerComboBoxSelectedIndexChanged;
@ -46,10 +42,7 @@ namespace ICSharpCode.CodeCoverage @@ -46,10 +42,7 @@ namespace ICSharpCode.CodeCoverage
backgroundColorPickerComboBox.SelectedIndexChanged += BackgroundColorPickerComboBoxSelectedIndexChanged;
sampleTextLabel = (Label)ControlDictionary[sampleTextLabelName];
commandTextBox = (TextBox)ControlDictionary[commandTextBoxName];
commandTextBox.Text = CodeCoverageOptions.NCoverFileName;
displayItemsListBox = (ListBox)ControlDictionary[displayItemsListBoxName];
displayItemsListBox.Items.Add(new CodeCoverageDisplayItem(StringParser.Parse("${res:ICSharpCode.CodeCoverage.CodeCovered}"), CodeCoverageOptions.VisitedColorProperty, CodeCoverageOptions.VisitedColor, CodeCoverageOptions.VisitedForeColorProperty, CodeCoverageOptions.VisitedForeColor));
displayItemsListBox.Items.Add(new CodeCoverageDisplayItem(StringParser.Parse("${res:ICSharpCode.CodeCoverage.CodeNotCovered}"), CodeCoverageOptions.NotVisitedColorProperty, CodeCoverageOptions.NotVisitedColor, CodeCoverageOptions.NotVisitedForeColorProperty, CodeCoverageOptions.NotVisitedForeColor));
@ -72,8 +65,6 @@ namespace ICSharpCode.CodeCoverage @@ -72,8 +65,6 @@ namespace ICSharpCode.CodeCoverage
if (codeCoverageColorsChanged) {
CodeCoverageService.RefreshCodeCoverageHighlights();
}
CodeCoverageOptions.NCoverFileName = commandTextBox.Text;
return true;
}
@ -121,16 +112,5 @@ namespace ICSharpCode.CodeCoverage @@ -121,16 +112,5 @@ namespace ICSharpCode.CodeCoverage
sampleTextLabel.BackColor = backgroundColorPickerComboBox.SelectedColor;
item.BackColor = backgroundColorPickerComboBox.SelectedColor;
}
void BrowseButtonClick(object sender, EventArgs e)
{
using (OpenFileDialog openFileDialog = new OpenFileDialog()) {
openFileDialog.CheckFileExists = true;
openFileDialog.Filter = StringParser.Parse("${res:SharpDevelop.FileFilter.ExecutableFiles}|*.exe|${res:SharpDevelop.FileFilter.AllFiles}|*.*");
if (openFileDialog.ShowDialog() == DialogResult.OK) {
ControlDictionary[commandTextBoxName].Text = openFileDialog.FileName;
}
}
}
}
}

73
src/AddIns/Misc/CodeCoverage/Project/Src/CodeCoverageProjectOptionsPanel.cs

@ -6,7 +6,10 @@ @@ -6,7 +6,10 @@
// </file>
using System;
using System.Collections.Generic;
using System.Collections.Specialized;
using System.IO;
using System.Text;
using System.Windows.Forms;
using ICSharpCode.SharpDevelop.Gui.OptionPanels;
@ -15,11 +18,11 @@ namespace ICSharpCode.CodeCoverage @@ -15,11 +18,11 @@ namespace ICSharpCode.CodeCoverage
{
public class CodeCoverageProjectOptionsPanel : AbstractProjectOptionPanel
{
static readonly string AssemblyListTextBoxName = "assemblyListTextBox";
static readonly string ExcludedAttributesListTextBoxName = "excludedAttributesTextBox";
static readonly string IncludeListTextBoxName = "includeListTextBox";
static readonly string ExcludeListTextBoxName = "excludeListTextBox";
TextBox assemblyListTextBox;
TextBox excludedAttributesListTextBox;
TextBox includeListTextBox;
TextBox excludeListTextBox;
public CodeCoverageProjectOptionsPanel()
{
@ -30,18 +33,18 @@ namespace ICSharpCode.CodeCoverage @@ -30,18 +33,18 @@ namespace ICSharpCode.CodeCoverage
SetupFromXmlStream(this.GetType().Assembly.GetManifestResourceStream("ICSharpCode.CodeCoverage.Resources.CodeCoverageProjectOptionsPanel.xfrm"));
InitializeHelper();
assemblyListTextBox = (TextBox)ControlDictionary[AssemblyListTextBoxName];
excludedAttributesListTextBox = (TextBox)ControlDictionary[ExcludedAttributesListTextBoxName];
includeListTextBox = (TextBox)ControlDictionary[IncludeListTextBoxName];
excludeListTextBox = (TextBox)ControlDictionary[ExcludeListTextBoxName];
ReadNCoverSettings();
ReadPartCoverSettings();
assemblyListTextBox.TextChanged += TextBoxTextChanged;
excludedAttributesListTextBox.TextChanged += TextBoxTextChanged;
includeListTextBox.TextChanged += TextBoxTextChanged;
excludeListTextBox.TextChanged += TextBoxTextChanged;
}
public override bool StorePanelContents()
{
SaveNCoverSettings();
SavePartCoverSettings();
IsDirty = false;
return true;
}
@ -51,22 +54,52 @@ namespace ICSharpCode.CodeCoverage @@ -51,22 +54,52 @@ namespace ICSharpCode.CodeCoverage
IsDirty = true;
}
void SaveNCoverSettings()
void SavePartCoverSettings()
{
NCoverSettings settings = new NCoverSettings();
settings.AssemblyList = assemblyListTextBox.Text;
settings.ExcludedAttributesList = excludedAttributesListTextBox.Text;
settings.Save(NCoverSettings.GetFileName(project));
PartCoverSettings settings = new PartCoverSettings();
settings.Include.AddRange(RemoveEmptyStrings(includeListTextBox.Lines));
settings.Exclude.AddRange(RemoveEmptyStrings(excludeListTextBox.Lines));
settings.Save(PartCoverSettings.GetFileName(project));
}
void ReadNCoverSettings()
void ReadPartCoverSettings()
{
string settingsFileName = NCoverSettings.GetFileName(project);
string settingsFileName = PartCoverSettings.GetFileName(project);
if (File.Exists(settingsFileName)) {
NCoverSettings settings = new NCoverSettings(settingsFileName);
assemblyListTextBox.Text = settings.AssemblyList;
excludedAttributesListTextBox.Text = settings.ExcludedAttributesList;
PartCoverSettings settings = new PartCoverSettings(settingsFileName);
includeListTextBox.Text = ConvertToMultLineString(settings.Include);
excludeListTextBox.Text = ConvertToMultLineString(settings.Exclude);
}
}
/// <summary>
/// Each item in the string collection is added as a separate line
/// followed by a carriage return and line feed except the last
/// item.
/// </summary>
static string ConvertToMultLineString(StringCollection items)
{
StringBuilder text = new StringBuilder();
foreach (String item in items) {
text.Append(item);
text.Append("\r\n");
}
return text.ToString().Trim();
}
/// <summary>
/// Creates a new string array but with any lines that are empty
/// in the original lines array removed from it.
/// </summary>
static string[] RemoveEmptyStrings(string[] lines)
{
List<string> convertedLines = new List<string>();
foreach (string line in lines) {
if (line.Trim().Length > 0) {
convertedLines.Add(line);
}
}
return convertedLines.ToArray();
}
}
}

178
src/AddIns/Misc/CodeCoverage/Project/Src/CodeCoverageResults.cs

@ -12,11 +12,16 @@ using System.Xml; @@ -12,11 +12,16 @@ using System.Xml;
namespace ICSharpCode.CodeCoverage
{
/// <summary>
/// Reads the code coverage results from the output xml file.
/// </summary>
public class CodeCoverageResults
{
List<CodeCoverageModule> modules = new List<CodeCoverageModule>();
Dictionary<string, string> fileNames = new Dictionary<string, string>();
public CodeCoverageResults(string fileName) : this(new StreamReader(fileName, true))
public CodeCoverageResults(string fileName)
: this(new StreamReader(fileName, true))
{
}
@ -25,7 +30,8 @@ namespace ICSharpCode.CodeCoverage @@ -25,7 +30,8 @@ namespace ICSharpCode.CodeCoverage
ReadResults(reader);
}
public CodeCoverageResults(TextReader reader) : this(new XmlTextReader(reader))
public CodeCoverageResults(TextReader reader)
: this(new XmlTextReader(reader))
{
}
@ -39,59 +45,89 @@ namespace ICSharpCode.CodeCoverage @@ -39,59 +45,89 @@ namespace ICSharpCode.CodeCoverage
}
public List<CodeCoverageModule> Modules {
get {
return modules;
}
get { return modules; }
}
void ReadResults(XmlReader reader)
{
{
CodeCoverageModule currentModule = null;
CodeCoverageMethod currentMethod = null;
string currentClassName = String.Empty;
while (reader.Read()) {
switch (reader.NodeType) {
case XmlNodeType.Element:
if (reader.Name == "module") {
if (reader.Name == "type") {
currentModule = AddModule(reader);
currentClassName = reader.GetAttribute("name");
} else if (reader.Name == "method" && currentModule != null) {
currentMethod = AddMethod(currentModule, reader);
} else if (reader.Name == "seqpnt" && currentMethod != null) {
currentMethod = AddMethod(currentModule, currentClassName, reader);
} else if (reader.Name == "pt" && currentMethod != null) {
AddSequencePoint(currentMethod, reader);
} else if (reader.Name == "file") {
AddFileName(reader);
}
break;
case XmlNodeType.EndElement:
if (currentMethod != null && reader.Name == "method" && currentMethod.SequencePoints.Count == 0) {
// Remove method that has no sequence points.
currentModule.Methods.Remove(currentMethod);
}
break;
}
}
reader.Close();
RemoveExcludedModules();
RemoveExcludedMethods();
RemoveModulesWithNoMethods();
// RemoveExcludedModules();
// RemoveExcludedMethods();
}
/// <summary>
/// Add module if it does not already exist.
/// </summary>
CodeCoverageModule AddModule(XmlReader reader)
{
CodeCoverageModule module = new CodeCoverageModule(reader.GetAttribute("assembly"));
string assembly = reader.GetAttribute("asm");
foreach (CodeCoverageModule existingModule in modules) {
if (existingModule.Name == assembly) {
return existingModule;
}
}
CodeCoverageModule module = new CodeCoverageModule(assembly);
modules.Add(module);
return module;
}
CodeCoverageMethod AddMethod(CodeCoverageModule module, XmlReader reader)
CodeCoverageMethod AddMethod(CodeCoverageModule module, string className, XmlReader reader)
{
CodeCoverageMethod method = new CodeCoverageMethod(reader.GetAttribute("name"), reader.GetAttribute("class"));
CodeCoverageMethod method = new CodeCoverageMethod(reader.GetAttribute("name"), className);
module.Methods.Add(method);
return method;
}
/// <summary>
/// Sequence points that do not have a file id are not
/// added to the code coverage method. Typically these are
/// for types that are not part of the project but types from
/// the .NET framework.
/// </summary>
void AddSequencePoint(CodeCoverageMethod method, XmlReader reader)
{
CodeCoverageSequencePoint sequencePoint = new CodeCoverageSequencePoint(reader.GetAttribute("document"),
GetInteger(reader.GetAttribute("visitcount")),
GetInteger(reader.GetAttribute("line")),
GetInteger(reader.GetAttribute("column")),
GetInteger(reader.GetAttribute("endline")),
GetInteger(reader.GetAttribute("endcolumn")),
IsExcluded(reader));
method.SequencePoints.Add(sequencePoint);
string fileId = reader.GetAttribute("fid");
if (fileId != null) {
string fileName = GetFileName(fileId);
CodeCoverageSequencePoint sequencePoint = new CodeCoverageSequencePoint(fileName,
GetInteger(reader.GetAttribute("visit")),
GetInteger(reader.GetAttribute("sl")),
GetInteger(reader.GetAttribute("sc")),
GetInteger(reader.GetAttribute("el")),
GetInteger(reader.GetAttribute("ec")),
false);
method.SequencePoints.Add(sequencePoint);
}
}
int GetInteger(string s)
@ -103,47 +139,83 @@ namespace ICSharpCode.CodeCoverage @@ -103,47 +139,83 @@ namespace ICSharpCode.CodeCoverage
return 0;
}
void RemoveExcludedModules()
// void RemoveExcludedModules()
// {
// List<CodeCoverageModule> excludedModules = new List<CodeCoverageModule>();
//
// foreach (CodeCoverageModule module in modules) {
// if (module.IsExcluded) {
// excludedModules.Add(module);
// }
// }
//
// foreach (CodeCoverageModule excludedModule in excludedModules) {
// modules.Remove(excludedModule);
// }
// }
//
// void RemoveExcludedMethods()
// {
// List<CodeCoverageMethod> excludedMethods = new List<CodeCoverageMethod>();
//
// foreach (CodeCoverageModule module in modules) {
// foreach (CodeCoverageMethod method in module.Methods) {
// if (method.IsExcluded) {
// excludedMethods.Add(method);
// }
// }
// foreach (CodeCoverageMethod excludedMethod in excludedMethods) {
// module.Methods.Remove(excludedMethod);
// }
// }
// }
//
// bool IsExcluded(XmlReader reader)
// {
// string excludedValue = reader.GetAttribute("excluded");
// if (excludedValue != null) {
// bool excluded;
// if (Boolean.TryParse(excludedValue, out excluded)) {
// return excluded;
// }
// }
// return false;
// }
/// <summary>
/// Returns a filename based on the file id. The filenames are stored in the
/// PartCover results xml at the start of the file each with its own
/// id.
/// </summary>
string GetFileName(string id)
{
List<CodeCoverageModule> excludedModules = new List<CodeCoverageModule>();
foreach (CodeCoverageModule module in modules) {
if (module.IsExcluded) {
excludedModules.Add(module);
}
}
foreach (CodeCoverageModule excludedModule in excludedModules) {
modules.Remove(excludedModule);
if (fileNames.ContainsKey(id)) {
return fileNames[id];
}
return String.Empty;
}
void RemoveExcludedMethods()
/// <summary>
/// Saves the filename and its associated id for reference.
/// </summary>
void AddFileName(XmlReader reader)
{
List<CodeCoverageMethod> excludedMethods = new List<CodeCoverageMethod>();
foreach (CodeCoverageModule module in modules) {
foreach (CodeCoverageMethod method in module.Methods) {
if (method.IsExcluded) {
excludedMethods.Add(method);
}
}
foreach (CodeCoverageMethod excludedMethod in excludedMethods) {
module.Methods.Remove(excludedMethod);
}
}
string id = reader.GetAttribute("id");
string fileName = reader.GetAttribute("url");
fileNames.Add(id, fileName);
}
bool IsExcluded(XmlReader reader)
/// <summary>
/// Removes any modules that do not contain any methods.
/// </summary>
void RemoveModulesWithNoMethods()
{
string excludedValue = reader.GetAttribute("excluded");
if (excludedValue != null) {
bool excluded;
if (Boolean.TryParse(excludedValue, out excluded)) {
return excluded;
for (int i = modules.Count - 1; i >= 0; --i) {
CodeCoverageModule module = modules[i];
if (module.Methods.Count == 0) {
modules.Remove(module);
}
}
return false;
}
}
}

277
src/AddIns/Misc/CodeCoverage/Project/Src/NCoverRunner.cs

@ -1,277 +0,0 @@ @@ -1,277 +0,0 @@
// <file>
// <copyright see="prj:///doc/copyright.txt"/>
// <license see="prj:///doc/license.txt"/>
// <owner name="Matthew Ward" email="mrward@users.sourceforge.net"/>
// <version>$Revision$</version>
// </file>
using System;
using System.Text;
using ICSharpCode.SharpDevelop.Util;
namespace ICSharpCode.CodeCoverage
{
/// <summary>
/// Runs NCover.
/// </summary>
public class NCoverRunner
{
string ncoverFileName = String.Empty;
string workingDirectory = String.Empty;
string coverageResultsFileName = String.Empty;
string profiledApplicationCommand = String.Empty;
string profiledApplicationCommandLineArguments = String.Empty;
string assemblyList = String.Empty;
string logFileName = String.Empty;
string excludedAttributesList = String.Empty;
ProcessRunner runner;
/// <summary>
/// Triggered when NCover exits.
/// </summary>
public event NCoverExitEventHandler NCoverExited;
/// <summary>
/// The NCover runner was started.
/// </summary>
public event EventHandler NCoverStarted;
/// <summary>
/// The NCover runner was stopped. Being stopped is not the
/// same as NCover exiting.
/// </summary>
public event EventHandler NCoverStopped;
/// <summary>
/// Triggered when an output line is received from NCover.
/// </summary>
public event LineReceivedEventHandler OutputLineReceived;
public NCoverRunner()
{
}
/// <summary>
/// Gets or sets the NCover executable path.
/// </summary>
public string NCoverFileName {
get {
return ncoverFileName;
}
set {
ncoverFileName = value;
}
}
public string WorkingDirectory {
get {
return workingDirectory;
}
set {
workingDirectory = value;
}
}
/// <summary>
/// The list of assemblies that will be profiled.
/// </summary>
public string AssemblyList {
get {
return assemblyList;
}
set {
// Remove any spaces from the assembly list since
// NCover will ignore any items after the space.
assemblyList = value.Replace(" ", String.Empty);
}
}
/// <summary>
/// The list of attributes to ignore when profiling.
/// </summary>
public string ExcludedAttributesList {
get {
return excludedAttributesList;
}
set {
// Remove any spaces from the assembly list since
// NCover will ignore any items after the space.
excludedAttributesList = value.Replace(" ", String.Empty);
}
}
/// <summary>
/// Gets the full NCover command line that will be used by
/// the runner.
/// </summary>
public string CommandLine {
get {
return String.Concat(ncoverFileName, " ", GetArguments());
}
}
/// <summary>
/// Gets whether the NCover runner is currently running.
/// </summary>
public bool IsRunning {
get {
if (runner != null) {
return runner.IsRunning;
}
return false;
}
}
/// <summary>
/// Coverage output results file.
/// </summary>
public string CoverageResultsFileName {
get {
return coverageResultsFileName;
}
set {
coverageResultsFileName = value;
}
}
/// <summary>
/// Profiler log file.
/// </summary>
public string LogFileName {
get {
return logFileName;
}
set {
logFileName = value;
}
}
/// <summary>
/// Gets or sets the command that will be used to run the
/// profiled application.
/// </summary>
public string ProfiledApplicationCommand {
get {
return profiledApplicationCommand;
}
set {
profiledApplicationCommand = value;
}
}
/// <summary>
/// The arguments that will be used with the profiled application.
/// </summary>
public string ProfiledApplicationCommandLineArguments {
get {
return profiledApplicationCommandLineArguments;
}
set {
profiledApplicationCommandLineArguments = value;
}
}
public void Start()
{
string arguments = GetArguments();
runner = new ProcessRunner();
runner.WorkingDirectory = workingDirectory;
runner.ProcessExited += new EventHandler(ProcessExited);
if (OutputLineReceived != null) {
runner.OutputLineReceived += new LineReceivedEventHandler(OnOutputLineReceived);
}
runner.Start(ncoverFileName, arguments);
OnNCoverStarted();
}
/// <summary>
/// Stops the currently running NCover instance.
/// </summary>
public void Stop()
{
if (runner != null) {
runner.Kill();
OnNCoverStopped();
}
}
protected void OnNCoverExited(string output, string error, int exitCode)
{
if (NCoverExited != null) {
NCoverExited(this, new NCoverExitEventArgs(output, error, exitCode));
}
}
protected void OnNCoverStarted()
{
if (NCoverStarted != null) {
NCoverStarted(this, new EventArgs());
}
}
protected void OnNCoverStopped()
{
if (NCoverStopped != null) {
NCoverStopped(this, new EventArgs());
}
}
/// <summary>
/// Raises the <see cref="OutputLineReceived"/> event.
/// </summary>
/// <param name="sender">The event source.</param>
/// <param name="e">The event arguments.</param>
protected void OnOutputLineReceived(object sender, LineReceivedEventArgs e)
{
if (OutputLineReceived != null) {
OutputLineReceived(this, e);
}
}
/// <summary>
/// Handles the NCover process exit event.
/// </summary>
/// <param name="sender">The event source.</param>
/// <param name="e">The event arguments.</param>
void ProcessExited(object sender, EventArgs e)
{
ProcessRunner runner = (ProcessRunner)sender;
OnNCoverExited(runner.StandardOutput, runner.StandardError, runner.ExitCode);
}
/// <summary>
/// Adds extra command line arguments to those specified
/// by the user in the <see cref="Arguments"/> string.
/// </summary>
string GetArguments()
{
StringBuilder ncoverArguments = new StringBuilder();
if (coverageResultsFileName.Length > 0) {
ncoverArguments.AppendFormat("//x \"{0}\" ", coverageResultsFileName);
}
if (assemblyList.Length > 0) {
ncoverArguments.AppendFormat("//a \"{0}\" ", assemblyList);
}
if (excludedAttributesList.Length > 0) {
ncoverArguments.AppendFormat("//ea \"{0}\" ", excludedAttributesList);
}
if (logFileName.Length > 0) {
ncoverArguments.AppendFormat("//l \"{0}\" ", logFileName);
}
ncoverArguments.AppendFormat("\"{0}\" ", profiledApplicationCommand);
//ncoverArguments.Append(profiledApplicationCommandLineArguments);
// HACK: Work around NCover bug: http://ncover.org/SITE/forums/thread/266.aspx
ncoverArguments.Append(profiledApplicationCommandLineArguments.Replace("\"", "\\\""));
return ncoverArguments.ToString();
}
}
}

116
src/AddIns/Misc/CodeCoverage/Project/Src/NCoverSettings.cs

@ -1,116 +0,0 @@ @@ -1,116 +0,0 @@
// <file>
// <copyright see="prj:///doc/copyright.txt"/>
// <license see="prj:///doc/license.txt"/>
// <owner name="Matthew Ward" email="mrward@users.sourceforge.net"/>
// <version>$Revision$</version>
// </file>
using System;
using System.IO;
using System.Text;
using System.Xml;
using ICSharpCode.SharpDevelop.Project;
namespace ICSharpCode.CodeCoverage
{
/// <summary>
/// Settings for NCover.
/// </summary>
public class NCoverSettings
{
static readonly string RootElementName = "ProfilerSettings";
static readonly string AssembliesElementName = "Assemblies";
static readonly string ExclusionAttributesElementName = "ExclusionAttributes";
string assemblyList = String.Empty;
string excludedAttributesList = String.Empty;
public NCoverSettings()
{
}
public NCoverSettings(string fileName) : this(new StreamReader(fileName, true))
{
}
public NCoverSettings(XmlReader reader)
{
ReadSettings(reader);
}
public NCoverSettings(TextReader reader) : this(new XmlTextReader(reader))
{
}
/// <summary>
/// Gets the NCover settings filename for the specified project.
/// </summary>
public static string GetFileName(IProject project)
{
return Path.ChangeExtension(project.FileName, "NCover.Settings");
}
/// <summary>
/// A semi-colon delimited list of assemblies.
/// </summary>
public string AssemblyList {
get {
return assemblyList;
}
set {
assemblyList = value;
}
}
/// <summary>
/// A semi-colon delimited list of attributes to exclude in the code coverage
/// report.
/// </summary>
public string ExcludedAttributesList {
get {
return excludedAttributesList;
}
set {
excludedAttributesList = value;
}
}
public void Save(TextWriter writer)
{
Save(new XmlTextWriter(writer));
}
public void Save(string fileName)
{
Save(new StreamWriter(fileName, false, Encoding.UTF8));
}
public void Save(XmlTextWriter writer)
{
writer.Formatting = Formatting.Indented;
using (writer) {
writer.WriteStartElement(RootElementName);
writer.WriteElementString(AssembliesElementName, assemblyList);
writer.WriteElementString(ExclusionAttributesElementName, excludedAttributesList);
writer.WriteEndElement();
}
}
void ReadSettings(XmlReader reader)
{
using (reader) {
while (reader.Read()) {
if (reader.NodeType == XmlNodeType.Element) {
if (reader.Name == AssembliesElementName) {
assemblyList = reader.ReadString();
} else if (reader.Name == ExclusionAttributesElementName) {
excludedAttributesList = reader.ReadString();
}
}
}
}
}
}
}

30
src/AddIns/Misc/CodeCoverage/Project/Src/NCoverExitEventArgs.cs → src/AddIns/Misc/CodeCoverage/Project/Src/PartCoverExitEventArgs.cs

@ -5,26 +5,27 @@ @@ -5,26 +5,27 @@
// <version>$Revision$</version>
// </file>
using System;
namespace ICSharpCode.CodeCoverage
{
/// <summary>
/// Represents the method that will handle the
/// <see cref="NCoverRunner.NCoverExit"/> event.
/// <see cref="PartCoverRunner.Exited"/> event.
/// </summary>
public delegate void NCoverExitEventHandler(object sender, NCoverExitEventArgs e);
public delegate void PartCoverExitEventHandler(object sender, PartCoverExitEventArgs e);
/// <summary>
/// The <see cref="NCoverRunner.NCoverExit"/> event arguments.
/// The <see cref="PartCoverRunner.Exited"/> event arguments.
/// </summary>
public class NCoverExitEventArgs : EventArgs
public class PartCoverExitEventArgs : EventArgs
{
string output;
int exitCode;
string error;
public NCoverExitEventArgs(string output, string error, int exitCode)
public PartCoverExitEventArgs(string output, string error, int exitCode)
{
this.output = output;
this.error = error;
@ -32,27 +33,24 @@ namespace ICSharpCode.CodeCoverage @@ -32,27 +33,24 @@ namespace ICSharpCode.CodeCoverage
}
/// <summary>
/// Gets the command line output from NAnt.
/// Gets the command line output from PartCover.
/// </summary>
public string Output {
get {
return output;
}
get { return output; }
}
/// <summary>
/// Gets the standard error output from PartCover.
/// </summary>
public string Error {
get {
return error;
}
get { return error; }
}
/// <summary>
/// Gets the exit code.
/// </summary>
public int ExitCode {
get {
return exitCode;
}
get { return exitCode; }
}
}
}

265
src/AddIns/Misc/CodeCoverage/Project/Src/PartCoverRunner.cs

@ -0,0 +1,265 @@ @@ -0,0 +1,265 @@
// <file>
// <copyright see="prj:///doc/copyright.txt"/>
// <license see="prj:///doc/license.txt"/>
// <owner name="Matthew Ward" email="mrward@users.sourceforge.net"/>
// <version>$Revision$</version>
// </file>
using System;
using System.Collections.Specialized;
using System.Text;
using ICSharpCode.SharpDevelop.Util;
namespace ICSharpCode.CodeCoverage
{
/// <summary>
/// Description of PartCoverRunner.
/// </summary>
public class PartCoverRunner
{
ProcessRunner runner;
string partCoverFileName = String.Empty;
string workingDirectory = String.Empty;
string target = String.Empty;
string targetWorkingDirectory = String.Empty;
string targetArguments = String.Empty;
StringCollection include = new StringCollection();
StringCollection exclude = new StringCollection();
string output = String.Empty;
/// <summary>
/// Triggered when PartCover exits.
/// </summary>
public event PartCoverExitEventHandler Exited;
/// <summary>
/// The PartCover runner was started.
/// </summary>
public event EventHandler Started;
/// <summary>
/// The PartCover runner was stopped. Being stopped is not the
/// same as PartCover exiting.
/// </summary>
public event EventHandler Stopped;
/// <summary>
/// Triggered when an output line is received from PartCover.
/// </summary>
public event LineReceivedEventHandler OutputLineReceived;
public PartCoverRunner()
{
}
/// <summary>
/// Gets or sets the full path to the PartCover
/// executable.
/// </summary>
public string PartCoverFileName {
get { return partCoverFileName; }
set { partCoverFileName = value; }
}
/// <summary>
/// Gets or sets the working directory to use when running
/// PartCover.
/// </summary>
public string WorkingDirectory {
get { return workingDirectory; }
set { workingDirectory = value; }
}
/// <summary>
/// Gets or sets the filename of the executable to profile with PartCover.
/// </summary>
public string Target {
get { return target; }
set { target = value; }
}
/// <summary>
/// Gets or sets the working directory for the target executable.
/// </summary>
public string TargetWorkingDirectory {
get { return targetWorkingDirectory; }
set { targetWorkingDirectory = value; }
}
/// <summary>
/// Gets or sets the arguments to pass to the target executable.
/// </summary>
public string TargetArguments {
get { return targetArguments; }
set { targetArguments = value; }
}
/// <summary>
/// Gets or sets the regular expressions which specify the items to
/// include in the report whilst profiling the target executable.
/// </summary>
public StringCollection Include {
get { return include; }
}
/// <summary>
/// Gets or sets the regular expressions which specify the items to
/// exclude in the report whilst profiling the target executable.
/// </summary>
public StringCollection Exclude {
get { return exclude; }
}
/// <summary>
/// Gets or sets the filename for the code coverage results.
/// </summary>
public string Output {
get { return output; }
set { output = value; }
}
/// <summary>
/// Returns the full path used to run PartCover.
/// Includes the path to the PartCover executable
/// and the command line arguments.
/// </summary>
public string CommandLine {
get {
string arguments = GetArguments();
if (arguments.Length > 0) {
return String.Concat(partCoverFileName, " ", arguments);
}
return partCoverFileName;
}
}
/// <summary>
/// Returns the command line arguments used to run PartCover.
/// </summary>
/// <remarks>
/// Note that the target arguments may itself contain double quotes
/// so in order for this to be passed to PartCover as a single argument
/// we need to prefix each double quote by a backslash. For example:
///
/// Target args: "C:\Projects\My Tests\Test.dll" /output="C:\Projects\My Tests\Output.xml"
///
/// PartCover: --target-args="\"C:\Projects\My Tests\Test.dll\" /output=\"C:\Projects\My Tests\Output.xml\""
/// </remarks>
public string GetArguments()
{
StringBuilder arguments = new StringBuilder();
if (!String.IsNullOrEmpty(target)) {
arguments.AppendFormat("--target=\"{0}\" ", target);
}
if (!String.IsNullOrEmpty(targetWorkingDirectory)) {
arguments.AppendFormat("--target-work-dir=\"{0}\" ", targetWorkingDirectory);
}
if (!String.IsNullOrEmpty(targetArguments)) {
arguments.AppendFormat("--target-args=\"{0}\" ", targetArguments.Replace("\"", "\\\""));
}
if (!String.IsNullOrEmpty(output)) {
arguments.AppendFormat("--output=\"{0}\" ", output);
}
arguments.Append(GetArguments("--include", include));
if (include.Count > 0) {
// Add a space between include and exclude arguments.
arguments.Append(' ');
}
arguments.Append(GetArguments("--exclude", exclude));
return arguments.ToString().Trim();
}
public void Start()
{
string arguments = GetArguments();
runner = new ProcessRunner();
runner.WorkingDirectory = workingDirectory;
runner.ProcessExited += ProcessExited;
if (OutputLineReceived != null) {
runner.OutputLineReceived += OnOutputLineReceived;
runner.ErrorLineReceived += OnOutputLineReceived;
}
runner.Start(partCoverFileName, arguments);
OnStarted();
}
/// <summary>
/// Stops the currently running PartCover instance.
/// </summary>
public void Stop()
{
if (runner != null) {
runner.Kill();
OnStopped();
}
}
protected void OnExited(string output, string error, int exitCode)
{
if (Exited != null) {
Exited(this, new PartCoverExitEventArgs(output, error, exitCode));
}
}
protected void OnStarted()
{
if (Started != null) {
Started(this, new EventArgs());
}
}
protected void OnStopped()
{
if (Stopped != null) {
Stopped(this, new EventArgs());
}
}
/// <summary>
/// Raises the <see cref="OutputLineReceived"/> event.
/// </summary>
/// <param name="sender">The event source.</param>
/// <param name="e">The event arguments.</param>
protected void OnOutputLineReceived(object sender, LineReceivedEventArgs e)
{
if (OutputLineReceived != null) {
OutputLineReceived(this, e);
}
}
/// <summary>
/// Handles the PartCover process exit event.
/// </summary>
/// <param name="sender">The event source.</param>
/// <param name="e">The event arguments.</param>
void ProcessExited(object sender, EventArgs e)
{
ProcessRunner runner = (ProcessRunner)sender;
OnExited(runner.StandardOutput, runner.StandardError, runner.ExitCode);
}
/// <summary>
/// Gets the command line option that can have multiple items as specified
/// in the string array. Each array item will have a separate command line
/// argument (e.g. --include=A --include=B --include=B).
/// </summary>
static string GetArguments(string argumentName, StringCollection items)
{
StringBuilder arguments = new StringBuilder();
foreach (string item in items) {
arguments.Append(argumentName);
arguments.Append("=");
arguments.Append(item);
arguments.Append(" ");
}
return arguments.ToString().Trim();
}
}
}

147
src/AddIns/Misc/CodeCoverage/Project/Src/PartCoverSettings.cs

@ -0,0 +1,147 @@ @@ -0,0 +1,147 @@
// <file>
// <copyright see="prj:///doc/copyright.txt"/>
// <license see="prj:///doc/license.txt"/>
// <owner name="Matthew Ward" email="mrward@users.sourceforge.net"/>
// <version>$Revision$</version>
// </file>
using System;
using System.Collections.Specialized;
using System.IO;
using System.Text;
using System.Xml;
using ICSharpCode.SharpDevelop.Project;
namespace ICSharpCode.CodeCoverage
{
/// <summary>
/// File that stores PartCover settings. This file has the same format as
/// PartCover requires, but is actually just used by the Code Coverage addin
/// as a place to store the include and exclude regular expressions that the
/// user may set up on a per project basis.
/// </summary>
public class PartCoverSettings
{
static readonly string RootElementName = "PartCoverSettings";
static readonly string RuleElementName = "Rule";
StringCollection include = new StringCollection();
StringCollection exclude = new StringCollection();
public PartCoverSettings()
{
}
public PartCoverSettings(string fileName)
: this(new StreamReader(fileName, true))
{
}
public PartCoverSettings(XmlReader reader)
{
ReadSettings(reader);
}
public PartCoverSettings(TextReader reader)
: this(new XmlTextReader(reader))
{
}
/// <summary>
/// Gets the NCover settings filename for the specified project.
/// </summary>
public static string GetFileName(IProject project)
{
return Path.ChangeExtension(project.FileName, "PartCover.Settings");
}
/// <summary>
/// Gets the list of include regular expressions.
/// </summary>
public StringCollection Include {
get { return include; }
}
/// <summary>
/// Gets the list of exclude regular expressions.
/// </summary>
public StringCollection Exclude {
get { return exclude; }
}
/// <summary>
/// Writes the PartCover settings to the specified text writer.
/// </summary>
public void Save(TextWriter writer)
{
Save(new XmlTextWriter(writer));
}
/// <summary>
/// Saves the PartCover settings to the specified file.
/// </summary>
public void Save(string fileName)
{
Save(new StreamWriter(fileName, false, Encoding.UTF8));
}
/// <summary>
/// Writes the PartCover settings to the specified XmlTextWriter.
/// </summary>
public void Save(XmlTextWriter writer)
{
writer.Formatting = Formatting.Indented;
using (writer) {
writer.WriteStartElement(RootElementName);
WriteRuleElements(writer, "+", include);
WriteRuleElements(writer, "-", exclude);
writer.WriteEndElement();
}
}
/// <summary>
/// Reads the include and exclude regular expressions from the
/// PartCover settings xml.
/// </summary>
void ReadSettings(XmlReader reader)
{
using (reader) {
while (reader.Read()) {
if (reader.NodeType == XmlNodeType.Element) {
if (reader.Name == RuleElementName) {
AddRule(reader.ReadString());
}
}
}
}
}
/// <summary>
/// Writes the Rule elements to the writer. Each item in the collection will
/// have be prefixed with the specified prefix string.
/// </summary>
void WriteRuleElements(XmlWriter writer, string prefix, StringCollection rules)
{
foreach (string rule in rules) {
writer.WriteElementString(RuleElementName, prefix + rule);
}
}
/// <summary>
/// Adds an include or exclude regular expression. The rule starts with
/// a '+' if it is an include. It starts with a '-' if it is an exclude.
/// </summary>
void AddRule(string rule)
{
if (rule.Length > 0) {
char firstCharacter = rule[0];
if (firstCharacter == '+') {
include.Add(rule.Substring(1));
} else if (firstCharacter == '-') {
exclude.Add(rule.Substring(1));
}
}
}
}
}

131
src/AddIns/Misc/CodeCoverage/Project/Src/RunTestWithCodeCoverageCommand.cs

@ -6,6 +6,7 @@ @@ -6,6 +6,7 @@
// </file>
using System;
using System.Collections.Specialized;
using System.IO;
using ICSharpCode.Core;
using ICSharpCode.SharpDevelop;
@ -24,20 +25,19 @@ namespace ICSharpCode.CodeCoverage @@ -24,20 +25,19 @@ namespace ICSharpCode.CodeCoverage
public class RunTestWithCodeCoverageCommand : AbstractRunTestCommand
{
static MessageViewCategory category;
NCoverRunner runner;
string ncoverFileName;
PartCoverRunner runner;
public RunTestWithCodeCoverageCommand()
{
runner = new NCoverRunner();
runner.NCoverExited += new NCoverExitEventHandler(NCoverExited);
runner.OutputLineReceived += new LineReceivedEventHandler(OutputLineReceived);
runner = new PartCoverRunner();
runner.Exited += PartCoverExited;
runner.OutputLineReceived += OutputLineReceived;
}
protected override void RunTests(UnitTestApplicationStartHelper helper)
{
SetNCoverRunnerProperties(ncoverFileName, helper);
RunNCover();
SetPartCoverRunnerProperties(helper);
RunPartCover();
}
protected override void OnStop()
@ -51,16 +51,8 @@ namespace ICSharpCode.CodeCoverage @@ -51,16 +51,8 @@ namespace ICSharpCode.CodeCoverage
/// </summary>
protected override void OnBeforeRunTests()
{
ncoverFileName = GetNCoverFileName();
if (ncoverFileName != null) {
WorkbenchSingleton.SafeThreadAsyncCall(Category.ClearText);
WorkbenchSingleton.SafeThreadAsyncCall(CodeCoverageService.ClearResults);
} else {
using (CodeCoverageRunnerNotFoundForm form = new CodeCoverageRunnerNotFoundForm()) {
form.ShowDialog();
}
Stop();
}
WorkbenchSingleton.SafeThreadAsyncCall(Category.ClearText);
WorkbenchSingleton.SafeThreadAsyncCall(CodeCoverageService.ClearResults);
}
/// <summary>
@ -87,37 +79,41 @@ namespace ICSharpCode.CodeCoverage @@ -87,37 +79,41 @@ namespace ICSharpCode.CodeCoverage
return category;
}
}
bool FileNameExists(string fileName)
void SetPartCoverRunnerProperties(UnitTestApplicationStartHelper helper)
{
return fileName.Length > 0 && File.Exists(fileName);
}
void SetNCoverRunnerProperties(string ncoverFileName, UnitTestApplicationStartHelper helper)
{
string ncoverOutputDirectory = GetNCoverOutputDirectory(helper.Project);
NCoverSettings settings = GetNCoverSettings(helper.Project);
runner.NCoverFileName = ncoverFileName;
runner.ProfiledApplicationCommand = UnitTestApplicationStartHelper.UnitTestConsoleApplication;
runner.ProfiledApplicationCommandLineArguments = helper.GetArguments();
runner.WorkingDirectory = Path.GetDirectoryName(helper.Assemblies[0]);
runner.CoverageResultsFileName = Path.Combine(ncoverOutputDirectory, "Coverage.Xml");
runner.LogFileName = Path.Combine(ncoverOutputDirectory, "Coverage.log");
runner.AssemblyList = settings.AssemblyList;
runner.ExcludedAttributesList = settings.ExcludedAttributesList;
string partCoverOutputDirectory = GetPartCoverOutputDirectory(helper.Project);
PartCoverSettings settings = GetPartCoverSettings(helper.Project);
// By default get the code coverage for everything if
// no include or exclude regular expressions have been
// set for this project. Note that the CodeCoverageResults
// will ignore any type that has no source code available
// for it even though the type may be in the Part Cover
// results file.
if (settings.Include.Count + settings.Exclude.Count == 0) {
settings.Include.Add("[*]*");
}
runner.PartCoverFileName = GetPartCoverFileName();
runner.Target = UnitTestApplicationStartHelper.UnitTestConsoleApplication;
runner.TargetArguments = helper.GetArguments();
runner.TargetWorkingDirectory = Path.GetDirectoryName(helper.Assemblies[0]);
runner.Output = Path.Combine(partCoverOutputDirectory, "Coverage.Xml");
AddStringsToCollection(settings.Include, runner.Include);
AddStringsToCollection(settings.Exclude, runner.Exclude);
}
void RunNCover()
void RunPartCover()
{
// Remove existing coverage results file.
if (File.Exists(runner.CoverageResultsFileName)) {
File.Delete(runner.CoverageResultsFileName);
if (File.Exists(runner.Output)) {
File.Delete(runner.Output);
}
// Create NCover output directory.
if (!Directory.Exists(Path.GetDirectoryName(runner.CoverageResultsFileName))) {
Directory.CreateDirectory(Path.GetDirectoryName(runner.CoverageResultsFileName));
// Create PartCover output directory.
if (!Directory.Exists(Path.GetDirectoryName(runner.Output))) {
Directory.CreateDirectory(Path.GetDirectoryName(runner.Output));
}
Category.AppendLine(StringParser.Parse("${res:ICSharpCode.CodeCoverage.RunningCodeCoverage}"));
@ -127,15 +123,13 @@ namespace ICSharpCode.CodeCoverage @@ -127,15 +123,13 @@ namespace ICSharpCode.CodeCoverage
}
/// <summary>
/// Displays the output from NCover after it has exited.
/// Displays the output from PartCover after it has exited.
/// </summary>
/// <param name="sender">The event source.</param>
/// <param name="e">The NCover exit event arguments.</param>
void NCoverExited(object sender, NCoverExitEventArgs e)
/// <param name="e">The PartCover exit event arguments.</param>
void PartCoverExited(object sender, PartCoverExitEventArgs e)
{
System.Diagnostics.Debug.Assert(e.Error.Length == 0);
DisplayCoverageResults(runner.CoverageResultsFileName);
DisplayCoverageResults(runner.Output);
WorkbenchSingleton.SafeThreadAsyncCall(TestsFinished);
}
@ -157,44 +151,37 @@ namespace ICSharpCode.CodeCoverage @@ -157,44 +151,37 @@ namespace ICSharpCode.CodeCoverage
}
/// <summary>
/// Returns the full path to the NCover console application if it
/// Returns the full path to the PartCover console application if it
/// exists.
/// </summary>
string GetNCoverFileName()
/// <remarks>
/// Use Path.GetFullPath otherwise we end up with a filename path like:
/// C:\Program Files\SharpDevelop\bin\..\bin\Tools\PartCover\PartCover.exe
/// </remarks>
string GetPartCoverFileName()
{
string ncoverFileName = CodeCoverageOptions.NCoverFileName;
if (FileNameExists(ncoverFileName)) {
return ncoverFileName;
} else {
ncoverFileName = GetDefaultNCoverFileName();
if (FileNameExists(ncoverFileName)) {
return ncoverFileName;
}
}
return null;
return Path.GetFullPath(Path.Combine(FileUtility.ApplicationRootPath, @"bin\Tools\PartCover\PartCover.exe"));
}
/// <summary>
/// Returns the default full path to the NCover console application.
/// </summary>
string GetDefaultNCoverFileName()
string GetPartCoverOutputDirectory(IProject project)
{
string programFilesPath = Environment.GetFolderPath(Environment.SpecialFolder.ProgramFiles);
return Path.Combine(programFilesPath, @"NCover\NCover.Console.exe");
return Path.Combine(project.Directory, "PartCover");
}
string GetNCoverOutputDirectory(IProject project)
PartCoverSettings GetPartCoverSettings(IProject project)
{
return Path.Combine(project.Directory, "NCover");
string fileName = PartCoverSettings.GetFileName(project);
if (File.Exists(fileName)) {
return new PartCoverSettings(fileName);
}
return new PartCoverSettings();
}
NCoverSettings GetNCoverSettings(IProject project)
void AddStringsToCollection(StringCollection source, StringCollection target)
{
string fileName = NCoverSettings.GetFileName(project);
if (File.Exists(fileName)) {
return new NCoverSettings(fileName);
foreach (string item in source) {
target.Add(item);
}
return new NCoverSettings();
}
}
}

19
src/AddIns/Misc/CodeCoverage/Test/AddCodeCoverageMarkersTestFixture.cs

@ -39,15 +39,18 @@ namespace ICSharpCode.CodeCoverage.Tests @@ -39,15 +39,18 @@ namespace ICSharpCode.CodeCoverage.Tests
document.TextContent = code;
markerStrategy = new MarkerStrategy(document);
string xml = "<coverage>\r\n" +
"\t<module name=\"C:\\Projects\\Foo.Tests\\bin\\Debug\\Foo.Tests.dll\" assembly=\"Foo.Tests\">\r\n" +
"\t\t<method name=\"SimpleTest\" class=\"Foo.Tests.FooTestFixture\">\r\n" +
"\t\t\t<seqpnt visitcount=\"1\" line=\"1\" column=\"3\" endline=\"1\" endcolumn=\"4\" document=\"c:\\Projects\\Foo\\FooTestFixture.cs\" />\r\n" +
"\t\t\t<seqpnt visitcount=\"1\" line=\"2\" column=\"4\" endline=\"2\" endcolumn=\"18\" document=\"c:\\Projects\\Foo\\FooTestFixture.cs\" />\r\n" +
"\t\t\t<seqpnt visitcount=\"0\" line=\"3\" column=\"3\" endline=\"3\" endcolumn=\"4\" document=\"c:\\Projects\\Foo\\FooTestFixture.cs\" />\r\n" +
string xml = "<PartCoverReport>\r\n" +
"<file id=\"1\" url=\"c:\\Projects\\Foo\\FooTestFixture.cs\" />\r\n" +
"\t<type asm=\"Foo.Tests\" name=\"Foo.Tests.FooTestFixture\" flags=\"1232592\">\r\n" +
"\t\t<method name=\"SimpleTest\">\r\n" +
"\t\t\t<code>\r\n" +
"\t\t\t\t<pt visit=\"1\" sl=\"1\" fid=\"1\" sc=\"3\" el=\"1\" ec=\"4\" document=\"c:\\Projects\\Foo\\FooTestFixture.cs\" />\r\n" +
"\t\t\t\t<pt visit=\"1\" sl=\"2\" fid=\"1\" sc=\"4\" el=\"2\" ec=\"18\" document=\"c:\\Projects\\Foo\\FooTestFixture.cs\" />\r\n" +
"\t\t\t\t<pt visit=\"0\" sl=\"3\" fid=\"1\" sc=\"3\" el=\"3\" ec=\"4\" document=\"c:\\Projects\\Foo\\FooTestFixture.cs\" />\r\n" +
"\t\t\t</code>\r\n" +
"\t\t</method>\r\n" +
"\t</module>\r\n" +
"</coverage>";
"\t</type>\r\n" +
"</PartCoverReport>";
CodeCoverageResults results = new CodeCoverageResults(new StringReader(xml));
CodeCoverageMethod method = results.Modules[0].Methods[0];
CodeCoverageHighlighter highlighter = new CodeCoverageHighlighter();

9
src/AddIns/Misc/CodeCoverage/Test/CodeCoverage.Tests.csproj

@ -50,6 +50,7 @@ @@ -50,6 +50,7 @@
</ItemGroup>
<ItemGroup>
<Compile Include="AssemblyInfo.cs" />
<Compile Include="CodeCoverageResultsMissingFileIdTestFixture.cs" />
<Compile Include="CodeCoverageResultsTestFixture.cs" />
<Compile Include="CodeCoverageTreeViewTestFixture.cs" />
<Compile Include="DerivedCodeCoverageTreeView.cs" />
@ -57,6 +58,10 @@ @@ -57,6 +58,10 @@
<Compile Include="ModuleVisitedSequencePointsTestFixture.cs" />
<Compile Include="AddCodeCoverageMarkersTestFixture.cs" />
<Compile Include="MockDocument.cs" />
<Compile Include="PartCoverCommandLineTests.cs" />
<Compile Include="PartCoverExitEventArgsTestFixture.cs" />
<Compile Include="PartCoverSettingsMissingRulePrefixTestFixture.cs" />
<Compile Include="PartCoverSettingsTestFixture.cs" />
<Compile Include="RemoveCodeCoverageMarkersTestFixture.cs" />
<Compile Include="CodeCoverageMarkersCoverTwoLinesTestFixture.cs" />
<Compile Include="CodeCoverageMarkersCoverMultipleLinesTestFixture.cs" />
@ -65,7 +70,6 @@ @@ -65,7 +70,6 @@
<Compile Include="CodeCoverageMarkersInvalidEndLineTestFixture.cs" />
<Compile Include="CodeCoverageMarkersInvalidStartColumnTestFixture.cs" />
<Compile Include="CodeCoverageMarkersInvalidEndColumnTestFixture.cs" />
<Compile Include="NCoverSettingsTestFixture.cs" />
<None Include="Strings.resources" />
<Compile Include="TreeViewAfterSelectTestFixture.cs" />
<Compile Include="TreeViewSortingTestFixture.cs" />
@ -75,10 +79,7 @@ @@ -75,10 +79,7 @@
<Compile Include="DisplayItemTestFixture.cs" />
<Compile Include="CodeCoverageNamespaceTestFixture.cs" />
<Compile Include="ClassWithNoNamespaceInTreeViewTestFixture.cs" />
<Compile Include="ExcludedModuleResultsTestFixture.cs" />
<Compile Include="ExcludedMethodTestFixture.cs" />
<Compile Include="ExcludedModuleTestFixture.cs" />
<Compile Include="ExcludedMethodResultsTestFixture.cs" />
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\..\..\..\Main\Base\Project\ICSharpCode.SharpDevelop.csproj">

20
src/AddIns/Misc/CodeCoverage/Test/CodeCoverageMarkersCoverMultipleLinesTestFixture.cs

@ -19,6 +19,7 @@ namespace ICSharpCode.CodeCoverage.Tests @@ -19,6 +19,7 @@ namespace ICSharpCode.CodeCoverage.Tests
public class CodeCoverageMarkersCoverMultipleLinesTestFixture
{
List<CodeCoverageTextMarker> markers;
[TestFixtureSetUp]
public void SetUpFixture()
{
@ -41,15 +42,18 @@ namespace ICSharpCode.CodeCoverage.Tests @@ -41,15 +42,18 @@ namespace ICSharpCode.CodeCoverage.Tests
document.TextContent = code;
MarkerStrategy markerStrategy = new MarkerStrategy(document);
string xml = "<coverage>\r\n" +
"\t<module name=\"C:\\Projects\\XmlEditor\\Test\\XmlEditor.Tests.dll\" assembly=\"XmlEditor.Tests\">\r\n" +
"\t\t<method name=\"GetSchema\" class=\"XmlEditor.Tests.Schema.SingleElementSchemaTestFixture\">\r\n" +
"\t\t\t<seqpnt visitcount=\"1\" line=\"1\" column=\"3\" endline=\"1\" endcolumn=\"4\" document=\"c:\\Projects\\XmlEditor\\Test\\Schema\\SingleElementSchemaTestFixture.cs\" />\r\n" +
"\t\t\t<seqpnt visitcount=\"1\" line=\"2\" column=\"4\" endline=\"9\" endcolumn=\"20\" document=\"c:\\Projects\\XmlEditor\\Test\\Schema\\SingleElementSchemaTestFixture.cs\" />\r\n" +
"\t\t\t<seqpnt visitcount=\"1\" line=\"10\" column=\"3\" endline=\"10\" endcolumn=\"4\" document=\"c:\\Projects\\XmlEditor\\Test\\Schema\\SingleElementSchemaTestFixture.cs\" />\r\n" +
string xml = "<PartCoverReport>\r\n" +
"\t<file id=\"1\" url=\"c:\\Projects\\XmlEditor\\Test\\Schema\\SingleElementSchemaTestFixture.cs\" />\r\n" +
"\t<type asm=\"XmlEditor.Tests\" name=\"XmlEditor.Tests.Schema.SingleElementSchemaTestFixture\" flags=\"1232592\">\r\n" +
"\t\t<method name=\"GetSchema\">\r\n" +
"\t\t\t<code>\r\n" +
"\t\t\t\t<pt visit=\"1\" fid=\"1\" sl=\"1\" sc=\"3\" el=\"1\" ec=\"4\" />\r\n" +
"\t\t\t\t<pt visit=\"1\" fid=\"1\" sl=\"2\" sc=\"4\" el=\"9\" ec=\"20\" />\r\n" +
"\t\t\t\t<pt visit=\"1\" fid=\"1\" sl=\"10\" sc=\"3\" el=\"10\" ec=\"4\" />\r\n" +
"\t\t\t</code>\r\n" +
"\t\t</method>\r\n" +
"\t</module>\r\n" +
"</coverage>";
"\t</type>\r\n" +
"</PartCoverReport>";
CodeCoverageResults results = new CodeCoverageResults(new StringReader(xml));
CodeCoverageMethod method = results.Modules[0].Methods[0];

19
src/AddIns/Misc/CodeCoverage/Test/CodeCoverageMarkersCoverTwoLinesTestFixture.cs

@ -39,15 +39,18 @@ namespace ICSharpCode.CodeCoverage.Tests @@ -39,15 +39,18 @@ namespace ICSharpCode.CodeCoverage.Tests
document.TextContent = code;
MarkerStrategy markerStrategy = new MarkerStrategy(document);
string xml = "<coverage>\r\n" +
"\t<module name=\"C:\\Projects\\XmlEditor\\Tests\\XmlEditor.Tests.dll\" assembly=\"XmlEditor.Tests\">\r\n" +
"\t\t<method name=\"NoteElementHasNoChildElements\" class=\"XmlEditor.Tests.Schema.SingleElementSchemaTestFixture\">\r\n" +
"\t\t\t<seqpnt visitcount=\"1\" line=\"1\" column=\"3\" endline=\"1\" endcolumn=\"4\" document=\"c:\\Projects\\XmlEditor\\Test\\Schema\\SingleElementSchemaTestFixture.cs\" />\r\n" +
"\t\t\t<seqpnt visitcount=\"1\" line=\"2\" column=\"4\" endline=\"3\" endcolumn=\"57\" document=\"c:\\Projects\\XmlEditor\\Test\\Schema\\SingleElementSchemaTestFixture.cs\" />\r\n" +
"\t\t\t<seqpnt visitcount=\"1\" line=\"4\" column=\"3\" endline=\"4\" endcolumn=\"4\" document=\"c:\\Projects\\XmlEditor\\Test\\Schema\\SingleElementSchemaTestFixture.cs\" />\r\n" +
string xml = "<PartCoverReport>\r\n" +
"\t<file id=\"1\" url=\"c:\\Projects\\XmlEditor\\Test\\Schema\\SingleElementSchemaTestFixture.cs\" />\r\n" +
"\t<type asm=\"XmlEditor.Tests\" name=\"XmlEditor.Tests.Schema.SingleElementSchemaTestFixture\">\r\n" +
"\t\t<method name=\"NoteElementHasNoChildElements\">\r\n" +
"\t\t\t<code>\r\n" +
"\t\t\t\t<pt visit=\"1\" fid=\"1\" sl=\"1\" sc=\"3\" el=\"1\" ec=\"4\" />\r\n" +
"\t\t\t\t<pt visit=\"1\" fid=\"1\" sl=\"2\" sc=\"4\" el=\"3\" ec=\"57\" />\r\n" +
"\t\t\t\t<pt visit=\"1\" fid=\"1\" sl=\"4\" sc=\"3\" el=\"4\" ec=\"4\" />\r\n" +
"\t\t\t</code>\r\n" +
"\t\t</method>\r\n" +
"\t</module>\r\n" +
"</coverage>";
"\t</type>\r\n" +
"</PartCoverReport>";
CodeCoverageResults results = new CodeCoverageResults(new StringReader(xml));
CodeCoverageMethod method = results.Modules[0].Methods[0];

21
src/AddIns/Misc/CodeCoverage/Test/CodeCoverageMarkersInvalidEndColumnTestFixture.cs

@ -32,16 +32,19 @@ namespace ICSharpCode.CodeCoverage.Tests @@ -32,16 +32,19 @@ namespace ICSharpCode.CodeCoverage.Tests
document.TextContent = "abcdefg\r\nabc";
MarkerStrategy markerStrategy = new MarkerStrategy(document);
string xml = "<coverage>\r\n" +
"\t<module name=\"C:\\Projects\\XmlEditor\\Test\\XmlEditor.Tests.dll\" assembly=\"XmlEditor.Tests\">\r\n" +
"\t\t<method name=\"GetSchema\" class=\"XmlEditor.Tests.Schema.SingleElementSchemaTestFixture\">\r\n" +
"\t\t\t<seqpnt visitcount=\"1\" line=\"1\" column=\"1\" endline=\"1\" endcolumn=\"9\" document=\"c:\\Projects\\XmlEditor\\Test\\Schema\\SingleElementSchemaTestFixture.cs\" />\r\n" +
"\t\t\t<seqpnt visitcount=\"1\" line=\"1\" column=\"1\" endline=\"1\" endcolumn=\"0\" document=\"c:\\Projects\\XmlEditor\\Test\\Schema\\SingleElementSchemaTestFixture.cs\" />\r\n" +
"\t\t\t<seqpnt visitcount=\"1\" line=\"1\" column=\"1\" endline=\"1\" endcolumn=\"-1\" document=\"c:\\Projects\\XmlEditor\\Test\\Schema\\SingleElementSchemaTestFixture.cs\" />\r\n" +
"\t\t\t<seqpnt visitcount=\"1\" line=\"1\" column=\"3\" endline=\"1\" endcolumn=\"2\" document=\"c:\\Projects\\XmlEditor\\Test\\Schema\\SingleElementSchemaTestFixture.cs\" />\r\n" +
string xml = "<PartCoverReport>\r\n" +
"\t<file id=\"1\" url=\"c:\\Projects\\XmlEditor\\Test\\Schema\\SingleElementSchemaTestFixture.cs\" />\r\n" +
"\t<type name=\"XmlEditor.Tests.Schema.SingleElementSchemaTestFixture\" asm=\"XmlEditor.Tests\">\r\n" +
"\t\t<method name=\"GetSchema\">\r\n" +
"\t\t\t<code>\r\n" +
"\t\t\t<pt visit=\"1\" fid=\"1\" sl=\"1\" sc=\"1\" el=\"1\" ec=\"9\"/>\r\n" +
"\t\t\t<pt visit=\"1\" fid=\"1\" sl=\"1\" sc=\"1\" el=\"1\" ec=\"0\" />\r\n" +
"\t\t\t<pt visit=\"1\" fid=\"1\" sl=\"1\" sc=\"1\" el=\"1\" ec=\"-1\" />\r\n" +
"\t\t\t<pt visit=\"1\" fid=\"1\" sl=\"1\" sc=\"3\" el=\"1\" ec=\"2\" />\r\n" +
"\t\t\t</code>\r\n" +
"\t\t</method>\r\n" +
"\t</module>\r\n" +
"</coverage>";
"\t</type>\r\n" +
"</PartCoverReport>";
CodeCoverageResults results = new CodeCoverageResults(new StringReader(xml));
CodeCoverageMethod method = results.Modules[0].Methods[0];

16
src/AddIns/Misc/CodeCoverage/Test/CodeCoverageMarkersInvalidEndLineTestFixture.cs

@ -34,14 +34,16 @@ namespace ICSharpCode.CodeCoverage.Tests @@ -34,14 +34,16 @@ namespace ICSharpCode.CodeCoverage.Tests
MarkerStrategy markerStrategy = new MarkerStrategy(document);
string xml = "<coverage>\r\n" +
"\t<module name=\"C:\\Projects\\XmlEditor\\Test\\XmlEditor.Tests.dll\" assembly=\"XmlEditor.Tests\">\r\n" +
"\t\t<method name=\"GetSchema\" class=\"XmlEditor.Tests.Schema.SingleElementSchemaTestFixture\">\r\n" +
"\t\t\t<seqpnt visitcount=\"1\" line=\"3\" column=\"3\" endline=\"4\" endcolumn=\"4\" document=\"c:\\Projects\\XmlEditor\\Test\\Schema\\SingleElementSchemaTestFixture.cs\" />\r\n" +
"\t\t\t<seqpnt visitcount=\"1\" line=\"1\" column=\"4\" endline=\"5\" endcolumn=\"20\" document=\"c:\\Projects\\XmlEditor\\Test\\Schema\\SingleElementSchemaTestFixture.cs\" />\r\n" +
"\t\t\t<seqpnt visitcount=\"1\" line=\"1\" column=\"4\" endline=\"-1\" endcolumn=\"20\" document=\"c:\\Projects\\XmlEditor\\Test\\Schema\\SingleElementSchemaTestFixture.cs\" />\r\n" +
"\t\t\t<seqpnt visitcount=\"1\" line=\"1\" column=\"4\" endline=\"0\" endcolumn=\"20\" document=\"c:\\Projects\\XmlEditor\\Test\\Schema\\SingleElementSchemaTestFixture.cs\" />\r\n" +
"\t<type name=\"XmlEditor.Tests.Schema.SingleElementSchemaTestFixture\" asm=\"XmlEditor.Tests\">\r\n" +
"\t\t<method name=\"GetSchema\">\r\n" +
"\t\t\t<code>\r\n" +
"\t\t\t<pt visit=\"1\" fid=\"1\" sl=\"3\" sc=\"3\" el=\"4\" ec=\"4\" />\r\n" +
"\t\t\t<pt visit=\"1\" fid=\"1\" sl=\"1\" sc=\"4\" el=\"5\" ec=\"20\" />\r\n" +
"\t\t\t<pt visit=\"1\" fid=\"1\" sl=\"1\" sc=\"4\" el=\"-1\" ec=\"20\" />\r\n" +
"\t\t\t<pt visit=\"1\" fid=\"1\" sl=\"1\" sc=\"4\" el=\"0\" ec=\"20\" />\r\n" +
"\t\t\t</code>\r\n" +
"\t\t</method>\r\n" +
"\t</module>\r\n" +
"\t</type>\r\n" +
"</coverage>";
CodeCoverageResults results = new CodeCoverageResults(new StringReader(xml));

19
src/AddIns/Misc/CodeCoverage/Test/CodeCoverageMarkersInvalidStartColumnTestFixture.cs

@ -32,15 +32,18 @@ namespace ICSharpCode.CodeCoverage.Tests @@ -32,15 +32,18 @@ namespace ICSharpCode.CodeCoverage.Tests
document.TextContent = "abcdefg\r\nabcdefg";
MarkerStrategy markerStrategy = new MarkerStrategy(document);
string xml = "<coverage>\r\n" +
"\t<module name=\"C:\\Projects\\XmlEditor\\Test\\XmlEditor.Tests.dll\" assembly=\"XmlEditor.Tests\">\r\n" +
"\t\t<method name=\"GetSchema\" class=\"XmlEditor.Tests.Schema.SingleElementSchemaTestFixture\">\r\n" +
"\t\t\t<seqpnt visitcount=\"1\" line=\"1\" column=\"0\" endline=\"1\" endcolumn=\"1\" document=\"c:\\Projects\\XmlEditor\\Test\\Schema\\SingleElementSchemaTestFixture.cs\" />\r\n" +
"\t\t\t<seqpnt visitcount=\"1\" line=\"1\" column=\"-1\" endline=\"1\" endcolumn=\"1\" document=\"c:\\Projects\\XmlEditor\\Test\\Schema\\SingleElementSchemaTestFixture.cs\" />\r\n" +
"\t\t\t<seqpnt visitcount=\"1\" line=\"1\" column=\"8\" endline=\"1\" endcolumn=\"20\" document=\"c:\\Projects\\XmlEditor\\Test\\Schema\\SingleElementSchemaTestFixture.cs\" />\r\n" +
string xml = "<PartCoverReport>\r\n" +
"\t<file id=\"1\" url=\"c:\\Projects\\Test\\Test.cs\" />\r\n" +
"\t<type name=\"XmlEditor.Tests.Schema.SingleElementSchemaTestFixture\" asm=\"XmlEditor.Tests\">\r\n" +
"\t\t<method name=\"GetSchema\">\r\n" +
"\t\t\t<code>\r\n" +
"\t\t\t<pt visit=\"1\" fid=\"1\" sl=\"1\" sc=\"0\" el=\"1\" ec=\"1\" />\r\n" +
"\t\t\t<pt visit=\"1\" fid=\"1\" sl=\"1\" sc=\"-1\" el=\"1\" ec=\"1\" />\r\n" +
"\t\t\t<pt visit=\"1\" fid=\"1\" sl=\"1\" sc=\"8\" el=\"1\" ec=\"20\" />\r\n" +
"\t\t\t</code>\r\n" +
"\t\t</method>\r\n" +
"\t</module>\r\n" +
"</coverage>";
"\t</type>\r\n" +
"</PartCoverReport>";
CodeCoverageResults results = new CodeCoverageResults(new StringReader(xml));
CodeCoverageMethod method = results.Modules[0].Methods[0];

19
src/AddIns/Misc/CodeCoverage/Test/CodeCoverageMarkersInvalidStartLineTestFixture.cs

@ -31,15 +31,18 @@ namespace ICSharpCode.CodeCoverage.Tests @@ -31,15 +31,18 @@ namespace ICSharpCode.CodeCoverage.Tests
IDocument document = MockDocument.Create();
MarkerStrategy markerStrategy = new MarkerStrategy(document);
string xml = "<coverage>\r\n" +
"\t<module name=\"C:\\Projects\\XmlEditor\\Test\\XmlEditor.Tests.dll\" assembly=\"XmlEditor.Tests\">\r\n" +
"\t\t<method name=\"GetSchema\" class=\"XmlEditor.Tests.Schema.SingleElementSchemaTestFixture\">\r\n" +
"\t\t\t<seqpnt visitcount=\"1\" line=\"0\" column=\"3\" endline=\"0\" endcolumn=\"4\" document=\"c:\\Projects\\XmlEditor\\Test\\Schema\\SingleElementSchemaTestFixture.cs\" />\r\n" +
"\t\t\t<seqpnt visitcount=\"1\" line=\"-1\" column=\"4\" endline=\"9\" endcolumn=\"20\" document=\"c:\\Projects\\XmlEditor\\Test\\Schema\\SingleElementSchemaTestFixture.cs\" />\r\n" +
"\t\t\t<seqpnt visitcount=\"1\" line=\"10\" column=\"3\" endline=\"10\" endcolumn=\"4\" document=\"c:\\Projects\\XmlEditor\\Test\\Schema\\SingleElementSchemaTestFixture.cs\" />\r\n" +
string xml = "<PartCoverReport>\r\n" +
"\t<file id=\"1\" url=\"c:\\Projects\\XmlEditor\\Test\\Schema\\SingleElementSchemaTestFixture.cs\"/>\r\n" +
"\t<type name=\"XmlEditor.Tests.Schema.SingleElementSchemaTestFixture\" asm=\"XmlEditor.Tests\">\r\n" +
"\t\t<method name=\"GetSchema\">\r\n" +
"\t\t\t<code>\r\n" +
"\t\t\t\t<pt visit=\"1\" fid=\"1\" sl=\"0\" sc=\"3\" el=\"0\" ec=\"4\" />\r\n" +
"\t\t\t\t<pt visit=\"1\" fid=\"1\" sl=\"-1\" sc=\"4\" el=\"9\" ec=\"20\" />\r\n" +
"\t\t\t\t<pt visit=\"1\" fid=\"1\" sl=\"10\" sc=\"3\" el=\"10\" ec=\"4\" />\r\n" +
"\t\t\t</code>\r\n" +
"\t\t</method>\r\n" +
"\t</module>\r\n" +
"</coverage>";
"\t</type>\r\n" +
"</PartCoverReport>";
CodeCoverageResults results = new CodeCoverageResults(new StringReader(xml));
CodeCoverageMethod method = results.Modules[0].Methods[0];

73
src/AddIns/Misc/CodeCoverage/Test/CodeCoverageResultsMissingFileIdTestFixture.cs

@ -0,0 +1,73 @@ @@ -0,0 +1,73 @@
// <file>
// <copyright see="prj:///doc/copyright.txt"/>
// <license see="prj:///doc/license.txt"/>
// <owner name="Matthew Ward" email="mrward@users.sourceforge.net"/>
// <version>$Revision$</version>
// </file>
using System;
using System.IO;
using ICSharpCode.CodeCoverage;
using NUnit.Framework;
namespace ICSharpCode.CodeCoverage.Tests
{
/// <summary>
/// PartCover does not always put a file id in the code
/// coverage report. We also ensure that a module that has no
/// associated source code is not included in the final list
/// of modules.
/// </summary>
[TestFixture]
public class CodeCoverageResultsMissingFileIdTestFixture
{
CodeCoverageResults results;
[SetUp]
public void SetUpFixture()
{
string xml = "<PartCoverReport ver=\"1.0.2796.35184\">\r\n" +
"<file id=\"1\" url=\"c:\\test\\MyTests\\Class1.cs\" />\r\n" +
"<type asm=\"nunit.framework\" name=\"NUnit.Framework.NotEqualAsserter\" flags=\"1233408\">\r\n" +
" <method name=\"Fail\" sig=\"bool ()\" flags=\"134\" iflags=\"0\">\r\n" +
" <code>\r\n" +
" <pt visit=\"1\" pos=\"11\" len=\"1\" />\r\n" +
" <pt visit=\"0\" pos=\"6\" len=\"5\" />\r\n" +
" <pt visit=\"0\" pos=\"0\" len=\"6\" />\r\n" +
" </code>\r\n" +
" </method>\r\n" +
"</type>\r\n" +
"<type asm=\"MyTests.Tests\" name=\"MyClass\" flags=\"1233248\">\r\n" +
" <method name=\".ctor\" sig=\"void ()\" flags=\"6278\" iflags=\"0\">\r\n" +
" <code>\r\n" +
" <pt visit=\"0\" pos=\"8\" len=\"2\" fid=\"1\" sl=\"21\" sc=\"3\" el=\"21\" ec=\"4\" />\r\n" +
" <pt visit=\"0\" pos=\"7\" len=\"1\" fid=\"1\" sl=\"20\" sc=\"3\" el=\"20\" ec=\"4\" />\r\n" +
" <pt visit=\"0\" pos=\"0\" len=\"7\" fid=\"1\" sl=\"19\" sc=\"3\" el=\"19\" ec=\"18\" />\r\n" +
" <pt visit=\"0\" pos=\"0\" len=\"7\" sl=\"19\" sc=\"3\" el=\"19\" ec=\"18\" />\r\n" +
" </code>\r\n" +
" </method>\r\n" +
"</type>\r\n" +
"</PartCoverReport>";
results = new CodeCoverageResults(new StringReader(xml));
}
[Test]
public void OneModule()
{
Assert.AreEqual(1, results.Modules.Count);
}
[Test]
public void ModuleName()
{
Assert.AreEqual("MyTests.Tests", results.Modules[0].Name);
}
[Test]
public void MyTestsCtorHasThreeSequencePoints()
{
Assert.AreEqual(3, results.Modules[0].Methods[0].SequencePoints.Count);
}
}
}

36
src/AddIns/Misc/CodeCoverage/Test/CodeCoverageResultsTestFixture.cs

@ -25,22 +25,30 @@ namespace ICSharpCode.CodeCoverage.Tests @@ -25,22 +25,30 @@ namespace ICSharpCode.CodeCoverage.Tests
[TestFixtureSetUp]
public void SetUpFixture()
{
string xml = "<coverage>\r\n" +
"\t<module name=\"C:\\Projects\\Foo.Tests\\bin\\Debug\\Foo.Tests.dll\" assembly=\"Foo.Tests\">\r\n" +
"\t\t<method name=\"SimpleTest\" class=\"Foo.Tests.FooTestFixture\">\r\n" +
"\t\t\t<seqpnt visitcount=\"1\" line=\"20\" column=\"3\" endline=\"20\" endcolumn=\"4\" document=\"c:\\Projects\\Foo\\FooTestFixture.cs\" />\r\n" +
"\t\t\t<seqpnt visitcount=\"1\" line=\"21\" column=\"13\" endline=\"21\" endcolumn=\"32\" document=\"c:\\Projects\\Foo\\FooTestFixture.cs\" />\r\n" +
"\t\t\t<seqpnt visitcount=\"0\" line=\"24\" column=\"3\" endline=\"24\" endcolumn=\"4\" document=\"c:\\Projects\\Foo\\FooTestFixture.cs\" />\r\n" +
string xml = "<PartCoverReport ver=\"1.0.2796.35184\">\r\n" +
"\t<file id=\"1\" url=\"c:\\Projects\\Foo\\FooTestFixture.cs\" />\r\n" +
"\t<type asm=\"Foo.Tests\" name=\"Foo.Tests.FooTestFixture\" flags=\"1232592\">\r\n" +
"\t\t<method name=\"SimpleTest\" sig=\"void ()\" flags=\"2182\" iflags=\"0\">\r\n" +
"\t\t\t<code>\r\n" +
"\t\t\t\t<pt visit=\"1\" pos=\"0\" len=\"1\" fid=\"1\" sl=\"20\" sc=\"3\" el=\"20\" ec=\"4\" />\r\n" +
"\t\t\t\t<pt visit=\"1\" pos=\"0\" len=\"1\" fid=\"1\" sl=\"21\" sc=\"13\" el=\"21\" ec=\"32\" />\r\n" +
"\t\t\t\t<pt visit=\"0\" pos=\"0\" len=\"1\" fid=\"1\" sl=\"24\" sc=\"3\" el=\"24\" ec=\"4\" />\r\n" +
"\t\t\t</code>\r\n" +
"\t\t</method>\r\n" +
"\t</module>\r\n" +
"</coverage>";
"\t</type>\r\n" +
"</PartCoverReport>";
results = new CodeCoverageResults(new StringReader(xml));
module = results.Modules[0];
method = module.Methods[0];
point1 = method.SequencePoints[0];
point2 = method.SequencePoints[1];
point3 = method.SequencePoints[2];
if (results.Modules.Count > 0) {
module = results.Modules[0];
if (module.Methods.Count > 0) {
method = module.Methods[0];
if (method.SequencePoints.Count == 3) {
point1 = method.SequencePoints[0];
point2 = method.SequencePoints[1];
point3 = method.SequencePoints[2];
}
}
}
}
[Test]

52
src/AddIns/Misc/CodeCoverage/Test/ExcludedMethodResultsTestFixture.cs

@ -1,52 +0,0 @@ @@ -1,52 +0,0 @@
// <file>
// <copyright see="prj:///doc/copyright.txt"/>
// <license see="prj:///doc/license.txt"/>
// <owner name="Matthew Ward" email="mrward@users.sourceforge.net"/>
// <version>$Revision$</version>
// </file>
using ICSharpCode.CodeCoverage;
using NUnit.Framework;
using System;
using System.IO;
namespace ICSharpCode.CodeCoverage.Tests
{
/// <summary>
/// Tests that results with the excluded attribute set are not included
/// in the code coverage results.
/// </summary>
[TestFixture]
public class ExcludedMethodResultsTestFixture
{
CodeCoverageResults results;
CodeCoverageModule module;
[TestFixtureSetUp]
public void SetUpFixture()
{
string xml = "<coverage>\r\n" +
"\t<module name=\"C:\\Projects\\Foo.Tests\\bin\\Debug\\Foo.Tests.dll\" assembly=\"Foo.Tests\">\r\n" +
"\t\t<method name=\"ExcludedTest\" class=\"Foo.Tests.FooTestFixture\">\r\n" +
"\t\t\t<seqpnt visitcount=\"0\" line=\"20\" column=\"3\" endline=\"20\" excluded=\"true\" endcolumn=\"4\" document=\"c:\\Projects\\Foo\\FooTestFixture.cs\" />\r\n" +
"\t\t\t<seqpnt visitcount=\"0\" line=\"21\" column=\"13\" endline=\"21\" excluded=\"true\" endcolumn=\"32\" document=\"c:\\Projects\\Foo\\FooTestFixture.cs\" />\r\n" +
"\t\t\t<seqpnt visitcount=\"0\" line=\"24\" column=\"3\" endline=\"24\" excluded=\"true\" endcolumn=\"4\" document=\"c:\\Projects\\Foo\\FooTestFixture.cs\" />\r\n" +
"\t\t</method>\r\n" +
"\t\t<method name=\"SimpleTest\" class=\"Foo.Tests.FooTestFixture\">\r\n" +
"\t\t\t<seqpnt visitcount=\"0\" line=\"20\" column=\"3\" endline=\"20\" excluded=\"false\" endcolumn=\"4\" document=\"c:\\Projects\\Foo\\FooTestFixture.cs\" />\r\n" +
"\t\t\t<seqpnt visitcount=\"0\" line=\"21\" column=\"13\" endline=\"21\" excluded=\"false\" endcolumn=\"32\" document=\"c:\\Projects\\Foo\\FooTestFixture.cs\" />\r\n" +
"\t\t\t<seqpnt visitcount=\"0\" line=\"24\" column=\"3\" endline=\"24\" excluded=\"false\" endcolumn=\"4\" document=\"c:\\Projects\\Foo\\FooTestFixture.cs\" />\r\n" +
"\t\t</method>\r\n" +
"\t</module>\r\n" +
"</coverage>";
results = new CodeCoverageResults(new StringReader(xml));
module = results.Modules[0];
}
[Test]
public void OneMethod()
{
Assert.AreEqual(1, module.Methods.Count);
}
}
}

31
src/AddIns/Misc/CodeCoverage/Test/ExcludedMethodTestFixture.cs

@ -1,31 +0,0 @@ @@ -1,31 +0,0 @@
// <file>
// <copyright see="prj:///doc/copyright.txt"/>
// <license see="prj:///doc/license.txt"/>
// <owner name="Matthew Ward" email="mrward@users.sourceforge.net"/>
// <version>$Revision$</version>
// </file>
using ICSharpCode.CodeCoverage;
using NUnit.Framework;
using System;
namespace ICSharpCode.CodeCoverage.Tests
{
/// <summary>
/// Ensures that a code coverage method that has no included sequence
/// points is flagged as excluded.
/// </summary>
[TestFixture]
public class ExcludedMethodTestFixture
{
[Test]
public void IsExcluded()
{
CodeCoverageMethod method = new CodeCoverageMethod("Test1", "MyTestFixture");
CodeCoverageSequencePoint pt = new CodeCoverageSequencePoint(@"c:\test\MyTestFixture.cs", 0, 10, 0, 10, 20, true);
method.SequencePoints.Add(pt);
Assert.IsTrue(method.IsExcluded, "Method should be excluded.");
}
}
}

90
src/AddIns/Misc/CodeCoverage/Test/ExcludedModuleResultsTestFixture.cs

@ -1,45 +1,45 @@ @@ -1,45 +1,45 @@
// <file>
// <copyright see="prj:///doc/copyright.txt"/>
// <license see="prj:///doc/license.txt"/>
// <owner name="Matthew Ward" email="mrward@users.sourceforge.net"/>
// <version>$Revision$</version>
// </file>
using ICSharpCode.CodeCoverage;
using NUnit.Framework;
using System;
using System.IO;
namespace ICSharpCode.CodeCoverage.Tests
{
/// <summary>
/// Tests that results with the excluded attribute set are not included
/// in the code coverage results.
/// </summary>
[TestFixture]
public class ExcludedModuleResultsTestFixture
{
CodeCoverageResults results;
[TestFixtureSetUp]
public void SetUpFixture()
{
string xml = "<coverage>\r\n" +
"\t<module name=\"C:\\Projects\\Foo.Tests\\bin\\Debug\\Foo.Tests.dll\" assembly=\"Foo.Tests\">\r\n" +
"\t\t<method name=\"SimpleTest\" class=\"Foo.Tests.FooTestFixture\">\r\n" +
"\t\t\t<seqpnt visitcount=\"0\" line=\"20\" column=\"3\" endline=\"20\" excluded=\"true\" endcolumn=\"4\" document=\"c:\\Projects\\Foo\\FooTestFixture.cs\" />\r\n" +
"\t\t\t<seqpnt visitcount=\"0\" line=\"21\" column=\"13\" endline=\"21\" excluded=\"true\" endcolumn=\"32\" document=\"c:\\Projects\\Foo\\FooTestFixture.cs\" />\r\n" +
"\t\t\t<seqpnt visitcount=\"0\" line=\"24\" column=\"3\" endline=\"24\" excluded=\"true\" endcolumn=\"4\" document=\"c:\\Projects\\Foo\\FooTestFixture.cs\" />\r\n" +
"\t\t</method>\r\n" +
"\t</module>\r\n" +
"</coverage>";
results = new CodeCoverageResults(new StringReader(xml));
}
[Test]
public void NoModules()
{
Assert.AreEqual(0, results.Modules.Count, "All modules should be excluded");
}
}
}
//// <file>
//// <copyright see="prj:///doc/copyright.txt"/>
//// <license see="prj:///doc/license.txt"/>
//// <owner name="Matthew Ward" email="mrward@users.sourceforge.net"/>
//// <version>$Revision$</version>
//// </file>
//
//using ICSharpCode.CodeCoverage;
//using NUnit.Framework;
//using System;
//using System.IO;
//
//namespace ICSharpCode.CodeCoverage.Tests
//{
// /// <summary>
// /// Tests that results with the excluded attribute set are not included
// /// in the code coverage results.
// /// </summary>
// [TestFixture]
// public class ExcludedModuleResultsTestFixture
// {
// CodeCoverageResults results;
//
// [TestFixtureSetUp]
// public void SetUpFixture()
// {
// string xml = "<coverage>\r\n" +
// "\t<module name=\"C:\\Projects\\Foo.Tests\\bin\\Debug\\Foo.Tests.dll\" assembly=\"Foo.Tests\">\r\n" +
// "\t\t<method name=\"SimpleTest\" class=\"Foo.Tests.FooTestFixture\">\r\n" +
// "\t\t\t<seqpnt visitcount=\"0\" line=\"20\" column=\"3\" endline=\"20\" excluded=\"true\" endcolumn=\"4\" document=\"c:\\Projects\\Foo\\FooTestFixture.cs\" />\r\n" +
// "\t\t\t<seqpnt visitcount=\"0\" line=\"21\" column=\"13\" endline=\"21\" excluded=\"true\" endcolumn=\"32\" document=\"c:\\Projects\\Foo\\FooTestFixture.cs\" />\r\n" +
// "\t\t\t<seqpnt visitcount=\"0\" line=\"24\" column=\"3\" endline=\"24\" excluded=\"true\" endcolumn=\"4\" document=\"c:\\Projects\\Foo\\FooTestFixture.cs\" />\r\n" +
// "\t\t</method>\r\n" +
// "\t</module>\r\n" +
// "</coverage>";
// results = new CodeCoverageResults(new StringReader(xml));
// }
//
// [Test]
// public void NoModules()
// {
// Assert.AreEqual(0, results.Modules.Count, "All modules should be excluded");
// }
// }
//}

45
src/AddIns/Misc/CodeCoverage/Test/GetSequencePointsForFileNameTestFixture.cs

@ -25,24 +25,39 @@ namespace ICSharpCode.CodeCoverage.Tests @@ -25,24 +25,39 @@ namespace ICSharpCode.CodeCoverage.Tests
[SetUp]
public void SetUpFixture()
{
string xml = "<coverage>\r\n" +
"\t<module name=\"C:\\Projects\\Foo.Tests\\bin\\Debug\\Foo.Tests.dll\" assembly=\"Foo.Tests\">\r\n" +
"\t\t<method name=\"FooTest\" class=\"Foo.Tests.FooTestFixture\">\r\n" +
"\t\t\t<seqpnt visitcount=\"1\" line=\"20\" column=\"3\" endline=\"20\" endcolumn=\"4\" document=\"c:\\Projects\\Foo\\FooTestFixture.cs\" />\r\n" +
string xml = "<PartCoverReport>\r\n" +
"\t<file id=\"1\" url=\"c:\\Projects\\Foo\\FooTestFixture.cs\" />\r\n" +
"\t<file id=\"2\" url=\"c:\\Projects\\Foo\\SimpleTestFixture.cs\" />\r\n" +
"\t<file id=\"3\" url=\"c:\\Projects\\Foo\\BarTestFixture.cs\" />\r\n" +
"\t<type name=\"Foo.Tests.FooTestFixture\" asm=\"Foo.Tests\">\r\n" +
"\t\t<method name=\"FooTest\">\r\n" +
"\t\t\t<code>\r\n" +
"\t\t\t\t<pt visit=\"1\" sl=\"20\" sc=\"3\" el=\"20\" ec=\"4\" fid=\"1\" />\r\n" +
"\t\t\t</code>\r\n" +
"\t\t</method>\r\n" +
"\t\t<method name=\"SimpleTest2\" class=\"Foo.Tests.SimpleTestFixture2\">\r\n" +
"\t\t\t<seqpnt visitcount=\"1\" line=\"20\" column=\"3\" endline=\"20\" endcolumn=\"4\" document=\"c:\\Projects\\Foo\\SimpleTestFixture.cs\" />\r\n" +
"\t</type>\r\n" +
"\t<type name=\"Foo.Tests.SimpleTestFixture2\" asm=\"Foo.Tests\">\r\n" +
"\t\t<method name=\"SimpleTest2\">\r\n" +
"\t\t\t<code>\r\n" +
"\t\t\t</code>\r\n" +
"\t\t\t\t<pt visit=\"1\" sl=\"20\" sc=\"3\" el=\"20\" ec=\"4\" fid=\"2\" />\r\n" +
"\t\t</method>\r\n" +
"\t\t<method name=\"SimpleTest3\" class=\"Foo.Tests.SimpleTestFixture3\">\r\n" +
"\t\t\t<seqpnt visitcount=\"1\" line=\"20\" column=\"3\" endline=\"20\" endcolumn=\"4\" document=\"c:\\Projects\\Foo\\SimpleTestFixture.cs\" />\r\n" +
"\t</type>\r\n" +
"\t<type name=\"Foo.Tests.SimpleTestFixture3\" asm=\"Foo.Tests\">\r\n" +
"\t\t<method name=\"SimpleTest3\">\r\n" +
"\t\t\t<code>\r\n" +
"\t\t\t\t<pt visit=\"1\" sl=\"20\" sc=\"3\" el=\"20\" ec=\"4\" fid=\"2\" />\r\n" +
"\t\t\t</code>\r\n" +
"\t\t</method>\r\n" +
"\t</module>\r\n" +
"\t<module name=\"C:\\Projects\\Foo.Tests\\bin\\Debug\\Bar.Tests.dll\" assembly=\"Bar.Tests\">\r\n" +
"\t\t<method name=\"SimpleTest2\" class=\"Foo.Tests.BarTestFixture\">\r\n" +
"\t\t\t<seqpnt visitcount=\"1\" line=\"20\" column=\"3\" endline=\"20\" endcolumn=\"4\" document=\"c:\\Projects\\Foo\\BarTestFixture.cs\" />\r\n" +
"\t</type>\r\n" +
"\t<type name=\"Foo.Tests.BarTestFixture\" asm=\"Bar.Tests\">\r\n" +
"\t\t<method name=\"SimpleTest2\">\r\n" +
"\t\t\t<code>\r\n" +
"\t\t\t\t<pt visit=\"1\" sl=\"20\" sc=\"3\" el=\"20\" ec=\"4\" fid=\"3\" />\r\n" +
"\t\t\t</code>\r\n" +
"\t\t</method>\r\n" +
"\t</module>\r\n" +
"</coverage>";
"\t</type>\r\n" +
"</PartCoverReport>";
results = new CodeCoverageResults(new StringReader(xml));
fooTestFixtureSequencePoints = results.GetSequencePoints(@"c:\Projects\Foo\FooTestFixture.cs");
@ -73,6 +88,6 @@ namespace ICSharpCode.CodeCoverage.Tests @@ -73,6 +88,6 @@ namespace ICSharpCode.CodeCoverage.Tests
public void NonExistentFileNameHasNoSequencePoints()
{
Assert.AreEqual(0, nonExistentFileNameSequencePoints.Count);
}
}
}
}

27
src/AddIns/Misc/CodeCoverage/Test/InvalidSequencePointDataTestFixture.cs

@ -24,19 +24,26 @@ namespace ICSharpCode.CodeCoverage.Tests @@ -24,19 +24,26 @@ namespace ICSharpCode.CodeCoverage.Tests
[TestFixtureSetUp]
public void SetUpFixture()
{
string xml = "<coverage>\r\n" +
"\t<module name=\"C:\\Projects\\Foo.Tests\\bin\\Debug\\Foo.Tests.dll\" assembly=\"Foo.Tests\">\r\n" +
"\t\t<method name=\"InvalidVisitCount\" class=\"Foo.Tests.FooTestFixture\">\r\n" +
"\t\t\t<seqpnt visitcount=\"a\" line=\"10\" column=\"3\" endline=\"20\" endcolumn=\"4\" document=\"c:\\Projects\\Foo\\FooTestFixture.cs\" />\r\n" +
string xml = "<PartCoverReport>\r\n" +
"\t<file id=\"1\" url=\"c:\\Projects\\Foo\\SimpleTestFixture.cs\"/>\r\n" +
"\t<type name=\"Foo.Tests.FooTestFixture\" asm=\"Foo.Tests\">\r\n" +
"\t\t<method name=\"InvalidVisitCount\">\r\n" +
"\t\t\t<code>\r\n" +
"\t\t\t<pt visit=\"a\" fid=\"1\" sl=\"10\" sc=\"3\" el=\"20\" ec=\"4\"/>\r\n" +
"\t\t\t</code>\r\n" +
"\t\t</method>\r\n" +
"\t\t<method name=\"InvalidLine\" class=\"Foo.Tests.FooTestFixture\">\r\n" +
"\t\t\t<seqpnt visitcount=\"2\" line=\"b\" column=\"3\" endline=\"20\" endcolumn=\"4\" document=\"c:\\Projects\\Foo\\SimpleTestFixture.cs\" />\r\n" +
"\t\t<method name=\"InvalidLine\">\r\n" +
"\t\t\t<code>\r\n" +
"\t\t\t<pt visit=\"2\" fid=\"1\" sl=\"b\" sc=\"3\" el=\"20\" ec=\"4\"/>\r\n" +
"\t\t\t</code>\r\n" +
"\t\t</method>\r\n" +
"\t\t<method name=\"InvalidColumn\" class=\"Foo.Tests.FooTestFixture\">\r\n" +
"\t\t\t<seqpnt visitcount=\"1\" line=\"20\" column=\"c\" endline=\"d\" endcolumn=\"e\" document=\"c:\\Projects\\Foo\\SimpleTestFixture.cs\" />\r\n" +
"\t\t<method name=\"InvalidColumn\">\r\n" +
"\t\t\t<code>\r\n" +
"\t\t\t<pt visit=\"1\" fid=\"1\" sl=\"20\" sc=\"c\" el=\"d\" ec=\"e\"/>\r\n" +
"\t\t\t</code>\r\n" +
"\t\t</method>\r\n" +
"\t</module>\r\n" +
"</coverage>";
"\t</type>\r\n" +
"</PartCoverReport>";
results = new CodeCoverageResults(new StringReader(xml));
invalidVisitCountSequencePoint = results.Modules[0].Methods[0].SequencePoints[0];

53
src/AddIns/Misc/CodeCoverage/Test/ModuleVisitedSequencePointsTestFixture.cs

@ -22,27 +22,38 @@ namespace ICSharpCode.CodeCoverage.Tests @@ -22,27 +22,38 @@ namespace ICSharpCode.CodeCoverage.Tests
[TestFixtureSetUp]
public void SetUpFixture()
{
string xml = "<coverage>\r\n" +
"\t<module name=\"C:\\Projects\\Foo.Tests\\bin\\Debug\\Foo.Tests.dll\" assembly=\"Foo.Tests\">\r\n" +
"\t\t<method name=\"SimpleTest1\" class=\"Foo.Tests.FooTestFixture1\">\r\n" +
"\t\t\t<seqpnt visitcount=\"12\" line=\"20\" column=\"3\" endline=\"20\" endcolumn=\"4\" document=\"c:\\Projects\\Foo\\FooTestFixture.cs\" />\r\n" +
"\t\t\t<seqpnt visitcount=\"4\" line=\"21\" column=\"13\" endline=\"21\" endcolumn=\"32\" document=\"c:\\Projects\\Foo\\FooTestFixture.cs\" />\r\n" +
"\t\t\t<seqpnt visitcount=\"0\" line=\"24\" column=\"3\" endline=\"24\" endcolumn=\"4\" document=\"c:\\Projects\\Foo\\FooTestFixture.cs\" />\r\n" +
string xml = "<PartCoverReport>\r\n" +
"\t<file id=\"1\" url=\"c:\\Projects\\Foo\\FooTestFixture.cs\"/>\r\n" +
"\t<file id=\"2\" url=\"c:\\Projects\\Foo\\FooTestFixture2.cs\"/>\r\n" +
"\t<file id=\"3\" url=\"c:\\Projects\\Foo\\BarTestFixture.cs\"/>\r\n" +
"\t<type name=\"Foo.Tests.FooTestFixture1\" asm=\"Foo.Tests\">\r\n" +
"\t\t<method name=\"SimpleTest1\">\r\n" +
"\t\t\t<code>\r\n" +
"\t\t\t<pt visit=\"12\" sl=\"20\" sc=\"3\" el=\"20\" ec=\"4\" fid=\"1\" />\r\n" +
"\t\t\t<pt visit=\"4\" sl=\"21\" sc=\"13\" el=\"21\" ec=\"32\" fid=\"1\" />\r\n" +
"\t\t\t<pt visit=\"0\" sl=\"24\" sc=\"3\" el=\"24\" ec=\"4\" fid=\"1\"/>\r\n" +
"\t\t\t</code>\r\n" +
"\t\t</method>\r\n" +
"\t\t<method name=\"SimpleTest2\" class=\"Foo.Tests.FooTestFixture2\">\r\n" +
"\t\t\t<seqpnt visitcount=\"1\" line=\"20\" column=\"3\" endline=\"20\" endcolumn=\"4\" document=\"c:\\Projects\\Foo\\FooTestFixture2.cs\" />\r\n" +
"\t\t\t<seqpnt visitcount=\"10\" line=\"21\" column=\"13\" endline=\"21\" endcolumn=\"32\" document=\"c:\\Projects\\Foo\\FooTestFixture2.cs\" />\r\n" +
"\t\t\t<seqpnt visitcount=\"0\" line=\"24\" column=\"3\" endline=\"24\" endcolumn=\"4\" document=\"c:\\Projects\\Foo\\FooTestFixture2.cs\" />\r\n" +
"\t</type>\r\n" +
"\t<type name=\"Foo.Tests.FooTestFixture2\" asm=\"Foo.Tests\">\r\n" +
"\t\t<method name=\"SimpleTest2\">\r\n" +
"\t\t\t<code>\r\n" +
"\t\t\t<pt visit=\"1\" sl=\"20\" sc=\"3\" el=\"20\" ec=\"4\" fid=\"2\" />\r\n" +
"\t\t\t<pt visit=\"10\" sl=\"21\" sc=\"13\" el=\"21\" ec=\"32\" fid=\"2\"/>\r\n" +
"\t\t\t<pt visit=\"0\" sl=\"24\" sc=\"3\" el=\"24\" ec=\"4\" fid=\"2\" />\r\n" +
"\t\t\t</code>\r\n" +
"\t\t</method>\r\n" +
"\t</module>\r\n" +
"\t<module name=\"C:\\Projects\\Foo.Tests\\bin\\Debug\\Bar.Tests.dll\" assembly=\"Bar.Tests\">\r\n" +
"\t\t<method name=\"SimpleTest3\" class=\"Bar.Tests.FooTestFixture3\">\r\n" +
"\t\t\t<seqpnt visitcount=\"5\" line=\"20\" column=\"3\" endline=\"20\" endcolumn=\"4\" document=\"c:\\Projects\\Foo\\BarTestFixture.cs\" />\r\n" +
"\t\t\t<seqpnt visitcount=\"1\" line=\"21\" column=\"13\" endline=\"21\" endcolumn=\"32\" document=\"c:\\Projects\\Foo\\BarTestFixture.cs\" />\r\n" +
"\t\t\t<seqpnt visitcount=\"0\" line=\"24\" column=\"3\" endline=\"24\" endcolumn=\"4\" document=\"c:\\Projects\\Foo\\BarTestFixture.cs\" />\r\n" +
"\t</type>\r\n" +
"\t<type name=\"Bar.Tests.FooTestFixture3\" asm=\"Bar.Tests\">\r\n" +
"\t\t<method name=\"SimpleTest3\">\r\n" +
"\t\t\t<code>\r\n" +
"\t\t\t<pt visit=\"5\" sl=\"20\" sc=\"3\" el=\"20\" ec=\"4\" fid=\"3\" />\r\n" +
"\t\t\t<pt visit=\"1\" sl=\"21\" sc=\"13\" el=\"21\" ec=\"32\" fid=\"3\" />\r\n" +
"\t\t\t<pt visit=\"0\" sl=\"24\" sc=\"3\" el=\"24\" ec=\"4\" fid=\"3\" />\r\n" +
"\t\t\t</code>\r\n" +
"\t\t</method>\r\n" +
"\t</module>\r\n" +
"</coverage>";
"\t</type>\r\n" +
"</PartCoverReport>";
results = new CodeCoverageResults(new StringReader(xml));
fooModule = results.Modules[0];
barModule = results.Modules[1];
@ -71,5 +82,11 @@ namespace ICSharpCode.CodeCoverage.Tests @@ -71,5 +82,11 @@ namespace ICSharpCode.CodeCoverage.Tests
{
Assert.AreEqual(1, barModule.NotVisitedSequencePointsCount);
}
[Test]
public void TwoModulesInTotal()
{
Assert.AreEqual(2, results.Modules.Count);
}
}
}

56
src/AddIns/Misc/CodeCoverage/Test/NCoverSettingsTestFixture.cs

@ -1,56 +0,0 @@ @@ -1,56 +0,0 @@
// <file>
// <copyright see="prj:///doc/copyright.txt"/>
// <license see="prj:///doc/license.txt"/>
// <owner name="Matthew Ward" email="mrward@users.sourceforge.net"/>
// <version>$Revision$</version>
// </file>
using ICSharpCode.CodeCoverage;
using ICSharpCode.Core;
using ICSharpCode.SharpDevelop.Project;
using NUnit.Framework;
using System;
using System.IO;
using System.Text;
namespace ICSharpCode.CodeCoverage.Tests
{
[TestFixture]
public class NCoverSettingsTestFixture
{
NCoverSettings settings;
NCoverSettings savedSettings;
[SetUp]
public void Init()
{
settings = new NCoverSettings();
settings.AssemblyList = "MyNamespace.Foo; MyNamespace.Bar";
settings.ExcludedAttributesList = "NUnit.Framework.TestFixtureAttribute; NUnit.Framework.TestAttribute";
StringBuilder savedSettingsXml = new StringBuilder();
settings.Save(new StringWriter(savedSettingsXml));
savedSettings = new NCoverSettings(new StringReader(savedSettingsXml.ToString()));
}
[Test]
public void IsAssemblyListSaved()
{
Assert.AreEqual(settings.AssemblyList, savedSettings.AssemblyList);
}
[Test]
public void IsExcludedAttributeListListSaved()
{
Assert.AreEqual(settings.ExcludedAttributesList, savedSettings.ExcludedAttributesList);
}
[Test]
public void NCoverSettingsFileName()
{
MSBuildBasedProject project = new MSBuildBasedProject(MSBuildInternals.CreateEngine());
project.FileName = @"C:\temp\test.csproj";
Assert.AreEqual(@"C:\temp\test.NCover.Settings", NCoverSettings.GetFileName(project));
}
}
}

176
src/AddIns/Misc/CodeCoverage/Test/PartCoverCommandLineTests.cs

@ -0,0 +1,176 @@ @@ -0,0 +1,176 @@
// <file>
// <copyright see="prj:///doc/copyright.txt"/>
// <license see="prj:///doc/license.txt"/>
// <owner name="Matthew Ward" email="mrward@users.sourceforge.net"/>
// <version>$Revision$</version>
// </file>
using System;
using NUnit.Framework;
namespace ICSharpCode.CodeCoverage.Tests
{
/// <summary>
/// Tests the PartCoverRunner's command line argumentsests.
/// </summary>
[TestFixture]
public class PartCoverCommandLineTests
{
[Test]
public void PartCoverFileNameSpecified()
{
string partCoverFileName = @"C:\Program Files\PartCover\PartCover.exe";
PartCoverRunner runner = new PartCoverRunner();
runner.PartCoverFileName = partCoverFileName;
Assert.AreEqual(partCoverFileName, runner.CommandLine);
}
[Test]
public void ArgumentsStringIsEmptyWhenNothingSpecified()
{
PartCoverRunner runner = new PartCoverRunner();
Assert.AreEqual(String.Empty, runner.GetArguments());
}
[Test]
public void WorkingDirectoryNotSet()
{
PartCoverRunner runner = new PartCoverRunner();
Assert.AreEqual(String.Empty, runner.WorkingDirectory);
}
[Test]
public void WorkingDirectorySet()
{
PartCoverRunner runner = new PartCoverRunner();
string folder = @"C:\Program Files\PartCover";
runner.WorkingDirectory = folder;
Assert.AreEqual(folder, runner.WorkingDirectory);
}
[Test]
public void TargetFileNameSpecified()
{
string targetFileName = @"C:\Program Files\SharpDevelop\bin\Tools\NUnit-console.exe";
string partCoverFileName = @"C:\Program Files\PartCover\PartCover.exe";
PartCoverRunner runner = new PartCoverRunner();
runner.PartCoverFileName = partCoverFileName;
runner.Target = targetFileName;
string expectedCommandLine = partCoverFileName + " --target=\"" + targetFileName + "\"";
Assert.AreEqual(expectedCommandLine, runner.CommandLine);
}
[Test]
public void TargetWorkingDirectorySpecified()
{
string targetWorkingDirectory = @"C:\Program Files\SharpDevelop\bin\Tools";
PartCoverRunner runner = new PartCoverRunner();
runner.TargetWorkingDirectory = targetWorkingDirectory;
string expectedArgs = "--target-work-dir=\"" + targetWorkingDirectory + "\"";
Assert.AreEqual(expectedArgs, runner.GetArguments());
}
[Test]
public void TargetArguments()
{
string targetArgs = @"C:\Project\Test\MyTests.dll";
PartCoverRunner runner = new PartCoverRunner();
runner.TargetWorkingDirectory = null;
runner.TargetArguments = targetArgs;
string expectedArgs = "--target-args=\"" + targetArgs + "\"";
Assert.AreEqual(expectedArgs, runner.GetArguments());
}
/// <summary>
/// In order for the target arguments to be successfully passed to
/// PartCover we need to prefix any double quote with a backslash.
/// </summary>
[Test]
public void TargetArgumentsIncludeDoubleQuotes()
{
string targetArgs = "\"C:\\Project\\My Tests\\MyTests.dll\" /output=\"C:\\Project\\My Tests\\Output.xml\"";
PartCoverRunner runner = new PartCoverRunner();
runner.TargetWorkingDirectory = null;
runner.TargetArguments = targetArgs;
string expectedArgs = "--target-args=\"" + targetArgs.Replace("\"", "\\\"") + "\"";
Assert.AreEqual(expectedArgs, runner.GetArguments());
}
[Test]
public void IncludeSpecified()
{
string include = @"[RootNamespace.MyTests]*";
PartCoverRunner runner = new PartCoverRunner();
runner.Include.Add(include);
string expectedArgs = "--include=" + include;
Assert.AreEqual(expectedArgs, runner.GetArguments());
}
[Test]
public void TwoIncludeItemsSpecified()
{
string include1 = @"[RootNamespace.MyTests]*";
string include2 = @"[System]*";
PartCoverRunner runner = new PartCoverRunner();
runner.Include.Add(include1);
runner.Include.Add(include2);
string expectedArgs = "--include=" + include1 + " --include=" + include2;
Assert.AreEqual(expectedArgs, runner.GetArguments());
}
[Test]
public void ExcludeSpecified()
{
string exclude = @"[RootNamespace.MyTests]*";
PartCoverRunner runner = new PartCoverRunner();
runner.Exclude.Add(exclude);
string expectedArgs = "--exclude=" + exclude;
Assert.AreEqual(expectedArgs, runner.GetArguments());
}
[Test]
public void TwoExcludeItemsSpecified()
{
string exclude1 = @"[RootNamespace.MyTests]*";
string exclude2 = @"[System]*";
PartCoverRunner runner = new PartCoverRunner();
runner.Exclude.Add(exclude1);
runner.Exclude.Add(exclude2);
string expectedArgs = "--exclude=" + exclude1 + " --exclude=" + exclude2;
Assert.AreEqual(expectedArgs, runner.GetArguments());
}
[Test]
public void OneIncludeAndExcludeItemSpecified()
{
string exclude = @"[RootNamespace.MyTests]*";
string include = @"[System]*";
PartCoverRunner runner = new PartCoverRunner();
runner.Exclude.Add(exclude);
runner.Include.Add(include);
string expectedArgs = "--include=" + include + " --exclude=" + exclude;
Assert.AreEqual(expectedArgs, runner.GetArguments());
}
[Test]
public void OutputSpecified()
{
string output = @"C:\Projects\MyTests\CodeCoverage.xml";
PartCoverRunner runner = new PartCoverRunner();
runner.Output = output;
string expectedArgs = "--output=\"" + output + "\"";
Assert.AreEqual(expectedArgs, runner.GetArguments());
}
}
}

49
src/AddIns/Misc/CodeCoverage/Test/PartCoverExitEventArgsTestFixture.cs

@ -0,0 +1,49 @@ @@ -0,0 +1,49 @@
// <file>
// <copyright see="prj:///doc/copyright.txt"/>
// <license see="prj:///doc/license.txt"/>
// <owner name="Matthew Ward" email="mrward@users.sourceforge.net"/>
// <version>$Revision$</version>
// </file>
using System;
using ICSharpCode.CodeCoverage;
using NUnit.Framework;
namespace ICSharpCode.CodeCoverage.Tests
{
/// <summary>
/// Tests the PartCoverExitEventArgs class.
/// </summary>
[TestFixture]
public class PartCoverExitEventArgsTestFixture
{
PartCoverExitEventArgs eventArgs;
string output = "Test";
string error = "Error";
int exitCode = -1;
[TestFixtureSetUp]
public void SetUpFixture()
{
eventArgs = new PartCoverExitEventArgs(output, error, exitCode);
}
[Test]
public void OutputText()
{
Assert.AreEqual(output, eventArgs.Output);
}
[Test]
public void ErrorText()
{
Assert.AreEqual(error, eventArgs.Error);
}
[Test]
public void ExitCode()
{
Assert.AreEqual(exitCode, eventArgs.ExitCode);
}
}
}

47
src/AddIns/Misc/CodeCoverage/Test/PartCoverSettingsMissingRulePrefixTestFixture.cs

@ -0,0 +1,47 @@ @@ -0,0 +1,47 @@
// <file>
// <copyright see="prj:///doc/copyright.txt"/>
// <license see="prj:///doc/license.txt"/>
// <owner name="Matthew Ward" email="mrward@users.sourceforge.net"/>
// <version>$Revision$</version>
// </file>
using System;
using System.IO;
using ICSharpCode.CodeCoverage;
using NUnit.Framework;
namespace ICSharpCode.CodeCoverage.Tests
{
/// <summary>
/// Tests that the PartCoverSettings class does not throw an index out of
/// range exception when the Rule elements are empty strings.
/// </summary>
[TestFixture]
public class PartCoverSettingsMissingRulePrefixTestFixture
{
PartCoverSettings settings;
[TestFixtureSetUp]
public void SetUpFixture()
{
string xml = "<PartCoverSettings>\r\n" +
" <Rule/>\r\n" +
" <Rule></Rule>\r\n" +
"</PartCoverSettings>";
settings = new PartCoverSettings(new StringReader(xml));
}
[Test]
public void NoIncludes()
{
Assert.AreEqual(0, settings.Include.Count);
}
[Test]
public void NoExcludes()
{
Assert.AreEqual(0, settings.Exclude.Count);
}
}
}

82
src/AddIns/Misc/CodeCoverage/Test/PartCoverSettingsTestFixture.cs

@ -0,0 +1,82 @@ @@ -0,0 +1,82 @@
// <file>
// <copyright see="prj:///doc/copyright.txt"/>
// <license see="prj:///doc/license.txt"/>
// <owner name="Matthew Ward" email="mrward@users.sourceforge.net"/>
// <version>$Revision$</version>
// </file>
using ICSharpCode.CodeCoverage;
using ICSharpCode.Core;
using ICSharpCode.SharpDevelop.Project;
using NUnit.Framework;
using System;
using System.IO;
using System.Text;
using System.Xml;
namespace ICSharpCode.CodeCoverage.Tests
{
/// <summary>
/// Tests the saving and loading of the PartCover settings file. This
/// file is used to stores the includes and excludes regular expressions
/// that PartCover uses.
/// </summary>
[TestFixture]
public class PartCoverSettingsTestFixture
{
PartCoverSettings settings;
PartCoverSettings savedSettings;
StringBuilder savedSettingsXml;
XmlDocument doc;
[SetUp]
public void Init()
{
settings = new PartCoverSettings();
settings.Include.Add("[a]*");
settings.Include.Add("[b]*");
settings.Exclude.Add("[c]*");
settings.Exclude.Add("[d]*");
savedSettingsXml = new StringBuilder();
settings.Save(new StringWriter(savedSettingsXml));
savedSettings = new PartCoverSettings(new StringReader(savedSettingsXml.ToString()));
doc = new XmlDocument();
doc.LoadXml(savedSettingsXml.ToString());
}
[Test]
public void IsIncludeListSaved()
{
Assert.AreEqual(settings.Include, savedSettings.Include);
}
[Test]
public void IsExcludedListSaved()
{
Assert.AreEqual(settings.Exclude, savedSettings.Exclude);
}
[Test]
public void PartCoverSettingsFileName()
{
MSBuildBasedProject project = new MSBuildBasedProject(MSBuildInternals.CreateEngine());
project.FileName = @"C:\temp\test.csproj";
Assert.AreEqual(@"C:\temp\test.PartCover.Settings", PartCoverSettings.GetFileName(project));
}
[Test]
public void FourRuleElements()
{
Assert.AreEqual(4, doc.SelectNodes("/PartCoverSettings/Rule").Count);
}
[Test]
public void FirstRuleElement()
{
Assert.IsNotNull(doc.SelectSingleNode("/PartCoverSettings/Rule[text()='+[a]*']"));
}
}
}

19
src/AddIns/Misc/CodeCoverage/Test/RemoveCodeCoverageMarkersTestFixture.cs

@ -35,15 +35,18 @@ namespace ICSharpCode.CodeCoverage.Tests @@ -35,15 +35,18 @@ namespace ICSharpCode.CodeCoverage.Tests
document.TextContent = code;
markerStrategy = new MarkerStrategy(document);
string xml = "<coverage>\r\n" +
"\t<module name=\"C:\\Projects\\Foo.Tests\\bin\\Debug\\Foo.Tests.dll\" assembly=\"Foo.Tests\">\r\n" +
"\t\t<method name=\"SimpleTest\" class=\"Foo.Tests.FooTestFixture\">\r\n" +
"\t\t\t<seqpnt visitcount=\"1\" line=\"1\" column=\"3\" endline=\"1\" endcolumn=\"4\" document=\"c:\\Projects\\Foo\\FooTestFixture.cs\" />\r\n" +
"\t\t\t<seqpnt visitcount=\"1\" line=\"2\" column=\"4\" endline=\"2\" endcolumn=\"18\" document=\"c:\\Projects\\Foo\\FooTestFixture.cs\" />\r\n" +
"\t\t\t<seqpnt visitcount=\"0\" line=\"3\" column=\"3\" endline=\"3\" endcolumn=\"4\" document=\"c:\\Projects\\Foo\\FooTestFixture.cs\" />\r\n" +
string xml = "<PartCoverReport>\r\n" +
"\t<file id=\"1\" url=\"c:\\Projects\\Foo\\FooTestFixture.cs\"/>\r\n" +
"\t<type name=\"Foo.Tests.FooTestFixture\" asm=\"Foo.Tests\">\r\n" +
"\t\t<method name=\"SimpleTest\">\r\n" +
"\t\t\t<code>\r\n" +
"\t\t\t<pt visit=\"1\" sl=\"1\" sc=\"3\" el=\"1\" ec=\"4\" fid=\"1\" />\r\n" +
"\t\t\t<pt visit=\"1\" sl=\"2\" sc=\"4\" el=\"2\" ec=\"18\" fid=\"1\" />\r\n" +
"\t\t\t<pt visit=\"0\" sl=\"3\" sc=\"3\" el=\"3\" ec=\"4\" fid=\"1\" />\r\n" +
"\t\t\t</code>\r\n" +
"\t\t</method>\r\n" +
"\t</module>\r\n" +
"</coverage>";
"\t</type>\r\n" +
"</PartCoverReport>";
CodeCoverageResults results = new CodeCoverageResults(new StringReader(xml));
CodeCoverageMethod method = results.Modules[0].Methods[0];
CodeCoverageHighlighter highlighter = new CodeCoverageHighlighter();

69
src/Setup/Files.wxs

@ -523,6 +523,75 @@ @@ -523,6 +523,75 @@
</Component>
</Directory>
</Directory>
<Directory Id="PartCover" Name="PrtCover" LongName="PartCover">
<Component Guid="CD9AB556-51BD-4DB2-9AC5-C047022991DD" Id="InteropPartCoverDll" DiskId="1">
<File Source="..\..\bin\Tools\PartCover\Interop.PartCover.dll" Name="IOPPCVR.DLL" Id="Interop.PartCover.dll" LongName="Interop.PartCover.dll" KeyPath="yes" Assembly=".net" AssemblyApplication="Interop.PartCover.dll" AssemblyManifest="Interop.PartCover.dll" />
</Component>
<Component Guid="DA202409-86C7-4E13-9D12-26926A6F770B" Id="PartCoverBrowserManualRtf" DiskId="1">
<File Source="..\..\bin\Tools\PartCover\PartCover Browser Manual.rtf" Name="PCBMAN.RTF" Id="PartCover_Browser_Manual.rtf" LongName="PartCover Browser Manual.rtf" KeyPath="yes" />
</Component>
<Component Guid="2748871F-77C1-4107-A004-869CF09CCFE2" Id="PartCoverConsoleManualRtf" DiskId="1">
<File Source="..\..\bin\Tools\PartCover\PartCover Console Manual.rtf" Name="PCCSMAN.RTF" Id="PartCover_Console_Manual.rtf" LongName="PartCover Console Manual.rtf" KeyPath="yes" />
</Component>
<Component Guid="82F8BEA9-C5FD-48B8-9A4D-AED613DF664A" Id="PartCoverCorDriverDll" DiskId="1">
<File Source="..\..\bin\Tools\PartCover\PartCover.CorDriver.dll" Name="PCVRDRVR.DLL" Id="PartCover.CorDriver.dll" LongName="PartCover.CorDriver.dll" KeyPath="yes" />
<Registry Id="PartCoverCorDriverRegistryAppIdGuid" Root="HKCR" Type="string" Key="AppId\7D0E6AAB-C5FC-4103-AAD4-8BF3112A56C4" Value="PartCoverCorDriver" />
<Registry Id="PartCoverCorDriverRegistryAppIdDriverDll" Root="HKCR" Type="string" Key="AppId\PartCoverCorDriver.DLL" Name="AppId" Value="7D0E6AAB-C5FC-4103-AAD4-8BF3112A56C4" />
<Registry Id="PartCoverCorDriverRegistryClsIdGuid" Root="HKCR" Type="string" Key="CLSID\{6F6225EA-0897-41fa-B1EF-8B4D3E15325E}" Value="PartCoverConnector Object" />
<Registry Id="PartCoverCorDriverRegistryClsIdGuidAppId" Root="HKCR" Type="string" Key="CLSID\{6F6225EA-0897-41fa-B1EF-8B4D3E15325E}" Name="AppId" Value="7D0E6AAB-C5FC-4103-AAD4-8BF3112A56C4" />
<Registry Id="PartCoverCorDriverRegistryClsIdGuidInProcServer" Root="HKCR" Type="string" Key="CLSID\{6F6225EA-0897-41fa-B1EF-8B4D3E15325E}\InProcServer32" Value="[#PartCover.CorDriver.dll]" />
<Registry Id="PartCoverCorDriverRegistryClsIdGuidInProcServerThreadingModel" Root="HKCR" Type="string" Key="CLSID\{6F6225EA-0897-41fa-B1EF-8B4D3E15325E}\InProcServer32" Name="ThreadingModel" Value="both" />
<Registry Id="PartCoverCorDriverRegistryClsIdGuidProgID" Root="HKCR" Type="string" Key="CLSID\{6F6225EA-0897-41fa-B1EF-8B4D3E15325E}\ProgID" Value="PartCover.CorDriver.Connector.2" />
<Registry Id="PartCoverCorDriverRegistryClsIdGuidProgrammable" Root="HKCR" Type="string" Key="CLSID\{6F6225EA-0897-41fa-B1EF-8B4D3E15325E}\Programmable" Value=" " />
<Registry Id="PartCoverCorDriverRegistryClsIdGuidTypeLib" Root="HKCR" Type="string" Key="CLSID\{6F6225EA-0897-41fa-B1EF-8B4D3E15325E}\TypeLib" Value="{7D0E6AAB-C5FC-4103-AAD4-8BF3112A56C4}" />
<Registry Id="PartCoverCorDriverRegistryClsIdGuidVersionIndependentProgID" Root="HKCR" Type="string" Key="CLSID\{6F6225EA-0897-41fa-B1EF-8B4D3E15325E}\VersionIndependentProgID" Value="PartCover.CorDriver.Connector" />
<Registry Id="PartCoverCorProfilerRegistryClsIdGuid" Root="HKCR" Type="string" Key="CLSID\{717FF691-2ADF-4ac0-985F-1DD3C42FDF90}" Value="CorProfiler Object" />
<Registry Id="PartCoverCorProfilerRegistryClsIdGuidAppId" Root="HKCR" Type="string" Key="CLSID\{717FF691-2ADF-4ac0-985F-1DD3C42FDF90}\AppId" Value="7D0E6AAB-C5FC-4103-AAD4-8BF3112A56C4" />
<Registry Id="PartCoverCorProfilerRegistryClsIdGuidInprocServer32" Root="HKCR" Type="string" Key="CLSID\{717FF691-2ADF-4ac0-985F-1DD3C42FDF90}\InprocServer32" Value="[#PartCover.CorDriver.dll]" />
<Registry Id="PartCoverCorProfilerRegistryClsIdGuidInprocServer32ThreadingModel" Root="HKCR" Type="string" Key="CLSID\{717FF691-2ADF-4ac0-985F-1DD3C42FDF90}\InprocServer32" Name="ThreadingModel" Value="both" />
<Registry Id="PartCoverCorProfilerRegistryClsIdGuidProgId" Root="HKCR" Type="string" Key="CLSID\{717FF691-2ADF-4ac0-985F-1DD3C42FDF90}\ProgId" Value="PartCover.CorDriver.CorProfiler.2" />
<Registry Id="PartCoverCorProfilerRegistryClsIdGuidProgrammable" Root="HKCR" Type="string" Key="CLSID\{717FF691-2ADF-4ac0-985F-1DD3C42FDF90}\Programmable" Value=" " />
<Registry Id="PartCoverCorProfilerRegistryClsIdGuidTypeLib" Root="HKCR" Type="string" Key="CLSID\{717FF691-2ADF-4ac0-985F-1DD3C42FDF90}\TypeLib" Value="{7D0E6AAB-C5FC-4103-AAD4-8BF3112A56C4}" />
<Registry Id="PartCoverCorProfilerRegistryClsIdGuidVersionIndependentProgID" Root="HKCR" Type="string" Key="CLSID\{717FF691-2ADF-4ac0-985F-1DD3C42FDF90}\VersionIndependentProgID" Value="PartCover.CorDriver.CorProfiler" />
<Registry Id="PartCoverCorConnectorRegistry" Root="HKCR" Type="string" Key="PartCover.CorDriver.Connector" Value="PartCoverConnector Object" />
<Registry Id="PartCoverCorConnectorRegistryClsId" Root="HKCR" Type="string" Key="PartCover.CorDriver.Connector\CLSID" Value="{6F6225EA-0897-41fa-B1EF-8B4D3E15325E}" />
<Registry Id="PartCoverCorConnectorRegistryCurVer" Root="HKCR" Type="string" Key="PartCover.CorDriver.Connector\CurVer" Value="PartCover.CorDriver.Connector.2" />
<Registry Id="PartCoverCorConnectorRegistry2" Root="HKCR" Type="string" Key="PartCover.CorDriver.Connector.2" Value="PartCoverConnector Object" />
<Registry Id="PartCoverCorConnectorRegistry2ClsId" Root="HKCR" Type="string" Key="PartCover.CorDriver.Connector.2\CLSID" Value="{6F6225EA-0897-41fa-B1EF-8B4D3E15325E}" />
<Registry Id="PartCoverCorProfilerRegistryName" Root="HKCR" Type="string" Key="PartCover.CorDriver.CorProfiler" Value="CorProfiler Object" />
<Registry Id="PartCoverCorProfilerRegistryNameClsId" Root="HKCR" Type="string" Key="PartCover.CorDriver.CorProfiler\CLSID" Value="{717FF691-2ADF-4ac0-985F-1DD3C42FDF90}" />
<Registry Id="PartCoverCorProfilerRegistryNameCurVer" Root="HKCR" Type="string" Key="PartCover.CorDriver.CorProfiler\CurVer" Value="PartCover.CorDriver.CorProfiler.2" />
<Registry Id="PartCoverCorProfilerRegistry2" Root="HKCR" Type="string" Key="PartCover.CorDriver.CorProfiler.2" Value="CorProfiler Object" />
<Registry Id="PartCoverCorProfilerRegistry2ClsId" Root="HKCR" Type="string" Key="PartCover.CorDriver.CorProfiler.2\CLSID" Value="{717FF691-2ADF-4ac0-985F-1DD3C42FDF90}" />
<Registry Id="PartCoverTypeLibRegistryGuid" Root="HKCR" Type="string" Key="TypeLib\{7D0E6AAB-C5FC-4103-AAD4-8BF3112A56C4}\2.0" Value="PartCover module" />
<Registry Id="PartCoverTypeLibRegistryGuidWin32" Root="HKCR" Type="string" Key="TypeLib\{7D0E6AAB-C5FC-4103-AAD4-8BF3112A56C4}\2.0\0\win32" Value="[#PartCover.CorDriver.dll]" />
<Registry Id="PartCoverTypeLibRegistryGuidFlags" Root="HKCR" Type="string" Key="TypeLib\{7D0E6AAB-C5FC-4103-AAD4-8BF3112A56C4}\2.0\FLAGS" Value="0" />
<Registry Id="PartCoverTypeLibRegistryGuidHelp" Root="HKCR" Type="string" Key="TypeLib\{7D0E6AAB-C5FC-4103-AAD4-8BF3112A56C4}\2.0\HELPDIR" Value=" " />
</Component>
<Component Guid="BEF3D893-B7BA-4487-BDF4-5E8E31AF4C6B" Id="PartCoverCoverageBrowserExe" DiskId="1">
<File Source="..\..\bin\Tools\PartCover\PartCover.Coverage.Browser.exe" Name="PCVRBRW.EXE" Id="PartCover.Coverage.Browser.exe" LongName="PartCover.Coverage.Browser.exe" KeyPath="yes" Assembly=".net" AssemblyApplication="PartCover.Coverage.Browser.exe" AssemblyManifest="PartCover.Coverage.Browser.exe" />
</Component>
<Component Guid="BE28BCAE-B6D2-430E-8591-95C095BDACD7" Id="PartCoverCoverageBrowserExeConfig" DiskId="1">
<File Source="..\..\bin\Tools\PartCover\PartCover.Coverage.Browser.exe.config" Name="PCBRW.CON" Id="PartCover.Coverage.Browser.exe.config" LongName="PartCover.Coverage.Browser.exe.config" KeyPath="yes" />
</Component>
<Component Guid="429867BD-2DC0-4934-BED7-70A17978A57C" Id="PartCoverExe" DiskId="1">
<File Source="..\..\bin\Tools\PartCover\PartCover.exe" Name="PARTCVR.EXE" Id="PartCover.exe" LongName="PartCover.exe" Assembly=".net" KeyPath="yes" AssemblyApplication="PartCover.exe" AssemblyManifest="PartCover.exe" />
</Component>
<Component Guid="1C2BDE86-9B7C-4DA3-BFC2-AD92EB27890B" Id="PartCoverExeConfig" DiskId="1">
<File Source="..\..\bin\Tools\PartCover\PartCover.exe.config" Name="PARTCVR.CON" Id="PartCover.exe.config" LongName="PartCover.exe.config" KeyPath="yes" />
</Component>
<Component Guid="9C5C2A46-D501-495C-A72A-977B0C67217D" Id="PartCoverFrameworkDll" DiskId="1">
<File Source="..\..\bin\Tools\PartCover\PartCover.Framework.dll" Name="PCFWRK.DLL" Id="PartCover.Framework.dll" LongName="PartCover.Framework.dll" KeyPath="yes" />
</Component>
<Directory Id="Xslt" Name="Xslt">
<Component Guid="00708219-F106-4A0E-8CDA-E41DE2C0D611" Id="AssemblyReportXslt" DiskId="1">
<File Source="..\..\bin\Tools\PartCover\Xslt\assembly.report.xslt" Name="ASMRPRT.XSL" Id="assembly.report.xslt" LongName="assembly.report.xslt" KeyPath="yes" />
</Component>
<Component Guid="55D89B3C-F9F7-48CD-983A-27EBB09AEF72" Id="ClassReportXslt" DiskId="1">
<File Source="..\..\bin\Tools\PartCover\Xslt\class.report.xslt" Name="CLSRPT.XSL" Id="class.report.xslt" LongName="class.report.xslt" KeyPath="yes" />
</Component>
</Directory>
</Directory>
</Directory>
<Component Guid="3730EF42-5257-4EB2-9DA1-57151E5EB5A3" Id="AgaControlsDll" DiskId="1">
<File Source="..\..\bin\Aga.Controls.dll" Name="AGACON.DLL" Id="Aga.Controls.dll" LongName="Aga.Controls.dll" Assembly=".net" AssemblyApplication="Aga.Controls.dll" AssemblyManifest="Aga.Controls.dll" KeyPath="yes" />

11
src/Setup/Setup.wxs

@ -363,6 +363,17 @@ @@ -363,6 +363,17 @@
<ComponentRef Id="StringResources.cngb.resources"/>
<ComponentRef Id="AddInWritingHelpWebsiteShortcut"/>
<ComponentRef Id="AppConfigFileTemplate"/>
<ComponentRef Id="InteropPartCoverDll"/>
<ComponentRef Id="PartCoverBrowserManualRtf"/>
<ComponentRef Id="PartCoverConsoleManualRtf"/>
<ComponentRef Id="PartCoverCorDriverDll"/>
<ComponentRef Id="PartCoverCoverageBrowserExe"/>
<ComponentRef Id="PartCoverCoverageBrowserExeConfig"/>
<ComponentRef Id="PartCoverExe"/>
<ComponentRef Id="PartCoverExeConfig"/>
<ComponentRef Id="PartCoverFrameworkDll"/>
<ComponentRef Id="AssemblyReportXslt"/>
<ComponentRef Id="ClassReportXslt"/>
</Feature>
<Feature Id="SharpDevelopFileAssociations"
Level="1"

6
src/Tools/Tools.build

@ -14,6 +14,8 @@ @@ -14,6 +14,8 @@
<NUnitConfigFileNetv11 Include="NUnit\nunit-console-netv11.exe.config"/>
<NUnitConfigFile Include="NUnit\nunit-console.exe.config"/>
<HelpToolFiles Include="Help\*"/>
<PartCoverFiles Include="PartCover\*"/>
<PartCoverXsltFiles Include="PartCover\xslt\*"/>
</ItemGroup>
<Target Name="Build">
@ -33,6 +35,8 @@ @@ -33,6 +35,8 @@
<Copy SourceFiles="@(NUnitConfigFileNetv11)" DestinationFiles="@(NUnitConfigFileNetv11->'..\..\bin\Tools\NUnit\Net-1.1\nunit-console.exe.config')" SkipUnchangedFiles="true"/>
<Copy SourceFiles="@(NUnitConfigFile)" DestinationFolder="..\..\bin\Tools\NUnit" SkipUnchangedFiles="true"/>
<Copy SourceFiles="@(ToolFiles)" DestinationFolder="..\..\bin\Tools" SkipUnchangedFiles="true"/>
<Copy SourceFiles="@(PartCoverFiles)" DestinationFolder="..\..\bin\Tools\PartCover" SkipUnchangedFiles="true"/>
<Copy SourceFiles="@(PartCoverXsltFiles)" DestinationFolder="..\..\bin\Tools\PartCover\Xslt" SkipUnchangedFiles="true"/>
<!--
<MSBuild Projects="@(ToolProject)" Targets="Build">
@ -65,7 +69,7 @@ @@ -65,7 +69,7 @@
<ItemGroup>
<CleanupFiles Include="..\..\bin\*"/>
<CleanupDirectories Include="..\..\bin\UnitTests"/>
<CleanupDirectories Include="..\..\bin\UnitTests"/>
<CleanupDirectories Include="..\..\bin\Tools"/>
<CleanupDirectories Include="..\..\bin\setup\help"/>
<CleanupDirectories Include="..\..\AddIns\Addins"/>

Loading…
Cancel
Save