Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP
Browse files

Removed NCover and added a Readme.txt

  • Loading branch information...
commit 062090d5a4e59e9dbfd2bc3ab39d5917c192992b 1 parent 27878d8
@shashankshetty shashankshetty authored
View
3  Build.bat
@@ -1 +1,2 @@
-@tools\nant\NAnt.exe -targetframework:net-3.5 -buildfile:ExcelMapper.build -D:use-svn-revision=false -D:debug=true %*
+@tools\nant\NAnt.exe -targetframework:net-3.5 -buildfile:ExcelMapper.build -D:use-svn-revision=false -D:debug=true %*
+PAUSE
View
42 ExcelMapper.build
@@ -4,8 +4,7 @@
<!-- PROPERTIES -->
<property name ="current.dir" value="${directory::get-current-directory()}" />
<property name="build.dir" value="build" />
- <property name="nunit-console.exe" value="tools\nunit\bin\nunit-console-x86.exe" />
- <property name="ncover-console.exe" value="tools\ncover\NCover.Console.exe" />
+ <property name="nunit-console.exe" value="tools\nunit\bin\nunit-console-x86.exe" />
<property name="excel.dir" value="Excel" />
<property name="include.dir" value="Templates\Include" />
@@ -53,40 +52,21 @@
<target name="test" depends="run-ExcelMapperTests, run-BuildDTOsFromExcel" />
- <target name="build" depends="compile, test, generate-coverage-report" description="Clean, Compile, run tests" />
+ <target name="build" depends="compile, test" description="Clean, Compile, run tests" />
- <target name="run-ExcelMapperTests">
- <mkdir dir="${build.dir}\test-reports" />
- <exec program="${ncover-console.exe}" workingdir="${build.dir}">
- <arg value="&quot;..\tools\nunit\bin\nunit-console-x86.exe&quot;" />
- <arg value="&quot;ExcelMapper.Tests.dll /xml:test-reports\ExcelMapperTests.xml /nologo &quot;" />
- <arg value="//w" />
- <arg value="." />
- <arg value="//x" />
- <arg value="test-reports\ExcelMapperTestsCoverage.xml" />
+ <target name="run-ExcelMapperTests">
+ <exec program="${nunit-console.exe}" workingdir="${build.dir}">
+ <arg value="ExcelMapper.Tests.dll" />
+ <arg value="/xml:ExcelMapperTests.xml" />
+ <arg value="/nologo" />
</exec>
</target>
<target name="run-BuildDTOsFromExcel">
- <mkdir dir="${build.dir}\test-reports" />
- <exec program="${ncover-console.exe}" workingdir="${build.dir}">
- <arg value="&quot;..\tools\nunit\bin\nunit-console-x86.exe&quot;" />
- <arg value="&quot;BuildDTOsFromExcel.Tests.dll /xml:test-reports\BuildDTOsFromExcelTests.xml /nologo &quot;" />
- <arg value="//w" />
- <arg value="." />
- <arg value="//x" />
- <arg value="test-reports\BuildDTOsFromExcelTestsCoverage.xml" />
- </exec>
- </target>
-
- <target name="generate-coverage-report">
- <!--Generage Coverage Report-->
- <exec program="tools\NCoverExplorer\NCoverExplorer.Console.exe" workingdir="${build.dir}\test-reports">
- <arg value="ExcelMapperTestsCoverage.xml" />
- <arg value="BuildDTOsFromExcelTestsCoverage.xml" />
- <arg value="/x" />
- <arg value="/r:4" />
- <arg value="/P:Coverage" />
+ <exec program="${nunit-console.exe}" workingdir="${build.dir}">
+ <arg value="BuildDTOsFromExcel.Tests.dll" />
+ <arg value="/xml:BuildDTOsFromExcelTests.xml" />
+ <arg value="/nologo" />
</exec>
</target>
</project>
View
1  Readme.txt
@@ -0,0 +1 @@
+Help on using ExcelMapper: http://shashankshetty.wordpress.com/2009/05/09/using-excelmapper/
View
BIN  tools/NCover/CoverLib.dll
Binary file not shown
View
339 tools/NCover/Coverage.xsl
@@ -1,339 +0,0 @@
-<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>
View
BIN  tools/NCover/MSVCP80.dll
Binary file not shown
View
BIN  tools/NCover/MSVCR80.dll
Binary file not shown
View
BIN  tools/NCover/NCover.Console.exe
Binary file not shown
View
6 tools/NCover/NCover.Console.exe.config
@@ -1,6 +0,0 @@
-<?xml version="1.0" encoding="utf-8" ?>
-<configuration>
- <startup>
- <supportedRuntime version="v2.0.50727"/>
- </startup>
-</configuration>
View
BIN  tools/NCover/NCover.Framework.dll
Binary file not shown
View
212 tools/NCover/NCoverFAQ.html
@@ -1,212 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
-<html>
- <head>
- <!-- $Id: NCoverFAQ.html 91 2006-01-17 23:51:02Z NCover $ -->
- <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>.</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">At this time, NCover has only been tested on the .NET framework
- version 1.1.4322.</P>
- <P class="question">4. What is the command line syntax for NCover?</P>
- <P class="answer">Here is the usage info from the NCover command line:</P>
- <pre class="usage">Usage: NCover /c &lt;command line&gt; [/a &lt;assembly list&gt;]
-
-/c Command line to launch profiled application.
-/a List of assemblies to profile. i.e. "MyAssembly1;MyAssembly2"
-/v Enable verbose logging (show instrumented code)
- </pre>
- <UL>
- <LI>
- The /c command-line argument is required and specifies the command-line of the
- .NET application you want to analyze.
- <li>
- The /a 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.
- <li>
- The /v 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">5. Does NCover required a special compilation step for my code?</P>
- <P class="answer">No. Some code coverage tools change your source code and force
- you to recompile it into a special build.&nbsp; NCover is designed to&nbsp;work
- on shipping code.&nbsp; NCover uses the .NET Framework profiling API to monitor
- your code. It does require build symbols, but can be run on release code
- without any modifications.</P>
- <P class="question">6. How does NCover work?</P>
- <P class="answer">NCover uses the .NET Framework profiler API to monitor an
- application's execution. When a method is loaded by the CLR, NCover retrieves
- the IL and replaces it with instrumented IL code.&nbsp; NCover does not change
- your original IL code, it simply inserts new code to update&nbsp;a visit
- counter at each sequence point.&nbsp; After&nbsp;the .NET&nbsp;process
- shuts&nbsp;down, the profiler outputs statistics to a file in the current
- directory.
- </P>
- <P class="question">7. How do I analyze an ASP.NET application with NCover?</P>
- <P class="answer"><STRONG>xmspc</STRONG> got this to work on ASP.NET. See his post
- on the message board for more information. Here are the basics for getting it
- to work on Windows XP.
- </P>
- <div class="quote">
- <P class="answer">
- 1) Ensure the NCoverLib COM component is registered (setup does this, but you
- can manually register it with regsvr32 if you wish).
- </P>
- <P class="answer">
- 2) Set the machine-wide COR profiling environment variables (or find some other
- way to get them set in the aspnet_wp.exe's environment):
- <BR>
- &nbsp;&nbsp;COR_ENABLE_PROFILING=1
- <BR>
- &nbsp;&nbsp;COR_PROFILER=CvrLib.CoverageProfiler
- </P>
- <P class="answer">3) Create %windir%\System32\Coverage.log and
- %windir%\System32\Coverage.xml and grant .\ASPNET read+write+modify permission
- to these 2 files only.
- </P>
- <P class="answer">4) Force a restart of IIS so aspnet_wp.exe picks up the new
- environment variables.&nbsp;Coverage info will be written to the System32
- directory.
- </P>
- <P class="answer">All ASP.Net processes (on Windows XP for sure, don't know about
- Windows 2003) use %windir%\System32 as their working dir, therefore if multiple
- processes are running they will stomp over the Coverage files.
- </P>
- <P class="answer">...would be nice if NCover used AppDomain basedir and/or value
- from app config file to set output file dir...
- </P>
- </div>
- <P class="question">8. What is the output of NCover?</P>
- <P class="answer">NCover writes three files to the directory 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.
- <li>
- Coverage.xml - This file is the analysis output of NCover. You can see an
- example of the output below.
- <LI>
- Coverage.xsl - This file is a simple XML transformation that makes the XML
- output easily readable.
- </LI>
- </ul>
- <span class="subtitle">Example XML output</span>
- <div class="box"><pre>&lt;method class="NCoverTest.ClassLoaded" name="HasDeadCode"&gt;
- &lt;seqpnt document="C:\Dev\Utilities\ncover\NCoverTest\NCoverTest.cs"
- column="13" line="48" endcolumn="58" endline="48" visitcount="1" /&gt;
- &lt;seqpnt document="C:\Dev\Utilities\ncover\NCoverTest\NCoverTest.cs"
- column="13" line="49" endcolumn="22" endline="49" visitcount="1" /&gt;
- &lt;seqpnt document="C:\Dev\Utilities\ncover\NCoverTest\NCoverTest.cs"
- column="17" line="50" endcolumn="24" endline="50" visitcount="1" /&gt;
- &lt;seqpnt document="C:\Dev\Utilities\ncover\NCoverTest\NCoverTest.cs"
- column="13" line="51" endcolumn="48" endline="51" visitcount="0" /&gt;
- &lt;seqpnt document="C:\Dev\Utilities\ncover\NCoverTest\NCoverTest.cs"
- column="9" line="52" endcolumn="10" endline="52" visitcount="0" /&gt;
-&lt;/method&gt;</pre>
- </div>
- <p></p>
- <span class="subtitle">Example transformed output</span>
- <div class="box">
- <DIV class="method">NCoverTest.ClassLoaded.HasDeadCode</DIV>
- <TABLE id="Table1" borderColor="black" cellSpacing="0" cellPadding="3" border="1">
- <TBODY>
- <TR>
- <TD class="hdrcell">Visit Count</TD>
- <TD class="hdrcell">Line</TD>
- <TD class="hdrcell">Column</TD>
- <TD class="hdrcell">End Line</TD>
- <TD class="hdrcell">End Column</TD>
- <TD class="hdrcell">Document</TD>
- </TR>
- <TR>
- <TD class="datacell">1</TD>
- <TD class="datacell">48</TD>
- <TD class="datacell">13</TD>
- <TD class="datacell">48</TD>
- <TD class="datacell">58</TD>
- <TD class="datacell">C:\Dev\Utilities\ncover\NCoverTest\NCoverTest.cs</TD>
- </TR>
- <TR>
- <TD class="datacell">1</TD>
- <TD class="datacell">49</TD>
- <TD class="datacell">13</TD>
- <TD class="datacell">49</TD>
- <TD class="datacell">22</TD>
- <TD class="datacell">C:\Dev\Utilities\ncover\NCoverTest\NCoverTest.cs</TD>
- </TR>
- <TR>
- <TD class="datacell">1</TD>
- <TD class="datacell">50</TD>
- <TD class="datacell">17</TD>
- <TD class="datacell">50</TD>
- <TD class="datacell">24</TD>
- <TD class="datacell">C:\Dev\Utilities\ncover\NCoverTest\NCoverTest.cs</TD>
- </TR>
- <TR>
- <TD class="hldatacell">0</TD>
- <TD class="datacell">51</TD>
- <TD class="datacell">13</TD>
- <TD class="datacell">51</TD>
- <TD class="datacell">48</TD>
- <TD class="datacell">C:\Dev\Utilities\ncover\NCoverTest\NCoverTest.cs</TD>
- </TR>
- <TR>
- <TD class="hldatacell">0</TD>
- <TD class="datacell">52</TD>
- <TD class="datacell">9</TD>
- <TD class="datacell">52</TD>
- <TD class="datacell">10</TD>
- <TD class="datacell">C:\Dev\Utilities\ncover\NCoverTest\NCoverTest.cs</TD>
- </TR>
- </TBODY>
- </TABLE>
- </div>
- <P></P>
- <P class="question">9. How do you test NCover?</P>
- <P class="answer">Unfortunately, all the original testing was done with production
- code that cannot be published. I have started on a test suite called
- NCoverTest. It is pretty anemic right now, but feel free to chip in and
- contribute some tests.</P>
- </body>
-</html>
View
15 tools/NCover/VC80CRT.MAN
@@ -1,15 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
-<!-- Copyright © 1981-2001 Microsoft Corporation -->
-<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
- <noInheritable/>
- <assemblyIdentity
- type="win32"
- name="Microsoft.VC80.CRT"
- version="8.0.50608.0"
- processorArchitecture="x86"
- publicKeyToken="1fc8b3b9a1e18e3b"
- />
- <file name="msvcr80.dll"/>
- <file name="msvcp80.dll"/>
- <file name="msvcm80.dll"/>
-</assembly>
View
BIN  tools/NCoverExplorer/CommandBars.dll
Binary file not shown
View
27 tools/NCoverExplorer/ConsoleExample.config
@@ -1,27 +0,0 @@
-<?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>
- <!-- Coverage exclusions to exclude specified assemblies, namespaces and/or classes. -->
- <CoverageExclusions>
- <CoverageExclusion>
- <!-- Valid values are [Assembly], [Namespace] and [Class]. -->
- <ExclusionType>Assembly</ExclusionType>
- <Pattern>*.Tests</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>
View
432 tools/NCoverExplorer/CoverageReport.xsl
@@ -1,432 +0,0 @@
-<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" select="./project/@acceptable" />
-
- <xsl:call-template name="header" />
-
- <xsl:call-template name="projectSummary">
- <xsl:with-param name="threshold" select="$threshold" />
- </xsl:call-template>
-
- <xsl:if test="$reportType != 'Namespace Summary'">
- <xsl:call-template name="moduleSummary" />
- </xsl:if>
-
- <xsl:if test="$reportType = 'Module Namespace Summary'">
- <xsl:call-template name="moduleNamespaceSummary" />
- </xsl:if>
-
- <xsl:if test="$reportType = 'Module Class Summary'">
- <xsl:call-template name="classModuleSummary" />
- </xsl:if>
-
- <xsl:if test="$reportType = 'Namespace Summary'">
- <xsl:call-template name="namespaceSummary">
- <xsl:with-param name="threshold" select="$threshold" />
- </xsl:call-template>
- </xsl:if>
-
- <xsl:if test="count(./exclusions/exclusion) != 0">
- <xsl:call-template name="exclusionsSummary" />
- </xsl:if>
-
- <xsl:call-template name="footer" />
- </xsl:template>
-
-
- <!-- Report Header -->
- <xsl:template name="header">
- <tr>
- <td class="projectTable reportHeader" colspan="5">
- <table width="100%">
- <tbody>
- <tr>
- <td valign="top">
- <h1 class="titleText">NCoverExplorer Coverage Report - <xsl:value-of select="./project/@name" />&#160;&#160;</h1>
- <table cellpadding="1" class="subtitleText">
- <tbody>
- <tr>
- <td class="heading">Report generated on:</td>
- <td><xsl:value-of select="./@date" />&#160;at&#160;<xsl:value-of select="./@time" /></td>
- </tr>
- <tr>
- <td class="heading">NCoverExplorer version:</td>
- <td><xsl:value-of select="./@version" /></td>
- </tr>
- </tbody>
- </table>
- </td>
- <td class="projectStatistics" align="right" valign="top">
- <table cellpadding="1">
- <tbody>
- <tr>
- <td rowspan="3" 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="3">&#160;</td>
- <td align="right" class="heading">NCLOC:</td>
- <td align="right"><xsl:value-of select="./project/@nonCommentLines" /></td>
- </tr>
- <tr>
- <td align="right" class="heading">Classes:</td>
- <td align="right"><xsl:value-of select="./project/@classes" /></td>
- <td align="right" class="heading">Total Pts:</td>
- <td align="right"><xsl:value-of select="./project/@sequencePoints" /></td>
- </tr>
- <tr>
- <td align="right" class="heading">Members:</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/@unvisitedPoints" /></td>
- </tr>
- </tbody>
- </table>
- </td>
- </tr>
- </tbody>
- </table>
- </td>
- </tr>
- </xsl:template>
-
- <!-- Project Summary -->
- <xsl:template name="projectSummary">
- <xsl:param name="threshold" />
- <tr>
- <td colspan="5">&#160;</td>
- </tr>
- <tr>
- <td class="projectTable mainTableHeaderLeft">Project</td>
- <td class="projectTable mainTableHeader">Acceptable</td>
- <td class="projectTable mainTableHeader">Unvisited SeqPts</td>
- <td class="projectTable mainTableGraphHeader" colspan="2">Coverage</td>
- </tr>
- <xsl:call-template name="coverageDetail">
- <xsl:with-param name="name" select="./project/@name" />
- <xsl:with-param name="unvisitedPoints" select="./project/@unvisitedPoints" />
- <xsl:with-param name="sequencePoints" select="./project/@sequencePoints" />
- <xsl:with-param name="coverage" select="./project/@coverage" />
- <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" />
- <tr>
- <td colspan="5">&#160;</td>
- </tr>
- <tr>
- <td class="primaryTable mainTableHeaderLeft">Modules</td>
- <td class="primaryTable mainTableHeader">Acceptable</td>
- <td class="primaryTable mainTableHeader">Unvisited SeqPts</td>
- <td class="primaryTable mainTableGraphHeader" colspan="2">Coverage</td>
- </tr>
- <xsl:for-each select="./modules/module">
- <xsl:call-template name="coverageDetail">
- <xsl:with-param name="name" select="./@name" />
- <xsl:with-param name="unvisitedPoints" select="./@unvisitedPoints" />
- <xsl:with-param name="sequencePoints" select="./@sequencePoints" />
- <xsl:with-param name="coverage" select="./@coverage" />
- <xsl:with-param name="threshold" select="./@acceptable" />
- <xsl:with-param name="showThreshold">True</xsl:with-param>
- </xsl:call-template>
- </xsl:for-each>
- </xsl:template>
-
- <!-- Namespaces per Module Summary -->
- <xsl:template name="moduleNamespaceSummary">
- <xsl:param name="threshold" />
- <xsl:for-each select="./modules/module">
- <tr>
- <td colspan="5">&#160;</td>
- </tr>
- <tr>
- <td class="secondaryTable mainTableHeaderLeft">Module</td>
- <td class="secondaryTable mainTableHeader">Acceptable</td>
- <td class="secondaryTable mainTableHeader">Unvisited SeqPts</td>
- <td class="secondaryTable mainTableGraphHeader" colspan="2">Coverage</td>
- </tr>
- <xsl:call-template name="coverageDetailSecondary">
- <xsl:with-param name="name" select="./@name" />
- <xsl:with-param name="unvisitedPoints" select="./@unvisitedPoints" />
- <xsl:with-param name="sequencePoints" select="./@sequencePoints" />
- <xsl:with-param name="coverage" select="./@coverage" />
- <xsl:with-param name="threshold" select="./@acceptable" />
- </xsl:call-template>
- <tr>
- <td class="secondaryChildTable childTableHeader" colspan="5">Namespaces</td>
- </tr>
- <xsl:for-each select="./namespace">
- <xsl:call-template name="coverageIndentedDetail">
- <xsl:with-param name="name" select="./@name" />
- <xsl:with-param name="unvisitedPoints" select="./@unvisitedPoints" />
- <xsl:with-param name="sequencePoints" select="./@sequencePoints" />
- <xsl:with-param name="coverage" select="./@coverage" />
- <xsl:with-param name="threshold" select="./@acceptable" />
- </xsl:call-template>
- </xsl:for-each>
- </xsl:for-each>
- </xsl:template>
-
- <!-- Classes per Namespace per Module Summary -->
- <xsl:template name="classModuleSummary">
- <xsl:param name="threshold" />
- <xsl:for-each select="./modules/module">
- <tr>
- <td colspan="5">&#160;</td>
- </tr>
- <tr>
- <td class="secondaryTable mainTableHeaderLeft">Module</td>
- <td class="secondaryTable mainTableHeader">Acceptable</td>
- <td class="secondaryTable mainTableHeader">Unvisited SeqPts</td>
- <td class="secondaryTable mainTableGraphHeader" colspan="2">Coverage</td>
- </tr>
- <xsl:call-template name="coverageDetailSecondary">
- <xsl:with-param name="name" select="./@name" />
- <xsl:with-param name="unvisitedPoints" select="./@unvisitedPoints" />
- <xsl:with-param name="sequencePoints" select="./@sequencePoints" />
- <xsl:with-param name="coverage" select="./@coverage" />
- <xsl:with-param name="threshold" select="./@acceptable" />
- </xsl:call-template>
- <tr>
- <td class="secondaryChildTable childTableHeader" colspan="5">Namespace / Classes</td>
- </tr>
- <xsl:for-each select="./namespace">
- <xsl:call-template name="coverageIndentedDetail">
- <xsl:with-param name="name" select="./@name" />
- <xsl:with-param name="unvisitedPoints" select="./@unvisitedPoints" />
- <xsl:with-param name="sequencePoints" select="./@sequencePoints" />
- <xsl:with-param name="coverage" select="./@coverage" />
- <xsl:with-param name="threshold" select="../@acceptable" />
- <xsl:with-param name="styleTweak">padding-left:20px;font-weight:bold</xsl:with-param>
- </xsl:call-template>
- <xsl:for-each select="./class">
- <xsl:call-template name="coverageIndentedDetail">
- <xsl:with-param name="name" select="./@name" />
- <xsl:with-param name="unvisitedPoints" select="./@unvisitedPoints" />
- <xsl:with-param name="sequencePoints" select="./@sequencePoints" />
- <xsl:with-param name="coverage" select="./@coverage" />
- <xsl:with-param name="threshold" select="../../@acceptable" />
- <xsl:with-param name="styleTweak">padding-left:30px</xsl:with-param>
- <xsl:with-param name="scale">160</xsl:with-param>
- </xsl:call-template>
- </xsl:for-each>
- </xsl:for-each>
- </xsl:for-each>
- </xsl:template>
-
- <!-- Namespaces Summary -->
- <xsl:template name="namespaceSummary">
- <xsl:param name="threshold" />
- <tr>
- <td colspan="5">&#160;</td>
- </tr>
- <tr>
- <td class="primaryTable mainTableHeaderLeft" colspan="2">Namespaces</td>
- <td class="primaryTable mainTableHeader">Unvisited SeqPts</td>
- <td class="primaryTable mainTableGraphHeader" colspan="2">Coverage</td>
- </tr>
- <xsl:for-each select="./namespaces/namespace">
- <xsl:call-template name="coverageDetail">
- <xsl:with-param name="name" select="./@name" />
- <xsl:with-param name="unvisitedPoints" select="./@unvisitedPoints" />
- <xsl:with-param name="sequencePoints" select="./@sequencePoints" />
- <xsl:with-param name="coverage" select="./@coverage" />
- <xsl:with-param name="threshold" select="$threshold" />
- <xsl:with-param name="showThreshold">False</xsl:with-param>
- </xsl:call-template>
- </xsl:for-each>
- </xsl:template>
-
- <!-- Coverage detail row in main grid displaying a name, statistics and graph bar -->
- <xsl:template name="coverageDetail">
- <xsl:param name="name" />
- <xsl:param name="unvisitedPoints" />
- <xsl:param name="sequencePoints" />
- <xsl:param name="coverage" />
- <xsl:param name="threshold" />
- <xsl:param name="showThreshold" />
- <tr>
- <xsl:choose>
- <xsl:when test="$showThreshold='True'">
- <td class="mainTableCellBottom mainTableCellItem"><xsl:value-of select="$name" /></td>
- <td class="mainTableCellBottom mainTableCellData"><xsl:value-of select="concat(format-number($threshold,'#0.0'), ' %')" /></td>
- </xsl:when>
- <xsl:otherwise>
- <td class="mainTableCellBottom mainTableCellItem" colspan="2"><xsl:value-of select="$name" /></td>
- </xsl:otherwise>
- </xsl:choose>
- <td class="mainTableCellBottom mainTableCellData"><xsl:value-of select="$unvisitedPoints" /></td>
- <td class="mainTableCellBottom mainTableCellPercent"><xsl:value-of select="concat(format-number($coverage,'#0.0'), ' %')" /></td>
- <td class="mainTableCellBottom mainTableCellGraph">
- <xsl:call-template name="detailPercent">
- <xsl:with-param name="notVisited" select="$unvisitedPoints" />
- <xsl:with-param name="total" select="$sequencePoints" />
- <xsl:with-param name="threshold" select="$threshold" />
- <xsl:with-param name="scale" select="200" />
- </xsl:call-template>
- </td>
- </tr>
- </xsl:template>
-
- <!-- Coverage detail row in secondary grid header displaying a name, statistics and graph bar -->
- <xsl:template name="coverageDetailSecondary">
- <xsl:param name="name" />
- <xsl:param name="unvisitedPoints" />
- <xsl:param name="sequencePoints" />
- <xsl:param name="coverage" />
- <xsl:param name="threshold" />
- <tr>
- <td class="mainTableCellItem"><xsl:value-of select="$name" /></td>
- <td class="mainTableCellData"><xsl:value-of select="concat(format-number($threshold,'#0.0'), ' %')" /></td>
- <td class="mainTableCellData"><xsl:value-of select="$unvisitedPoints" /></td>
- <td class="mainTableCellPercent"><xsl:value-of select="concat(format-number($coverage,'#0.0'), ' %')" /></td>
- <td class="mainTableCellGraph">
- <xsl:call-template name="detailPercent">
- <xsl:with-param name="notVisited" select="$unvisitedPoints" />
- <xsl:with-param name="total" select="$sequencePoints" />
- <xsl:with-param name="threshold" select="$threshold" />
- <xsl:with-param name="scale" select="200" />
- </xsl:call-template>
- </td>
- </tr>
- </xsl:template>
-
- <!-- Coverage detail row with indented item name and shrunk graph bar -->
- <xsl:template name="coverageIndentedDetail">
- <xsl:param name="name" />
- <xsl:param name="unvisitedPoints" />
- <xsl:param name="sequencePoints" />
- <xsl:param name="coverage" />
- <xsl:param name="threshold" />
- <xsl:param name="styleTweak">padding-left:20px</xsl:param>
- <xsl:param name="scale">180</xsl:param>
- <tr>
- <td class="mainTableCellBottom childTableCellIndentedItem" colspan="2"><xsl:attribute name="style"><xsl:value-of select="$styleTweak"/></xsl:attribute><xsl:value-of select="$name" /></td>
- <td class="mainTableCellBottom mainTableCellData"><xsl:value-of select="$unvisitedPoints" /></td>
- <td class="mainTableCellBottom mainTableCellPercent"><xsl:value-of select="concat(format-number($coverage,'#0.0'), ' %')" /></td>
- <td class="mainTableCellBottom mainTableCellGraph">
- <xsl:call-template name="detailPercent">
- <xsl:with-param name="notVisited" select="$unvisitedPoints" />
- <xsl:with-param name="total" select="$sequencePoints" />
- <xsl:with-param name="threshold" select="$threshold" />
- <xsl:with-param name="scale" select="$scale" />
- </xsl:call-template>
- </td>
- </tr>
- </xsl:template>
-
- <!-- Exclusions Summary -->
- <xsl:template name="exclusionsSummary">
- <tr>
- <td colspan="5">&#160;</td>
- </tr>
- <tr>
- <td class="exclusionTable mainTableHeaderLeft" colspan="3">Excluded From Coverage Results</td>
- <td class="exclusionTable mainTableGraphHeader" colspan="2">All Code Within</td>
- </tr>
- <xsl:for-each select="./exclusions/exclusion">
- <tr>
- <td class="mainTableCellBottom exclusionTableCellItem" colspan="3"><xsl:value-of select="@name" /></td>
- <td class="mainTableCellBottom mainTableCellGraph" colspan="2"><xsl:value-of select="@category" /></td>
- </tr>
- </xsl:for-each>
- </xsl:template>
-
- <!-- Footer -->
- <xsl:template name="footer">
- <tr>
- <td colspan="5">&#160;</td>
- </tr>
- </xsl:template>
-
- <!-- Draw % Green/Red/Yellow Bar -->
- <xsl:template name="detailPercent">
- <xsl:param name="notVisited" />
- <xsl:param name="total" />
- <xsl:param name="threshold" />
- <xsl:param name="scale" />
- <xsl:variable name="visited" select="$total - $notVisited" />
- <xsl:variable name="coverage" select="$visited div $total * 100"/>
- <table cellpadding="0" cellspacing="0">
- <tbody>
- <tr>
- <xsl:if test="$notVisited = 0">
- <td class="graphBarVisitedFully" height="14">
- <xsl:attribute name="width">
- <xsl:value-of select="$scale" />
- </xsl:attribute>.</td>
- </xsl:if>
- <xsl:if test="($visited != 0) and ($notVisited != 0)">
- <td class="graphBarVisited" height="14">
- <xsl:attribute name="width">
- <xsl:value-of select="format-number($coverage div 100 * $scale, '0') - 1" />
- </xsl:attribute>.</td>
- </xsl:if>
- <xsl:if test="$notVisited != 0">
- <td height="14">
- <xsl:attribute name="class">
- <xsl:if test="$coverage &gt;= $threshold">graphBarSatisfactory</xsl:if>
- <xsl:if test="$coverage &lt; $threshold">graphBarNotVisited</xsl:if>
- </xsl:attribute>
- <xsl:attribute name="width">
- <xsl:value-of select="format-number($notVisited div $total * $scale, '0')" />
- </xsl:attribute>.</td>
- </xsl:if>
- </tr>
- </tbody>
- </table>
- </xsl:template>
-</xsl:stylesheet>
View
BIN  tools/NCoverExplorer/ICSharpCode.TextEditor.dll
Binary file not shown
View
BIN  tools/NCoverExplorer/NCoverExplorer.Console.exe
Binary file not shown
View
BIN  tools/NCoverExplorer/NCoverExplorer.Core.dll
Binary file not shown
View
BIN  tools/NCoverExplorer/NCoverExplorer.exe
Binary file not shown
View
8 tools/NCoverExplorer/NCoverExplorer.exe.config
@@ -1,8 +0,0 @@
-<?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>
View
278 tools/NCoverExplorer/NCoverExplorerFAQ.html
@@ -1,278 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
-<html>
- <head>
- <script type="text/javascript">
- <!--
- function Toggle(id)
- {
- var e = document.getElementById(id);
- if(e.style.display == 'none')
- e.style.display = 'block';
- else
- e.style.display = 'none';
- }
-
- function SwitchAll(how)
- { var len = document.all.length-1;
- for(i=0;i!=len;i++) {
- var block = document.all[i];
- if (block != null && block.id != '')
- { block.style.display=how;}
- }
- }
-
- function ExpandAll()
- {SwitchAll('block');}
-
- function CollapseAll()
- {SwitchAll('none');}
- // -->
- </script>
- <title>NCoverExplorer FAQ</title>
- <meta content="Microsoft Visual Studio .NET 7.1" name="GENERATOR">
- <meta content="http://schemas.microsoft.com/intellisense/ie5" name="vs_targetSchema">
- <style>
- body { font-size: 10pt; font-family: Verdana; }
- p.title { font-size: 20pt; font-weight: bold; }
- .action { color: maroon; font-size: 10pt; font-weight: bold; cursor:pointer }
- .question { font-weight: bold; cursor:pointer }
- .answer { margin: 15px; }
- pre { font-size: 10pt; font-family: Courier; }
- pre.usage { background-color: #F0F0F0; }
- .subtitle { color: maroon; font-weight: bold; }
- .quote { background-color: #F0F0F0; margin-left: 36pt;}
- .method { color: maroon; font-size: 10pt; font-weight: bold; }
- .hdrcell { background-color: #DDEEFF; font-size: 10pt; }
- .datacell { background-color: #FFFFEE; text-align: right; font-size: 10pt; }
- .hldatacell { background-color: #FFCCCC; text-align: right; font-size: 10pt; }
- .box { border: 1px solid; padding: 10px; }
- .treeviewBlack { color: black; }
- .treeviewGrey { color: grey; }
- .treeviewRed { color: red; }
- .treeviewBlue { color: blue; }
- .sourceBlue { background-color: #E0EDFD; color: black; }
- .sourceRed { background-color: #E6B0A5; color: black; }
- </style>
- </head>
- <body>
- <P class="title">NCoverExplorer FAQ</P>
- <P>The latest version of this document is located <A href="http://www.kiwidude.com/dotnet/NCoverExplorerFAQ.html">here</A>.
- <BR/>For the latest NCoverExplorer news and updates, visit my <A href="http://www.kiwidude.com/blog/">blog</A>.</P>
- <P class="action"><a onClick="ExpandAll();">Expand All</a>&nbsp;|&nbsp;<a onClick="CollapseAll();">Collapse All</a></P>
- <a class="question" onclick="return Toggle('answer1')">1. What is NCoverExplorer?</a><br/>
- <div id="answer1" style="display:none">
- <P class="answer">This tool allows you to open a coverage.xml file produced by
- <A href="http://ncover.org"/>NCover</A> and navigate the source code. The
- source code is highlighted to clearly show which statements were visited
- and not visited. You can filter, sort and report on the coverage results.
- </P>
- </div>
- <a class="question" onclick="return Toggle('answer2')">2. What versions of .Net 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.0).
- </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 the latest NCover 1.5.x. It will NOT
- work with NCover 1.4.6. In the event of the NCover coverage xml file schema changing drastically in the future an
- updated release of NCoverExplorer would be required.
- </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>
- </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>
- </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 perspecitive it is a non-trivial task - particularly if trying to support all the variants
- of the 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> with the idea
- and I will see what I can do. NCoverExplorer is not 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 we 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/NCoverExplorer.zip">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+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+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).
- <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.
- <BR/>
- <SPAN class="treeviewBlue">N</SPAN> - Next unvisited line in the current class.
- <SPAN class="treeviewBlue">P</SPAN> - Previous unvisited line in the current class.
- <SPAN class="treeviewBlue">CTRL+N</SPAN> - Next unvisited class in the current namespace.
- <SPAN class="treeviewBlue">CTRL+P</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/NCoverExplorer.Extras.zip">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.</A>
- </P>
- </div>
- <P class="subtitle">---------------------------------<BR/>FAQ last updated Jul 9th 2006.</P>
- </body>
-</html>
View
535 tools/NCoverExplorer/NCoverExplorerReleaseNotes.html
@@ -1,535 +0,0 @@
-<!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.4 - Jul 10th 2006</P>
- <P class="answer">Bundled with TestDriven.Net from build 2.0.1702.</P>
- <P class="answer">The following new features were introduced:</P>
- <UL>
- <LI>
- Added toolbar buttons which support moving to the next and previous unvisited code
- within a class or namespace. Shortcut keys of N and P for next/previous unvisited line in the
- current class (or mouse forward/back buttons). Use Ctrl+N and Ctrl+P to navigate to the
- next/previous partially or unvisited class within the namespace (or Ctrl+forward/back mouse buttons).
- </LI>
- <LI>
- NCoverExplorer.Console.exe now supports saving the merged results of the coverage xml file(s) with
- a /s[ave] option. The NCoverExplorer NAnt and MSBuild tasks have also been enhanced to support this
- with an optional "mergeFileName" attribute.
- </LI>
- <LI>
- NCoverExplorer.Console.exe now supports wildcards for coverage xml filename(s).
- </LI>
- <LI>
- NCoverExplorer.Console.exe now supports module level coverage thresholds, rather than just a project
- coverage threshold. This feature allows finer tolerance for both output on the reports and to fail
- a build. Specifying the module thresholds is done either through a .config file (see ConsoleExample.config)
- or through parameters in the NAnt/MSBuild tasks.
- </LI>
- <LI>
- Added a new summary report showing class coverage per namespace per module.
- </LI>
- <LI>
- Enhanced the NCoverExplorerSummary.xsl to display summaries of each module.
- </LI>
- <LI>
- Clicking on a class with non-existent source code displays a dialog allowing the user to specify an alternate
- folder. For use when the source code location indicated within the coverage.xml file(s) loaded differs from
- that on the local machine now (e.g. a different drive letter or folder path).
- </LI>
- </UL>
- <P class="answer">The following minor changes were made:</P>
- <UL>
- <LI>
- NCoverExplorer release is compiled against .Net 1.1 rather than .Net 1.0 due to a dependency on the
- FolderBrowserDialog not available in .Net 1.0.
- </LI>
- <LI>
- Coverage file stylesheet modified to show coverage column and NCoverExplorer version information with
- numerous other cosmetic enhancements.
- </LI>
- <LI>
- Enrich error environment information to include .Net framework version and operating system.
- </LI>
- <LI>
- Classes without a namespace are now shown under a namespace node of "-" like in Reflector.
- </LI>
- </UL>
- <P class="answer">The following bug fixes were made:</P>
- <UL>
- <LI>
- Warnings about mismatches when merging xml files are no longer issued. NCover seems to inconsistently
- produce xml file coverage of methods which caused some users problems when merging.
- </LI>
- <LI>
- Nested classes without a namespace specified would cause the coverage.xml file to fail to load.
- </LI>
- <LI>
- Parsing overloaded properties (overloads of this[]) would not show the separate overloads in the tree
- and have incorrect coverage stats.
- </LI>
- <LI>
- Fix memory leaks for when source code tabs are closed.
- </LI>
- <LI>
- Minimum coverage threshold for NCoverExplorer.Console would sometimes be incorrect due to rounding.
- </LI>
- <LI>
- Changed NCoverExplorerSummary.xsl to format to 1dp rather than rounding to 0.
- </LI>
- <LI>
- Sorting by filename for a method then clicking on class node threw exception.
- </LI>
- <LI>
- VB.Net source code keywords not highlighted with the correct ICSharpCode template.
- </LI>
- </UL>
- <HR/>
-
- <P class="question">v1.3.3 - Apr 4th 2006</P>
- <P class="answer">Bundled with TestDriven.Net from build 2.0.1578.</P>
- <P class="answer">The following new features were introduced:</P>
- <UL>
- <LI>
- Added NCoverExplorer.Console.exe for utilising NCoverExplorer features with automated
- coverage builds and NAnt tasks. By default will load up all the specified coverage file(s), apply
- any coverage exclusion(s) specified in the NCoverExplorer configuration and display total
- coverage statistics in the console output. If all items processed successfully returns an exit code of 0,
- if an exception occurs returns an exit code of 2.
- </LI>
- <LI>
- Added /m:xx (or /minCoverage:xx) argument to NCoverExplorer.Console.exe. When used in conjunction with
- /f (or /failMinimum) an exit code of 3 is returned if the min coverage is not reached. Can act
- as a trigger for failing an automated build such as with CruiseControl.Net.
- </LI>
- <LI>
- Added module & namespace summary xml report generation to NCoverExplorer (both the GUI and Console versions).
- In the GUI, this is available via the "View->Reports" menu. The three reports that are offered currently are:
- <br/>&nbsp;- Module Summary (Coverage totals for the project and per module);
- <br/>&nbsp;- Namespace Summary (Coverage totals for the project and per namespace);
- <br/>&nbsp;- Module Namespace Summary (Coverage totals for the project, per module and per namespace);
- </LI>
- <LI>
- Reports can be generated in xml or html format. Native html may be useful for directly attaching to e-mails.
- If xml format is chosen a "CoverageReport.xsl" stylesheet is copied from the NCoverExplorer installation
- folder to the report directory and linked to the xml file similar to coverage.xml/coverage.xsl by NCover.
- </LI>
- <LI>
- Reports can contain an "excluded nodes" footer section. This lists at the topmost level all of the items
- excluded from coverage at the time the report was run.
- </LI>
- <LI>
- Added "View->Filter" main menu and context menus, offering the ability to filter out nodes. Filtered
- nodes are simply moved under a new "Filtered" tree node and do not alter the coverage statistics
- (unlike excluded nodes which are effectively removed from the tree). Filters offered are either to
- hide all 100% covered nodes, or hide all unvisited (0%) nodes.
- </LI>
- <LI>
- Added "Include in Results" context menu option for when clicking on either the "Excluded" bin or one
- of it's immediate child nodes. Offers a way to "undo" an exclusion without reloading the file.
- </LI>
- <LI>
- Added "View->Summary Statistics" menu option (shortcut F3) to show dialog of totals of files, classes, members,
- NCLOC (non-commented lines of code) and sequence points. Statistics do not include excluded nodes
- (but will include filtered nodes).
- </LI>
- <LI>
- Created NAnt and MSBuild tasks for execution of NCoverExplorer.Console as an alternative to the &lt;exec&gt; task.
- These tasks offer a more developer friendly alternative such as &lt;fileset&gt; for coverage files and creating a
- .config file on the fly based on specified parameters such as &lt;exclusions&gt; within the .build/.proj file.
- </LI>
- <LI>
- Replaced menus with a lightly tweaked variant of Lutz Roeder's excellent CommandBar code to give a more modern
- look and assign icons on the menus.
- </LI>
- <LI>
- Added a toolbar. If not wanted the toolbar can be hidden using the "View->Show Toolbar" menu option.
- </LI>
- </UL>
- <P class="answer">The following minor changes were made:</P>
- <UL>
- <LI>
- Options dialog shortcut changed to F2.
- </LI>
- <LI>
- Excluding a node will now select the node after by default rather than the one previous.
- </LI>
- </UL>
- <P class="answer">The following bug fixes were made:</P>
- <UL>
- <LI>
- Fix bug where delete key shortcut was active on the root coverage file node, causing an exception to be thrown.
- </LI>
- <LI>
- Path was being truncated from the module name when saved.
- </LI>
- <LI>
- Fix bug where changing theme without coverage file loaded caused error.
- </LI>
- </UL>
- <HR/>
-
- <P class="question">v1.3.2 - Mar 14th 2006</P>
- <P class="answer">Bundled with TestDriven.Net from build 2.0.1545.</P>
- <P class="answer">The following new features were introduced:</P>
- <UL>
- <LI>
- Added support for merging multiple coverage files. This can be triggered through a variety of ways:
- <br/>&nbsp;- Selecting multiple test classes/fixtures/projects in TestDriven.Net;
- <br/>&nbsp;- Passing multiple files in the command line arguments;
- <br/>&nbsp;- Selecting multiple files in the Open dialog;
- <br/>&nbsp;- Using a new "File->Merge..." menu option;
- <br/>&nbsp;- Drag/dropping onto the NCoverExplorer application.
- </LI>
- <LI>
- Added tabs for each source code file you open to explore coverage on. If you click on a partial class
- then tabs will be opened for each of the source code files making up the class.
- </LI>
- <LI>
- Added the ability to exclude assemblies, namespaces or classes from the coverage results by a wildcard capable
- case-sensitive match on the name. By default NCoverExplorer includes two exclusions:
- <br/>&nbsp;- Exclude all assemblies with the name ending in ".Tests".
- <br/>&nbsp;- Exclude all namespaces with the name containing ".My" (for VB.Net exclusions).
- </LI>
- <LI>
- Added support for the NCover 1.5.4 "excluded" attribute which can be found in the coverage.xml files when
- the appropriate NCover command-line attributes are used. Note that TestDriven.Net still does not as yet
- support this attribute so you need to use the NCover.Console command line for this feature - for more information see
- <a href=http://ncover.org/SITE/blogs/ncover_blog/archive/2006/01/29/103.aspx>here</a>. NCoverExplorer
- will not include nodes marked as 'excluded' by NCover in it's totals but will still display them in the tree.
- </LI>
- <LI>
- Added an "Excluded" child bin node containing all nodes that have been excluded by the options dialog, by NCover
- attributes or by the "Exclude From Results" context menu option (see next point).
- </LI>
- <LI>
- Replaced the "Remove from Results" context menu feature with "Exclude from Results" (shortcut of the DEL key).
- Achieves a similar result of removing nodes from coverage calculations, however the nodes are "moved" to the
- Excluded bin rather than being deleted from the tree.
- </LI>
- <LI>
- Added a custom "theme" capability along with further colour and font customisation options for the coverage tree,
- statistics and source code panes. A number of predefined "themes" are supplied and users can add their own.
- Users can switch between themes either in the Options dialog or via the "View->Themes" menu.
- </LI>
- <LI>
- Added a new "View->Coverage" menu which has sub-options related to "Sequence Point Coverage" and
- "Function Coverage", assigned shortcut keys ctrl+(1-4):
- <br/>&nbsp;- Choosing one of the "Sequence Point" variants will display the tree nodes with differing naming
- combinations of coverage percentage and # unvisited sequence points.
- <br/>&nbsp;- Choosing "Function Coverage" will alter the coverage tree display so that only methods/classes that were
- invoked are highlighted. Method nodes show the number of visits to that method. Class, namespace and module nodes
- show the maximum visit count by any of their children.
- </LI>
- <LI>
- Added a "View->Sort By" menu option and context menu on the tree, with sub-options for "Name" (default),
- "Class name/line number", "Coverage %" (ascending/descending), "Uncovered Sequence Points" (ascending/descending)
- and "Visit Counts" (ascending/descending).
- Assigned shortcut keys of ctrl+shift+(1-8). Note that reloading the coverage file will remove the current sort
- and default back to by "Name".
- </LI>
- <LI>
- Added "Save" and "Save As" options to the File menu. These give you the option of overwriting/creating a
- new coverage.xml file with the current values loaded in NCoverExplorer. Any coverage exclusions/removed
- nodes will not appear in the saved coverage file. Note that the methods are written in the same order as
- the sort order specified above.
- </LI>
- <LI>
- Added an "Explore Coverage Folder" menu option to the file menu.
- </LI>
- <LI>
- Added an "Expand All" context menu option on the tree (shortcut ctrl+L).
- </LI>
- <LI>
- Enhanced the statistics pane. When a class node is selected you will now see additional columns of
- coverage %, unvisited sequence points and sequence points. When clicking on a method node you will
- now see the filename.
- </LI>
- <LI>
- Implemented "smart expansion" in the tree. If when you expand a node there is only one child node
- then that node will also be expanded and so on. Increases speed of tree navigation particularly
- if using a style of "Nested" namespaces with deep hierarchies.
- </LI>
- <LI>
- Display class file name in tab page header bar when a method node is clicked on. Tooltip shows the path.
- </LI>
- </UL>
- <P class="answer">The following minor changes were made:</P>
- <UL>
- <LI>
- Optimised when reloads of the coverage file so it is now only required if you change a coverage exclusion
- or the tree grouping/nesting styles in the options dialog. Makes for a snappier UI.
- </LI>
- <LI>
- Added a "Close" menu option to remove any loaded coverage file(s) from display.
- </LI>
- <LI>
- Moved all the "Recent Files" into a submenu to tidy up the File menu.
- </LI>
- <LI>
- Pressing Tab/shift-tab while focus is in the TextEditor pane of source code will now
- move focus out of the TextEditor.
- </LI>
- <LI>
- If a source code file contains multiple classes (not nested), then only the highlighting relevant
- to that particular class will be displayed in the editor window as each class tree node is clicked.
- </LI>
- <LI>
- Excluding the My namespace is now done through the Exclusions feature.
- </LI>
- <LI>
- Options dialog can be displayed using the F4 shortcut key.
- </LI>
- <LI>
- Removed last remnants of "non VS.Net standard colors" from the C# ICSharpCode TextEditor template.
- </LI>
- <LI>
- Make the GUI naming consistent to correctly reference "sequence points" rather than "lines" and "unvisited"
- rather than "uncovered".
- </LI>
- <LI>
- Removed "Edit in VS.Net" from the View menu.
- </LI>
- <LI>
- Changed NCoverExplorer main form icon to one that includes 32x32 sizes so Alt-Tab switching looks
- better than upscaled 16x16 icon.
- </LI>
- <LI>
- User is now prompted to remove a non-existent coverage file from the "Recent" files list rather than
- automatically being removed.
- </LI>
- </UL>
- <P class="answer">The following bug fixes were made:</P>
- <UL>
- <LI>
- Serializing the configuration settings was not flushing the stream - resulting sometimes in a blank settings file
- preventing people from loading NCoverExplorer. Will now revert to default settings if an error occurs.
- </LI>
- <LI>
- Displaying a source code file that has been modified to have less lines of code than at the time of the coverage run
- will now display a user friendly message box.
- </LI>
- <LI>
- Compensation made for NCover not reporting column information when profiling C++ code. NCoverExplorer will now
- highlight the entire line rather than throwing an error.
- </LI>
- <LI>
- In some circumstances properties were not highlighted consistently due to a bug in the property node expansion.
- </LI>
- <LI>
- Coverage greater than 99.5% will no longer be rounded up to 100% in the display. It is instead shown as ">99.5%".
- </LI>
- <LI>
- Extremely high visit counts will no longer overflow the visit count.
- </LI>
- <LI>
- Statistics pane for a class will now always consistently show the property nodes grouped, rather than only
- after the class node has been expanded in the tree.
- </LI>
- <LI>
- Recent file menu would display incorrectly for files numbered from 10 onwards truncating first character.
- </LI>
- <LI>
- Release notes & FAQ were always directed to website rather than local versions when NCoverExplorer was started
- from TestDriven.Net.
- </LI>
- </UL>
- <HR/>
-
- <P class="question">v1.3.1 - Feb 15th 2006</P>
- <P class="answer">Bundled with TestDriven.Net from build 2.0.1435.</P>
- <P class="answer">The following new features were introduced:</P>
- <UL>
- <LI>
- Namespaces are now "flattened" by default in the tree. This looks like the ClassView
- browser in VS.Net 2005 (or Lutz Roeder's Reflector). You can retain the nested look by changing it in the View->Options dialog.
- </LI>
- <LI>
- If you use the original "nested" namespace style (like the VS.Net 2003 class browser), then inner namespaces will now be
- listed at the top of each branch with the classes listed underneath which is less confusing to navigate.
- </LI>
- <LI>
- Option to exclude the "My" namespace for VB.Net projects (for use with with BCL 2.0 & NCover 1.5.x).
- </LI>
- <LI>
- Right-click menu option on coverage tree (shortcut ctrl+R) to "Remove From Results" that selected node
- and all it's children. Will force the coverage values to be recalculated. Intended for use where
- you have undesired assemblies, namespaces, classes or methods included in the report that are skewing your
- coverage results and you want them removed.
- </LI>
- <LI>
- Option to specify a satisfactory coverage threshold as a number of lines instead/as well as a percentage.
- If either of the conditions are met the node is coloured differently (provided the coverage is not zero).
- </LI>
- <LI>
- Colours can now be customised for both the source code highlighting and the nodes in the tree.
- </LI>
- <LI>
- Collapse all nodes context menu option on the coverage tree control (shortcut ctrl-A). Equivalent to reloading
- the coverage file (but would preserve any changes you have made such as removing nodes).
- </LI>
- <LI>
- By default the NCoverExplorer now attempts to restore your currently selected node/caret position after
- reloading a coverage.xml file (either F5 or by execution of another "Test With Coverage" command in TestDriven.Net).
- You can turn off this behaviour in the View->Options dialog.
- </LI>
- <LI>
- Statistics pane is now sortable by method name (default), visit count and line number.
- </LI>
- <LI>
- Statistics pane now summarises all the methods and their visit counts when a class node is clicked.
- Can be used as a basic form of method invocation counting for a fairly rudimentary level of profiling.
- The colouring used is the same as that of the tree to visually assist in identifying methods invoked.
- </LI>
- </UL>
- </P>
- <P class="answer">The following minor changes were made:</P>
- <UL>
- <LI>
- Restructured the Options dialog to have a tabbed interface.
- </LI>
- <LI>
- Renamed the "Show Visit Pane" menu option to "Show Statistics".
- </LI>
- <LI>
- The statistics pane now includes the method name. Widths of the columns are remembered each time you close NCoverExplorer.
- </LI>
- <LI>
- Statistics pane now has icons and colouring to match those of the associated nodes in the coverage tree.
- </LI>
- <LI>
- Inner nested classes now nested internally in the tree under the parent class, sorted to the top.
- </LI>
- <LI>
- Added FAQ, Release Notes and Blog website to the Help menu.
- </LI>
- </UL>
- </P>
- <P class="answer">The following bug fixes were made:</P>
- <UL>
- <LI>
- Source code files now loading with "Encoding.Default" rather than previous default of UTF-8.
- </LI>
- <LI>
- Coverage highlighting not working correctly on multiple line statements.
- </LI>
- <LI>
- Now handles partial classes and yield statements correctly.
- </LI>
- </UL>
- </P>
- <HR/>
-
- <P class="question">v1.3 - Feb 6th 2006</P>
- <P class="answer">Bundled with TestDriven.Net from build 2.0.1373d.</P>
- <P class="answer">The following new features were introduced:</P>
- <UL>
- <LI>
- Launching from VS.Net using TestDriven.Net will now re-use the NCoverExplorer instance
- opened from a previous "Test with... Coverage" click. Each VS.Net instance has it's own
- instance of NCoverExplorer.
- </LI>
- <LI>
- Added "Edit in VS.Net" functionality (keyboard shortcut ctrl+ E) for classes and methods.
- Will navigate to source code in your IDE at same point where your cursor resides in NCoverExplorer.
- Replaces and enhances previous "Open File" right-click option which has been removed.
- </LI>
- <LI>
- Added "Expand Covered" functionality (keyboard shortcut ctrl + Q) - recurses through the child
- nodes of the current node and expands all those with partial or complete coverage. Useful when
- using in conjunction with TestDriven.Net for isolated unit testing.
- </LI>
- <LI>
- Added "coverage file" node at the top of the tree showing total coverage across all modules/namespaces.
- </LI>
- <LI>
- Group by module option (default) to assist with navigating coverage for large solutions.
- </LI>
- <LI>
- Configuration information for NCoverExplorer now written to Local Settings rather than registry.
- </LI>
- <LI>
- Increase default number of "recent files" to 10, with ability to alter in the Options dialog.
- </LI>
- <LI>
- Reload of the current coverage file now has a shortcut key of F5.
- </LI>
- <LI>
- Display the path to the currently loaded coverage file in the title bar.
- </LI>
- </UL>
- </P>
- <P class="answer">The following minor changes were made:</P>
- <UL>
- <LI>
- Performance enhancements to improve loading times further for large files.
- </LI>
- <LI>
- Static constructors now renamed from "cctor" to ".cctor" so as to be sorted at the top.
- </LI>
- <LI>
- Running NCoverExplorer for first time ever will use a better starting form position.
- </LI>
- <LI>
- Removed configuration option for "nesting properties" - default remains the same of "true".
- </LI>
- <LI>
- Source code refactoring into separate assemblies to facilitate unit testing.
- </LI>
- </UL>
- </P>
- <HR/>
- <P class="question">v1.2 - Feb 1st 2006</P>
- <P class="answer">First public release, bundled with TestDriven.Net from build 2.0.1341d.</P>
- <P class="answer">The following new features were introduced:</P>
- <UL>
- <LI>
- Block style highlighting option for both visited and unvisited code.
- </LI>
- <LI>
- Satisfactory coverage threshold.
- </LI>
- <LI>
- Nesting of properties as nodes are expanded.
- </LI>
- <LI>
- Further speed improvements for initial file parsing.
- </LI>
- </UL>
- </P>
- <HR/>
- <P class="question">v1.1 - Jan 1st 2006</P>
- <P class="answer">Speed improvements.</P>
- <HR/>
- <P class="question">v1.0 - Dec 17th 2005</P>
- <P class="answer">First version created.</P>
- </body>
-</html>
View
BIN  tools/NCoverExplorer/NCoverExplorer_src.zip
Binary file not shown
View
299 tools/NCoverExplorer/license.txt
@@ -1,299 +0,0 @@
- 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
-
Please sign in to comment.
Something went wrong with that request. Please try again.