Browse Source

CI: added Gallio NCover integration libs

la-knuth
Christoph Ruegg 16 years ago
parent
commit
0aaed98d62
  1. BIN
      lib/Gallio_3.2.517.0/NCover/Gallio.NCoverIntegration.dll
  2. 143
      lib/Gallio_3.2.517.0/NCover/Gallio.NCoverIntegration.plugin
  3. BIN
      lib/Gallio_3.2.517.0/NCover/Resources/ncover.ico
  4. 8
      lib/Gallio_3.2.517.0/NCover/libs/NCover Readme.txt
  5. BIN
      lib/Gallio_3.2.517.0/NCover/libs/NCover/CoverLib.dll
  6. 339
      lib/Gallio_3.2.517.0/NCover/libs/NCover/Coverage.xsl
  7. BIN
      lib/Gallio_3.2.517.0/NCover/libs/NCover/MSVCP80.dll
  8. BIN
      lib/Gallio_3.2.517.0/NCover/libs/NCover/MSVCR80.dll
  9. 8
      lib/Gallio_3.2.517.0/NCover/libs/NCover/Microsoft.VC80.CRT.manifest
  10. BIN
      lib/Gallio_3.2.517.0/NCover/libs/NCover/NCover.Console.exe
  11. 6
      lib/Gallio_3.2.517.0/NCover/libs/NCover/NCover.Console.exe.config
  12. BIN
      lib/Gallio_3.2.517.0/NCover/libs/NCover/NCover.Framework.dll
  13. 429
      lib/Gallio_3.2.517.0/NCover/libs/NCover/NCoverFAQ.html
  14. 5
      lib/Gallio_3.2.517.0/NCover/libs/NCoverExplorer Readme.txt
  15. BIN
      lib/Gallio_3.2.517.0/NCover/libs/NCoverExplorer/CommandBars.dll
  16. 95
      lib/Gallio_3.2.517.0/NCover/libs/NCoverExplorer/ConsoleConfig.xsd
  17. 43
      lib/Gallio_3.2.517.0/NCover/libs/NCoverExplorer/ConsoleExample.config
  18. 494
      lib/Gallio_3.2.517.0/NCover/libs/NCoverExplorer/CoverageReport.xsl
  19. BIN
      lib/Gallio_3.2.517.0/NCover/libs/NCoverExplorer/ICSharpCode.TextEditor.dll
  20. BIN
      lib/Gallio_3.2.517.0/NCover/libs/NCoverExplorer/NCoverExplorer.Console.exe
  21. BIN
      lib/Gallio_3.2.517.0/NCover/libs/NCoverExplorer/NCoverExplorer.Core.dll
  22. BIN
      lib/Gallio_3.2.517.0/NCover/libs/NCoverExplorer/NCoverExplorer.NCoverRunner.dll
  23. BIN
      lib/Gallio_3.2.517.0/NCover/libs/NCoverExplorer/NCoverExplorer.exe
  24. 8
      lib/Gallio_3.2.517.0/NCover/libs/NCoverExplorer/NCoverExplorer.exe.config
  25. 301
      lib/Gallio_3.2.517.0/NCover/libs/NCoverExplorer/NCoverExplorerFAQ.html
  26. 790
      lib/Gallio_3.2.517.0/NCover/libs/NCoverExplorer/NCoverExplorerReleaseNotes.html
  27. 299
      lib/Gallio_3.2.517.0/NCover/libs/NCoverExplorer/license.txt

BIN
lib/Gallio_3.2.517.0/NCover/Gallio.NCoverIntegration.dll

Binary file not shown.

143
lib/Gallio_3.2.517.0/NCover/Gallio.NCoverIntegration.plugin

@ -0,0 +1,143 @@
<?xml version="1.0" encoding="utf-8" ?>
<plugin pluginId="Gallio.NCoverIntegration"
recommendedInstallationPath="NCover"
xmlns="http://www.gallio.org/">
<traits>
<name>NCover Integration Plugin</name>
<version>3.2.0.0</version>
<description>Provides support for running tests with NCover code coverage.</description>
<icon>plugin://Gallio.NCoverIntegration/Resources/ncover.ico</icon>
</traits>
<dependencies>
<dependency pluginId="Gallio" />
</dependencies>
<files>
<file path="Gallio.NCoverIntegration.plugin" />
<file path="Gallio.NCoverIntegration.dll" />
<file path="libs\NCover Readme.txt"/>
<file path="libs\NCover\Coverage.xsl" />
<file path="libs\NCover\CoverLib.dll" />
<file path="libs\NCover\Microsoft.VC80.CRT.manifest" />
<file path="libs\NCover\MSVCP80.dll" />
<file path="libs\NCover\MSVCR80.dll" />
<file path="libs\NCover\NCover.Console.exe" />
<file path="libs\NCover\NCover.Console.exe.config" />
<file path="libs\NCover\NCover.Framework.dll" />
<file path="libs\NCover\NCoverFAQ.html" />
<file path="libs\NCoverExplorer Readme.txt"/>
<file path="libs\NCoverExplorer\CommandBars.dll"/>
<file path="libs\NCoverExplorer\ConsoleConfig.xsd"/>
<file path="libs\NCoverExplorer\ConsoleExample.config"/>
<file path="libs\NCoverExplorer\CoverageReport.xsl"/>
<file path="libs\NCoverExplorer\ICSharpCode.TextEditor.dll"/>
<file path="libs\NCoverExplorer\license.txt"/>
<file path="libs\NCoverExplorer\NCoverExplorer.Console.exe"/>
<file path="libs\NCoverExplorer\NCoverExplorer.Core.dll"/>
<file path="libs\NCoverExplorer\NCoverExplorer.exe"/>
<file path="libs\NCoverExplorer\NCoverExplorer.exe.config"/>
<file path="libs\NCoverExplorer\NCoverExplorer.NCoverRunner.dll"/>
<file path="libs\NCoverExplorer\NCoverExplorerFAQ.html"/>
<file path="libs\NCoverExplorer\NCoverExplorerReleaseNotes.html"/>
<file path="Resources\ncover.ico" />
</files>
<assemblies>
<assembly fullName="Gallio.NCoverIntegration, Version=3.2.0.0, Culture=neutral, PublicKeyToken=null"
codeBase="Gallio.NCoverIntegration.dll"
qualifyPartialName="true" />
</assemblies>
<components>
<!-- v1.5.8 -->
<component componentId="NCoverIntegration.NCoverTestRunnerFactory.v1.5.8"
serviceId="Gallio.TestRunnerFactory"
componentType="Gallio.Runner.DefaultTestRunnerFactory, Gallio">
<parameters>
<testIsolationProvider>${NCoverIntegration.NCoverTestIsolationProvider.v1.5.8}</testIsolationProvider>
</parameters>
<traits>
<name>NCover</name>
<description>
Runs tests in an external process with NCover v1.5.8. NCover v1.5.8 is included and does not need to be installed.
Supported test runner properties:
- NCoverArguments: Specifies additional command-line arguments for NCover. eg. "//eas Gallio"
- NCoverCoverageFile: Specifies the path of the coverage file to write. The default is 'Coverage.xml' in the current working directory.
</description>
</traits>
</component>
<component componentId="NCoverIntegration.NCoverTestIsolationProvider.v1.5.8"
serviceId="Gallio.TestIsolationProvider"
componentType="Gallio.NCoverIntegration.NCoverTestIsolationProvider, Gallio.NCoverIntegration">
<parameters>
<version>V1</version>
</parameters>
</component>
<!-- v2 -->
<component componentId="NCoverIntegration.NCoverTestRunnerFactory.v2"
serviceId="Gallio.TestRunnerFactory"
componentType="Gallio.Runner.DefaultTestRunnerFactory, Gallio">
<parameters>
<testIsolationProvider>${NCoverIntegration.NCoverTestIsolationProvider.v2}</testIsolationProvider>
</parameters>
<traits>
<name>NCover2</name>
<description>
Runs tests in an external process with NCover v2. NCover v2 must be installed separately.
Supported test runner properties:
- NCoverArguments: Specifies additional command-line arguments for NCover. eg. "//eas Gallio"
- NCoverCoverageFile: Specifies the path of the coverage file to write. The default is 'Coverage.xml'.
</description>
</traits>
</component>
<component componentId="NCoverIntegration.NCoverTestIsolationProvider.v2"
serviceId="Gallio.TestIsolationProvider"
componentType="Gallio.NCoverIntegration.NCoverTestIsolationProvider, Gallio.NCoverIntegration">
<parameters>
<version>V2</version>
</parameters>
</component>
<!-- v3 -->
<component componentId="NCoverIntegration.NCoverTestRunnerFactory.v3"
serviceId="Gallio.TestRunnerFactory"
componentType="Gallio.Runner.DefaultTestRunnerFactory, Gallio">
<parameters>
<testIsolationProvider>${NCoverIntegration.NCoverTestIsolationProvider.v3}</testIsolationProvider>
</parameters>
<traits>
<name>NCover3</name>
<description>
Runs tests in an external process with NCover v3. NCover v3 must be installed separately.
Supported test runner properties:
- NCoverArguments: Specifies additional command-line arguments for NCover. eg. "//eas Gallio"
- NCoverCoverageFile: Specifies the path of the coverage file to write. The default is 'Coverage.xml'.
</description>
</traits>
</component>
<component componentId="NCoverIntegration.NCoverTestIsolationProvider.v3"
serviceId="Gallio.TestIsolationProvider"
componentType="Gallio.NCoverIntegration.NCoverTestIsolationProvider, Gallio.NCoverIntegration">
<parameters>
<version>V3</version>
</parameters>
</component>
</components>
</plugin>

BIN
lib/Gallio_3.2.517.0/NCover/Resources/ncover.ico

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 KiB

8
lib/Gallio_3.2.517.0/NCover/libs/NCover Readme.txt

@ -0,0 +1,8 @@
NCover v1.5.8 is included in the Gallio distribution (along with its license file).
The NCover.Console.exe's CORFLAGs have been modified to force it to run as a
32bit process using the Windows SDK corflags command. It has not been modified
in any other way.
You may also use other versions of NCover if they have been separately
installed on the local machine.

BIN
lib/Gallio_3.2.517.0/NCover/libs/NCover/CoverLib.dll

Binary file not shown.

339
lib/Gallio_3.2.517.0/NCover/libs/NCover/Coverage.xsl

