forked from tsai/mathnet-numerics
27 changed files with 2968 additions and 0 deletions
Binary file not shown.
@ -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> |
||||
|
After Width: | Height: | Size: 1.4 KiB |
@ -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. |
||||
Binary file not shown.
@ -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> |
||||
Binary file not shown.
Binary file not shown.
@ -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> |
||||
Binary file not shown.
@ -0,0 +1,6 @@ |
|||||
|
<?xml version="1.0" encoding="utf-8" ?> |
||||
|
<configuration> |
||||
|
<startup> |
||||
|
<supportedRuntime version="v2.0.50727"/> |
||||
|
</startup> |
||||
|
</configuration> |
||||
Binary file not shown.
@ -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 [<command line> [<command args>]] |
||||
|
[//svc <service name>] |
||||
|
[//iis] |
||||
|
[//a <assembly list>] |
||||
|
[//w <working directory>] |
||||
|
[//ea <exclusion list>] |
||||
|
[//reg] |
||||
|
[//x <xml output file>] |
||||
|
[//s [<settings file>]] [//r [<settings file>]] |
||||
|
[//v] [//q] |
||||
|
[//l <log file>] |
||||
|
|
||||
|
//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><command line> - 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 <command line> |
||||
|
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 <command line> 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. NCover is designed to work |
||||
|
on shipping code. 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. NCover does not change |
||||
|
your original IL code, it simply inserts new code to update a visit |
||||
|
counter at each sequence point. 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. 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><method class="NCoverTest.ClassLoaded" name="HasDeadCode"> |
||||
|
<seqpnt document="C:\Dev\Utilities\ncover\NCoverTest\NCoverTest.cs" |
||||
|
column="13" line="48" endcolumn="58" endline="48" visitcount="1" /> |
||||
|
<seqpnt document="C:\Dev\Utilities\ncover\NCoverTest\NCoverTest.cs" |
||||
|
column="13" line="49" endcolumn="22" endline="49" visitcount="1" /> |
||||
|
<seqpnt document="C:\Dev\Utilities\ncover\NCoverTest\NCoverTest.cs" |
||||
|
column="17" line="50" endcolumn="24" endline="50" visitcount="1" /> |
||||
|
<seqpnt document="C:\Dev\Utilities\ncover\NCoverTest\NCoverTest.cs" |
||||
|
column="13" line="51" endcolumn="48" endline="51" visitcount="0" /> |
||||
|
<seqpnt document="C:\Dev\Utilities\ncover\NCoverTest\NCoverTest.cs" |
||||
|
column="9" line="52" endcolumn="10" endline="52" visitcount="0" /> |
||||
|
</method></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 <ncover> 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> </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 <exec> task with <a href="http://nant.sourceforge.net/">NAnt</a> |
||||
|
or an <Exec> task with MSBuild. Alternatively you may want to use the custom |
||||
|
<ncover> task for NAnt or <NCover> 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>. </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)? </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. </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> |
||||
|
|
||||
|
</body> |
||||
|
</html> |
||||
@ -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. |
||||
Binary file not shown.
@ -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> |
||||
@ -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> |
||||
@ -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" />  </h1> |
||||
|
<table cellpadding="1" class="subtitleText"> |
||||
|
<tbody> |
||||
|
<tr> |
||||
|
<td class="heading">Report generated on:</td> |
||||
|
<td><xsl:value-of select="./@date" /> at <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" /> / <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"> </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"> </td> |
||||
|
<td align="right"> </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"> </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"> </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"> </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"> </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"> </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"> </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"> </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 >= $threshold">graphBarSatisfactory</xsl:if> |
||||
|
<xsl:if test="$coverage < $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> |
||||
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
@ -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> |
||||
@ -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> | <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> |
||||
@ -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 <exec> 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 <assembly> 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/> - Module Summary (Coverage totals for the project and per module); |
||||
|
<br/> - Namespace Summary (Coverage totals for the project and per namespace); |
||||
|
<br/> - 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 <exec> task. |
||||
|
These tasks offer a more developer friendly alternative such as <fileset> for coverage files and creating a |
||||
|
.config file on the fly based on specified parameters such as <exclusions> 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/> - Selecting multiple test classes/fixtures/projects in TestDriven.Net; |
||||
|
<br/> - Passing multiple files in the command line arguments; |
||||
|
<br/> - Selecting multiple files in the Open dialog; |
||||
|
<br/> - Using a new "File->Merge..." menu option; |
||||
|
<br/> - 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/> - Exclude all assemblies with the name ending in ".Tests". |
||||
|
<br/> - 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/> - Choosing one of the "Sequence Point" variants will display the tree nodes with differing naming |
||||
|
combinations of coverage percentage and # unvisited sequence points. |
||||
|
<br/> - 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> |
||||
@ -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…
Reference in new issue