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