@ -0,0 +1,339 @@
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:msxsl="urn:schemas-microsoft-com:xslt">
<!-- saved from url=(0022)http://www.ncover.org/ -->
<!-- created by Yves Lorphelin, largely inspired by the nunitsumary.xsl (see nantcontrib.sourceforge.net)-->
<xsl:template match="coverage">
<html>
<head>
<title>NCover Code Coverage Report</title>
<style>
BODY {
font: small verdana, arial, helvetica;
color:#000000;
}
P {
line-height:1.5em;
margin-top:0.5em; margin-bottom:1.0em;
}
H1 {
MARGIN: 0px 0px 5px;
FONT: bold larger arial, verdana, helvetica;
}
H2 {
MARGIN-TOP: 1em; MARGIN-BOTTOM: 0.5em;
FONT: larger verdana,arial,helvetica
}
H3 {
MARGIN-BOTTOM: 0.5em; FONT: bold 13px verdana,arial,helvetica
}
H4 {
MARGIN-BOTTOM: 0.5em; FONT: bold 100% verdana,arial,helvetica
}
H5 {
MARGIN-BOTTOM: 0.5em; FONT: bold 100% verdana,arial,helvetica
}
H6 {
MARGIN-BOTTOM: 0.5em; FONT: bold 100% verdana,arial,helvetica
}
.notVisited { background:red; }
.excluded { background: skyblue; }
.visited { background: #90ee90; }
.title { font-size: 12px; font-weight: bold; }
.assembly { font-size: normal; font-weight: bold; font-size: 11px}
.class {font-size:normal; cursor: hand; color: #444444; font-size: 11px}
.module { color: navy; font-size: 12px; }
.method {cursor: hand; color: ; font-size: 10px; font-weight: bold; }
.subtitle { color: black; font-size: 10px; font-weight: bold; }
.hdrcell {font-size:9px; background-color: #DDEEFF; }
.datacell {font-size:9px; background-color: #FFFFEE; text-align: right; }
.hldatacell {font-size:9px; background-color: #FFCCCC; text-align: right; }
.exdatacell {font-size:9px; background-color: #DDEEFF; text-align: right; }
.detailPercent { font-size: 9px; font-weight: bold; padding-top: 1px; padding-bottom: 1px; padding-left: 3px; padding-right: 3px;}
</style>
<script language="JavaScript"><![CDATA[
function toggle (field)
{ field.style.display = (field.style.display == "block") ? "none" : "block"; }
function SwitchAll(how)
{ var len = document.all.length-1;
for(i=0;i!=len;i++) {
var block = document.all[i];
if (block != null && block.id != '')
{ block.style.display=how;}
}
}
function ExpandAll()
{SwitchAll('block');}
function CollapseAll()
{SwitchAll('none');}
]]></script>
</head>
<body>
<a name="#top"></a>
<xsl:call-template name="header" />
<xsl:call-template name="ModuleSummary" />
<xsl:call-template name="module" />
<xsl:call-template name="footer" />
<script language="JavaScript">CollapseAll();</script>
</body>
</html>
</xsl:template>
<xsl:template name="module">
<xsl:for-each select="//module">
<xsl:sort select="@assembly" />
<xsl:variable name="module" select="./@assembly" />
<div class="assembly">
<a name="#{generate-id($module)}">Module
<xsl:value-of select="$module" />
</a>
</div>
<xsl:for-each select="./method[not(./@class = preceding-sibling::method/@class)]">
<xsl:sort select="@class" />
<xsl:sort select="@name" />
<xsl:call-template name="ClassSummary">
<xsl:with-param name="module" select="$module" />
<xsl:with-param name="class" select="./@class" />
</xsl:call-template>
</xsl:for-each>
</xsl:for-each>
<xsl:variable name="totalMod" select="count(./method/seqpnt[@excluded='false'])" />
<xsl:variable name="notvisitedMod" select="count( ./method/seqpnt[ @visitcount='0'][@excluded='false'] ) div $totalMod * 100 " />
<xsl:variable name="visitedMod" select="count(./method/seqpnt[not(@visitcount='0')] ) div $totalMod * 100" />
</xsl:template>
<xsl:template name="Methods">
<xsl:param name="module" />
<xsl:param name="class" />
<xsl:for-each select="//method[(@class = $class) and (parent::module/@assembly=$module)]">
<xsl:sort select="@name" />
<xsl:variable name="total" select="count(./seqpnt[@excluded='false'])" />
<xsl:variable name="notvisited" select="count(./seqpnt[@visitcount='0'][@excluded='false'] ) " />
<xsl:variable name="visited" select="count(./seqpnt[not(@visitcount='0')])" />
<xsl:variable name="methid" select="generate-id(.)" />
<table cellpadding="3" cellspacing="0" width="90%">
<tr>
<td width="45%" class='method'>
<xsl:attribute name="onclick">javascript:toggle(
<xsl:value-of select="$methid" />)
</xsl:attribute>
<xsl:value-of select="@name" />
</td>
<td width="55%">
<xsl:call-template name="detailPercent">
<xsl:with-param name="visited" select="$visited" />
<xsl:with-param name="notVisited" select="$notvisited" />
<xsl:with-param name="total" select="$total" />
</xsl:call-template>
</td>
</tr>
</table>
<xsl:call-template name="seqpnt">
<xsl:with-param name="module" select="$module" />
<xsl:with-param name="class" select="$class" />
<xsl:with-param name="id" select="$methid" />
</xsl:call-template>
</xsl:for-each>
</xsl:template>
<xsl:template name="seqpnt">
<xsl:param name="module" />
<xsl:param name="class" />
<xsl:param name="id" />
<table cellpadding="3" cellspacing="0" border='1' width="90%" bordercolor="black" style="display: block;">
<xsl:attribute name="id">
<xsl:value-of select="$id" />
</xsl:attribute>
<tr>
<td class="hdrcell">Visits</td>
<td class="hdrcell">Line</td>
<td class="hdrcell">End</td>
<td class="hdrcell">Column</td>
<td class="hdrcell">End</td>
<td class="hdrcell">Document</td>
</tr>
<xsl:for-each select="./seqpnt">
<xsl:sort select="@line" />
<tr>
<td class="datacell">
<xsl:attribute name="class">
<xsl:choose>
<xsl:when test="@excluded = 'true'">exdatacell</xsl:when>
<xsl:when test="@visitcount = 0">hldatacell</xsl:when>
<xsl:otherwise>datacell</xsl:otherwise>
</xsl:choose>
</xsl:attribute>
<xsl:choose>
<xsl:when test="@excluded = 'true'">---</xsl:when>
<xsl:otherwise><xsl:value-of select="@visitcount" /></xsl:otherwise>
</xsl:choose>
</td>
<td class="datacell">
<xsl:value-of select="@line" />
</td>
<td class="datacell">
<xsl:value-of select="@endline" />
</td>
<td class="datacell">
<xsl:value-of select="@column" />
</td>
<td class="datacell">
<xsl:value-of select="@endcolumn" />
</td>
<td class="datacell">
<xsl:value-of select="@document" />
</td>
</tr>
</xsl:for-each>
</table>
</xsl:template>
<!-- Class Summary -->
<xsl:template name="ClassSummary">
<xsl:param name="module" />
<xsl:param name="class" />
<xsl:variable name="total" select="count(//seqpnt[(parent::method/parent::module/@assembly=$module) and (parent::method/@class=$class) and (@excluded='false') ])" />
<xsl:variable name="notvisited" select="count(//seqpnt[(parent::method/parent::module/@assembly=$module)and (parent::method/@class=$class) and (@visitcount='0') and (@excluded='false')] )" />
<xsl:variable name="visited" select="count(//seqpnt[(parent::method/parent::module/@assembly=$module) and (parent::method/@class=$class) and (not(@visitcount='0'))] )" />
<xsl:variable name="newid" select="concat (generate-id(), 'class')" />
<table width='90%'>
<tr>
<td width="40%" class="class">
<xsl:attribute name="onclick">javascript:toggle(
<xsl:value-of select="$newid" />)
</xsl:attribute>
<xsl:value-of select="$class" />
</td>
<td width="60%">
<xsl:call-template name="detailPercent">
<xsl:with-param name="visited" select="$visited" />
<xsl:with-param name="notVisited" select="$notvisited" />
<xsl:with-param name="total" select="$total" />
</xsl:call-template>
</td>
</tr>
<tr>
<table style="display: block;" width="100%">
<tr>
<td>
<xsl:attribute name="id">
<xsl:value-of select="$newid" />
</xsl:attribute>
<xsl:call-template name="Methods">
<xsl:with-param name="module" select="$module" />
<xsl:with-param name="class" select="$class" />
</xsl:call-template>
</td>
</tr>
</table>
</tr>
</table>
<hr size="1" width='90%' align='left' style=" border-bottom: 1px dotted #999;" />
</xsl:template>
<xsl:template name="ClassSummaryDetail">
<xsl:param name="module" />
<xsl:variable name="total" select="count(./method/seqpnt[ @excluded='false' ])" />
<xsl:variable name="notVisited" select="count( ./method/seqpnt[ @visitcount='0'][ @excluded='false' ] )" />
<xsl:variable name="visited" select="count(./method/seqpnt[not(@visitcount='0')] )" />
<td width="35%">
<div class="assembly">
<a href="#{generate-id($module)}">
<xsl:value-of select="$module" />
</a>
</div>
</td>
<td width="65%">
<xsl:call-template name="detailPercent">
<xsl:with-param name="visited" select="$visited" />
<xsl:with-param name="notVisited" select="$notVisited" />
<xsl:with-param name="total" select="$total" />
</xsl:call-template>
</td>
</xsl:template>
<!-- Modules Summary -->
<xsl:template name="ModuleSummary">
<H2>Modules summary</H2>
<xsl:for-each select="//module">
<xsl:sort select="@assembly" />
<table width='90%'>
<tr>
<xsl:call-template name="ModuleSummaryDetail">
<xsl:with-param name="module" select="./@assembly" />
</xsl:call-template>
</tr>
</table>
</xsl:for-each>
<hr size="1" />
</xsl:template>
<xsl:template name="ModuleSummaryDetail">
<xsl:param name="module" />
<xsl:variable name="total" select="count(./method/seqpnt[@excluded='false'])" />
<xsl:variable name="notVisited" select="count( ./method/seqpnt[ @visitcount='0' ][ @excluded='false' ] )" />
<xsl:variable name="visited" select="count(./method/seqpnt[not(@visitcount='0')] )" />
<td width="30%">
<div class="assembly">
<a href="#{generate-id($module)}">
<xsl:value-of select="$module" />
</a>
</div>
</td>
<td width="70%">
<xsl:call-template name="detailPercent">
<xsl:with-param name="visited" select="$visited" />
<xsl:with-param name="notVisited" select="$notVisited" />
<xsl:with-param name="total" select="$total" />
</xsl:call-template>
</td>
</xsl:template>
<!-- General Header -->
<xsl:template name="header">
<h1>
<b>NCover</b> Code Coverage Report
</h1>
<table>
<tr>
<td class="class">
<a onClick="ExpandAll();">Expand</a>
</td>
<td> | </td>
<td class="class">
<a onClick="CollapseAll();">Collapse</a>
</td>
</tr>
</table>
<hr size="1" />
</xsl:template>
<xsl:template name="footer">
<hr size="1" />
<a class="detailPercent" href="#{top}">Top</a>
</xsl:template>
<!-- draw % table-->
<xsl:template name="detailPercent">
<xsl:param name="visited" />
<xsl:param name="notVisited" />
<xsl:param name="total" />
<table width="100%" class="detailPercent">
<tr>
<xsl:if test="($notVisited=0) and ($visited=0)">
<td class="excluded" width="100%">Excluded</td>
</xsl:if>
<xsl:if test="not($notVisited=0)">
<td class="notVisited">
<xsl:attribute name="width">
<xsl:value-of select="concat($notVisited div $total * 100,'%')" />
</xsl:attribute>
<xsl:value-of select="concat (format-number($notVisited div $total * 100,'#.##'),'%')" />
</td>
</xsl:if>
<xsl:if test="not ($visited=0)">
<td class="visited">
<xsl:attribute name="width">
<xsl:value-of select="concat($visited div $total * 100,'%')" />
</xsl:attribute>
<xsl:value-of select="concat (format-number($visited div $total * 100,'#.##'), '%')" />
</td>
</xsl:if>
</tr>
</table>
</xsl:template>
</xsl:stylesheet>

BIN
lib/Gallio_3.2.517.0/NCover/libs/NCover/MSVCP80.dll

Binary file not shown.

BIN
lib/Gallio_3.2.517.0/NCover/libs/NCover/MSVCR80.dll

Binary file not shown.

8
lib/Gallio_3.2.517.0/NCover/libs/NCover/Microsoft.VC80.CRT.manifest

@ -0,0 +1,8 @@
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
<noInheritable></noInheritable>
<assemblyIdentity type="win32" name="Microsoft.VC80.CRT" version="8.0.50727.762" processorArchitecture="x86" publicKeyToken="1fc8b3b9a1e18e3b"></assemblyIdentity>
<file name="msvcr80.dll" hash="10f4cb2831f1e9288a73387a8734a8b604e5beaa" hashalg="SHA1"><asmv2:hash xmlns:asmv2="urn:schemas-microsoft-com:asm.v2" xmlns:dsig="http://www.w3.org/2000/09/xmldsig#"><dsig:Transforms><dsig:Transform Algorithm="urn:schemas-microsoft-com:HashTransforms.Identity"></dsig:Transform></dsig:Transforms><dsig:DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha1"></dsig:DigestMethod><dsig:DigestValue>n9On8FItNsK/DmT8UQxu6jYDtWQ=</dsig:DigestValue></asmv2:hash></file>
<file name="msvcp80.dll" hash="b2082dfd3009365c5b287448dcb3b4e2158a6d26" hashalg="SHA1"><asmv2:hash xmlns:asmv2="urn:schemas-microsoft-com:asm.v2" xmlns:dsig="http://www.w3.org/2000/09/xmldsig#"><dsig:Transforms><dsig:Transform Algorithm="urn:schemas-microsoft-com:HashTransforms.Identity"></dsig:Transform></dsig:Transforms><dsig:DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha1"></dsig:DigestMethod><dsig:DigestValue>0KJ/VTwP4OUHx98HlIW2AdW1kuY=</dsig:DigestValue></asmv2:hash></file>
<file name="msvcm80.dll" hash="542490d0fcf8615c46d0ca487033ccaeb3941f0b" hashalg="SHA1"><asmv2:hash xmlns:asmv2="urn:schemas-microsoft-com:asm.v2" xmlns:dsig="http://www.w3.org/2000/09/xmldsig#"><dsig:Transforms><dsig:Transform Algorithm="urn:schemas-microsoft-com:HashTransforms.Identity"></dsig:Transform></dsig:Transforms><dsig:DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha1"></dsig:DigestMethod><dsig:DigestValue>YJuB+9Os2oxW4mY+2oC/r8lICZE=</dsig:DigestValue></asmv2:hash></file>
</assembly>

BIN
lib/Gallio_3.2.517.0/NCover/libs/NCover/NCover.Console.exe

Binary file not shown.

6
lib/Gallio_3.2.517.0/NCover/libs/NCover/NCover.Console.exe.config

@ -0,0 +1,6 @@
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<startup>
<supportedRuntime version="v2.0.50727"/>
</startup>
</configuration>

BIN
lib/Gallio_3.2.517.0/NCover/libs/NCover/NCover.Framework.dll

Binary file not shown.

429
lib/Gallio_3.2.517.0/NCover/libs/NCover/NCoverFAQ.html

@ -0,0 +1,429 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<html>
<head>
<!-- $Id: NCoverFAQ.html 247 2007-04-26 15:17:46Z peterwald $ -->
<title></title>
<meta content="Microsoft Visual Studio .NET 7.1" name="GENERATOR">
<meta content="http://schemas.microsoft.com/intellisense/ie5" name="vs_targetSchema">
<style> body { font-size: 10pt; font-family: Verdana; }
p.title { font-size: 20pt; font-weight: bold; }
.subtitle { color: maroon; }
p.question { font-weight: bold; }
pre { font-size: 10pt; font-family: Courier; }
pre.usage { background-color: #F0F0F0; }
.quote { background-color: #F0F0F0; margin-left: 36pt;}
.method { color: maroon; font-size: 10pt; font-weight: bold; }
.hdrcell { background-color: #DDEEFF; font-size: 10pt; }
.datacell { background-color: #FFFFEE; text-align: right; font-size: 10pt; }
.hldatacell { background-color: #FFCCCC; text-align: right; font-size: 10pt; }
.box { border: 1px solid; padding: 10px; }
</style>
</head>
<body>
<P class="title">NCover FAQ</P>
<P>If you have questions that this document does not address, contact <A href="mailto:peter@waldschmidt.com">
Peter Waldschmidt</A> or try the <A href="http://ncover.org/">NCover Forums</A>.</P>
<P class="question">1. What is code coverage analysis?</P>
<P class="answer">A code coverage analyzer monitors your code at runtime and
records information about which lines of code were executed. NCover shows each
sequence point in your application along with the number of times that point
was executed. Sequence points are generated by the compiler and stored in the
debug information (.pdb) files. A sequence point basically corresponds to a
single program statement (often a line of code) in your high-level language.</P>
<P class="question">2. Why would I want to do code coverage analysis?</P>
<P class="answer">Unit test suites are often used as a quality tool during the
development process to keep the codebase stable as it changes and expands.
Tools such as <A href="http://nunit.org/">NUnit</A> are often used to run and
report on the test suites. However, when implementing unit testing in your
build process, you have no way of knowing how much of your code the unit tests
are actually testing. This is where code coverage comes in. You can run NUnit
within NCover and use the code coverage report to determine which code was not
tested by that particular test suite.</P>
<P class="question">3. What versions of the CLR does NCover support?</P>
<P class="answer">
NCover 1.5.x requires the .NET framework version 2.0.50727 to be installed; however,
the application being profiled can be written against any shipping version of the
framework. NCover
has been tested profiling coverage of .NET 2.0, .NET 1.1 and .NET 1.0 applications.</P>
<P class="question">4. Which version of NCover should I install?</p>
<P class="answer">
If you have the .NET 2.0 framework installed on your machine then you should use
the latest NCover version available. NCover as of version 1.5 can profile .NET 2.0, 1.1 and 1.0 applications.</p>
<p class="answer">
For development teams who do not have the .NET framework 2.0 installed but do have
the .NET framework version 1.1.4322, you can
try NCover 1.3.3. Note however that this version is no longer supported as
it has a number of known issues and limitations.</p>
<P class="question">5. What is the command line syntax for NCover?</P>
<P class="answer">Here is the usage info from the NCover command line (for NCover versions from 1.5.6
only):</P>
<pre class="usage">NCover.Console [&lt;command line&gt; [&lt;command args&gt;]]
[//svc &lt;service name&gt;]
[//iis]
[//a &lt;assembly list&gt;]
[//w &lt;working directory&gt;]
[//ea &lt;exclusion list&gt;]
[//reg]
[//x &lt;xml output file&gt;]
[//s [&lt;settings file&gt;]] [//r [&lt;settings file&gt;]]
[//v] [//q]
[//l &lt;log file&gt;]
//svc For profiling windows services
//iis For profiling web applications
//a List of assemblies to profile separated by semi-colons i.e. "MyAssembly1;MyAssembly2". Do not include paths or suffixes.
//w Working directory for profiled application
//ea List of attributes marking classes or methods to exclude from coverage
//reg Register profiler temporarily for user. (helps with xcopy deployment)
//x Specify coverage output file. (default: coverage.xml).
//pm Specify name of process to profile (i.e. myapp.exe)
//s Save settings to a file (defaults: NCover.Settings)
//r Use settings file, overriding other settings (default: NCover.Settings)
//l Specify profiler log file (default: coverage.log).
//q No logging (quiet)
//v Enable verbose logging (show instrumented code)
</pre>
<UL>
<LI>&lt;command line&gt; - This argument specifies the command-line of the .NET application
you want to analyze.
Any command line arguments not starting with // will be passed
through to that application. NCover will profile the running application until it has exited. See below for examples.<li>//svc - This option is an alternative to the &lt;command line&gt;
for profiling windows services, which cannot be run directly as executables. NCover
will start the service (stopping it first if already running) and profile coverage
until the windows service is stopped.</li>
<li>//iis - This option is an alternative to the &lt;command line&gt; for profiling
web applications. NCover will start the IISAdmin and W3C
services (stopping first if currently running) and profile coverage until the IISAdmin
service is stopped.<br />
</li>
<li>//a - This command-line argument specifies the assemblies that you want to analyze.
NCover can only analyze assemblies that have .pdb files included with them. If
you do not specify the //a argument, NCover will attempt to analyze every loaded
assembly that has debug information available. Note that the assembly name arguments are
the module name within the assembly, not the physical file name. e.g. "MyAssembly"
rather than "MyAssembly.dll".<li>//w - If the application being profiled requires the
working directory to be set to something other than the current directory you are
executing the command line from then you can override it with this argument.</li>
<li>//ea - You can choose to exclude classes and methods
from coverage statistics by defining .NET attribute(s) and applying it to the affected
code. When using this argument you must specify the full type namespace of these
attribute(s) separated by semi-colons. See below for an example.<br />
</li>
<li>//reg - NCover requires a COM registration of the CoverLib.dll assembly containing
the profiler, which is performed automatically by the default .msi installation.
If you require an xcopy style deployment of NCover like many other .NET tools, then
you can use this argument which will temporarily register the profiler while performing
coverage. This feature was added in NCover 1.5.6.</li>
<li>//x - The output of NCover is an xml file (example below). Use this argument to
specify an alternate filename to "coverage.xml" in the current directory.<br />
</li>
<li>//pm - This setting tells NCover to ignore processes that don't have the specified process module name.
This is the name of the executable (i.e. myapp.exe). This setting is useful in cases, where your NCover
command spawns a series of child processes. Using this setting will help NCover determine which process to profile.
</li>
<li>//s - You may find it more convenient to use a settings file rather than specifying
a long list of command line arguments for running NCover. If you get the NCover
command line working as you would like it and then use the //s argument it will
save the required arguments as an xml file that can then be used by the //r argument
below.</li>
<li>//r - For use when you have used //s to construct an NCover settings file containing
your command line arguments. e.g. "ncover.console.exe //r NCover.Settings"<br />
</li>
<li>//l - The coverage log file can provide an insight if the desired coverage output
is not obtained. Useful information you may find to assist you includes which assemblies
were loaded by NCover, their file paths and which of those it found the .pdb build
symbols for. Use this argument to specify an alternative log file name or location
to coverage.log in the current directory.</li>
<li>//q - Suppresses writing the coverage.log file.</li>
<li>//v - This command-line argument makes the profiler emit all the original IL and
modified IL instructions to the coverage log. This is useful for debugging
purposes. Beware that this can make your coverage log file very large!
</li>
</UL>
<P class="question">6. Does NCover required a special compilation step for my code?</P>
<P class="answer">No. Some code coverage tools change your source code and force
you to recompile it into a special build.&nbsp; NCover is designed to&nbsp;work
on shipping code.&nbsp; NCover uses the .NET Framework profiling API to monitor
your code. It does require build symbols, but can be run on release code
without any modifications.</P>
<P class="question">7. How does NCover work?</P>
<P class="answer">NCover uses the .NET Framework profiler API to monitor an
application's execution. When a method is loaded by the CLR, NCover retrieves
the IL and replaces it with instrumented IL code.&nbsp; NCover does not change
your original IL code, it simply inserts new code to update&nbsp;a visit
counter at each sequence point.&nbsp; Upon
request, (usually after the .NET process has shut down) the profiler outputs statistics
to the coverage file.
</P>
<P class="question">
8. What is the output of NCover?</P>
<P class="answer">NCover generally writes out three files after analysis
completes.
<ul>
<li>
Coverage.log - This file is a log of the events and messages from the profiler
during the analysis process. Most of the time, error messages are recorded in
this log. If you enable verbose logging, the coverage log will contain
disassembly of the original and instrumented IL code.&nbsp; Verbose logging is not recommended for
normal use.<li>
Coverage.xml - This file is the analysis output of NCover. You can see an
example of the output below.
<LI>
Coverage.xsl - This file is a simple XML transformation that makes the XML
output easily readable.
</LI>
</ul>
<span class="subtitle">Example XML output</span>
<div class="box"><pre>&lt;method class="NCoverTest.ClassLoaded" name="HasDeadCode"&gt;
&lt;seqpnt document="C:\Dev\Utilities\ncover\NCoverTest\NCoverTest.cs"
column="13" line="48" endcolumn="58" endline="48" visitcount="1" /&gt;
&lt;seqpnt document="C:\Dev\Utilities\ncover\NCoverTest\NCoverTest.cs"
column="13" line="49" endcolumn="22" endline="49" visitcount="1" /&gt;
&lt;seqpnt document="C:\Dev\Utilities\ncover\NCoverTest\NCoverTest.cs"
column="17" line="50" endcolumn="24" endline="50" visitcount="1" /&gt;
&lt;seqpnt document="C:\Dev\Utilities\ncover\NCoverTest\NCoverTest.cs"
column="13" line="51" endcolumn="48" endline="51" visitcount="0" /&gt;
&lt;seqpnt document="C:\Dev\Utilities\ncover\NCoverTest\NCoverTest.cs"
column="9" line="52" endcolumn="10" endline="52" visitcount="0" /&gt;
&lt;/method&gt;</pre>
</div>
<p></p>
<span class="subtitle">Example transformed output</span>
<div class="box">
<DIV class="method">NCoverTest.ClassLoaded.HasDeadCode</DIV>
<TABLE id="Table1" borderColor="black" cellSpacing="0" cellPadding="3" border="1">
<TBODY>
<TR>
<TD class="hdrcell">Visit Count</TD>
<TD class="hdrcell">Line</TD>
<TD class="hdrcell">Column</TD>
<TD class="hdrcell">End Line</TD>
<TD class="hdrcell">End Column</TD>
<TD class="hdrcell">Document</TD>
</TR>
<TR>
<TD class="datacell">1</TD>
<TD class="datacell">48</TD>
<TD class="datacell">13</TD>
<TD class="datacell">48</TD>
<TD class="datacell">58</TD>
<TD class="datacell">C:\Dev\Utilities\ncover\NCoverTest\NCoverTest.cs</TD>
</TR>
<TR>
<TD class="datacell">1</TD>
<TD class="datacell">49</TD>
<TD class="datacell">13</TD>
<TD class="datacell">49</TD>
<TD class="datacell">22</TD>
<TD class="datacell">C:\Dev\Utilities\ncover\NCoverTest\NCoverTest.cs</TD>
</TR>
<TR>
<TD class="datacell">1</TD>
<TD class="datacell">50</TD>
<TD class="datacell">17</TD>
<TD class="datacell">50</TD>
<TD class="datacell">24</TD>
<TD class="datacell">C:\Dev\Utilities\ncover\NCoverTest\NCoverTest.cs</TD>
</TR>
<TR>
<TD class="hldatacell">0</TD>
<TD class="datacell">51</TD>
<TD class="datacell">13</TD>
<TD class="datacell">51</TD>
<TD class="datacell">48</TD>
<TD class="datacell">C:\Dev\Utilities\ncover\NCoverTest\NCoverTest.cs</TD>
</TR>
<TR>
<TD class="hldatacell">0</TD>
<TD class="datacell">52</TD>
<TD class="datacell">9</TD>
<TD class="datacell">52</TD>
<TD class="datacell">10</TD>
<TD class="datacell">C:\Dev\Utilities\ncover\NCoverTest\NCoverTest.cs</TD>
</TR>
</TBODY>
</TABLE>
</div>
<P>Suggested usages of the coverage.xml output are to display it in the <a href="http://ncoverexplorer.org/">
NCoverExplorer</a> gui with the source
code highlighted, to generate html reports, or to include it in your continuous build server reports such as CruiseControl.Net.
For more information on these options see below in the FAQ.</P>
<P></P>
<P class="question">
9. How do I use coverage exclusions?</P>
<p>
First you should define an attribute to markup your excluded code with. You will
likely want to put this in a common assembly to make it reusable, or indeed within
a "CommonAssemblyInfo.cs" that you include in all your application assemblies.</p>
<P></P>
<pre class="usage">namespace MyNamespace {
class CoverageExcludeAttribute : System.Attribute { }
}</pre>
<p>
Apply the attribute to the C# classes and/or methods you wish to mark as excluded
from code coverage statistics:</p>
<P></P>
<pre class="usage"> [CoverageExclude]
private void SomeMethodToExclude() {} </pre>
<p>
Finally, ensure you pass the full qualified attribute information in the NCover command line:</p>
<P></P>
<pre class="usage"> NCover.Console MyApplication.exe //ea MyNamespace.CoverageExcludeAttribute </pre>
<p>
Note that if you are using the <a href="http://testdriven.net/">TestDriven.Net</a>
VS.Net add-in to "Test with Coverage" it will automatically
pass through "//ea CoverageExcludeAttribute"
which you should define without a namespace like above. For further information refer to this
<a href="http://weblogs.asp.net/nunitaddin/archive/2006/10/04/CoverageExclude.aspx">
blog entry</a>.</p>
<P class="question">
10. Examples</P>
<p>
Coverage while running a simple executable until it exits:</p>
<P></P>
<pre class="usage"> NCover.Console MyApplication.exe</pre>
<p>
Coverage while running all the unit tests in an assembly using NUnit, profiling
all loaded assemblies with .pdb build symbols:</p>
<P></P>
<pre class="usage"> NCover.Console nunit-console.exe MyApplication.Tests.dll</pre>
<p>
Coverage of only a subset of loaded assemblies while running unit tests:</p>
<P></P>
<pre class="usage"> NCover.Console nunit-console.exe MyApplication.Tests.dll //a MyApplication.Core;MyApplication.Utilities</pre>
<p>
Coverage of a windows service. Stop the service to generate the coverage output:</p>
<P></P>
<pre class="usage"> NCover.Console //svc MyServiceName</pre>
<p>
Coverage of an ASP.Net application. Stop the IIS service to generate the coverage
output:</p>
<P></P>
<pre class="usage"> NCover.Console //iis</pre>
<P class="question">
11. Where can I get help or support?</P>
<P class="answer">
Your best approach is to browse the <a href="http://ncover.org/site/forums/default.aspx">
NCover forums</a> as well as the <a href="http://ncover.org/SITE/blogs/default.aspx">
blog</a> by the author Peter Waldschmidt. If you cannot find a similar issue
mentioned feel free to post your query and perhaps someone can help.</P>
<P class="question">
12. How do I "xcopy deploy" NCover like my other build tools?</P>
<P class="answer">
Many developers prefer to have their build tools such as NUnit, NAnt etc stored
in source control in a Tools folder along with the source code. This ensures that
a new developer can obtain and build the application without having to install additional
tools on their own machines.</P>
<p>
NCover can also be deployed in this fashion. However the one gotcha with NCover
versus other tools is that the profiler within CoverLib.dll must be COM registered
on the local machine before you execute it. Prior to NCover 1.5.6 this was usually
achieved as part of your build script, which would call regsvr32 with the path to
the CoverLib.dll in your Tools folder. Alternatively the &lt;ncover&gt; NAnt and
MSBuild tasks described below will do this for you. As of NCover 1.5.6 you can also
use the //reg option in the command line arguments which will temporarily register
the profiler. Note that the //reg option will not work for IIS or Windows Service
profiling unless you are running NCover under the same Windows login account as
the IIS worker process, or your Windows Service.</p>
<P class="question">
13. How do I see my source code highlighted with the coverage results?</P>
<P class="answer">
<a href="http://ncoverexplorer.org/">NCoverExplorer</a> is a gui and console-based
.NET application developed by <a href="http://www.kiwidude.com/blog/">Grant Drake</a>. NCoverExplorer
parses the coverage.xml files output from NCover and displays the results integrated
with your source code. It also includes a number of additional features to merge,
filter, sort and generate html reports. The console version is
designed to be used as part of an automated build process. The support forums for
NCoverExplorer are located with the NCover ones at <a href="http://ncover.org">http://ncover.org/</a>.<strong>&nbsp;</strong></P>
<P class="question">
14. How do I run NCover from within the Visual Studio.Net IDE?</P>
<P class="answer">
The <a href="http://testdriven.net/">TestDriven.Net</a> add-in by <a href="http://weblogs.asp.net/nunitaddin/">
Jamie Cansdale</a> offers a right-click capability within the IDE to execute
your unit tests with code coverage. The results of the NCover code coverage are
displayed with the bundled NCoverExplorer gui for analysis and reporting.</P>
<P class="question">
15. How do I run NCover from a NAnt or MSBuild task?</P>
<P class="answer">
You can use an &lt;exec&gt; task with <a href="http://nant.sourceforge.net/">NAnt</a>
or an &lt;Exec&gt; task with MSBuild. Alternatively you may want to use the custom
&lt;ncover&gt; task for NAnt or &lt;NCover&gt; task for MSBuild developed by Grant
Drake for a more developer friendly syntax. The source code, compiled assemblies
and documentation are located in the NCoverExplorer.Extras.zip available from <a
href="http://ncoverexplorer.org/">http://ncoverexplorer.org/</a>.</P>
<P class="question">
16. How do I include NCover output in my CruiseControl.Net build reports?</P>
<P class="answer">
<a href="http://ccnet.thoughtworks.com/">CruiseControl.Net</a> is a continuous integration
build server which offers web-based reporting of the outputs of a build such as
unit test results and code coverage reporting. The default CruiseControl.Net installation
includes a basic stylesheet which works in combination with the standard coverage.xml
formatted output. So all you need to do is include the execution of NCover as part
of your build, then add a CruiseControl.Net merge file publisher task to integrate
the coverage.xml results into the build output.</P>
<p class="answer">
An improvement on the above to display more attractive and powerful reports as well
as minimize the build log size is to use NCoverExplorer. The NCoverExplorer.Console.exe
is designed to produce a more concise xml report summary that is combined with an
alternate xsl stylesheet for CruiseControl.Net. You can find more information and
screenshots in this <a href="http://www.kiwidude.com/blog/2006/04/ncoverexplorer-v133.html">
blog entry</a> - all the necessary tasks, examples and documentation are located
within NCoverExplorer.Extras.zip available from <a href="http://ncoverexplorer.org/">
http://ncoverexplorer.org/</a>.&nbsp;</p>
<P class="question">
17. How do I merge multiple NCover coverage.xml results?</P>
<P class="answer">
You can can use NCoverExplorer to merge the results of multiple coverage runs. For
more information refer to this <a href="http://www.kiwidude.com/blog/2006/10/ncoverexplorer-merging-ncover-reports.html">
blog entry</a>.</P>
<P class="question">
18. Troubleshooting: Why is my coverage.xml file empty?</P>
<ul>
<li>If using the command-line, did you COM register CoverLib.dll (or use the //reg option
from NCover 1.5.6)?</li>
<li>Did you generate build symbol files (.pdbs) for the profiled application?</li>
<li>If using the //a option, did you correctly list just the assembly names without
paths or .dll suffixes?</li>
</ul>
<P class="question">
19. Troubleshooting: I have coverage.xml output but my XYZ assembly is not included in it?</P>
<ul>
<li>NCover will only profile loaded assemblies - did your code execution path while
under coverage force that assembly to be loaded (e.g. by loading a type or calling
a method in that assembly)?&nbsp;</li>
<li>Did you generate build symbol files (.pdb files) for the missing assembly? </li>
<li>If using the //a option, did you correctly list the assembly names including the
one that is missing?</li>
<li>Can you see information about the assembly being loaded within the coverage.log?
Is the correct assembly being loaded (check the path) - if you have a version in
the GAC it may possibly prevent the .pdb file from being loaded.</li><li>If using the NCoverExplorer gui, have you got a coverage exclusion defined which
is hiding it from the display?</li>
</ul>
<P class="question">
20. Troubleshooting: After running NCover my coverage.log says "Failed to load symbols for module XYZ"?</P>
<ul>
<li>This message means that no .pdb build symbol file was found for that assembly so
it cannot be profiled for code coverage. If that assembly is part of the .NET framework
for instance like System.Data.dll, then this is an expected message and should not
cause concern.&nbsp;</li><li>If however the assembly belongs to your application, did you generate the
build symbol files (.pdb files) for it? </li>
</ul>
<P class="question">
21. Troubleshooting: I get a "Profiled process terminated. Profiler connection not
established" message?</P>
<ul>
<li>If using the command-line, did you COM register CoverLib.dll (or use the //reg option
from NCover 1.5.6)?</li><li>Are you running Windows XP 64-bit? You may want to take a look at
<a href="http://ncover.org/SITE/forums/thread/43.aspx">this thread</a></li></ul>
<P class="question">
22. Troubleshooting: My coverage exclusions are not working?</P>
<ul>
<li>Have you put the full namespace type name to the exclusion including the Attribute suffix in the //ea argument? See the "How
do I use coverage exclusions?" question above.</li></ul>
&nbsp;
</body>
</html>

5
lib/Gallio_3.2.517.0/NCover/libs/NCoverExplorer Readme.txt

@ -0,0 +1,5 @@
NCoverExplorer v1.3.6 is included in the Gallio distribution (along with its license file).
This version of NCoverExplorer is used together with the included copy
of NCover v1.5.8 to merge coverage files. Newer versions of NCover
include a specialized reporting tool for this purpose.

BIN
lib/Gallio_3.2.517.0/NCover/libs/NCoverExplorer/CommandBars.dll

Binary file not shown.

95
lib/Gallio_3.2.517.0/NCover/libs/NCoverExplorer/ConsoleConfig.xsd

@ -0,0 +1,95 @@
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<!-- NCoverExplorer (c) 2006 Grant Drake. -->
<!-- Schema for configuration file to be passed to NCoverExplorer-Console.exe using /config: switch -->
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified">
<xs:element name="NCoverExplorer">
<xs:complexType>
<xs:sequence>
<!-- Title name to appear on the report (equivalent to /project:xx). Default is blank. -->
<xs:element name="ProjectName" type="xs:string" minOccurs="0" maxOccurs="1" />
<!-- Threshold for acceptance criteria for coverage reports detailing acceptable coverage levels. Default is 95% -->
<xs:element name="SatisfactoryCoverageThreshold" type="xs:decimal" minOccurs="0" maxOccurs="1" />
<!-- Minimum coverage % (equivalent to /minCoverage:xx) below which exit code 3 will be thrown. Default is off by omitting this. -->
<xs:element name="MinCoverageForExitCode" type="xs:decimal" minOccurs="0" maxOccurs="1" />
<!-- Filtering to be applied to the results. Use integer (starting from 0=None) or named value. Default is "None". -->
<xs:element name="TreeFilterStyle" minOccurs="0" maxOccurs="1">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:enumeration value="None"/>
<xs:enumeration value="HideUnvisited"/>
<xs:enumeration value="HideFullyCovered"/>
<xs:enumeration value="HideThresholdCovered"/>
</xs:restriction>
</xs:simpleType>
</xs:element>
<!-- Sorting to be applied to the results. Use integer (starting from 0=Name) or named value. Default is "Name". -->
<xs:element name="TreeSortStyle" minOccurs="0" maxOccurs="1">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:enumeration value="Name"/>
<xs:enumeration value="ClassLine"/>
<xs:enumeration value="CoveragePercentageAscending"/>
<xs:enumeration value="CoveragePercentageDescending"/>
<xs:enumeration value="UnvisitedSequencePointsAscending"/>
<xs:enumeration value="UnvisitedSequencePointsDescending"/>
<xs:enumeration value="VisitCountAscending"/>
<xs:enumeration value="VisitCountDescending"/>
<xs:enumeration value="FunctionCoverageAscending"/>
<xs:enumeration value="FunctionCoverageDescending"/>
</xs:restriction>
</xs:simpleType>
</xs:element>
<!-- Coverage exclusions to exclude specified assemblies, namespaces and/or classes. -->
<xs:element name="CoverageExclusions" minOccurs="0" maxOccurs="1">
<xs:complexType>
<xs:sequence>
<xs:element ref="CoverageExclusion" maxOccurs="unbounded"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<!-- Module specific coverage thresholds if wanting more granular coverage tolerances. -->
<xs:element name="ModuleThresholds" minOccurs="0" maxOccurs="1">
<xs:complexType>
<xs:sequence>
<xs:element ref="ModuleThreshold" maxOccurs="unbounded"/>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="CoverageExclusion">
<xs:complexType>
<xs:sequence>
<xs:element name="ExclusionType" minOccurs="1" maxOccurs="1" >
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:enumeration value="Assembly"/>
<xs:enumeration value="Namespace"/>
<xs:enumeration value="Class"/>
</xs:restriction>
</xs:simpleType>
</xs:element>
<xs:element name="Pattern" type="xs:string" minOccurs="1" maxOccurs="1" />
<xs:element name="IsRegex" type="xs:boolean" minOccurs="0" maxOccurs="1" />
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="ModuleThreshold">
<xs:complexType>
<xs:attribute name="ModuleName" use="required" type="xs:string" />
<xs:attribute name="SatisfactoryCoverage" use="required" type="xs:decimal" />
</xs:complexType>
</xs:element>
</xs:schema>

43
lib/Gallio_3.2.517.0/NCover/libs/NCoverExplorer/ConsoleExample.config

@ -0,0 +1,43 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Example configuration file to be passed to NCoverExplorer-Console.exe using /config: switch -->
<!-- If not supplied, then the same defaults will be used as the NCoverExplorer GUI. -->
<NCoverExplorer xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<!-- Title name to appear on the report (equivalent to /project:xx). Default is blank. -->
<ProjectName>Example.Project</ProjectName>
<!-- Minimum coverage % (equivalent to /minCoverage:xx) below which exit code 3 will be thrown. Default is off. -->
<!--<MinCoverageForExitCode>80</MinCoverageForExitCode>-->
<!-- Threshold for acceptance criteria for coverage reports detailing acceptable coverage levels. Default is 95% -->
<SatisfactoryCoverageThreshold>80</SatisfactoryCoverageThreshold>
<!-- Filtering to be applied to the results. Use integer or named value. Default is "None". Possible values:
"None" (0),
"HideUnvisited" (1),
"HideFullyCovered" (2),
"HideThresholdCovered" (3)
-->
<TreeFilterStyle>None</TreeFilterStyle>
<!-- Sorting to be applied to the results. Use integer or named value. Default is "Name". Possible values:
"Name" (0),
"ClassLine" (1),
"CoveragePercentageAscending" (2), "CoveragePercentageDescending" (3),
"UnvisitedSequencePointsAscending" (4), "UnvisitedSequencePointsDescending" (5),
"VisitCountAscending" (6), "VisitCountDescending" (7)
"FunctionCoverageAscending" (8), "FunctionCoverageDescending" (9),
-->
<TreeSortStyle>Name</TreeSortStyle>
<!-- Coverage exclusions to exclude specified assemblies, namespaces and/or classes. -->
<CoverageExclusions>
<CoverageExclusion>
<ExclusionType>Assembly</ExclusionType> <!-- Valid values are [Assembly], [Namespace] and [Class]. -->
<Pattern>*.Tests</Pattern>
<IsRegex>false</IsRegex> <!-- Only required with a value of "true" if you do have a regular expression based pattern -->
</CoverageExclusion>
<CoverageExclusion>
<ExclusionType>Namespace</ExclusionType>
<Pattern>*.My*</Pattern>
</CoverageExclusion>
</CoverageExclusions>
<!-- Module specific coverage thresholds - optional section -->
<ModuleThresholds>
<ModuleThreshold ModuleName="NCoverExplorer.Core.dll" SatisfactoryCoverage="30" />
</ModuleThresholds>
</NCoverExplorer>

494
lib/Gallio_3.2.517.0/NCover/libs/NCoverExplorer/CoverageReport.xsl

@ -0,0 +1,494 @@
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:msxsl="urn:schemas-microsoft-com:xslt">
<!-- Created for NCoverExplorer by Grant Drake (see http://www.kiwidude.com/blog/) -->
<xsl:output method="html" doctype-system="http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd" doctype-public="-//W3C//DTD XHTML 1.0 Transitional//EN"/>
<xsl:template match="/">
<html>
<head>
<xsl:comment>Generated by NCoverExplorer (see http://www.kiwidude.com/blog/)</xsl:comment>
<title>NCoverExplorer - Merged Report</title>
<style>
body { font: small verdana, arial, helvetica; color:#000000; }
.coverageReportTable { font-size: 9px; }
.reportHeader { padding: 5px 8px 5px 8px; font-size: 12px; border: 1px solid; margin: 0px; }
.titleText { font-weight: bold; font-size: 12px; white-space: nowrap; padding: 0px; margin: 1px; }
.subtitleText { font-size: 9px; font-weight: normal; padding: 0px; margin: 1px; white-space: nowrap; }
.projectStatistics { font-size: 10px; border-left: #649cc0 1px solid; white-space: nowrap; width: 40%; }
.heading { font-weight: bold; }
.mainTableHeaderLeft { border: #dcdcdc 1px solid; font-weight: bold; padding-left: 5px; }
.mainTableHeader { border-bottom: 1px solid; border-top: 1px solid; border-right: 1px solid; text-align: center; }
.mainTableGraphHeader { border-bottom: 1px solid; border-top: 1px solid; border-right: 1px solid; text-align: left; font-weight: bold; }
.mainTableCellItem { background: #ffffff; border-left: #dcdcdc 1px solid; border-right: #dcdcdc 1px solid; padding-left: 10px; padding-right: 10px; font-weight: bold; font-size: 10px; }
.mainTableCellData { background: #ffffff; border-right: #dcdcdc 1px solid; text-align: center; white-space: nowrap; }
.mainTableCellPercent { background: #ffffff; font-weight: bold; white-space: nowrap; text-align: right; padding-left: 10px; }
.mainTableCellGraph { background: #ffffff; border-right: #dcdcdc 1px solid; padding-right: 5px; }
.mainTableCellBottom { border-bottom: #dcdcdc 1px solid; }
.childTableHeader { border-top: 1px solid; border-bottom: 1px solid; border-left: 1px solid; border-right: 1px solid; font-weight: bold; padding-left: 10px; }
.childTableCellIndentedItem { background: #ffffff; border-left: #dcdcdc 1px solid; border-right: #dcdcdc 1px solid; padding-right: 10px; font-size: 10px; }
.exclusionTableCellItem { background: #ffffff; border-left: #dcdcdc 1px solid; border-right: #dcdcdc 1px solid; padding-left: 10px; padding-right: 10px; }
.projectTable { background: #a9d9f7; border-color: #649cc0; }
.primaryTable { background: #d7eefd; border-color: #a4dafc; }
.secondaryTable { background: #f9e9b7; border-color: #f6d376; }
.secondaryChildTable { background: #fff6df; border-color: #f5e1b1; }
.exclusionTable { background: #fadada; border-color: #f37f7f; }
.graphBarNotVisited { font-size: 2px; border:#9c9c9c 1px solid; background:#df0000; }
.graphBarSatisfactory { font-size: 2px; border:#9c9c9c 1px solid; background:#f4f24e; }
.graphBarVisited { background: #00df00; font-size: 2px; border-left:#9c9c9c 1px solid; border-top:#9c9c9c 1px solid; border-bottom:#9c9c9c 1px solid; }
.graphBarVisitedFully { background: #00df00; font-size: 2px; border:#9c9c9c 1px solid; }
</style>
</head>
<body>
<table class="coverageReportTable" cellpadding="2" cellspacing="0">
<tbody>
<xsl:apply-templates select="//coverageReport" />
</tbody>
</table>
</body>
</html>
</xsl:template>
<!-- Main Project Section -->
<xsl:template match="//coverageReport">
<xsl:variable name="reportType" select="./@reportTitle" />
<xsl:variable name="threshold">
<xsl:choose>
<xsl:when test="$reportType = 'Module Class Function Summary'"><xsl:value-of select="./project/@acceptableFunction" /></xsl:when>
<xsl:otherwise><xsl:value-of select="./project/@acceptable" /></xsl:otherwise>
</xsl:choose>
</xsl:variable>
<xsl:variable name="unvisitedTitle">
<xsl:choose>
<xsl:when test="$reportType = 'Module Class Function Summary'">Unvisited Functions</xsl:when>
<xsl:otherwise>Unvisited SeqPts</xsl:otherwise>
</xsl:choose>
</xsl:variable>
<xsl:variable name="coverageTitle">
<xsl:choose>
<xsl:when test="$reportType = 'Module Class Function Summary'">Function Coverage</xsl:when>
<xsl:otherwise>Coverage</xsl:otherwise>
</xsl:choose>
</xsl:variable>
<xsl:call-template name="header" />
<xsl:call-template name="projectSummary">
<xsl:with-param name="threshold" select="$threshold" />
<xsl:with-param name="unvisitedTitle" select="$unvisitedTitle" />
<xsl:with-param name="coverageTitle" select="$coverageTitle" />
<xsl:with-param name="reportType" select="$reportType" />
</xsl:call-template>
<xsl:if test="$reportType != 'Namespace Summary'">
<xsl:call-template name="moduleSummary">
<xsl:with-param name="threshold" select="$threshold" />
<xsl:with-param name="unvisitedTitle" select="$unvisitedTitle" />
<xsl:with-param name="coverageTitle" select="$coverageTitle" />
</xsl:call-template>
</xsl:if>
<xsl:if test="$reportType = 'Module Namespace Summary'">
<xsl:call-template name="moduleNamespaceSummary">
<xsl:with-param name="threshold" select="$threshold" />
</xsl:call-template>
</xsl:if>
<xsl:if test="($reportType = 'Module Class Summary') or ($reportType = 'Module Class Function Summary')">
<xsl:call-template name="classModuleSummary">
<xsl:with-param name="threshold" select="$threshold" />
<xsl:with-param name="unvisitedTitle" select="$unvisitedTitle" />
<xsl:with-param name="coverageTitle" select="$coverageTitle" />
</xsl:call-template>
</xsl:if>
<xsl:if test="$reportType = 'Namespace Summary'">
<xsl:call-template name="namespaceSummary">
<xsl:with-param name="threshold" select="$threshold" />
</xsl:call-template>
</xsl:if>
<xsl:if test="count(./exclusions/exclusion) != 0">
<xsl:call-template name="exclusionsSummary" />
</xsl:if>
<xsl:call-template name="footer" />
</xsl:template>
<!-- Report Header -->
<xsl:template name="header">
<tr>
<td class="projectTable reportHeader" colspan="5">
<table width="100%">
<tbody>
<tr>
<td valign="top">
<h1 class="titleText">NCoverExplorer Coverage Report - <xsl:value-of select="./project/@name" />&#160;&#160;</h1>
<table cellpadding="1" class="subtitleText">
<tbody>
<tr>
<td class="heading">Report generated on:</td>
<td><xsl:value-of select="./@date" />&#160;at&#160;<xsl:value-of select="./@time" /></td>
</tr>
<tr>
<td class="heading">NCoverExplorer version:</td>
<td><xsl:value-of select="./@version" /></td>
</tr>
<tr>
<td class="heading">Filtering / Sorting:</td>
<td><xsl:value-of select="./project/@filteredBy" />&#160;/&#160;<xsl:value-of select="./project/@sortedBy" /></td>
</tr>
</tbody>
</table>
</td>
<td class="projectStatistics" align="right" valign="top">
<table cellpadding="1">
<tbody>
<tr>
<td rowspan="4" valign="top" nowrap="true" class="heading">Project Statistics:</td>
<td align="right" class="heading">Files:</td>
<td align="right"><xsl:value-of select="./project/@files" /></td>
<td rowspan="4">&#160;</td>
<td align="right" class="heading">NCLOC:</td>
<td align="right"><xsl:value-of select="./project/@nonCommentLines" /></td>
</tr>
<tr>
<td align="right" class="heading">Classes:</td>
<td align="right"><xsl:value-of select="./project/@classes" /></td>
<td align="right" class="heading">&#160;</td>
<td align="right">&#160;</td>
</tr>
<tr>
<td align="right" class="heading">Functions:</td>
<td align="right"><xsl:value-of select="./project/@members" /></td>
<td align="right" class="heading">Unvisited:</td>
<td align="right"><xsl:value-of select="./project/@unvisitedFunctions" /></td>
</tr>
<tr>
<td align="right" class="heading">Seq Pts:</td>
<td align="right"><xsl:value-of select="./project/@sequencePoints" /></td>
<td align="right" class="heading">Unvisited:</td>
<td align="right"><xsl:value-of select="./project/@unvisitedPoints" /></td>
</tr>
</tbody>
</table>
</td>
</tr>
</tbody>
</table>
</td>
</tr>
</xsl:template>
<!-- Project Summary -->
<xsl:template name="projectSummary">
<xsl:param name="threshold" />
<xsl:param name="unvisitedTitle" />
<xsl:param name="coverageTitle" />
<xsl:param name="reportType" />
<tr>
<td colspan="5">&#160;</td>
</tr>
<tr>
<td class="projectTable mainTableHeaderLeft">Project</td>
<td class="projectTable mainTableHeader">Acceptable</td>
<td class="projectTable mainTableHeader"><xsl:value-of select="$unvisitedTitle" /></td>
<td class="projectTable mainTableGraphHeader" colspan="2"><xsl:value-of select="$coverageTitle" /></td>
</tr>
<xsl:call-template name="coverageDetail">
<xsl:with-param name="name" select="./project/@name" />
<xsl:with-param name="unvisitedPoints">
<xsl:choose>
<xsl:when test="$reportType = 'Module Class Function Summary'"><xsl:value-of select="./project/@unvisitedFunctions" /></xsl:when>
<xsl:otherwise><xsl:value-of select="./project/@unvisitedPoints" /></xsl:otherwise>
</xsl:choose>
</xsl:with-param>
<xsl:with-param name="sequencePoints">
<xsl:choose>
<xsl:when test="$reportType = 'Module Class Function Summary'"><xsl:value-of select="./project/@members" /></xsl:when>
<xsl:otherwise><xsl:value-of select="./project/@sequencePoints" /></xsl:otherwise>
</xsl:choose>
</xsl:with-param>
<xsl:with-param name="coverage">
<xsl:choose>
<xsl:when test="$reportType = 'Module Class Function Summary'"><xsl:value-of select="./project/@functionCoverage" /></xsl:when>
<xsl:otherwise><xsl:value-of select="./project/@coverage" /></xsl:otherwise>
</xsl:choose>
</xsl:with-param>
<xsl:with-param name="threshold" select="$threshold" />
<xsl:with-param name="showThreshold">True</xsl:with-param>
</xsl:call-template>
</xsl:template>
<!-- Modules Summary -->
<xsl:template name="moduleSummary">
<xsl:param name="threshold" />
<xsl:param name="unvisitedTitle" />
<xsl:param name="coverageTitle" />
<tr>
<td colspan="5">&#160;</td>
</tr>
<tr>
<td class="primaryTable mainTableHeaderLeft">Modules</td>
<td class="primaryTable mainTableHeader">Acceptable</td>
<td class="primaryTable mainTableHeader"><xsl:value-of select="$unvisitedTitle" /></td>
<td class="primaryTable mainTableGraphHeader" colspan="2"><xsl:value-of select="$coverageTitle" /></td>
</tr>
<xsl:for-each select="./modules/module">
<xsl:call-template name="coverageDetail">
<xsl:with-param name="name" select="./@name" />
<xsl:with-param name="unvisitedPoints" select="./@unvisitedPoints" />
<xsl:with-param name="sequencePoints" select="./@sequencePoints" />
<xsl:with-param name="coverage" select="./@coverage" />
<xsl:with-param name="threshold" select="./@acceptable" />
<xsl:with-param name="showThreshold">True</xsl:with-param>
</xsl:call-template>
</xsl:for-each>
</xsl:template>
<!-- Namespaces per Module Summary -->
<xsl:template name="moduleNamespaceSummary">
<xsl:param name="threshold" />
<xsl:for-each select="./modules/module">
<tr>
<td colspan="5">&#160;</td>
</tr>
<tr>
<td class="secondaryTable mainTableHeaderLeft">Module</td>
<td class="secondaryTable mainTableHeader">Acceptable</td>
<td class="secondaryTable mainTableHeader">Unvisited SeqPts</td>
<td class="secondaryTable mainTableGraphHeader" colspan="2">Coverage</td>
</tr>
<xsl:call-template name="coverageDetailSecondary">
<xsl:with-param name="name" select="./@name" />
<xsl:with-param name="unvisitedPoints" select="./@unvisitedPoints" />
<xsl:with-param name="sequencePoints" select="./@sequencePoints" />
<xsl:with-param name="coverage" select="./@coverage" />
<xsl:with-param name="threshold" select="./@acceptable" />
</xsl:call-template>
<tr>
<td class="secondaryChildTable childTableHeader" colspan="5">Namespaces</td>
</tr>
<xsl:for-each select="./namespace">
<xsl:call-template name="coverageIndentedDetail">
<xsl:with-param name="name" select="./@name" />
<xsl:with-param name="unvisitedPoints" select="./@unvisitedPoints" />
<xsl:with-param name="sequencePoints" select="./@sequencePoints" />
<xsl:with-param name="coverage" select="./@coverage" />
<xsl:with-param name="threshold" select="./../@acceptable" />
</xsl:call-template>
</xsl:for-each>
</xsl:for-each>
</xsl:template>
<!-- Classes per Namespace per Module Summary -->
<xsl:template name="classModuleSummary">
<xsl:param name="threshold" />
<xsl:param name="unvisitedTitle" />
<xsl:param name="coverageTitle" />
<xsl:for-each select="./modules/module">
<tr>
<td colspan="5">&#160;</td>
</tr>
<tr>
<td class="secondaryTable mainTableHeaderLeft">Module</td>
<td class="secondaryTable mainTableHeader">Acceptable</td>
<td class="secondaryTable mainTableHeader"><xsl:value-of select="$unvisitedTitle" /></td>
<td class="secondaryTable mainTableGraphHeader" colspan="2"><xsl:value-of select="$coverageTitle" /></td>
</tr>
<xsl:call-template name="coverageDetailSecondary">
<xsl:with-param name="name" select="./@name" />
<xsl:with-param name="unvisitedPoints" select="./@unvisitedPoints" />
<xsl:with-param name="sequencePoints" select="./@sequencePoints" />
<xsl:with-param name="coverage" select="./@coverage" />
<xsl:with-param name="threshold" select="./@acceptable" />
</xsl:call-template>
<tr>
<td class="secondaryChildTable childTableHeader" colspan="5">Namespace / Classes</td>
</tr>
<xsl:for-each select="./namespace">
<xsl:call-template name="coverageIndentedDetail">
<xsl:with-param name="name" select="./@name" />
<xsl:with-param name="unvisitedPoints" select="./@unvisitedPoints" />
<xsl:with-param name="sequencePoints" select="./@sequencePoints" />
<xsl:with-param name="coverage" select="./@coverage" />
<xsl:with-param name="threshold" select="../@acceptable" />
<xsl:with-param name="styleTweak">padding-left:20px;font-weight:bold</xsl:with-param>
</xsl:call-template>
<xsl:for-each select="./class">
<xsl:call-template name="coverageIndentedDetail">
<xsl:with-param name="name" select="./@name" />
<xsl:with-param name="unvisitedPoints" select="./@unvisitedPoints" />
<xsl:with-param name="sequencePoints" select="./@sequencePoints" />
<xsl:with-param name="coverage" select="./@coverage" />
<xsl:with-param name="threshold" select="../../@acceptable" />
<xsl:with-param name="styleTweak">padding-left:30px</xsl:with-param>
<xsl:with-param name="scale">160</xsl:with-param>
</xsl:call-template>
</xsl:for-each>
</xsl:for-each>
</xsl:for-each>
</xsl:template>
<!-- Namespaces Summary -->
<xsl:template name="namespaceSummary">
<xsl:param name="threshold" />
<tr>
<td colspan="5">&#160;</td>
</tr>
<tr>
<td class="primaryTable mainTableHeaderLeft" colspan="2">Namespaces</td>
<td class="primaryTable mainTableHeader">Unvisited SeqPts</td>
<td class="primaryTable mainTableGraphHeader" colspan="2">Coverage</td>
</tr>
<xsl:for-each select="./namespaces/namespace">
<xsl:call-template name="coverageDetail">
<xsl:with-param name="name" select="./@name" />
<xsl:with-param name="unvisitedPoints" select="./@unvisitedPoints" />
<xsl:with-param name="sequencePoints" select="./@sequencePoints" />
<xsl:with-param name="coverage" select="./@coverage" />
<xsl:with-param name="threshold" select="$threshold" />
<xsl:with-param name="showThreshold">False</xsl:with-param>
</xsl:call-template>
</xsl:for-each>
</xsl:template>
<!-- Coverage detail row in main grid displaying a name, statistics and graph bar -->
<xsl:template name="coverageDetail">
<xsl:param name="name" />
<xsl:param name="unvisitedPoints" />
<xsl:param name="sequencePoints" />
<xsl:param name="coverage" />
<xsl:param name="threshold" />
<xsl:param name="showThreshold" />
<tr>
<xsl:choose>
<xsl:when test="$showThreshold='True'">
<td class="mainTableCellBottom mainTableCellItem"><xsl:value-of select="$name" /></td>
<td class="mainTableCellBottom mainTableCellData"><xsl:value-of select="concat(format-number($threshold,'#0.0'), ' %')" /></td>
</xsl:when>
<xsl:otherwise>
<td class="mainTableCellBottom mainTableCellItem" colspan="2"><xsl:value-of select="$name" /></td>
</xsl:otherwise>
</xsl:choose>
<td class="mainTableCellBottom mainTableCellData"><xsl:value-of select="$unvisitedPoints" /></td>
<td class="mainTableCellBottom mainTableCellPercent"><xsl:value-of select="concat(format-number($coverage,'#0.0'), ' %')" /></td>
<td class="mainTableCellBottom mainTableCellGraph">
<xsl:call-template name="detailPercent">
<xsl:with-param name="notVisited" select="$unvisitedPoints" />
<xsl:with-param name="total" select="$sequencePoints" />
<xsl:with-param name="threshold" select="$threshold" />
<xsl:with-param name="scale" select="200" />
</xsl:call-template>
</td>
</tr>
</xsl:template>
<!-- Coverage detail row in secondary grid header displaying a name, statistics and graph bar -->
<xsl:template name="coverageDetailSecondary">
<xsl:param name="name" />
<xsl:param name="unvisitedPoints" />
<xsl:param name="sequencePoints" />
<xsl:param name="coverage" />
<xsl:param name="threshold" />
<tr>
<td class="mainTableCellItem"><xsl:value-of select="$name" /></td>
<td class="mainTableCellData"><xsl:value-of select="concat(format-number($threshold,'#0.0'), ' %')" /></td>
<td class="mainTableCellData"><xsl:value-of select="$unvisitedPoints" /></td>
<td class="mainTableCellPercent"><xsl:value-of select="concat(format-number($coverage,'#0.0'), ' %')" /></td>
<td class="mainTableCellGraph">
<xsl:call-template name="detailPercent">
<xsl:with-param name="notVisited" select="$unvisitedPoints" />
<xsl:with-param name="total" select="$sequencePoints" />
<xsl:with-param name="threshold" select="$threshold" />
<xsl:with-param name="scale" select="200" />
</xsl:call-template>
</td>
</tr>
</xsl:template>
<!-- Coverage detail row with indented item name and shrunk graph bar -->
<xsl:template name="coverageIndentedDetail">
<xsl:param name="name" />
<xsl:param name="unvisitedPoints" />
<xsl:param name="sequencePoints" />
<xsl:param name="coverage" />
<xsl:param name="threshold" />
<xsl:param name="styleTweak">padding-left:20px</xsl:param>
<xsl:param name="scale">180</xsl:param>
<tr>
<td class="mainTableCellBottom childTableCellIndentedItem" colspan="2"><xsl:attribute name="style"><xsl:value-of select="$styleTweak"/></xsl:attribute><xsl:value-of select="$name" /></td>
<td class="mainTableCellBottom mainTableCellData"><xsl:value-of select="$unvisitedPoints" /></td>
<td class="mainTableCellBottom mainTableCellPercent"><xsl:value-of select="concat(format-number($coverage,'#0.0'), ' %')" /></td>
<td class="mainTableCellBottom mainTableCellGraph">
<xsl:call-template name="detailPercent">
<xsl:with-param name="notVisited" select="$unvisitedPoints" />
<xsl:with-param name="total" select="$sequencePoints" />
<xsl:with-param name="threshold" select="$threshold" />
<xsl:with-param name="scale" select="$scale" />
</xsl:call-template>
</td>
</tr>
</xsl:template>
<!-- Exclusions Summary -->
<xsl:template name="exclusionsSummary">
<tr>
<td colspan="5">&#160;</td>
</tr>
<tr>
<td class="exclusionTable mainTableHeaderLeft" colspan="3">Excluded From Coverage Results</td>
<td class="exclusionTable mainTableGraphHeader" colspan="2">All Code Within</td>
</tr>
<xsl:for-each select="./exclusions/exclusion">
<tr>
<td class="mainTableCellBottom exclusionTableCellItem" colspan="3"><xsl:value-of select="@name" /></td>
<td class="mainTableCellBottom mainTableCellGraph" colspan="2"><xsl:value-of select="@category" /></td>
</tr>
</xsl:for-each>
</xsl:template>
<!-- Footer -->
<xsl:template name="footer">
<tr>
<td colspan="5">&#160;</td>
</tr>
</xsl:template>
<!-- Draw % Green/Red/Yellow Bar -->
<xsl:template name="detailPercent">
<xsl:param name="notVisited" />
<xsl:param name="total" />
<xsl:param name="threshold" />
<xsl:param name="scale" />
<xsl:variable name="visited" select="$total - $notVisited" />
<xsl:variable name="coverage" select="$visited div $total * 100"/>
<table cellpadding="0" cellspacing="0">
<tbody>
<tr>
<xsl:if test="$notVisited = 0">
<td class="graphBarVisitedFully" height="14">
<xsl:attribute name="width">
<xsl:value-of select="$scale" />
</xsl:attribute>.</td>
</xsl:if>
<xsl:if test="($visited != 0) and ($notVisited != 0)">
<td class="graphBarVisited" height="14">
<xsl:attribute name="width">
<xsl:value-of select="format-number($coverage div 100 * $scale, '0') - 1" />
</xsl:attribute>.</td>
</xsl:if>
<xsl:if test="$notVisited != 0">
<td height="14">
<xsl:attribute name="class">
<xsl:if test="$coverage &gt;= $threshold">graphBarSatisfactory</xsl:if>
<xsl:if test="$coverage &lt; $threshold">graphBarNotVisited</xsl:if>
</xsl:attribute>
<xsl:attribute name="width">
<xsl:value-of select="format-number($notVisited div $total * $scale, '0')" />
</xsl:attribute>.</td>
</xsl:if>
</tr>
</tbody>
</table>
</xsl:template>
</xsl:stylesheet>

BIN
lib/Gallio_3.2.517.0/NCover/libs/NCoverExplorer/ICSharpCode.TextEditor.dll

Binary file not shown.

BIN
lib/Gallio_3.2.517.0/NCover/libs/NCoverExplorer/NCoverExplorer.Console.exe

Binary file not shown.

BIN
lib/Gallio_3.2.517.0/NCover/libs/NCoverExplorer/NCoverExplorer.Core.dll

Binary file not shown.

BIN
lib/Gallio_3.2.517.0/NCover/libs/NCoverExplorer/NCoverExplorer.NCoverRunner.dll

Binary file not shown.

BIN
lib/Gallio_3.2.517.0/NCover/libs/NCoverExplorer/NCoverExplorer.exe

Binary file not shown.

8
lib/Gallio_3.2.517.0/NCover/libs/NCoverExplorer/NCoverExplorer.exe.config

@ -0,0 +1,8 @@
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<startup>
<supportedRuntime version="v2.0.50727" />
<supportedRuntime version="v1.1.4322" />
<requiredRuntime version="v1.1.4322" />
</startup>
</configuration>

301
lib/Gallio_3.2.517.0/NCover/libs/NCoverExplorer/NCoverExplorerFAQ.html

@ -0,0 +1,301 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<html>
<head>
<script type="text/javascript">
<!--
function Toggle(id)
{
var e = document.getElementById(id);
if(e.style.display == 'none')
e.style.display = 'block';
else
e.style.display = 'none';
}
function SwitchAll(how)
{ var len = document.all.length-1;
for(i=0;i!=len;i++) {
var block = document.all[i];
if (block != null && block.id != '')
{ block.style.display=how;}
}
}
function ExpandAll()
{SwitchAll('block');}
function CollapseAll()
{SwitchAll('none');}
// -->
</script>
<title>NCoverExplorer FAQ</title>
<meta content="Microsoft Visual Studio .NET 7.1" name="GENERATOR">
<meta content="http://schemas.microsoft.com/intellisense/ie5" name="vs_targetSchema">
<style>
body { font-size: 10pt; font-family: Verdana; }
p.title { font-size: 20pt; font-weight: bold; }
.action { color: maroon; font-size: 10pt; font-weight: bold; cursor:pointer }
.question { font-weight: bold; cursor:pointer }
.answer { margin: 15px; }
pre { font-size: 10pt; font-family: Courier; }
pre.usage { background-color: #F0F0F0; }
.subtitle { color: maroon; font-weight: bold; }
.quote { background-color: #F0F0F0; margin-left: 36pt;}
.method { color: maroon; font-size: 10pt; font-weight: bold; }
.hdrcell { background-color: #DDEEFF; font-size: 10pt; }
.datacell { background-color: #FFFFEE; text-align: right; font-size: 10pt; }
.hldatacell { background-color: #FFCCCC; text-align: right; font-size: 10pt; }
.box { border: 1px solid; padding: 10px; }
.treeviewBlack { color: black; }
.treeviewGrey { color: grey; }
.treeviewRed { color: red; }
.treeviewBlue { color: blue; }
.sourceBlue { background-color: #E0EDFD; color: black; }
.sourceRed { background-color: #E6B0A5; color: black; }
</style>
</head>
<body>
<P class="title">NCoverExplorer FAQ</P>
<P>The latest version of this document is located <A href="http://www.kiwidude.com/dotnet/NCoverExplorerFAQ.html">here</A>.
<BR/>For the latest NCoverExplorer news and updates, visit my <A href="http://www.kiwidude.com/blog/">blog</A>.</P>
<P class="action"><a onClick="ExpandAll();">Expand All</a>&nbsp;|&nbsp;<a onClick="CollapseAll();">Collapse All</a></P>
<a class="question" onclick="return Toggle('answer1')">1. What is NCoverExplorer?</a><br/>
<div id="answer1" style="display:none">
<P class="answer">This tool allows you to open a coverage.xml file produced by
<A href="http://ncover.org"/>NCover</A> and navigate the source code. The
source code is highlighted to clearly show which statements were visited
and not visited. You can filter, sort and report on the coverage results.
</P>
</div>
<a class="question" onclick="return Toggle('answer2')">2. What versions of the .NET Framework does it work with?</a><br/>
<div id="Div1" style="display:none">
<P class="answer">NCoverExplorer as of version 1.3.4 requires either .NET 1.1 or .Net 2.0 (it is compiled against
.Net 1.1).
</P>
</div>
<a class="question" onclick="return Toggle('answer2')">2. What versions of NCover does it work with?</a><br/>
<div id="answer2" style="display:none">
<P class="answer">NCoverExplorer has been tested with both NCover 1.3.3 and up to the latest NCover 1.5.7. It will NOT
work with NCover 1.4.6. Note that NCover 1.5.x only works with .NET 2.0 and requires at least NCoverExplorer 1.3.5
and/or a TestDriven.Net build > 2.0.1786 due to a limitation in NCover or else you will get duplicate nodes in your
coverage results.
</P>
</div>
<a class="question" onclick="return Toggle('answer3')">3. Can I integrate it with my Visual Studio.Net version XXX IDE?</a><br/>
<div id="answer3" style="display:none">
<P class="answer">Jamie Cansdale now offers a "Test with... Coverage" feature
in the latest version of his excellent <A href="http://www.testdriven.net/">TestDriven.Net</A>
tool. This will automatically launch NCoverExplorer to display the results
of running unit test(s) under code coverage with NCover. Note that as of build 1341
TestDriven.Net now works using both the latest version of NCover (1.5.x) and the earlier NCover 1.3.3 version.
</P>
</div>
<a class="question" onclick="return Toggle('answer4')">4. Can I integrate it without TestDriven.Net?</a><br/>
<div id="answer4" style="display:none">
<P class="answer">My solution I used at work was a combination of NAnt and NAntRunner
(the VS.Net add-in) to perform something similar. I have NAnt tasks to:
<UL>
<LI>
Perform the build.
</LI>
<LI>
Execute NCover while running unit tests (either all unit tests or those for
a specific fixture using the /fixture feature of <A href="http://nunit.org/">NUnit</A>).
</LI>
<LI>
Launch NCoverExplorer displaying the output coverage.xml file.
</LI>
</UL>
</P>
<P class="answer">As of NCoverExplorer 1.3.5 you now have another option. There is now an included GUI for
running NCover directly from within NCoverExplorer and displaying the results.
</P>
</div>
<a class="question" onclick="return Toggle('answer5')">5. How does it compare to Visual Studio Team System?</a><br/>
<div id="answer5" style="display:none">
<P class="answer">VSTS features of unit testing and code coverage will only be included with the premium bundles
of the Visual Studio product range - and as such will most likely be priced above what many
developers and businesses are prepared to pay. For "everyone else" in the market it would seem likely
that they will continue to utilise open source alternatives.
</P>
<P class="answer">Even if you are one of the fortunate developers who can afford VSTS, it still must
be measured feature-wise against the open source alternatives which in a lot of cases have now been established
for many years. Developers and managers will weigh up for themselves how important those features are
as well as other factors such as Microsoft support etc. The nice thing for many of us is that we have a choice...
</P>
<P class="answer">We have had a number of people e-mail us and say they prefer TestDriven.Net and NCoverExplorer
over the VSTS alternative and want to switch off the VSTS ability - that's rather gratifying from our perspective!
</P>
</div>
<a class="question" onclick="return Toggle('answer6')">6. Why didn't you integrate NCoverExplorer directly into the IDE like VSTS or SharpDevelop?</a><br/>
<div id="answer6" style="display:none">
<P class="answer">A number of reasons. At first glance having your code colour coded within the VS.Net IDE may sound
great. However think about what we are trying to achieve - improving our <B>test</B> code to increase our coverage.
That means in many cases you want to be editing the unit tests themselves, not the pretty coloured code under test.
This then requires either a photographic memory or a penchant for continually resizing your IDE/tab groups, as well as an ability
to not find the colours distracting while editing and refactoring code... not my first choice.
</P>
<P class="answer">You may instead find it more convenient to have a separate application window which can be positioned
on a second screen (you all have at least two don't you?) or ALT-Tab switched between. As of release 1.3.1
NCoverExplorer allows direct code navigation from method coverage in NCoverExplorer to it's corresponding line
in the source code file within the VS.Net IDE.
</P>
<P class="answer">From a technical perspective an add-in is a non-trivial task - particularly if trying to support all
the variants of the VS.Net IDE. To do it natively requires VSIP skills which is a trip to the dark side.
I won't say "never" however and if I find some spare time (or you want to volunteer to help me!) then it might
happen one day...
</P>
</div>
<a class="question" onclick="return Toggle('answer7')">7. What do the tree node colours mean?</a><br/>
<div id="answer7" style="display:none">
<P class="answer">The default settings when NCoverExplorer is installed are as follows:
<UL>
<LI>
<SPAN class="treeviewGrey">Grey text</SPAN> - the namespace/class/method has zero coverage. (Icon will be greyed also)
</LI>
<LI>
<SPAN class="treeviewRed">Red text</SPAN> - the namespace/class/method has partial coverage.
</LI>
<LI>
<SPAN class="treeviewBlue">Blue text</SPAN> - the namespace/class/method coverage has partial coverage exceeding a satisfaction threshold (default 95%).
</LI>
<LI>
<SPAN class="treeviewBlack">Black text</SPAN> - the namespace/class/method has 100% coverage.
</LI>
</UL>
</P>
</div>
<a class="question" onclick="return Toggle('answer8')">8. What do the source code highlighting colours mean?<a><br/>
<div id="answer8" style="display:none">
<P class="answer">The default settings when NCoverExplorer is installed are as follows:
<UL>
<LI>
<SPAN class="sourceBlue">Blue background</SPAN> - this section of code was visited (a tooltip tells you how many times).
</LI>
<LI>
<SPAN class="sourceRed">Red background</SPAN> - this section of code was not visited.
</LI>
</UL>
You can change these settings in the View->Options dialog. For instance you may prefer to underline the unvisited code.
</P>
</div>
<a class="question" onclick="return Toggle('answer9')">9. What is that "Satisfaction Threshold" all about?</a><br/>
<div id="answer9" style="display:none">
<P class="answer">Depending on your coverage strategy, the code being tested and the extent of your usage of reflection,
mock objects and/or dependency injection you may determine it unfeasible to try
to reach 100% coverage everywhere. Some teams readily accept the diminishing returns
that can apply and instead set a specific blanket coverage goal such as “85%”.
</P>
<P class="answer">Assuming you have such a situation and there was no threshold capability,
you would be stuck forever looking at a "danger red" node in the tree every time you open NCoverExplorer.
With this feature enabled (by setting a threshold less than 100% in the View->Options dialog) you see
a more calming mellow “blue” instead...
</P>
<P class="answer">As of release 1.3.1 you can now also specify the tolerance as a number of unvisited lines.
If either of the two threshold conditions are met the node will be coloured appropriately. Note that
a visit count of zero will always show as uncovered regardless of your tolerance.
</P>
<P class="answer">Of course just because you exceed the percentage doesn't mean that the 5% of code unvisited
isn't the most critical!
</P>
</div>
<a class="question" onclick="return Toggle('answer10')">10. I have a killer idea for XYZ feature - can you add it for me?</a><br/>
<div id="answer10" style="display:none">
<P class="answer">Please leave a comment on my <A href="http://www.kiwidude.com/blog/">blog</A> or in the
<A href="http://ncover.org/SITE/forums/default.aspx">NCoverExplorer forums</A> and I will see what I can do.
NCoverExplorer is by no means my "day job" so no promises can be made but if the idea is indeed a good one which
will benefit many others I'm sure I can find time...
</P>
</div>
<a class="question" onclick="return Toggle('answer11')">11. Where can I download the latest version?</a><br/>
<div id="answer11" style="display:none">
<P class="answer">To download NCoverExplorer <b>without</b> TestDriven.Net, you can find it
<A href="http://www.kiwidude.com/dotnet/DownloadPage.html">here</A>.
</P>
<P class="answer">Download it as part of the install with TestDriven.Net from <A href="http://www.testdriven.net/">here</A>.
</P>
</div>
<a class="question" onclick="return Toggle('answer12')">12. What are the keyboard shortcuts?</a><br/>
<div id="answer12" style="display:none">
<P class="answer">The following shortcuts exist currently:
<PRE class="usage">
<SPAN class="treeviewBlue">CTRL+A</SPAN> - Collapse all nodes recursively.
<SPAN class="treeviewBlue">CTRL+E</SPAN> - Edit in VS.Net at the current caret position.
<SPAN class="treeviewBlue">CTRL+L</SPAN> - Expand all nodes recursively.
<SPAN class="treeviewBlue">CTRL+N</SPAN> - Run NCover (via configuration dialog).
<SPAN class="treeviewBlue">CTRL+O</SPAN> - Open coverage xml file.
<SPAN class="treeviewBlue">CTRL+Q</SPAN> - Expand all covered child nodes.
<SPAN class="treeviewBlue">CTRL+S</SPAN> - Save coverage xml file as displayed (without excluded nodes).
<SPAN class="treeviewBlue">F2</SPAN> - Display the options dialog.
<SPAN class="treeviewBlue">F3</SPAN> - Display the statistics summary dialog.
<SPAN class="treeviewBlue">F5</SPAN> - Reload the current source code file.
<SPAN class="treeviewBlue">F6</SPAN> - Display the reports dialog.
<SPAN class="treeviewBlue">DEL</SPAN> - Exclude node and children from coverage tree and recalculate coverage.
<SPAN class="treeviewBlue">INS</SPAN> - Include node and children into coverage tree and recalculate coverage.
<BR/>
<SPAN class="treeviewBlue">ALT+1</SPAN> - Filter (hide) all 100% coverage nodes.
<SPAN class="treeviewBlue">ALT+2</SPAN> - Filter (hide) all unvisited (0%) nodes.
<SPAN class="treeviewBlue">ALT+3</SPAN> - Filter (hide) all nodes exceeding satisfactory coverage threshold.
<SPAN class="treeviewBlue">ALT+0</SPAN> - Remove all filters.
<BR/>
<SPAN class="treeviewBlue">CTRL+1</SPAN> - Display sequence point coverage report (covered%).
<SPAN class="treeviewBlue">CTRL+2</SPAN> - Display sequence point coverage report (covered%) (unvisited seqpnt#).
<SPAN class="treeviewBlue">CTRL+3</SPAN> - Display sequence point coverage report (unvisited seqpnt#).
<SPAN class="treeviewBlue">CTRL+4</SPAN> - Display function coverage report (visits).
<SPAN class="treeviewBlue">CTRL+5</SPAN> - Display function coverage coverage report (covered%).
<SPAN class="treeviewBlue">CTRL+6</SPAN> - Display function coverage coverage report (covered%) (unvisited function#).
<SPAN class="treeviewBlue">CTRL+7</SPAN> - Display function coverage coverage report (unvisited function#).
<BR/>
<SPAN class="treeviewBlue">CTRL+SHIFT+1</SPAN> - Sort by name (default).
<SPAN class="treeviewBlue">CTRL+SHIFT+2</SPAN> - Sort by name down to class level, with methods sorted by line number.
<SPAN class="treeviewBlue">CTRL+SHIFT+3</SPAN> - Sort by coverage percentage ascending.
<SPAN class="treeviewBlue">CTRL+SHIFT+4</SPAN> - Sort by coverage percentage ascending.
<SPAN class="treeviewBlue">CTRL+SHIFT+5</SPAN> - Sort by #unvisited sequence points ascending.
<SPAN class="treeviewBlue">CTRL+SHIFT+6</SPAN> - Sort by #unvisited sequence points ascending.
<SPAN class="treeviewBlue">CTRL+SHIFT+7</SPAN> - Sort by max function visit count ascending.
<SPAN class="treeviewBlue">CTRL+SHIFT+8</SPAN> - Sort by max function visit count ascending.
<SPAN class="treeviewBlue">CTRL+SHIFT+9</SPAN> - Sort by max function coverage percentage ascending.
<SPAN class="treeviewBlue">CTRL+SHIFT+0</SPAN> - Sort by max function coverage percentage descending.
<BR/>
<SPAN class="treeviewBlue">ALT+RIGHT</SPAN> - Next unvisited line in the current class.
<SPAN class="treeviewBlue">ALT+LEFT</SPAN> - Previous unvisited line in the current class.
<SPAN class="treeviewBlue">ALT+UP</SPAN> - Next unvisited class in the current namespace.
<SPAN class="treeviewBlue">ALT+DOWN</SPAN> - Previous unvisited class in the current namespace.
</PRE>
</P>
</div>
<a class="question" onclick="return Toggle('answer13')">13. Where are my personal settings stored?</a><br/>
<div id="answer13" style="display:none">
<P class="answer">C:\Documents and Settings\[User Name]\Application Data\KiwiDevelopment\NCoverExplorer\NCoverExplorer.config
</P>
</div>
<a class="question" onclick="return Toggle('answer14')">14. Where can I download the custom NAnt/MSBuild tasks from?</a><br/>
<div id="answer14" style="display:none">
<P class="answer">A zip file containing the task source code, compiled assemblies and examples can be found
<A href="http://www.kiwidude.com/dotnet/DownloadPage.html">here</A>
</P>
</div>
<a class="question" onclick="return Toggle('answer15')">15. I get an "Illegal characters in path" exception - why?</a><br/>
<div id="answer15" style="display:none">
<P class="answer">NCover 1.4.6 has a bug whereby the filenames that it writes into the xml file contain
undesirable characters. Please use either NCover 1.3.3 or NCover 1.5.x. For more details refer to this blog entry
<A href="http://www.kiwidude.com/blog/2006/04/illegal-characters-ncover-versions.html">here</A>
</P>
</div>
<a class="question" onclick="return Toggle('answer16')">16. I get a "System.Format" exception - why?</a><br/>
<div id="answer16" style="display:none">
<P class="answer">One user reported a bizarre issue where on their machines a simple int.Parse("0") would not work.
The exact cause is unknown (they had uninstalled some components from their XP installation), however
switching region settings to something else and back again resolved the issue.
</P>
</div>
<a class="question" onclick="return Toggle('answer17')">17. My module thresholds are not working - why?</a><br/>
<div id="answer17" style="display:none">
<P class="answer">The module names included in the module thresholds should not include any path information,
and are currently case sensitive (must exactly match the module names you see on the NCoverExplorer report).
The case sensitivity constraint is fixed in NCoverExplorer 1.3.5.
</P>
</div>
<P class="subtitle">---------------------------------<BR/>FAQ last updated Apr 1st 2007.</P>
</body>
</html>

790
lib/Gallio_3.2.517.0/NCover/libs/NCoverExplorer/NCoverExplorerReleaseNotes.html

@ -0,0 +1,790 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<html>
<head>
<title>NCoverExplorer Release Notes</title>
<meta content="Microsoft Visual Studio .NET 7.1" name="GENERATOR">
<meta content="http://schemas.microsoft.com/intellisense/ie5" name="vs_targetSchema">
<style> body { font-size: 10pt; font-family: Verdana; }
p.title { font-size: 20pt; font-weight: bold; }
.subtitle { color: maroon; }
p.question { font-weight: bold; }
pre { font-size: 10pt; font-family: Courier; }
pre.usage { background-color: #F0F0F0; }
.quote { background-color: #F0F0F0; margin-left: 36pt;}
.method { color: maroon; font-size: 10pt; font-weight: bold; }
.hdrcell { background-color: #DDEEFF; font-size: 10pt; }
.datacell { background-color: #FFFFEE; text-align: right; font-size: 10pt; }
.hldatacell { background-color: #FFCCCC; text-align: right; font-size: 10pt; }
.box { border: 1px solid; padding: 10px; }
.treeviewBlack { color: black; }
.treeviewGrey { color: grey; }
.treeviewRed { color: red; }
.treeviewBlue { color: blue; }
.sourceBlue { background-color: #E0EDFD; color: black; }
.sourceRed { background-color: #E6B0A5; color: black; }
</style>
</head>
<body>
<P class="title">NCoverExplorer Release Notes</P>
<P>The latest version of this document is located <A href="http://www.kiwidude.com/dotnet/NCoverExplorerReleaseNotes.html">here</A>.
<BR/>For the latest NCoverExplorer news and updates, visit my <A href="http://www.kiwidude.com/blog/">blog</A>.</P>
<HR/>
<P class="question">v1.3.6 - Apr 5th 2007</P>
<P class="answer">Bundled with TestDriven.Net from build 2.5.2078.</P>
<P class="answer">The following new features were introduced:</P>
<UL>
<LI>
Added a Find dialog (ctrl+F) to quickly navigate to a class. Wildcards are supported.
</LI>
<LI>
Added a /q or /quiet option to NCoverExplorer.Console.exe to minimise the output.
</LI>
</UL>
<P class="answer">The following minor changes were made:</P>
<UL>
<LI>
Failing if less than a threshold now applies to any assembly not meeting the threshold
rather than comparing against the total coverage across all assemblies.
</LI>
<LI>
Add some examples to the NCoverExplorer.Console.exe output for the /help or /? (or no arguments).
</LI>
<LI>
Pressing ESC on the NCover Runner dialog will now close it.
</LI>
<LI>
Implement a workaround for poor treeview performance under .NET 2.0.
</LI>
<LI>
Rather than displaying validation errors automatically "fix" paths with matching trailing
slashes in the Change Source Path dialog.
</LI>
<LI>
Writing of coverage files should now match the schema for the relevant NCover version.
Later NCover versions like 1.5.7 have enhanced the schema, so the results of a merge or
save from NCoverExplorer should offer a comparative schema in the result.
</LI>
<LI>
Add a message indicating the return code to the output.
</LI>
</UL>
<P class="answer">The following bug fixes were made:</P>
<UL>
<LI>
NCover 1.5.5/6 produce duplicate sequence points. To workaround this fix Jamie Cansdale implemented
a change for me to the way the methods are identified uniquely. The longer term fix is NCover version 1.5.7
- this should keep things usable until that is released.
</LI>
<LI>
Another issue up to at least NCover 1.5.7 is that non-instrumented code does not have the sequence
points optimised. When merging multiple coverage files NCoverExplorer was incorrectly merging the noops with
valid instrumented sequence points, resulting in lower coverage information.
</LI>
<LI>
If CoverageReport.xsl stylesheet already exists in destination output folder for an xml report
and is marked as read-only then the replace would fail.
</LI>
<LI>
Drag/drop of coverage.xml files would add to the wrong end of the MRU menu once the maximum
number of items is reached.
</LI>
<LI>
If multiple classes in the same file then selecting a class node was not navigating to that
class in the source code tab. It will now jump to the first unvisited sequence point, or if
there are none of those the first sequence point in the class.
</LI>
<LI>
Wildcards for coverage exclusions were only working if placed at the ends, not in the middle
e.g. *.Tests or Testing.* would work, but xxx.*.yyy would not.
</LI>
<LI>
Prevent some of the nasty GDI errors in CommandBars code from disrupting the GUI. Longer
term will utilise another framework.
</LI>
<LI>
Replacing paths by typing them in had MaxLength set to 50 so impossible to edit long paths
in the Change Source Path dialog.
</LI>
<LI>
Merging property nodes under a parent in the tree has a dependency on the ordering of the coverage output
to ensure they appear properly.
</LI>
<LI>
When restoring form position from persisted values, ensure it appears on a visible screen,
catering for the user changing their display settings between sessions.
</LI>
<LI>
Ensure stylesheet cannot be copied over the top of itself.
</LI>
<LI>
Supplying a file pattern with no matches to NCoverExplorer.Console.exe was throwing an "Index was
outside the bounds of the array" exception.
</LI>
<LI>
Multiple coverage exclusion attributes not supplied correctly to NCover (build 26).
</LI>
<LI>
Check to make sure node is assigned to a TreeView before getting handle to set text (build 32).
</LI>
<LI>
Sort sequence point nodes when loading and handle merge case of multiple non-instrumented
sequence points becoming a single sequence point. (build 36).
</LI>
</UL>
<HR/>
<P class="question">v1.3.5 - Oct 23rd 2006</P>
<P class="answer">Bundled with TestDriven.Net from build 2.0.1921.</P>
<P class="answer">The following new features were introduced:</P>
<UL>
<LI>
Added ability to run NCover from within NCoverExplorer (all versions). User Ctrl+N or
entries on File menu/toolbar to bring up configuration dialog. After successful
execution, the resultant coverage file is displayed in NCoverExplorer.
</LI>
<LI>
Added ability to generate MSBuild, NAnt and command-line scripts for running NCover
from within NCoverExplorer. See the NCover dialog above.
</LI>
<LI>
Added new function coverage viewing options and module/class coverage report.
Indicates the percentage of functions covered rather than the sequence points within each.
Supported by a new "satisfactory function threshold" and function % sorting options.
</LI>
<LI>
Background colours can now be customised for coverage nodes in the tree.
</LI>
<LI>
Reports will now have the current filtering applied, not just the sorting settings.
</LI>
<LI>
Reports using NCoverExplorer.Console can now have filtering and sorting applied. Use the
/sort: and /filter: command line arguments, or specify in a .config file (see example.config),
or use the sort/filter arguments to the NAnt/MSBuild tasks.
</LI>
<LI>
Sorting and filtering options applied are now persisted and reapplied to the next coverage
xml file loaded, both in this and future sessions.
</LI>
<LI>
Added ability to filter out all nodes exceeding coverage threshold.
</LI>
<LI>
Revamp to the NAnt/MSBuild tasks. Renamed assemblies and namespaces. Included new attribute of
"AssembliesList" as an alternative to the "Assemblies" group element to allow direct
specification of a list as you would on the command line. The "Version" attribute is now optional
- the task determines it from the NCover assembly instead if not specified. Tasks will automatically
register NCover coverlib.dll using the HKCU entry in the registry - no need for regsvr32 any more!
NCoverExplorer task now writes it's config file to temp folder for passing to the executable.
</LI>
<LI>
Added documentation for the NAnt and MSBuild tasks. This is included both in the NCoverExplorer.Extras.zip
file, as well as being available online for the custom <a href="http://www.kiwidude.com/dotnet/doc/NCoverExplorer.MSBuildTasks/index.html">MSBuild Task Help</a>
and <a href="http://www.kiwidude.com/dotnet/doc/NCoverExplorer.NAntTasks/index.html">NAnt Task Help</a>.
Links also available off the Help menu for NCoverExplorer.
</LI>
<LI>
Added a schema file ConsoleConfig.xsd to the distribution for people wanting to know the exact syntax
options for creating .config files to pass to NCoverExplorer.Console using the /config switch.
</LI>
<LI>
Added regular expression support to the coverage exclusions dialog for people wanting more complex queries.
</LI>
</UL>
<P class="answer">The following minor changes were made:</P>
<UL>
<LI>
<span style="color:red">Configuration file change - the ModuleThresholds section in .config files passed to NCoverExplorer.Console now
uses propercase attribute names to be consistent with the rest of the configuration file.
i.e. "ModuleName" instead of "moduleName", and "SatisfactoryCoverage" instead of "satisfactoryCoverage".</span> You must update
your NAnt/MSBuild tasks for NCoverExplorer if you use these. If you instead use the &lt;exec&gt; task with a .config
file then you should update the case of the entries in this file. This only affects people who have setup coverage exclusions
at the module level for reporting purposes.
</LI>
<LI>
If source code is out of date compared to the coverage results, the user is prompted with
the change source path dialog.
</LI>
<LI>
If the user chooses a new source code location, the tab is now automatically opened for
that location rather than requiring the user to click on the tree node again.
</LI>
<LI>
Added Help->NCoverExplorer Forum menu option to link to the NCover website. Also included
forum link information on the exception dialog.
</LI>
<LI>
Added a toolbar button for turning off filtering.
</LI>
<LI>
<span style="color:red">Keyboard shortcut change - Changed the keyboard shortcuts for next/previous unvisited class (ALT+UP/DOWN) and
next/previous unvisited line in class (ALT+LEFT/RIGHT).</span>
</LI>
<LI>
Remember which tab was last opened in the NCoverExplorer options dialog during an NCoverExplorer session.
</LI>
<LI>
Replaced references to "transparent.gif" with "shim.gif" in the NCoverExplorerSummary.xsl. The "shim.gif"
file is a transparent 1x1 gif already distributed with CC.Net.
</LI>
<LI>
Coverage exclusions for assemblies are now case insensitive.
</LI>
<LI>
There are no longer two default coverage exclusions added of "*.Tests" and "*.My*" for first time users.
Intended for demo purposes only but stayed in until now. New users can manually add them if they desire them.
</LI>
</UL>
<P class="answer">The following bug fixes were made:</P>
<UL>
<LI>
Overloaded constructors with class level variable declarations were being merged into a single
constructor in the coverage results as they had the same "start line" of the variable. Now uses
end line as part of the identifying key for each method.
</LI>
<LI>
Memory leak from opening and closing tabs displaying source code.
</LI>
<LI>
.Net 2.0 performance is pretty dire due to crap Microsoft changes to the TreeView control.
Change to default to .Net 1.1 in NCoverExplorer.exe.config and wrap updates to the tree
in BeginUpdate/EndUpdate.
</LI>
<LI>
Parsing Java code would blow up if an accessor had the same name as a nested class (illegal in C#).
</LI>
<LI>
Bugfix in NCover task where multiple assemblies were specified for NCover 1.5.4, which requires
separate &lt;assembly&gt; nodes.
</LI>
<LI>
Bugfix in trying to restore selected node text after refreshing file could raise
null reference exception.
</LI>
<LI>
Bugfix so that module names specified in module thresholds when using NCoverExplorer.Console
are no longer case sensitive for matching.
</LI>
<LI>
Added support for NCover 1.5.5 - the //q bug is fixed in NCover. Also changed parsing code so that modules
with a blank assembly name (through using TestDriven.Net) are ignored from the coverage.
</LI>
<LI>
Bugfix for merge functionality for NCover.Console when wildcards were used with relative paths.
</LI>
<LI>
Bugfix for naming of xml/html arguments for NCover.Console with relative file paths.
</LI>
<LI>
Bugfix for drag/drop broken while making the memory usage optimisations during the 1.3.5 beta release.
</LI>
<LI>
Print button was enabled when no source code displayed resulting in exception.
</LI>
</UL>
<HR/>
<P class="question">v1.3.4 - Jul 10th 2006</P>
<P class="answer">Bundled with TestDriven.Net from build 2.0.1702.</P>
<P class="answer">The following new features were introduced:</P>
<UL>
<LI>
Added toolbar buttons which support moving to the next and previous unvisited code
within a class or namespace. Shortcut keys of N and P for next/previous unvisited line in the
current class (or mouse forward/back buttons). Use Ctrl+N and Ctrl+P to navigate to the
next/previous partially or unvisited class within the namespace (or Ctrl+forward/back mouse buttons).
</LI>
<LI>
NCoverExplorer.Console.exe now supports saving the merged results of the coverage xml file(s) with
a /s[ave] option. The NCoverExplorer NAnt and MSBuild tasks have also been enhanced to support this
with an optional "mergeFileName" attribute.
</LI>
<LI>
NCoverExplorer.Console.exe now supports wildcards for coverage xml filename(s).
</LI>
<LI>
NCoverExplorer.Console.exe now supports module level coverage thresholds, rather than just a project
coverage threshold. This feature allows finer tolerance for both output on the reports and to fail
a build. Specifying the module thresholds is done either through a .config file (see ConsoleExample.config)
or through parameters in the NAnt/MSBuild tasks.
</LI>
<LI>
Added a new summary report showing class coverage per namespace per module.
</LI>
<LI>
Enhanced the NCoverExplorerSummary.xsl to display summaries of each module.
</LI>
<LI>
Clicking on a class with non-existent source code displays a dialog allowing the user to specify an alternate
folder. For use when the source code location indicated within the coverage.xml file(s) loaded differs from
that on the local machine now (e.g. a different drive letter or folder path).
</LI>
</UL>
<P class="answer">The following minor changes were made:</P>
<UL>
<LI>
NCoverExplorer release is compiled against .Net 1.1 rather than .Net 1.0 due to a dependency on the
FolderBrowserDialog not available in .Net 1.0.
</LI>
<LI>
Coverage file stylesheet modified to show coverage column and NCoverExplorer version information with
numerous other cosmetic enhancements.
</LI>
<LI>
Enrich error environment information to include .Net framework version and operating system.
</LI>
<LI>
Classes without a namespace are now shown under a namespace node of "-" like in Reflector.
</LI>
</UL>
<P class="answer">The following bug fixes were made:</P>
<UL>
<LI>
Warnings about mismatches when merging xml files are no longer issued. NCover seems to inconsistently
produce xml file coverage of methods which caused some users problems when merging.
</LI>
<LI>
Nested classes without a namespace specified would cause the coverage.xml file to fail to load.
</LI>
<LI>
Parsing overloaded properties (overloads of this[]) would not show the separate overloads in the tree
and have incorrect coverage stats.
</LI>
<LI>
Fix memory leaks for when source code tabs are closed.
</LI>
<LI>
Minimum coverage threshold for NCoverExplorer.Console would sometimes be incorrect due to rounding.
</LI>
<LI>
Changed NCoverExplorerSummary.xsl to format to 1dp rather than rounding to 0.
</LI>
<LI>
Sorting by filename for a method then clicking on class node threw exception.
</LI>
<LI>
VB.Net source code keywords not highlighted with the correct ICSharpCode template.
</LI>
</UL>
<HR/>
<P class="question">v1.3.3 - Apr 4th 2006</P>
<P class="answer">Bundled with TestDriven.Net from build 2.0.1578.</P>
<P class="answer">The following new features were introduced:</P>
<UL>
<LI>
Added NCoverExplorer.Console.exe for utilising NCoverExplorer features with automated
coverage builds and NAnt tasks. By default will load up all the specified coverage file(s), apply
any coverage exclusion(s) specified in the NCoverExplorer configuration and display total
coverage statistics in the console output. If all items processed successfully returns an exit code of 0,
if an exception occurs returns an exit code of 2.
</LI>
<LI>
Added /m:xx (or /minCoverage:xx) argument to NCoverExplorer.Console.exe. When used in conjunction with
/f (or /failMinimum) an exit code of 3 is returned if the min coverage is not reached. Can act
as a trigger for failing an automated build such as with CruiseControl.Net.
</LI>
<LI>
Added module & namespace summary xml report generation to NCoverExplorer (both the GUI and Console versions).
In the GUI, this is available via the "View->Reports" menu. The three reports that are offered currently are:
<br/>&nbsp;- Module Summary (Coverage totals for the project and per module);
<br/>&nbsp;- Namespace Summary (Coverage totals for the project and per namespace);
<br/>&nbsp;- Module Namespace Summary (Coverage totals for the project, per module and per namespace);
</LI>
<LI>
Reports can be generated in xml or html format. Native html may be useful for directly attaching to e-mails.
If xml format is chosen a "CoverageReport.xsl" stylesheet is copied from the NCoverExplorer installation
folder to the report directory and linked to the xml file similar to coverage.xml/coverage.xsl by NCover.
</LI>
<LI>
Reports can contain an "excluded nodes" footer section. This lists at the topmost level all of the items
excluded from coverage at the time the report was run.
</LI>
<LI>
Added "View->Filter" main menu and context menus, offering the ability to filter out nodes. Filtered
nodes are simply moved under a new "Filtered" tree node and do not alter the coverage statistics
(unlike excluded nodes which are effectively removed from the tree). Filters offered are either to
hide all 100% covered nodes, or hide all unvisited (0%) nodes.
</LI>
<LI>
Added "Include in Results" context menu option for when clicking on either the "Excluded" bin or one
of it's immediate child nodes. Offers a way to "undo" an exclusion without reloading the file.
</LI>
<LI>
Added "View->Summary Statistics" menu option (shortcut F3) to show dialog of totals of files, classes, members,
NCLOC (non-commented lines of code) and sequence points. Statistics do not include excluded nodes
(but will include filtered nodes).
</LI>
<LI>
Created NAnt and MSBuild tasks for execution of NCoverExplorer.Console as an alternative to the &lt;exec&gt; task.
These tasks offer a more developer friendly alternative such as &lt;fileset&gt; for coverage files and creating a
.config file on the fly based on specified parameters such as &lt;exclusions&gt; within the .build/.proj file.
</LI>
<LI>
Replaced menus with a lightly tweaked variant of Lutz Roeder's excellent CommandBar code to give a more modern
look and assign icons on the menus.
</LI>
<LI>
Added a toolbar. If not wanted the toolbar can be hidden using the "View->Show Toolbar" menu option.
</LI>
</UL>
<P class="answer">The following minor changes were made:</P>
<UL>
<LI>
Options dialog shortcut changed to F2.
</LI>
<LI>
Excluding a node will now select the node after by default rather than the one previous.
</LI>
</UL>
<P class="answer">The following bug fixes were made:</P>
<UL>
<LI>
Fix bug where delete key shortcut was active on the root coverage file node, causing an exception to be thrown.
</LI>
<LI>
Path was being truncated from the module name when saved.
</LI>
<LI>
Fix bug where changing theme without coverage file loaded caused error.
</LI>
</UL>
<HR/>
<P class="question">v1.3.2 - Mar 14th 2006</P>
<P class="answer">Bundled with TestDriven.Net from build 2.0.1545.</P>
<P class="answer">The following new features were introduced:</P>
<UL>
<LI>
Added support for merging multiple coverage files. This can be triggered through a variety of ways:
<br/>&nbsp;- Selecting multiple test classes/fixtures/projects in TestDriven.Net;
<br/>&nbsp;- Passing multiple files in the command line arguments;
<br/>&nbsp;- Selecting multiple files in the Open dialog;
<br/>&nbsp;- Using a new "File->Merge..." menu option;
<br/>&nbsp;- Drag/dropping onto the NCoverExplorer application.
</LI>
<LI>
Added tabs for each source code file you open to explore coverage on. If you click on a partial class
then tabs will be opened for each of the source code files making up the class.
</LI>
<LI>
Added the ability to exclude assemblies, namespaces or classes from the coverage results by a wildcard capable
case-sensitive match on the name. By default NCoverExplorer includes two exclusions:
<br/>&nbsp;- Exclude all assemblies with the name ending in ".Tests".
<br/>&nbsp;- Exclude all namespaces with the name containing ".My" (for VB.Net exclusions).
</LI>
<LI>
Added support for the NCover 1.5.4 "excluded" attribute which can be found in the coverage.xml files when
the appropriate NCover command-line attributes are used. Note that TestDriven.Net still does not as yet
support this attribute so you need to use the NCover.Console command line for this feature - for more information see
<a href=http://ncover.org/SITE/blogs/ncover_blog/archive/2006/01/29/103.aspx>here</a>. NCoverExplorer
will not include nodes marked as 'excluded' by NCover in it's totals but will still display them in the tree.
</LI>
<LI>
Added an "Excluded" child bin node containing all nodes that have been excluded by the options dialog, by NCover
attributes or by the "Exclude From Results" context menu option (see next point).
</LI>
<LI>
Replaced the "Remove from Results" context menu feature with "Exclude from Results" (shortcut of the DEL key).
Achieves a similar result of removing nodes from coverage calculations, however the nodes are "moved" to the
Excluded bin rather than being deleted from the tree.
</LI>
<LI>
Added a custom "theme" capability along with further colour and font customisation options for the coverage tree,
statistics and source code panes. A number of predefined "themes" are supplied and users can add their own.
Users can switch between themes either in the Options dialog or via the "View->Themes" menu.
</LI>
<LI>
Added a new "View->Coverage" menu which has sub-options related to "Sequence Point Coverage" and
"Function Coverage", assigned shortcut keys ctrl+(1-4):
<br/>&nbsp;- Choosing one of the "Sequence Point" variants will display the tree nodes with differing naming
combinations of coverage percentage and # unvisited sequence points.
<br/>&nbsp;- Choosing "Function Coverage" will alter the coverage tree display so that only methods/classes that were
invoked are highlighted. Method nodes show the number of visits to that method. Class, namespace and module nodes
show the maximum visit count by any of their children.
</LI>
<LI>
Added a "View->Sort By" menu option and context menu on the tree, with sub-options for "Name" (default),
"Class name/line number", "Coverage %" (ascending/descending), "Uncovered Sequence Points" (ascending/descending)
and "Visit Counts" (ascending/descending).
Assigned shortcut keys of ctrl+shift+(1-8). Note that reloading the coverage file will remove the current sort
and default back to by "Name".
</LI>
<LI>
Added "Save" and "Save As" options to the File menu. These give you the option of overwriting/creating a
new coverage.xml file with the current values loaded in NCoverExplorer. Any coverage exclusions/removed
nodes will not appear in the saved coverage file. Note that the methods are written in the same order as
the sort order specified above.
</LI>
<LI>
Added an "Explore Coverage Folder" menu option to the file menu.
</LI>
<LI>
Added an "Expand All" context menu option on the tree (shortcut ctrl+L).
</LI>
<LI>
Enhanced the statistics pane. When a class node is selected you will now see additional columns of
coverage %, unvisited sequence points and sequence points. When clicking on a method node you will
now see the filename.
</LI>
<LI>
Implemented "smart expansion" in the tree. If when you expand a node there is only one child node
then that node will also be expanded and so on. Increases speed of tree navigation particularly
if using a style of "Nested" namespaces with deep hierarchies.
</LI>
<LI>
Display class file name in tab page header bar when a method node is clicked on. Tooltip shows the path.
</LI>
</UL>
<P class="answer">The following minor changes were made:</P>
<UL>
<LI>
Optimised when reloads of the coverage file so it is now only required if you change a coverage exclusion
or the tree grouping/nesting styles in the options dialog. Makes for a snappier UI.
</LI>
<LI>
Added a "Close" menu option to remove any loaded coverage file(s) from display.
</LI>
<LI>
Moved all the "Recent Files" into a submenu to tidy up the File menu.
</LI>
<LI>
Pressing Tab/shift-tab while focus is in the TextEditor pane of source code will now
move focus out of the TextEditor.
</LI>
<LI>
If a source code file contains multiple classes (not nested), then only the highlighting relevant
to that particular class will be displayed in the editor window as each class tree node is clicked.
</LI>
<LI>
Excluding the My namespace is now done through the Exclusions feature.
</LI>
<LI>
Options dialog can be displayed using the F4 shortcut key.
</LI>
<LI>
Removed last remnants of "non VS.Net standard colors" from the C# ICSharpCode TextEditor template.
</LI>
<LI>
Make the GUI naming consistent to correctly reference "sequence points" rather than "lines" and "unvisited"
rather than "uncovered".
</LI>
<LI>
Removed "Edit in VS.Net" from the View menu.
</LI>
<LI>
Changed NCoverExplorer main form icon to one that includes 32x32 sizes so Alt-Tab switching looks
better than upscaled 16x16 icon.
</LI>
<LI>
User is now prompted to remove a non-existent coverage file from the "Recent" files list rather than
automatically being removed.
</LI>
</UL>
<P class="answer">The following bug fixes were made:</P>
<UL>
<LI>
Serializing the configuration settings was not flushing the stream - resulting sometimes in a blank settings file
preventing people from loading NCoverExplorer. Will now revert to default settings if an error occurs.
</LI>
<LI>
Displaying a source code file that has been modified to have less lines of code than at the time of the coverage run
will now display a user friendly message box.
</LI>
<LI>
Compensation made for NCover not reporting column information when profiling C++ code. NCoverExplorer will now
highlight the entire line rather than throwing an error.
</LI>
<LI>
In some circumstances properties were not highlighted consistently due to a bug in the property node expansion.
</LI>
<LI>
Coverage greater than 99.5% will no longer be rounded up to 100% in the display. It is instead shown as ">99.5%".
</LI>
<LI>
Extremely high visit counts will no longer overflow the visit count.
</LI>
<LI>
Statistics pane for a class will now always consistently show the property nodes grouped, rather than only
after the class node has been expanded in the tree.
</LI>
<LI>
Recent file menu would display incorrectly for files numbered from 10 onwards truncating first character.
</LI>
<LI>
Release notes & FAQ were always directed to website rather than local versions when NCoverExplorer was started
from TestDriven.Net.
</LI>
</UL>
<HR/>
<P class="question">v1.3.1 - Feb 15th 2006</P>
<P class="answer">Bundled with TestDriven.Net from build 2.0.1435.</P>
<P class="answer">The following new features were introduced:</P>
<UL>
<LI>
Namespaces are now "flattened" by default in the tree. This looks like the ClassView
browser in VS.Net 2005 (or Lutz Roeder's Reflector). You can retain the nested look by changing it in the View->Options dialog.
</LI>
<LI>
If you use the original "nested" namespace style (like the VS.Net 2003 class browser), then inner namespaces will now be
listed at the top of each branch with the classes listed underneath which is less confusing to navigate.
</LI>
<LI>
Option to exclude the "My" namespace for VB.Net projects (for use with with BCL 2.0 & NCover 1.5.x).
</LI>
<LI>
Right-click menu option on coverage tree (shortcut ctrl+R) to "Remove From Results" that selected node
and all it's children. Will force the coverage values to be recalculated. Intended for use where
you have undesired assemblies, namespaces, classes or methods included in the report that are skewing your
coverage results and you want them removed.
</LI>
<LI>
Option to specify a satisfactory coverage threshold as a number of lines instead/as well as a percentage.
If either of the conditions are met the node is coloured differently (provided the coverage is not zero).
</LI>
<LI>
Colours can now be customised for both the source code highlighting and the nodes in the tree.
</LI>
<LI>
Collapse all nodes context menu option on the coverage tree control (shortcut ctrl-A). Equivalent to reloading
the coverage file (but would preserve any changes you have made such as removing nodes).
</LI>
<LI>
By default the NCoverExplorer now attempts to restore your currently selected node/caret position after
reloading a coverage.xml file (either F5 or by execution of another "Test With Coverage" command in TestDriven.Net).
You can turn off this behaviour in the View->Options dialog.
</LI>
<LI>
Statistics pane is now sortable by method name (default), visit count and line number.
</LI>
<LI>
Statistics pane now summarises all the methods and their visit counts when a class node is clicked.
Can be used as a basic form of method invocation counting for a fairly rudimentary level of profiling.
The colouring used is the same as that of the tree to visually assist in identifying methods invoked.
</LI>
</UL>
</P>
<P class="answer">The following minor changes were made:</P>
<UL>
<LI>
Restructured the Options dialog to have a tabbed interface.
</LI>
<LI>
Renamed the "Show Visit Pane" menu option to "Show Statistics".
</LI>
<LI>
The statistics pane now includes the method name. Widths of the columns are remembered each time you close NCoverExplorer.
</LI>
<LI>
Statistics pane now has icons and colouring to match those of the associated nodes in the coverage tree.
</LI>
<LI>
Inner nested classes now nested internally in the tree under the parent class, sorted to the top.
</LI>
<LI>
Added FAQ, Release Notes and Blog website to the Help menu.
</LI>
</UL>
</P>
<P class="answer">The following bug fixes were made:</P>
<UL>
<LI>
Source code files now loading with "Encoding.Default" rather than previous default of UTF-8.
</LI>
<LI>
Coverage highlighting not working correctly on multiple line statements.
</LI>
<LI>
Now handles partial classes and yield statements correctly.
</LI>
</UL>
</P>
<HR/>
<P class="question">v1.3 - Feb 6th 2006</P>
<P class="answer">Bundled with TestDriven.Net from build 2.0.1373d.</P>
<P class="answer">The following new features were introduced:</P>
<UL>
<LI>
Launching from VS.Net using TestDriven.Net will now re-use the NCoverExplorer instance
opened from a previous "Test with... Coverage" click. Each VS.Net instance has it's own
instance of NCoverExplorer.
</LI>
<LI>
Added "Edit in VS.Net" functionality (keyboard shortcut ctrl+ E) for classes and methods.
Will navigate to source code in your IDE at same point where your cursor resides in NCoverExplorer.
Replaces and enhances previous "Open File" right-click option which has been removed.
</LI>
<LI>
Added "Expand Covered" functionality (keyboard shortcut ctrl + Q) - recurses through the child
nodes of the current node and expands all those with partial or complete coverage. Useful when
using in conjunction with TestDriven.Net for isolated unit testing.
</LI>
<LI>
Added "coverage file" node at the top of the tree showing total coverage across all modules/namespaces.
</LI>
<LI>
Group by module option (default) to assist with navigating coverage for large solutions.
</LI>
<LI>
Configuration information for NCoverExplorer now written to Local Settings rather than registry.
</LI>
<LI>
Increase default number of "recent files" to 10, with ability to alter in the Options dialog.
</LI>
<LI>
Reload of the current coverage file now has a shortcut key of F5.
</LI>
<LI>
Display the path to the currently loaded coverage file in the title bar.
</LI>
</UL>
</P>
<P class="answer">The following minor changes were made:</P>
<UL>
<LI>
Performance enhancements to improve loading times further for large files.
</LI>
<LI>
Static constructors now renamed from "cctor" to ".cctor" so as to be sorted at the top.
</LI>
<LI>
Running NCoverExplorer for first time ever will use a better starting form position.
</LI>
<LI>
Removed configuration option for "nesting properties" - default remains the same of "true".
</LI>
<LI>
Source code refactoring into separate assemblies to facilitate unit testing.
</LI>
</UL>
</P>
<HR/>
<P class="question">v1.2 - Feb 1st 2006</P>
<P class="answer">First public release, bundled with TestDriven.Net from build 2.0.1341d.</P>
<P class="answer">The following new features were introduced:</P>
<UL>
<LI>
Block style highlighting option for both visited and unvisited code.
</LI>
<LI>
Satisfactory coverage threshold.
</LI>
<LI>
Nesting of properties as nodes are expanded.
</LI>
<LI>
Further speed improvements for initial file parsing.
</LI>
</UL>
</P>
<HR/>
<P class="question">v1.1 - Jan 1st 2006</P>
<P class="answer">Speed improvements.</P>
<HR/>
<P class="question">v1.0 - Dec 17th 2005</P>
<P class="answer">First version created.</P>
</body>
</html>

299
lib/Gallio_3.2.517.0/NCover/libs/NCoverExplorer/license.txt

@ -0,0 +1,299 @@
GNU GENERAL PUBLIC LICENSE
Version 2, June 1991
Copyright (C) 1989, 1991 Free Software Foundation, Inc.
59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
Everyone is permitted to copy and distribute verbatim copies
of this license document, but changing it is not allowed.
Preamble
The licenses for most software are designed to take away your
freedom to share and change it. By contrast, the GNU General Public
License is intended to guarantee your freedom to share and change free
software--to make sure the software is free for all its users. This
General Public License applies to most of the Free Software
Foundation's software and to any other program whose authors commit to
using it. (Some other Free Software Foundation software is covered by
the GNU Library General Public License instead.) You can apply it to
your programs, too.
When we speak of free software, we are referring to freedom, not
price. Our General Public Licenses are designed to make sure that you
have the freedom to distribute copies of free software (and charge for
this service if you wish), that you receive source code or can get it
if you want it, that you can change the software or use pieces of it
in new free programs; and that you know you can do these things.
To protect your rights, we need to make restrictions that forbid
anyone to deny you these rights or to ask you to surrender the rights.
These restrictions translate to certain responsibilities for you if you
distribute copies of the software, or if you modify it.
For example, if you distribute copies of such a program, whether
gratis or for a fee, you must give the recipients all the rights that
you have. You must make sure that they, too, receive or can get the
source code. And you must show them these terms so they know their
rights.
We protect your rights with two steps: (1) copyright the software, and
(2) offer you this license which gives you legal permission to copy,
distribute and/or modify the software.
Also, for each author's protection and ours, we want to make certain
that everyone understands that there is no warranty for this free
software. If the software is modified by someone else and passed on, we
want its recipients to know that what they have is not the original, so
that any problems introduced by others will not reflect on the original
authors' reputations.
Finally, any free program is threatened constantly by software
patents. We wish to avoid the danger that redistributors of a free
program will individually obtain patent licenses, in effect making the
program proprietary. To prevent this, we have made it clear that any
patent must be licensed for everyone's free use or not licensed at all.
The precise terms and conditions for copying, distribution and
modification follow.
GNU GENERAL PUBLIC LICENSE
TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
0. This License applies to any program or other work which contains
a notice placed by the copyright holder saying it may be distributed
under the terms of this General Public License. The "Program", below,
refers to any such program or work, and a "work based on the Program"
means either the Program or any derivative work under copyright law:
that is to say, a work containing the Program or a portion of it,
either verbatim or with modifications and/or translated into another
language. (Hereinafter, translation is included without limitation in
the term "modification".) Each licensee is addressed as "you".
Activities other than copying, distribution and modification are not
covered by this License; they are outside its scope. The act of
running the Program is not restricted, and the output from the Program
is covered only if its contents constitute a work based on the
Program (independent of having been made by running the Program).
Whether that is true depends on what the Program does.
1. You may copy and distribute verbatim copies of the Program's
source code as you receive it, in any medium, provided that you
conspicuously and appropriately publish on each copy an appropriate
copyright notice and disclaimer of warranty; keep intact all the
notices that refer to this License and to the absence of any warranty;
and give any other recipients of the Program a copy of this License
along with the Program.
You may charge a fee for the physical act of transferring a copy, and
you may at your option offer warranty protection in exchange for a fee.
2. You may modify your copy or copies of the Program or any portion
of it, thus forming a work based on the Program, and copy and
distribute such modifications or work under the terms of Section 1
above, provided that you also meet all of these conditions:
a) You must cause the modified files to carry prominent notices
stating that you changed the files and the date of any change.
b) You must cause any work that you distribute or publish, that in
whole or in part contains or is derived from the Program or any
part thereof, to be licensed as a whole at no charge to all third
parties under the terms of this License.
c) If the modified program normally reads commands interactively
when run, you must cause it, when started running for such
interactive use in the most ordinary way, to print or display an
announcement including an appropriate copyright notice and a
notice that there is no warranty (or else, saying that you provide
a warranty) and that users may redistribute the program under
these conditions, and telling the user how to view a copy of this
License. (Exception: if the Program itself is interactive but
does not normally print such an announcement, your work based on
the Program is not required to print an announcement.)
These requirements apply to the modified work as a whole. If
identifiable sections of that work are not derived from the Program,
and can be reasonably considered independent and separate works in
themselves, then this License, and its terms, do not apply to those
sections when you distribute them as separate works. But when you
distribute the same sections as part of a whole which is a work based
on the Program, the distribution of the whole must be on the terms of
this License, whose permissions for other licensees extend to the
entire whole, and thus to each and every part regardless of who wrote it.
Thus, it is not the intent of this section to claim rights or contest
your rights to work written entirely by you; rather, the intent is to
exercise the right to control the distribution of derivative or
collective works based on the Program.
In addition, mere aggregation of another work not based on the Program
with the Program (or with a work based on the Program) on a volume of
a storage or distribution medium does not bring the other work under
the scope of this License.
3. You may copy and distribute the Program (or a work based on it,
under Section 2) in object code or executable form under the terms of
Sections 1 and 2 above provided that you also do one of the following:
a) Accompany it with the complete corresponding machine-readable
source code, which must be distributed under the terms of Sections
1 and 2 above on a medium customarily used for software interchange; or,
b) Accompany it with a written offer, valid for at least three
years, to give any third party, for a charge no more than your
cost of physically performing source distribution, a complete
machine-readable copy of the corresponding source code, to be
distributed under the terms of Sections 1 and 2 above on a medium
customarily used for software interchange; or,
c) Accompany it with the information you received as to the offer
to distribute corresponding source code. (This alternative is
allowed only for noncommercial distribution and only if you
received the program in object code or executable form with such
an offer, in accord with Subsection b above.)
The source code for a work means the preferred form of the work for
making modifications to it. For an executable work, complete source
code means all the source code for all modules it contains, plus any
associated interface definition files, plus the scripts used to
control compilation and installation of the executable. However, as a
special exception, the source code distributed need not include
anything that is normally distributed (in either source or binary
form) with the major components (compiler, kernel, and so on) of the
operating system on which the executable runs, unless that component
itself accompanies the executable.
If distribution of executable or object code is made by offering
access to copy from a designated place, then offering equivalent
access to copy the source code from the same place counts as
distribution of the source code, even though third parties are not
compelled to copy the source along with the object code.
4. You may not copy, modify, sublicense, or distribute the Program
except as expressly provided under this License. Any attempt
otherwise to copy, modify, sublicense or distribute the Program is
void, and will automatically terminate your rights under this License.
However, parties who have received copies, or rights, from you under
this License will not have their licenses terminated so long as such
parties remain in full compliance.
5. You are not required to accept this License, since you have not
signed it. However, nothing else grants you permission to modify or
distribute the Program or its derivative works. These actions are
prohibited by law if you do not accept this License. Therefore, by
modifying or distributing the Program (or any work based on the
Program), you indicate your acceptance of this License to do so, and
all its terms and conditions for copying, distributing or modifying
the Program or works based on it.
6. Each time you redistribute the Program (or any work based on the
Program), the recipient automatically receives a license from the
original licensor to copy, distribute or modify the Program subject to
these terms and conditions. You may not impose any further
restrictions on the recipients' exercise of the rights granted herein.
You are not responsible for enforcing compliance by third parties to
this License.
7. If, as a consequence of a court judgment or allegation of patent
infringement or for any other reason (not limited to patent issues),
conditions are imposed on you (whether by court order, agreement or
otherwise) that contradict the conditions of this License, they do not
excuse you from the conditions of this License. If you cannot
distribute so as to satisfy simultaneously your obligations under this
License and any other pertinent obligations, then as a consequence you
may not distribute the Program at all. For example, if a patent
license would not permit royalty-free redistribution of the Program by
all those who receive copies directly or indirectly through you, then
the only way you could satisfy both it and this License would be to
refrain entirely from distribution of the Program.
If any portion of this section is held invalid or unenforceable under
any particular circumstance, the balance of the section is intended to
apply and the section as a whole is intended to apply in other
circumstances.
It is not the purpose of this section to induce you to infringe any
patents or other property right claims or to contest validity of any
such claims; this section has the sole purpose of protecting the
integrity of the free software distribution system, which is
implemented by public license practices. Many people have made
generous contributions to the wide range of software distributed
through that system in reliance on consistent application of that
system; it is up to the author/donor to decide if he or she is willing
to distribute software through any other system and a licensee cannot
impose that choice.
This section is intended to make thoroughly clear what is believed to
be a consequence of the rest of this License.
8. If the distribution and/or use of the Program is restricted in
certain countries either by patents or by copyrighted interfaces, the
original copyright holder who places the Program under this License
may add an explicit geographical distribution limitation excluding
those countries, so that distribution is permitted only in or among
countries not thus excluded. In such case, this License incorporates
the limitation as if written in the body of this License.
9. The Free Software Foundation may publish revised and/or new versions
of the General Public License from time to time. Such new versions will
be similar in spirit to the present version, but may differ in detail to
address new problems or concerns.
Each version is given a distinguishing version number. If the Program
specifies a version number of this License which applies to it and "any
later version", you have the option of following the terms and conditions
either of that version or of any later version published by the Free
Software Foundation. If the Program does not specify a version number of
this License, you may choose any version ever published by the Free Software
Foundation.
10. If you wish to incorporate parts of the Program into other free
programs whose distribution conditions are different, write to the author
to ask for permission. For software which is copyrighted by the Free
Software Foundation, write to the Free Software Foundation; we sometimes
make exceptions for this. Our decision will be guided by the two goals
of preserving the free status of all derivatives of our free software and
of promoting the sharing and reuse of software generally.
NO WARRANTY
11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN
OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS
TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE
PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
REPAIR OR CORRECTION.
12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
POSSIBILITY OF SUCH DAMAGES.
EXCEPTION
13. In addition, as a special exception, AlphaSierraPapa gives permission to
link the code of this program with the Microsoft .NET library (or with
modified versions of Microsoft .NET library that use the same license as the
Microsoft .NET library), and distribute linked combinations including the
two. As a second exception, AlphaSierraPapa gives permission to link the code
of this program with the DockPanel Suite (or with modified versions of
DockPanel Suite that use the same license as the DockPanel Suite), and
distribute linked combinations including the two. You must obey the GNU
General Public License in all respects for all of the code used other than
the Microsoft .NET library and the DockPanel Suite.
If you modify this file, you may extend this exception to your version of the
file, but you are not obliged to do so. If you do not wish to do so, delete
this exception statement from your version.
END OF TERMS AND CONDITIONS
Loading…
Cancel
Save