Thread: [Jameleon-cvscommits] SF.net SVN: jameleon: [1556] trunk/jameleon-core (Page 3)
Brought to you by:
engrean
From: <en...@us...> - 2007-06-01 15:46:33
|
Revision: 1556 http://svn.sourceforge.net/jameleon/?rev=1556&view=rev Author: engrean Date: 2007-06-01 08:46:31 -0700 (Fri, 01 Jun 2007) Log Message: ----------- Fixed some maven errors Modified Paths: -------------- trunk/jameleon-core/project.properties trunk/jameleon-core/project.xml Modified: trunk/jameleon-core/project.properties =================================================================== --- trunk/jameleon-core/project.properties 2007-05-31 15:44:26 UTC (rev 1555) +++ trunk/jameleon-core/project.properties 2007-06-01 15:46:31 UTC (rev 1556) @@ -24,7 +24,7 @@ maven.javadoc.additionalparam = -J-DproxyHost=${maven.proxy.host} -J-DproxyPort=${maven.proxy.port} maven.javadoc.bottom = Copyright © ${year} Christian Hargraves. All Rights Reserved.<br><img src="http://sourceforge.net/sflogo.php?group_id=84246&type=1"> -maven.javadoc.links = http://java.sun.com/j2se/1.4.2/docs/api/,http://jakarta.apache.org/commons/jelly/apidocs/,http://qdox.codehaus.org/apidocs/ +maven.javadoc.links = http://java.sun.com/j2se/1.4.2/docs/api/,http://jakarta.apache.org/commons/jelly/apidocs/,http://qdox.codehaus.org/javadoc/ maven.javadoc.tagletpath = ${dist.dir}/jameleon-core.jar maven.javadoc.taglets = net.sf.jameleon.taglet.JameleonFunctionTaglet,net.sf.jameleon.taglet.JameleonStepTaglet,net.sf.jameleon.taglet.JameleonAttributeTaglet Modified: trunk/jameleon-core/project.xml =================================================================== --- trunk/jameleon-core/project.xml 2007-05-31 15:44:26 UTC (rev 1555) +++ trunk/jameleon-core/project.xml 2007-06-01 15:46:31 UTC (rev 1556) @@ -12,7 +12,6 @@ </organization> <shortDescription>An Automated Testing Tool</shortDescription> <currentVersion>${version}</currentVersion> - <package>net.sf.jameleon</package> <description/> <url>http://jameleon.sourceforge.net</url> @@ -64,20 +63,26 @@ <name>Christian W. Hargraves</name> <id>engrean</id> <email>en...@us...</email> - <role>Project Founder</role> - <role>Developer</role> + <roles> + <role>Project Founder</role> + <role>Developer</role> + </roles> </developer> <developer> <name>Kay Johansen</name> <id>utahkay</id> <email>ut...@us...</email> - <role>Developer</role> + <roles> + <role>Developer</role> + </roles> </developer> <developer> <name>Matthias Marschall</name> <id>marschall</id> <email>mar...@us...</email> - <role>Jiffie plug-in Developer</role> + <roles> + <role>Jiffie plug-in Developer</role> + </roles> </developer> </developers> @@ -87,7 +92,6 @@ </contributor> <contributor> <name>Sannie Kwakman</name> - <id>kmantis</id> </contributor> <contributor> <name>Steven Tyler</name> @@ -100,12 +104,10 @@ </contributor> <contributor> <name>Richard Hallier</name> - <id>rhallier</id> <email>rha...@us...</email> </contributor> <contributor> <name>Fuat Atabey</name> - <id>fatabey</id> </contributor> </contributors> This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <en...@us...> - 2007-06-04 13:15:46
|
Revision: 1558 http://svn.sourceforge.net/jameleon/?rev=1558&view=rev Author: engrean Date: 2007-06-04 06:15:31 -0700 (Mon, 04 Jun 2007) Log Message: ----------- moving summary results to templates/results Modified Paths: -------------- trunk/jameleon-core/src/java/net/sf/jameleon/reporting/HtmlResultsReporter.java Added Paths: ----------- trunk/jameleon-core/res/templates/ trunk/jameleon-core/res/templates/results/ trunk/jameleon-core/res/templates/results/TestResultsFooter.txt trunk/jameleon-core/res/templates/results/TestResultsHeader.txt Removed Paths: ------------- trunk/jameleon-core/res/TestResultsFooter.txt trunk/jameleon-core/res/TestResultsHeader.txt Deleted: trunk/jameleon-core/res/TestResultsFooter.txt =================================================================== --- trunk/jameleon-core/res/TestResultsFooter.txt 2007-06-01 15:46:57 UTC (rev 1557) +++ trunk/jameleon-core/res/TestResultsFooter.txt 2007-06-04 13:15:31 UTC (rev 1558) @@ -1,21 +0,0 @@ -</table> -<hr/> -<table cellspacing="1" cellpadding="0" border="1" bordercolor="#224466" width="100%"> -<tr> -<th>Total Execution Time</th> -<th>Total Tests Executed</th> -<th>Total Tests Passed</th> -<th>Total Tests Failed</th> -<th>% Passed</th> -</tr> -<tr> -<td id="totalTime">$totalTime</td> -#set ($totalRun = $totalPassed + $totalFailed) -<td id="totalRun">$totalRun</td> -<td id="totalPassed">$totalPassed</td> -<td id="totalFailed">$totalFailed</td> -<td id="percentPassed">$percentPassed</td> -</tr> -</table> -<br/> -</body></html> \ No newline at end of file Deleted: trunk/jameleon-core/res/TestResultsHeader.txt =================================================================== --- trunk/jameleon-core/res/TestResultsHeader.txt 2007-06-01 15:46:57 UTC (rev 1557) +++ trunk/jameleon-core/res/TestResultsHeader.txt 2007-06-04 13:15:31 UTC (rev 1558) @@ -1,40 +0,0 @@ -<html> -<head> -<meta http-equiv='content-type' content='text/html; charset=UTF-8'/> -<title>Jameleon Test Case Results</title> -<style type="text/css"> -<!-- -body, table { font-family: arial,sans-serif; font-size: x-small;} -a:link {color #e41819;} -a:visited {color #e41819;} -th {background: #0b3b63; color: #FFFFFF; text-align: left; font-size: small;} -tr {background: #FFFFFF; color: #000; font-size: small;} -td {text-align: left;} -tr.fail {background: #d6d6d6;} -td.pass {color: #1cc32b; font-size: 1.6em; font-family: tahoma,geneva,helvetica,arial,sans-serif;} -td.fail {color: #e41819; font-size: large; font-weight: bold; font-family: tahoma,geneva,helvetica,arial,sans-serif;} ---> -</style> -</head> -<body bgcolor="#FFFFFF" topmargin="6" leftmargin="6"> -<hr size="1" noshade="true"/> -Start time: ${startTime}<br/> -#if ($organization) -Organization: ${organization}<br/> -#end -#if ($environment) -Environment: ${environment}<br/> -#end -<br/> -<table cellspacing="1" cellpadding="0" border="1" bordercolor="#224466" width="100%"> -<tr> -<th width="2%"></th> -<th width="1%"></th> - -<th width="25%">Test Case Name</th> -<th width="4%">Time</th> -<th width="2%">Run</th> -<th width="2%">Fail</th> -<th width="3%">Pass</th> -<th>Failures</th> -</tr> \ No newline at end of file Copied: trunk/jameleon-core/res/templates/results/TestResultsFooter.txt (from rev 1557, trunk/jameleon-core/res/TestResultsFooter.txt) =================================================================== --- trunk/jameleon-core/res/templates/results/TestResultsFooter.txt (rev 0) +++ trunk/jameleon-core/res/templates/results/TestResultsFooter.txt 2007-06-04 13:15:31 UTC (rev 1558) @@ -0,0 +1,21 @@ +</table> +<hr/> +<table cellspacing="1" cellpadding="0" border="1" bordercolor="#224466" width="100%"> +<tr> +<th>Total Execution Time</th> +<th>Total Tests Executed</th> +<th>Total Tests Passed</th> +<th>Total Tests Failed</th> +<th>% Passed</th> +</tr> +<tr> +<td id="totalTime">$totalTime</td> +#set ($totalRun = $totalPassed + $totalFailed) +<td id="totalRun">$totalRun</td> +<td id="totalPassed">$totalPassed</td> +<td id="totalFailed">$totalFailed</td> +<td id="percentPassed">$percentPassed</td> +</tr> +</table> +<br/> +</body></html> \ No newline at end of file Property changes on: trunk/jameleon-core/res/templates/results/TestResultsFooter.txt ___________________________________________________________________ Name: svn:mime-type + text/plain Name: svn:eol-style + native Copied: trunk/jameleon-core/res/templates/results/TestResultsHeader.txt (from rev 1557, trunk/jameleon-core/res/TestResultsHeader.txt) =================================================================== --- trunk/jameleon-core/res/templates/results/TestResultsHeader.txt (rev 0) +++ trunk/jameleon-core/res/templates/results/TestResultsHeader.txt 2007-06-04 13:15:31 UTC (rev 1558) @@ -0,0 +1,40 @@ +<html> +<head> +<meta http-equiv='content-type' content='text/html; charset=UTF-8'/> +<title>Jameleon Test Case Results</title> +<style type="text/css"> +<!-- +body, table { font-family: arial,sans-serif; font-size: x-small;} +a:link {color #e41819;} +a:visited {color #e41819;} +th {background: #0b3b63; color: #FFFFFF; text-align: left; font-size: small;} +tr {background: #FFFFFF; color: #000; font-size: small;} +td {text-align: left;} +tr.fail {background: #d6d6d6;} +td.pass {color: #1cc32b; font-size: 1.6em; font-family: tahoma,geneva,helvetica,arial,sans-serif;} +td.fail {color: #e41819; font-size: large; font-weight: bold; font-family: tahoma,geneva,helvetica,arial,sans-serif;} +--> +</style> +</head> +<body bgcolor="#FFFFFF" topmargin="6" leftmargin="6"> +<hr size="1" noshade="true"/> +Start time: ${startTime}<br/> +#if ($organization) +Organization: ${organization}<br/> +#end +#if ($environment) +Environment: ${environment}<br/> +#end +<br/> +<table cellspacing="1" cellpadding="0" border="1" bordercolor="#224466" width="100%"> +<tr> +<th width="2%"></th> +<th width="1%"></th> + +<th width="25%">Test Case Name</th> +<th width="4%">Time</th> +<th width="2%">Run</th> +<th width="2%">Fail</th> +<th width="3%">Pass</th> +<th>Failures</th> +</tr> \ No newline at end of file Property changes on: trunk/jameleon-core/res/templates/results/TestResultsHeader.txt ___________________________________________________________________ Name: svn:mime-type + text/plain Name: svn:eol-style + native Modified: trunk/jameleon-core/src/java/net/sf/jameleon/reporting/HtmlResultsReporter.java =================================================================== --- trunk/jameleon-core/src/java/net/sf/jameleon/reporting/HtmlResultsReporter.java 2007-06-01 15:46:57 UTC (rev 1557) +++ trunk/jameleon-core/src/java/net/sf/jameleon/reporting/HtmlResultsReporter.java 2007-06-04 13:15:31 UTC (rev 1558) @@ -21,8 +21,8 @@ public class HtmlResultsReporter { private Writer writer; private static final SimpleDateFormat format = new SimpleDateFormat("yyyy-MMMMM-dd__hh-mm-ssaaa"); - public static final String DEFAULT_HEADER_TEMPLATE = "TestResultsHeader.txt"; - public static final String DEFAULT_FOOTER_TEMPLATE = "TestResultsFooter.txt"; + public static final String DEFAULT_HEADER_TEMPLATE = "templates/results/TestResultsHeader.txt"; + public static final String DEFAULT_FOOTER_TEMPLATE = "templates/results/TestResultsFooter.txt"; private String testResultsHeaderTemplate = DEFAULT_HEADER_TEMPLATE; private String testResultsFooterTemplate = DEFAULT_FOOTER_TEMPLATE; private int numPassed; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <en...@us...> - 2007-06-04 13:18:57
|
Revision: 1559 http://svn.sourceforge.net/jameleon/?rev=1559&view=rev Author: engrean Date: 2007-06-04 06:18:52 -0700 (Mon, 04 Jun 2007) Log Message: ----------- moving summary results to templates/results/summary Modified Paths: -------------- trunk/jameleon-core/src/java/net/sf/jameleon/reporting/HtmlResultsReporter.java Added Paths: ----------- trunk/jameleon-core/res/templates/results/summary/ trunk/jameleon-core/res/templates/results/summary/TestResultsFooter.txt trunk/jameleon-core/res/templates/results/summary/TestResultsHeader.txt Removed Paths: ------------- trunk/jameleon-core/res/templates/results/TestResultsFooter.txt trunk/jameleon-core/res/templates/results/TestResultsHeader.txt Deleted: trunk/jameleon-core/res/templates/results/TestResultsFooter.txt =================================================================== --- trunk/jameleon-core/res/templates/results/TestResultsFooter.txt 2007-06-04 13:15:31 UTC (rev 1558) +++ trunk/jameleon-core/res/templates/results/TestResultsFooter.txt 2007-06-04 13:18:52 UTC (rev 1559) @@ -1,21 +0,0 @@ -</table> -<hr/> -<table cellspacing="1" cellpadding="0" border="1" bordercolor="#224466" width="100%"> -<tr> -<th>Total Execution Time</th> -<th>Total Tests Executed</th> -<th>Total Tests Passed</th> -<th>Total Tests Failed</th> -<th>% Passed</th> -</tr> -<tr> -<td id="totalTime">$totalTime</td> -#set ($totalRun = $totalPassed + $totalFailed) -<td id="totalRun">$totalRun</td> -<td id="totalPassed">$totalPassed</td> -<td id="totalFailed">$totalFailed</td> -<td id="percentPassed">$percentPassed</td> -</tr> -</table> -<br/> -</body></html> \ No newline at end of file Deleted: trunk/jameleon-core/res/templates/results/TestResultsHeader.txt =================================================================== --- trunk/jameleon-core/res/templates/results/TestResultsHeader.txt 2007-06-04 13:15:31 UTC (rev 1558) +++ trunk/jameleon-core/res/templates/results/TestResultsHeader.txt 2007-06-04 13:18:52 UTC (rev 1559) @@ -1,40 +0,0 @@ -<html> -<head> -<meta http-equiv='content-type' content='text/html; charset=UTF-8'/> -<title>Jameleon Test Case Results</title> -<style type="text/css"> -<!-- -body, table { font-family: arial,sans-serif; font-size: x-small;} -a:link {color #e41819;} -a:visited {color #e41819;} -th {background: #0b3b63; color: #FFFFFF; text-align: left; font-size: small;} -tr {background: #FFFFFF; color: #000; font-size: small;} -td {text-align: left;} -tr.fail {background: #d6d6d6;} -td.pass {color: #1cc32b; font-size: 1.6em; font-family: tahoma,geneva,helvetica,arial,sans-serif;} -td.fail {color: #e41819; font-size: large; font-weight: bold; font-family: tahoma,geneva,helvetica,arial,sans-serif;} ---> -</style> -</head> -<body bgcolor="#FFFFFF" topmargin="6" leftmargin="6"> -<hr size="1" noshade="true"/> -Start time: ${startTime}<br/> -#if ($organization) -Organization: ${organization}<br/> -#end -#if ($environment) -Environment: ${environment}<br/> -#end -<br/> -<table cellspacing="1" cellpadding="0" border="1" bordercolor="#224466" width="100%"> -<tr> -<th width="2%"></th> -<th width="1%"></th> - -<th width="25%">Test Case Name</th> -<th width="4%">Time</th> -<th width="2%">Run</th> -<th width="2%">Fail</th> -<th width="3%">Pass</th> -<th>Failures</th> -</tr> \ No newline at end of file Copied: trunk/jameleon-core/res/templates/results/summary/TestResultsFooter.txt (from rev 1558, trunk/jameleon-core/res/templates/results/TestResultsFooter.txt) =================================================================== --- trunk/jameleon-core/res/templates/results/summary/TestResultsFooter.txt (rev 0) +++ trunk/jameleon-core/res/templates/results/summary/TestResultsFooter.txt 2007-06-04 13:18:52 UTC (rev 1559) @@ -0,0 +1,21 @@ +</table> +<hr/> +<table cellspacing="1" cellpadding="0" border="1" bordercolor="#224466" width="100%"> +<tr> +<th>Total Execution Time</th> +<th>Total Tests Executed</th> +<th>Total Tests Passed</th> +<th>Total Tests Failed</th> +<th>% Passed</th> +</tr> +<tr> +<td id="totalTime">$totalTime</td> +#set ($totalRun = $totalPassed + $totalFailed) +<td id="totalRun">$totalRun</td> +<td id="totalPassed">$totalPassed</td> +<td id="totalFailed">$totalFailed</td> +<td id="percentPassed">$percentPassed</td> +</tr> +</table> +<br/> +</body></html> \ No newline at end of file Property changes on: trunk/jameleon-core/res/templates/results/summary/TestResultsFooter.txt ___________________________________________________________________ Name: svn:mime-type + text/plain Name: svn:eol-style + native Copied: trunk/jameleon-core/res/templates/results/summary/TestResultsHeader.txt (from rev 1558, trunk/jameleon-core/res/templates/results/TestResultsHeader.txt) =================================================================== --- trunk/jameleon-core/res/templates/results/summary/TestResultsHeader.txt (rev 0) +++ trunk/jameleon-core/res/templates/results/summary/TestResultsHeader.txt 2007-06-04 13:18:52 UTC (rev 1559) @@ -0,0 +1,40 @@ +<html> +<head> +<meta http-equiv='content-type' content='text/html; charset=UTF-8'/> +<title>Jameleon Test Case Results</title> +<style type="text/css"> +<!-- +body, table { font-family: arial,sans-serif; font-size: x-small;} +a:link {color #e41819;} +a:visited {color #e41819;} +th {background: #0b3b63; color: #FFFFFF; text-align: left; font-size: small;} +tr {background: #FFFFFF; color: #000; font-size: small;} +td {text-align: left;} +tr.fail {background: #d6d6d6;} +td.pass {color: #1cc32b; font-size: 1.6em; font-family: tahoma,geneva,helvetica,arial,sans-serif;} +td.fail {color: #e41819; font-size: large; font-weight: bold; font-family: tahoma,geneva,helvetica,arial,sans-serif;} +--> +</style> +</head> +<body bgcolor="#FFFFFF" topmargin="6" leftmargin="6"> +<hr size="1" noshade="true"/> +Start time: ${startTime}<br/> +#if ($organization) +Organization: ${organization}<br/> +#end +#if ($environment) +Environment: ${environment}<br/> +#end +<br/> +<table cellspacing="1" cellpadding="0" border="1" bordercolor="#224466" width="100%"> +<tr> +<th width="2%"></th> +<th width="1%"></th> + +<th width="25%">Test Case Name</th> +<th width="4%">Time</th> +<th width="2%">Run</th> +<th width="2%">Fail</th> +<th width="3%">Pass</th> +<th>Failures</th> +</tr> \ No newline at end of file Property changes on: trunk/jameleon-core/res/templates/results/summary/TestResultsHeader.txt ___________________________________________________________________ Name: svn:mime-type + text/plain Name: svn:eol-style + native Modified: trunk/jameleon-core/src/java/net/sf/jameleon/reporting/HtmlResultsReporter.java =================================================================== --- trunk/jameleon-core/src/java/net/sf/jameleon/reporting/HtmlResultsReporter.java 2007-06-04 13:15:31 UTC (rev 1558) +++ trunk/jameleon-core/src/java/net/sf/jameleon/reporting/HtmlResultsReporter.java 2007-06-04 13:18:52 UTC (rev 1559) @@ -21,8 +21,8 @@ public class HtmlResultsReporter { private Writer writer; private static final SimpleDateFormat format = new SimpleDateFormat("yyyy-MMMMM-dd__hh-mm-ssaaa"); - public static final String DEFAULT_HEADER_TEMPLATE = "templates/results/TestResultsHeader.txt"; - public static final String DEFAULT_FOOTER_TEMPLATE = "templates/results/TestResultsFooter.txt"; + public static final String DEFAULT_HEADER_TEMPLATE = "templates/results/summary/TestResultsHeader.txt"; + public static final String DEFAULT_FOOTER_TEMPLATE = "templates/results/summary/TestResultsFooter.txt"; private String testResultsHeaderTemplate = DEFAULT_HEADER_TEMPLATE; private String testResultsFooterTemplate = DEFAULT_FOOTER_TEMPLATE; private int numPassed; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <en...@us...> - 2007-06-04 16:01:49
|
Revision: 1560 http://svn.sourceforge.net/jameleon/?rev=1560&view=rev Author: engrean Date: 2007-06-04 09:01:45 -0700 (Mon, 04 Jun 2007) Log Message: ----------- Put logic for failedRowNum in JameleonTestResult Added first round of summary row result Modified Paths: -------------- trunk/jameleon-core/src/java/net/sf/jameleon/logging/JameleonLayout.java trunk/jameleon-core/src/java/net/sf/jameleon/result/JameleonTestResult.java trunk/jameleon-core/tst/java/net/sf/jameleon/result/JameleonTestResultTest.java Added Paths: ----------- trunk/jameleon-core/res/templates/results/summary/TestResultRow.txt Added: trunk/jameleon-core/res/templates/results/summary/TestResultRow.txt =================================================================== --- trunk/jameleon-core/res/templates/results/summary/TestResultRow.txt (rev 0) +++ trunk/jameleon-core/res/templates/results/summary/TestResultRow.txt 2007-06-04 16:01:45 UTC (rev 1560) @@ -0,0 +1,42 @@ +#if ($result.failed()) +<tr class="fail"> +#else +<tr> +#end +<td title="Test Case #">$testCaseNum</td> +<td class="pass" title="Test $testOutcome"><img src="$resultImg"/></td> +<td><a href="$scriptResultPath" target="_new">$result.testName</a></td> +<td title="Total Execution Time">$result.executionTime</td> +<td title="# Iterations Run" align="right">$result.countableResults.size()</td> +<td title="# Iterations Failed" align="right">$result.failedCountableResults.size()</td> +<td title="% Tests Passed" align="right">$result.percentablePassed</td> +#if ($results.failed()) +<table border="1" width="100%" id="${$results.testName}_failed"> +<tr> +<th>Row</th> +<th>Line</th> +<th>Point of Failure</th> +<th>Reason</th> +</tr> +#foreach ($failedResult in $results.failedResults) +<tr class="fail" id="line_${failedResult.fp.lineNumber}"> +<td title="Row Failed">$failedResult.failedRowNum</td> +<td title="Line Failed">$failedResult.fp.lineNumber</td> +<td title="FunctionId of Point of Failure"><i>$failedResult.identifier</i></td> +<td title="Error Message"> +#if($failedResult.errorFile) +<a href="${failedReson.errorFile.path}" target="_new"> +#end +<pre>$failedResult.errorMsg</pre> +#if($failedResult.errorFile.path) +</a> +#end +</td> +</tr> +#end +</table> +#else + +#end +</td> +</tr> \ No newline at end of file Property changes on: trunk/jameleon-core/res/templates/results/summary/TestResultRow.txt ___________________________________________________________________ Name: svn:mime-type + text/plain Name: svn:eol-style + native Modified: trunk/jameleon-core/src/java/net/sf/jameleon/logging/JameleonLayout.java =================================================================== --- trunk/jameleon-core/src/java/net/sf/jameleon/logging/JameleonLayout.java 2007-06-04 13:18:52 UTC (rev 1559) +++ trunk/jameleon-core/src/java/net/sf/jameleon/logging/JameleonLayout.java 2007-06-04 16:01:45 UTC (rev 1560) @@ -18,18 +18,16 @@ */ package net.sf.jameleon.logging; -import java.util.Date; -import java.util.Iterator; -import java.util.List; - -import net.sf.jameleon.result.DataDrivableRowResult; import net.sf.jameleon.result.JameleonTestResult; import net.sf.jameleon.result.TestCaseResult; import net.sf.jameleon.util.JameleonUtility; - import org.apache.log4j.Layout; import org.apache.log4j.spi.LoggingEvent; +import java.util.Date; +import java.util.Iterator; +import java.util.List; + public abstract class JameleonLayout extends Layout { protected static final int BUF_SIZE = 256; @@ -64,7 +62,7 @@ List testResults = result.getFailedResults(); ErrorResult[] errors = new ErrorResult[testResults.size()]; JameleonTestResult tr; - String errorMsg = null, errorFileName = null, functionId = null; + String errorMsg, errorFileName = null, functionId; //Code place-holder until I can refactor the row num thing. Integer rowNum = new Integer(0); Integer lineNum = new Integer(-1); @@ -84,12 +82,7 @@ } protected Integer getFailedRowNum(JameleonTestResult result){ - int rowNum = 0; - DataDrivableRowResult ddr = (DataDrivableRowResult)result.findAncestorByClass(DataDrivableRowResult.class); - if (ddr != null){ - rowNum = ddr.getRowNum(); - } - return new Integer(rowNum); + return new Integer(result.getFailedRowNum()); } protected void checkBuffer(){ Modified: trunk/jameleon-core/src/java/net/sf/jameleon/result/JameleonTestResult.java =================================================================== --- trunk/jameleon-core/src/java/net/sf/jameleon/result/JameleonTestResult.java 2007-06-04 13:18:52 UTC (rev 1559) +++ trunk/jameleon-core/src/java/net/sf/jameleon/result/JameleonTestResult.java 2007-06-04 16:01:45 UTC (rev 1560) @@ -18,13 +18,12 @@ */ package net.sf.jameleon.result; -import java.io.File; - import net.sf.jameleon.XMLable; import net.sf.jameleon.bean.FunctionalPoint; import net.sf.jameleon.util.JameleonUtility; +import org.apache.commons.jelly.LocationAware; -import org.apache.commons.jelly.LocationAware; +import java.io.File; /** * An abstract Test Result. * Generic <code>toXML</code> and <codetoString</codetoString methods are provided @@ -86,6 +85,7 @@ /** * Constructor * @param tag - the tag of the restults + * @param parentResults - the results which are parents to this result */ public JameleonTestResult(FunctionalPoint tag, HasChildResults parentResults){ this(tag); @@ -126,6 +126,18 @@ return ancestorResult; } + public int getFailedRowNum(){ + int rowNum = 0; + if (failed()){ + DataDrivableRowResult ddr = (DataDrivableRowResult)findAncestorByClass(DataDrivableRowResult.class); + if (ddr != null){ + rowNum = ddr.getRowNum(); + } + } + return rowNum; + } + + public void recordFailureToCountableResult(){ CountableResult countableRes = (CountableResult)findAncestorByClass(CountableResult.class); if (countableRes != null) { @@ -206,7 +218,7 @@ } public String getOutcome(){ - String outcome = null; + String outcome; if (passed()) { outcome = "PASSED"; } else { @@ -328,7 +340,7 @@ if (errorFile != null) { str.append("Error File Name:").append(errorFile.getPath()).append("\n"); } - str.append("line: ").append(getLineNumber()+" ").append("column: ").append(getColumnNumber()+""); + str.append("line: ").append(getLineNumber()).append(" column: ").append(getColumnNumber()+""); return str.toString(); } Modified: trunk/jameleon-core/tst/java/net/sf/jameleon/result/JameleonTestResultTest.java =================================================================== --- trunk/jameleon-core/tst/java/net/sf/jameleon/result/JameleonTestResultTest.java 2007-06-04 13:18:52 UTC (rev 1559) +++ trunk/jameleon-core/tst/java/net/sf/jameleon/result/JameleonTestResultTest.java 2007-06-04 16:01:45 UTC (rev 1560) @@ -18,18 +18,16 @@ */ package net.sf.jameleon.result; -import java.io.File; - -import org.apache.commons.jelly.LocationAware; - import junit.framework.Test; import junit.framework.TestCase; import junit.framework.TestSuite; - import net.sf.jameleon.bean.FunctionalPoint; import net.sf.jameleon.util.JameleonUtility; import net.sf.jameleon.util.XMLHelper; +import org.apache.commons.jelly.LocationAware; +import java.io.File; + public class JameleonTestResultTest extends TestCase { private JameleonTestResult results; @@ -61,6 +59,17 @@ tag = null; } + public void testGetFailedRowNum(){ + DataDrivableRowResult ddrr = new DataDrivableRowResult(tag); + ddrr.setRowNum(2); + assertEquals("failed row", 0, results.getFailedRowNum()); + results.setParentResults(ddrr); + assertEquals("failed row", 0, results.getFailedRowNum()); + results.setFailed(); + assertEquals("failed row", 2, results.getFailedRowNum()); + + } + public void testGetHtmlFormattedMessage() { results.setError(new RuntimeException("some <error>")); assertEquals("error message", "some <error>", results.getHtmlFormattedErrorMsg()); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <en...@us...> - 2007-06-04 22:09:17
|
Revision: 1562 http://svn.sourceforge.net/jameleon/?rev=1562&view=rev Author: engrean Date: 2007-06-04 15:09:13 -0700 (Mon, 04 Jun 2007) Log Message: ----------- all required methods are now implemented. Modified Paths: -------------- trunk/jameleon-core/res/templates/results/summary/TestResultRow.txt trunk/jameleon-core/src/java/net/sf/jameleon/reporting/HtmlResultsReporter.java trunk/jameleon-core/tst/java/net/sf/jameleon/reporting/HtmlResultsReporterTest.java Modified: trunk/jameleon-core/res/templates/results/summary/TestResultRow.txt =================================================================== --- trunk/jameleon-core/res/templates/results/summary/TestResultRow.txt 2007-06-04 22:08:35 UTC (rev 1561) +++ trunk/jameleon-core/res/templates/results/summary/TestResultRow.txt 2007-06-04 22:09:13 UTC (rev 1562) @@ -1,33 +1,35 @@ #if ($result.failed()) <tr class="fail"> +#set( $outcome = 'fail') #else +#set( $outcome = 'pass') <tr> #end -<td title="Test Case #">$testCaseNum</td> -<td class="pass" title="Test $testOutcome"><img src="$resultImg"/></td> +<td title="Test Case # $testCaseNum">$testCaseNum</td> +<td class="$outcome" title="Test ${outcome}ed"><img src="${outcome}ed.gif"/></td> <td><a href="$scriptResultPath" target="_new">$result.testName</a></td> <td title="Total Execution Time">$result.executionTime</td> <td title="# Iterations Run" align="right">$result.countableResults.size()</td> <td title="# Iterations Failed" align="right">$result.failedCountableResults.size()</td> -<td title="% Tests Passed" align="right">$result.percentablePassed</td> -#if ($results.failed()) -<table border="1" width="100%" id="${$results.testName}_failed"> +<td title="% Tests Passed" align="right">$result.percentagePassed</td> +#if ($result.failed()) +<table border="1" width="100%" id="${$result.testName}_failed"> <tr> <th>Row</th> <th>Line</th> <th>Point of Failure</th> <th>Reason</th> </tr> -#foreach ($failedResult in $results.failedResults) -<tr class="fail" id="line_${failedResult.fp.lineNumber}"> +#foreach ($failedResult in $result.failedResults) +<tr class="fail" id="line_$!{failedResult.lineNumber}"> <td title="Row Failed">$failedResult.failedRowNum</td> -<td title="Line Failed">$failedResult.fp.lineNumber</td> +<td title="Line Failed">$!{failedResult.lineNumber}</td> <td title="FunctionId of Point of Failure"><i>$failedResult.identifier</i></td> <td title="Error Message"> #if($failedResult.errorFile) -<a href="${failedReson.errorFile.path}" target="_new"> +<a href="${failedResult.errorFile.path}" target="_new"> #end -<pre>$failedResult.errorMsg</pre> +<pre>$!{failedResult.errorMsg}</pre> #if($failedResult.errorFile.path) </a> #end Modified: trunk/jameleon-core/src/java/net/sf/jameleon/reporting/HtmlResultsReporter.java =================================================================== --- trunk/jameleon-core/src/java/net/sf/jameleon/reporting/HtmlResultsReporter.java 2007-06-04 22:08:35 UTC (rev 1561) +++ trunk/jameleon-core/src/java/net/sf/jameleon/reporting/HtmlResultsReporter.java 2007-06-04 22:09:13 UTC (rev 1562) @@ -5,6 +5,11 @@ import net.sf.jameleon.util.TemplateProcessor; import net.sf.jameleon.util.JameleonUtility; import net.sf.jameleon.result.TestCaseResult; +import net.sf.jameleon.TestCaseTag; +import net.sf.jameleon.event.TestCaseListener; +import net.sf.jameleon.event.TestCaseEvent; +import net.sf.jameleon.event.TestRunListener; +import net.sf.jameleon.event.TestRunEvent; import java.io.File; import java.io.IOException; @@ -18,74 +23,111 @@ * Writes the HTML results out to a file. This class writes both the main results * as well as the individual testcase docs. */ -public class HtmlResultsReporter { +public class HtmlResultsReporter implements TestCaseListener, TestRunListener { private Writer writer; private static final SimpleDateFormat format = new SimpleDateFormat("yyyy-MMMMM-dd__hh-mm-ssaaa"); public static final String DEFAULT_HEADER_TEMPLATE = "templates/results/summary/TestResultsHeader.txt"; public static final String DEFAULT_FOOTER_TEMPLATE = "templates/results/summary/TestResultsFooter.txt"; + public static final String DEFAULT_RESULT_ROW_TEMPLATE = "templates/results/summary/TestResultRow.txt"; private String testResultsHeaderTemplate = DEFAULT_HEADER_TEMPLATE; private String testResultsFooterTemplate = DEFAULT_FOOTER_TEMPLATE; + private String testResultRowTemplate = DEFAULT_RESULT_ROW_TEMPLATE; + private int testCaseNum = 1; + private int numPassed; private int numFailed; private Calendar startTime; - public void setWriter(Writer writer) { - this.writer = writer; - } - - public Writer getWriter() { - return writer; - } - + /** + * Gets the timestamp formatted results directory + * @param baseDir - The director to use as the base or just '.' + * @param c - The date and time + * @return a file representing the directory to store the results to + */ public static File getResultsDir(File baseDir, Calendar c) { String path = baseDir.getPath()+File.separator + format.format(c.getTime()); return new File(path); } - /** * Output the header to the writer - * @param startTime the time to record in the header of the file * @throws JameleonException when the results could not be written to */ - protected void outputHeader(Calendar startTime) throws JameleonException { - try { - TemplateProcessor processor = new TemplateProcessor(testResultsHeaderTemplate); - Configurator config = Configurator.getInstance(); - Map params = new HashMap(); - params.put("organization", config.getValue("organization")); - params.put("environment", config.getValue("testEnvironment")); - params.put("startTime", startTime.getTime()); + protected void outputHeader() throws JameleonException{ + Configurator config = Configurator.getInstance(); + Map params = new HashMap(); + params.put("organization", config.getValue("organization")); + params.put("environment", config.getValue("testEnvironment")); + params.put("startTime", startTime.getTime()); + outputToTemplate(testResultsHeaderTemplate, params); + } - writer.write(processor.transformToString(params)); - } catch (IOException e) { - throw new JameleonException("Could not write results to main HTML results file: "+e.getMessage()); - } + /** + * Ouputs the result for a particular test case + * @param tct The test case result to report on + */ + public void outputRow(TestCaseTag tct) throws JameleonException{ + Map params = new HashMap(); + params.put("result", tct.getResults()); + params.put("resultsFile", tct.getResultsFile().getPath()); + params.put("results_res_dir", TestCaseTag.RESULTS_RES_DIR); + params.put("testCaseNum", testCaseNum+""); + outputToTemplate(testResultRowTemplate, params); } /** * Output the footer to the writer - * @param endTime the time to record in the header of the file + * @param endTime the time the test run ended * @throws JameleonException when the results could not be written to */ protected void outputFooter(Calendar endTime) throws JameleonException { + Map params = new HashMap(); + params.put("totalPassed", new Integer(numPassed)); + params.put("totalFailed", new Integer(numFailed)); + params.put("totalTime", JameleonUtility.executionTimeToString(endTime.getTimeInMillis() - + startTime.getTimeInMillis())); + String percentagePassed = TestCaseResult.getPercentagePassed(numPassed + numFailed, numFailed); + params.put("percentPassed", percentagePassed); + outputToTemplate(testResultsFooterTemplate, params); + } + + private void outputToTemplate(String template, Map params){ try { - TemplateProcessor processor = new TemplateProcessor(testResultsFooterTemplate); - Map params = new HashMap(); - params.put("totalPassed", new Integer(numPassed)); - params.put("totalFailed", new Integer(numFailed)); - params.put("totalTime", JameleonUtility.executionTimeToString(endTime.getTimeInMillis() - - startTime.getTimeInMillis())); - - String percentagePassed = TestCaseResult.getPercentagePassed(numPassed + numFailed, numFailed); - params.put("percentPassed", percentagePassed); - + TemplateProcessor processor = new TemplateProcessor(template); writer.write(processor.transformToString(params)); } catch (IOException e) { throw new JameleonException("Could not write results to main HTML results file: "+e.getMessage()); } } + public void incrementPassed(int numPassed) { + this.numPassed += numPassed; + } + + public void incrementFailed(int numFailed) { + this.numFailed += numFailed; + } + + /////////////////////////////////////////////////////////////////////////////////////////////// + //// SETTERS & GETTERS //// + /////////////////////////////////////////////////////////////////////////////////////////////// + + public void setWriter(Writer writer) { + this.writer = writer; + } + + public Writer getWriter() { + return writer; + } + + public int getNumPassed() { + return numPassed; + } + + public int getNumFailed() { + return numFailed; + } + /** * Gets the template for the overall results header file * @return the template for the overall results header file @@ -102,7 +144,6 @@ this.testResultsHeaderTemplate = testResultsHeaderTemplate; } - public String getTestResultsFooterTemplate() { return testResultsFooterTemplate; } @@ -111,23 +152,50 @@ this.testResultsFooterTemplate = testResultsFooterTemplate; } - public void incrementPassed(int numPassed) { - this.numPassed += numPassed; + public void setStartTime(Calendar startTime) { + this.startTime = startTime; } - public int getNumPassed() { - return numPassed; + public void setTestResultRowTemplate(String testResultRowTemplate) { + this.testResultRowTemplate = testResultRowTemplate; } - public void incrementFailed(int numFailed) { - this.numFailed += numFailed; + public String getTestResultRowTemplate() { + return testResultRowTemplate; } - public int getNumFailed() { - return numFailed; + public int getTestCaseNum() { + return testCaseNum; } - public void setStartTime(Calendar startTime) { - this.startTime = startTime; + /////////////////////////////////////////////////////////////////////////////////////////////// + //// TestCaseListner methods //// + /////////////////////////////////////////////////////////////////////////////////////////////// + + public void beginTestCase(TestCaseEvent event) { + //Do nothing } + + public void endTestCase(TestCaseEvent event) { + try{ + TestCaseTag tct = (TestCaseTag)event.getSource(); + TestCaseResult result = tct.getResults(); + int totalRun = result.getCountableResults().size(); + int failed = result.getFailedCountableResults().size(); + incrementPassed(totalRun - failed); + incrementFailed(failed); + outputRow(tct); + }finally{ + testCaseNum ++; + } + } + + public void beginTestRun(TestRunEvent event) { + setStartTime(Calendar.getInstance()); + outputHeader(); + } + + public void endTestRun(TestRunEvent event) { + outputFooter(Calendar.getInstance()); + } } Modified: trunk/jameleon-core/tst/java/net/sf/jameleon/reporting/HtmlResultsReporterTest.java =================================================================== --- trunk/jameleon-core/tst/java/net/sf/jameleon/reporting/HtmlResultsReporterTest.java 2007-06-04 22:08:35 UTC (rev 1561) +++ trunk/jameleon-core/tst/java/net/sf/jameleon/reporting/HtmlResultsReporterTest.java 2007-06-04 22:09:13 UTC (rev 1562) @@ -23,6 +23,12 @@ import junit.framework.TestSuite; import net.sf.jameleon.util.Configurator; import net.sf.jameleon.util.JameleonUtility; +import net.sf.jameleon.result.TestCaseResult; +import net.sf.jameleon.result.CountableFunctionResult; +import net.sf.jameleon.bean.FunctionalPoint; +import net.sf.jameleon.TestCaseTag; +import net.sf.jameleon.event.TestCaseEvent; +import net.sf.jameleon.event.TestRunEvent; import java.io.File; import java.io.StringWriter; @@ -46,17 +52,55 @@ super(name); } - public void setUp(){ + public void setUp() throws Exception{ + super.setUp(); reporter = new HtmlResultsReporter(); reporter.setWriter(new StringWriter()); } public void tearDown() throws Exception { + super.tearDown(); if (reporter.getWriter() != null) { reporter.getWriter().close(); } } + public void testBeginTestRun(){ + Configurator config = Configurator.getInstance(); + config.setValue("organization", "sf"); + config.setValue("testEnvironment", "foo"); + Calendar startTime = Calendar.getInstance(); + reporter.beginTestRun(new TestRunEvent("begin test run")); + validateHeader(startTime); + } + + public void testEndTestRun(){ + reporter.incrementPassed(12); + reporter.incrementFailed(12); + Calendar startTime = Calendar.getInstance(); + Calendar endTime = Calendar.getInstance(); + reporter.setStartTime(startTime); + reporter.endTestRun(new TestRunEvent("end test run")); + validateFooter("0h 0m 0"); + } + + public void testEndTestCase(){ + TestCaseTag tct = initTestCaseTag(); + TestCaseEvent tce = new TestCaseEvent(tct); + FunctionalPoint fp2 = new FunctionalPoint(); + fp2.addTagName("failed-tag"); + CountableFunctionResult cfr = new CountableFunctionResult(fp2, tct.getResults()); + cfr.setFailed(); + cfr.setError(new RuntimeException("an error message")); + cfr.setLineNumber(23); + + reporter.endTestCase(tce); + assertEquals("# of tests passed", 3, reporter.getNumPassed()); + assertEquals("# of tests failed", 1, reporter.getNumFailed()); + assertEquals("test case #", 2, reporter.getTestCaseNum()); + + } + public void testGetResultsDirectory(){ Calendar c = Calendar.getInstance(); c.set(Calendar.YEAR, 2007); @@ -78,9 +122,14 @@ assertEquals("Default results header", HtmlResultsReporter.DEFAULT_HEADER_TEMPLATE, reporter.getTestResultsHeaderTemplate()); reporter.setTestResultsHeaderTemplate("foo"); assertEquals("results header", "foo", reporter.getTestResultsHeaderTemplate()); + assertEquals("Default results footer", HtmlResultsReporter.DEFAULT_FOOTER_TEMPLATE, reporter.getTestResultsFooterTemplate()); reporter.setTestResultsFooterTemplate("foo"); assertEquals("results footer", "foo", reporter.getTestResultsFooterTemplate()); + + assertEquals("Default result row", HtmlResultsReporter.DEFAULT_RESULT_ROW_TEMPLATE, reporter.getTestResultRowTemplate()); + reporter.setTestResultRowTemplate("foo"); + assertEquals("results result row", "foo", reporter.getTestResultRowTemplate()); } public void testIncrementPassed(){ @@ -95,18 +144,43 @@ assertEquals("# failed", 5, reporter.getNumFailed()); } + public void testOutputRow() throws Exception{ + TestCaseTag tct = initTestCaseTag(); + reporter.outputRow(tct); + + StringWriter writer = (StringWriter)reporter.getWriter(); + String row = writer.toString(); + assertTrue("The writer was populated with something", row.length() > 0); + assertTrue("The file should contain a passed td " + row, row.indexOf("<td class=\"pass\" title=\"Test passed\">") >= 0); + assertTrue("The file should contain a passed gif " + row, row.indexOf("<img src=\"passed.gif\"/>") >= 0); + assertFalse("The file should not contain a failed row info column", row.indexOf("Row Failed") > -1); + + reporter.setWriter(new StringWriter()); + FunctionalPoint fp2 = new FunctionalPoint(); + fp2.addTagName("failed-tag"); + CountableFunctionResult cfr = new CountableFunctionResult(fp2, tct.getResults()); + cfr.setFailed(); + cfr.setError(new RuntimeException("an error message")); + cfr.setLineNumber(23); + reporter.outputRow(tct); + writer = (StringWriter)reporter.getWriter(); + row = writer.toString(); + assertTrue("The writer was populated with something", row.length() > 0); + assertTrue("The file should contain a failed td " + row, row.indexOf("<td class=\"fail\" title=\"Test failed\">") >= 0); + assertTrue("The file should contain a failed gif " + row, row.indexOf("<img src=\"failed.gif\"/>") >= 0); + assertTrue("The file should contain a failed line # " + row, row.indexOf("<td title=\"Line Failed\">23</td>") >= 0); + assertTrue("The file should contain a failed tag " + row, row.indexOf("<td title=\"FunctionId of Point of Failure\"><i>failed-tag</i></td>") >= 0); + assertTrue("The file should contain a failed row info column " + row, row.indexOf("Row Failed") > -1); + } + public void testOutputHeader() throws Exception{ Configurator config = Configurator.getInstance(); config.setValue("organization", "sf"); config.setValue("testEnvironment", "foo"); Calendar startTime = Calendar.getInstance(); - reporter.outputHeader(startTime); - StringWriter writer = (StringWriter)reporter.getWriter(); - String header = writer.toString(); - assertTrue("The writer was populated with something", header.length() > 0); - assertTrue("The writer should contain an org", header.indexOf("Start time: "+startTime.getTime()+"<br/>") > 0); - assertTrue("The file should contain an organization", header.indexOf("Organization: sf<br/>") >= 0); - assertTrue("The file should contain an environment", header.indexOf("Environment: foo<br/>") >= 0); + reporter.setStartTime(startTime); + reporter.outputHeader(); + validateHeader(startTime); } public void testOutputFooter() throws Exception{ @@ -117,14 +191,39 @@ endTime.set(Calendar.SECOND, startTime.get(Calendar.SECOND) + 3); reporter.setStartTime(startTime); reporter.outputFooter(endTime); + validateFooter("0h 0m 3"); + } + + private void validateHeader(Calendar startTime){ StringWriter writer = (StringWriter)reporter.getWriter(); + String header = writer.toString(); + assertTrue("The writer was populated with something", header.length() > 0); + assertTrue("The writer should contain an org", header.indexOf("Start time: "+startTime.getTime()+"<br/>") > 0); + assertTrue("The file should contain an organization", header.indexOf("Organization: sf<br/>") >= 0); + assertTrue("The file should contain an environment", header.indexOf("Environment: foo<br/>") >= 0); + } + + private void validateFooter(String time){ + StringWriter writer = (StringWriter)reporter.getWriter(); String results = writer.toString(); assertTrue("The writer was populated with something", results.length() > 0); - assertTrue("execution time " + results, results.indexOf("<td id=\"totalTime\">0h 0m 3") >= 0); + assertTrue("execution time " + results, results.indexOf("<td id=\"totalTime\">"+time) >= 0); assertTrue("total executed", results.indexOf("<td id=\"totalRun\">24") > 0); assertTrue("total passed", results.indexOf("<td id=\"totalPassed\">12") > 0); assertTrue("total failed", results.indexOf("<td id=\"totalFailed\">12") > 0); assertTrue("percent passed", results.indexOf("<td id=\"percentPassed\">50%") > 0); } + private TestCaseTag initTestCaseTag(){ + FunctionalPoint fp = new FunctionalPoint(); + fp.addTagName("tc"); + TestCaseResult tcr = new TestCaseResult(fp); + tcr.setTestName("some name"); + for (int i = 0; i < 3; i++){ + new CountableFunctionResult(fp, tcr); + } + TestCaseTag tct = new TestCaseTag(); + tct.setResults(tcr); + return tct; + } } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <en...@us...> - 2007-06-05 13:33:34
|
Revision: 1563 http://svn.sourceforge.net/jameleon/?rev=1563&view=rev Author: engrean Date: 2007-06-05 06:33:25 -0700 (Tue, 05 Jun 2007) Log Message: ----------- Hooked new results in to ExecuteTestCase. Still some bugs to work out. Modified Paths: -------------- trunk/jameleon-core/res/templates/results/summary/TestResultRow.txt trunk/jameleon-core/src/java/net/sf/jameleon/ExecuteTestCase.java trunk/jameleon-core/src/java/net/sf/jameleon/TestCaseTag.java trunk/jameleon-core/src/java/net/sf/jameleon/reporting/HtmlResultsReporter.java trunk/jameleon-core/src/java/net/sf/jameleon/util/JameleonDefaultValues.java trunk/jameleon-core/tst/java/net/sf/jameleon/ExecuteTestCaseTest.java trunk/jameleon-core/tst/java/net/sf/jameleon/reporting/HtmlResultsReporterTest.java Modified: trunk/jameleon-core/res/templates/results/summary/TestResultRow.txt =================================================================== --- trunk/jameleon-core/res/templates/results/summary/TestResultRow.txt 2007-06-04 22:09:13 UTC (rev 1562) +++ trunk/jameleon-core/res/templates/results/summary/TestResultRow.txt 2007-06-05 13:33:25 UTC (rev 1563) @@ -6,14 +6,15 @@ <tr> #end <td title="Test Case # $testCaseNum">$testCaseNum</td> -<td class="$outcome" title="Test ${outcome}ed"><img src="${outcome}ed.gif"/></td> -<td><a href="$scriptResultPath" target="_new">$result.testName</a></td> -<td title="Total Execution Time">$result.executionTime</td> +<td class="$outcome" title="Test ${outcome}ed"><img src="${results_res_dir}/icons/${outcome}ed.gif"/></td> +<td><a href="../../$result.testCaseDocsFile" target="_new">$result.testName</a></td> +<td title="Total Execution Time">$result.executionTimeToDisplay</td> <td title="# Iterations Run" align="right">$result.countableResults.size()</td> <td title="# Iterations Failed" align="right">$result.failedCountableResults.size()</td> <td title="% Tests Passed" align="right">$result.percentagePassed</td> +<td> #if ($result.failed()) -<table border="1" width="100%" id="${$result.testName}_failed"> +<table border="1" width="100%" id="${result.testName}_failed"> <tr> <th>Row</th> <th>Line</th> @@ -29,7 +30,7 @@ #if($failedResult.errorFile) <a href="${failedResult.errorFile.path}" target="_new"> #end -<pre>$!{failedResult.errorMsg}</pre> +<pre>$!{failedResult.htmlFormattedErrorMsg}</pre> #if($failedResult.errorFile.path) </a> #end @@ -37,6 +38,7 @@ </tr> #end </table> +</td> #else #end Modified: trunk/jameleon-core/src/java/net/sf/jameleon/ExecuteTestCase.java =================================================================== --- trunk/jameleon-core/src/java/net/sf/jameleon/ExecuteTestCase.java 2007-06-04 22:09:13 UTC (rev 1562) +++ trunk/jameleon-core/src/java/net/sf/jameleon/ExecuteTestCase.java 2007-06-05 13:33:25 UTC (rev 1563) @@ -18,26 +18,23 @@ */ package net.sf.jameleon; -import java.io.File; -import java.io.FileNotFoundException; -import java.io.IOException; -import java.util.HashMap; -import java.util.Iterator; -import java.util.LinkedList; -import java.util.List; -import java.util.Map; - import net.sf.jameleon.event.TestCaseEventHandler; import net.sf.jameleon.event.TestCaseListener; +import net.sf.jameleon.event.TestRunEventHandler; import net.sf.jameleon.exception.JameleonException; +import net.sf.jameleon.reporting.HtmlResultsReporter; import net.sf.jameleon.util.Configurator; - +import net.sf.jameleon.util.JameleonDefaultValues; +import net.sf.jameleon.util.JameleonUtility; import org.apache.commons.jelly.JellyContext; import org.apache.commons.jelly.JellyException; import org.apache.commons.jelly.XMLOutput; import org.apache.log4j.LogManager; import org.apache.log4j.Logger; +import java.io.*; +import java.util.*; + /** * Executes a Jameleon Test Case. */ @@ -75,20 +72,32 @@ /** * A line of dashes */ - protected static final String DASH = new String("\n-------------------------------------------------------------\n"); + protected static final String DASH = "\n-------------------------------------------------------------\n"; /** * A line of underscores */ - protected static final String US = new String("\n_______________________________________________________________\n"); + protected static final String US = "\n_______________________________________________________________\n"; protected final Logger log = Logger.getLogger(ExecuteTestCase.class.getName()); + private HtmlResultsReporter reporter = new HtmlResultsReporter(); protected final static TestCaseTagLibrary tagLibrary = new TestCaseTagLibrary(); /** * The jameleon.conf configuration name for a list of desired TestCaseListeners to be registered. */ public static final String TEST_CASE_LISTENERS = "TestCaseListeners"; + private Calendar startTime; public ExecuteTestCase(){ contextVars = new HashMap(); + startTime = Calendar.getInstance(); + try{ + File baseDir = new File(new File(Configurator.getInstance().getValue("baseDir", ".")), JameleonDefaultValues.RESULTS_DIR); + File resultsFile = new File(HtmlResultsReporter.getResultsDir(baseDir, startTime), "TestResults.html"); + JameleonUtility.createDirStructure(resultsFile.getParentFile()); + Writer writer = new FileWriter(resultsFile); + reporter.setWriter(writer); + }catch(IOException ioe){ + throw new JameleonException("Could not configure Jameleon to write out results file", ioe); + } } public ExecuteTestCase(boolean debug){ @@ -107,14 +116,18 @@ /** * Read in desired TestCaseListeners defined in jameleon.conf and register them * in the TestCaseEventHandler. + * @param useCurrentThread if set to true, then use the current thread's classloader */ public void registerEventListeners(boolean useCurrentThread){ + //Add the HtmlResultsReporter as test case and test run listener + TestCaseEventHandler.getInstance().addTestCaseListener(reporter); + TestRunEventHandler.getInstance().addTestRunListener(reporter); String[] tcListeners = Configurator.getInstance().getValueAsArray(TEST_CASE_LISTENERS); TestCaseListener tcListener; Class c; for (int i = 0; tcListeners != null && i < tcListeners.length; i++) { try{ - //This is a hack to get this working under both Ant and the GUI. For some reason + //This is a hack to get this working under both Ant and the GUI. //When not running in a separate VM for Ant, it prefers the Class.forName(). if (useCurrentThread) { c = Thread.currentThread().getContextClassLoader().loadClass(tcListeners[i]); @@ -132,8 +145,9 @@ } /** - * Register a new TestCaseEventListener + * Register a new TestCaseListener * in the TestCaseEventHandler. + * @param tcListener The TestCaseListener to register */ public void registerEventListener(TestCaseListener tcListener){ if (tcListener != null) { @@ -147,6 +161,8 @@ * Remove all TestCaseListeners registered via the registerEventListeners method. */ public void deregisterEventListeners(){ + TestCaseEventHandler.getInstance().removeTestCaseListener(reporter); + TestRunEventHandler.getInstance().removeTestRunListener(reporter); TestCaseListener listener; for (Iterator it = testCaseListeners.iterator(); it.hasNext(); ) { listener = (TestCaseListener)it.next(); @@ -170,7 +186,7 @@ return waitTimeBetweenScripts; } - /** + /* * Runs through a list of files or directories (args[]), * executing each one. */ @@ -184,7 +200,7 @@ printFooterStatic = false; startingPoint = 1; } - if (args != null && args.length > startingPoint) { + if (args.length > startingPoint) { File f = null; for (int i = startingPoint; i < args.length; i++) { f = new File(args[i]); @@ -203,6 +219,12 @@ } }finally{ exec.deregisterEventListeners(); + + try { + exec.reporter.getWriter().close(); + } catch (IOException e) { + e.printStackTrace(); + } if (printFooterStatic) { closeAllLogs(); } @@ -219,6 +241,8 @@ /** * Runs through all files in the given file or directory * and executes each file as a Jameleon test script. + * @param f The file to execute + * @return the error message if one exists */ public String execute(File f) { StringBuffer errMsg = new StringBuffer(); @@ -242,6 +266,7 @@ } public String executeFiles(){ + TestRunEventHandler.getInstance().beginTestRun(); StringBuffer errMsg = new StringBuffer(); Iterator it = getFiles().iterator(); while (it.hasNext()) { @@ -251,6 +276,7 @@ delay(); } } + TestRunEventHandler.getInstance().endTestRun(); return errMsg.toString(); } @@ -261,7 +287,7 @@ * @return a String representing the error(s), if any, that occured */ public String executeJellyScript(File file){ - String errMsg = new String(); + String errMsg = ""; JellyContext context = null; try{ context = runScript(file); @@ -319,6 +345,7 @@ /** * Adds a file or directory to the list of files to be executed by this instance. + * @param f The file to add */ public void addFile(File f){ files.add(f); Modified: trunk/jameleon-core/src/java/net/sf/jameleon/TestCaseTag.java =================================================================== --- trunk/jameleon-core/src/java/net/sf/jameleon/TestCaseTag.java 2007-06-04 22:09:13 UTC (rev 1562) +++ trunk/jameleon-core/src/java/net/sf/jameleon/TestCaseTag.java 2007-06-05 13:33:25 UTC (rev 1563) @@ -18,32 +18,6 @@ */ package net.sf.jameleon; -import java.io.File; -import java.io.FileNotFoundException; -import java.io.IOException; -import java.io.InputStream; -import java.util.ArrayList; -import java.util.Enumeration; -import java.util.HashMap; -import java.util.Iterator; -import java.util.List; -import java.util.Map; -import java.util.Properties; -import java.util.PropertyResourceBundle; -import java.util.ResourceBundle; -import java.util.Set; - -import org.apache.commons.beanutils.BeanUtils; -import org.apache.commons.jelly.JellyException; -import org.apache.commons.jelly.JellyTagException; -import org.apache.commons.jelly.LocationAware; -import org.apache.commons.jelly.MissingAttributeException; -import org.apache.commons.jelly.XMLOutput; -import org.apache.commons.jelly.expression.CompositeExpression; -import org.apache.commons.jelly.expression.Expression; -import org.apache.commons.jelly.expression.jexl.JexlExpressionFactory; -import org.apache.log4j.Logger; - import net.sf.jameleon.bean.FunctionalPoint; import net.sf.jameleon.bean.TestCase; import net.sf.jameleon.data.DataDrivable; @@ -51,7 +25,19 @@ import net.sf.jameleon.exception.JameleonScriptException; import net.sf.jameleon.result.*; import net.sf.jameleon.util.*; +import org.apache.commons.beanutils.BeanUtils; +import org.apache.commons.jelly.*; +import org.apache.commons.jelly.expression.CompositeExpression; +import org.apache.commons.jelly.expression.Expression; +import org.apache.commons.jelly.expression.jexl.JexlExpressionFactory; +import org.apache.log4j.Logger; +import java.io.File; +import java.io.FileNotFoundException; +import java.io.IOException; +import java.io.InputStream; +import java.util.*; + /** * Every test case script must have at least one testcase tag containing all other Jameleon tags. * <p> @@ -83,8 +69,8 @@ protected String assertLessThanLevel; protected String assertLevel; protected String assertLevels; - protected String testEnvironment = new String(); - protected String organization = new String(); + protected String testEnvironment = ""; + protected String organization = ""; protected String csvValueSeparator; protected String bugTrackerUrl; protected String genTestCaseDocsEncoding = JameleonDefaultValues.FILE_CHARSET; @@ -95,7 +81,7 @@ protected boolean executeTestCase = true; protected String genTestCaseDocsTemplate = GEN_TEST_CASE_DOCS_TEMPLATE_DEFAULT; public static final String GEN_TEST_CASE_DOCS_TEMPLATE_DEFAULT = "TestCaseResultsTemplate.txt"; - public static final String RESULTS_RES_DIR = "../../res"; + public static final String RESULTS_RES_DIR = JameleonDefaultValues.RESULTS_RES_DIR; protected TestCaseEventHandler eventHandler = TestCaseEventHandler.getInstance(); protected long startTime; protected File resultsFile; Modified: trunk/jameleon-core/src/java/net/sf/jameleon/reporting/HtmlResultsReporter.java =================================================================== --- trunk/jameleon-core/src/java/net/sf/jameleon/reporting/HtmlResultsReporter.java 2007-06-04 22:09:13 UTC (rev 1562) +++ trunk/jameleon-core/src/java/net/sf/jameleon/reporting/HtmlResultsReporter.java 2007-06-05 13:33:25 UTC (rev 1563) @@ -1,15 +1,16 @@ package net.sf.jameleon.reporting; +import net.sf.jameleon.TestCaseTag; +import net.sf.jameleon.event.TestCaseEvent; +import net.sf.jameleon.event.TestCaseListener; +import net.sf.jameleon.event.TestRunEvent; +import net.sf.jameleon.event.TestRunListener; import net.sf.jameleon.exception.JameleonException; +import net.sf.jameleon.result.TestCaseResult; import net.sf.jameleon.util.Configurator; +import net.sf.jameleon.util.JameleonDefaultValues; +import net.sf.jameleon.util.JameleonUtility; import net.sf.jameleon.util.TemplateProcessor; -import net.sf.jameleon.util.JameleonUtility; -import net.sf.jameleon.result.TestCaseResult; -import net.sf.jameleon.TestCaseTag; -import net.sf.jameleon.event.TestCaseListener; -import net.sf.jameleon.event.TestCaseEvent; -import net.sf.jameleon.event.TestRunListener; -import net.sf.jameleon.event.TestRunEvent; import java.io.File; import java.io.IOException; @@ -70,7 +71,7 @@ Map params = new HashMap(); params.put("result", tct.getResults()); params.put("resultsFile", tct.getResultsFile().getPath()); - params.put("results_res_dir", TestCaseTag.RESULTS_RES_DIR); + params.put("results_res_dir", JameleonDefaultValues.RESULTS_RES_DIR); params.put("testCaseNum", testCaseNum+""); outputToTemplate(testResultRowTemplate, params); } @@ -95,6 +96,7 @@ try { TemplateProcessor processor = new TemplateProcessor(template); writer.write(processor.transformToString(params)); + writer.flush(); } catch (IOException e) { throw new JameleonException("Could not write results to main HTML results file: "+e.getMessage()); } Modified: trunk/jameleon-core/src/java/net/sf/jameleon/util/JameleonDefaultValues.java =================================================================== --- trunk/jameleon-core/src/java/net/sf/jameleon/util/JameleonDefaultValues.java 2007-06-04 22:09:13 UTC (rev 1562) +++ trunk/jameleon-core/src/java/net/sf/jameleon/util/JameleonDefaultValues.java 2007-06-05 13:33:25 UTC (rev 1563) @@ -10,7 +10,9 @@ public static final File SCRIPT_DIR = new File("scripts"); public static final String SCRIPT_DIR_CONFIG_NAME = "scriptDir"; public static final String RESULTS_DIR = "jameleon_test_results"; + public static final String RESULTS_RES_DIR = "../../res"; public static final String FILE_CHARSET = "UTF-8"; public static final String ENTRIES_CONFIG_NAME = "classpath.entry"; + } Modified: trunk/jameleon-core/tst/java/net/sf/jameleon/ExecuteTestCaseTest.java =================================================================== --- trunk/jameleon-core/tst/java/net/sf/jameleon/ExecuteTestCaseTest.java 2007-06-04 22:09:13 UTC (rev 1562) +++ trunk/jameleon-core/tst/java/net/sf/jameleon/ExecuteTestCaseTest.java 2007-06-05 13:33:25 UTC (rev 1563) @@ -18,14 +18,15 @@ */ package net.sf.jameleon; -import java.util.List; - import junit.framework.Test; import junit.framework.TestSuite; import net.sf.jameleon.event.TestCaseEventHandler; +import net.sf.jameleon.event.TestRunEventHandler; import net.sf.jameleon.event.TestTestCaseListener; import net.sf.jameleon.util.Configurator; +import java.util.List; + public class ExecuteTestCaseTest extends junit.framework.TestCase { private ExecuteTestCase exec; @@ -56,18 +57,25 @@ exec.registerEventListeners(); List listeners = TestCaseEventHandler.getInstance().getTestCaseListeners(); - assertEquals("# of listeners before", 0, listeners.size()); + assertEquals("# of tc listeners before", 1, listeners.size()); + List testRunListeners = TestRunEventHandler.getInstance().getTestRunListeners(); + assertEquals("# of tr listeners before", 1, testRunListeners.size()); + + Configurator.getInstance().setValue(ExecuteTestCase.TEST_CASE_LISTENERS, TestTestCaseListener.class.getName() + " "+ TestTestCaseListener.class.getName()); - + exec.deregisterEventListeners(); exec.registerEventListeners(); listeners = TestCaseEventHandler.getInstance().getTestCaseListeners(); - assertEquals("# of listeners after", 2, listeners.size()); + assertEquals("# of listeners after", 3, listeners.size()); - assertTrue("1st listener is not an instance of DummyTestCaseListener1", listeners.get(0) instanceof TestTestCaseListener); - assertTrue("2nd listener is not an instance of DummyTestCaseListener2", listeners.get(1) instanceof TestTestCaseListener); - assertFalse( listeners.get(0) == listeners.get(1)); + testRunListeners = TestRunEventHandler.getInstance().getTestRunListeners(); + assertEquals("# of tr listeners after", 1, testRunListeners.size()); + + assertTrue("2nd listener is not an instance of DummyTestCaseListener1", listeners.get(1) instanceof TestTestCaseListener); + assertTrue("3rd listener is not an instance of DummyTestCaseListener2", listeners.get(2) instanceof TestTestCaseListener); + assertFalse( listeners.get(1) == listeners.get(2)); } public void testRegisterEventListener(){ @@ -90,9 +98,9 @@ Configurator.getInstance().setValue(ExecuteTestCase.TEST_CASE_LISTENERS, TestTestCaseListener.class.getName() + " "+ TestTestCaseListener.class.getName()); exec.registerEventListeners(); - assertEquals("# of listeners", 2, TestCaseEventHandler.getInstance().getTestCaseListeners().size()); + assertEquals("# of listeners", 3, TestCaseEventHandler.getInstance().getTestCaseListeners().size()); TestCaseEventHandler.getInstance().addTestCaseListener(new TestTestCaseListener()); - assertEquals("# of listeners", 3, TestCaseEventHandler.getInstance().getTestCaseListeners().size()); + assertEquals("# of listeners", 4, TestCaseEventHandler.getInstance().getTestCaseListeners().size()); exec.deregisterEventListeners(); assertEquals("# of listeners", 1, TestCaseEventHandler.getInstance().getTestCaseListeners().size()); } Modified: trunk/jameleon-core/tst/java/net/sf/jameleon/reporting/HtmlResultsReporterTest.java =================================================================== --- trunk/jameleon-core/tst/java/net/sf/jameleon/reporting/HtmlResultsReporterTest.java 2007-06-04 22:09:13 UTC (rev 1562) +++ trunk/jameleon-core/tst/java/net/sf/jameleon/reporting/HtmlResultsReporterTest.java 2007-06-05 13:33:25 UTC (rev 1563) @@ -21,14 +21,14 @@ import junit.framework.Test; import junit.framework.TestCase; import junit.framework.TestSuite; -import net.sf.jameleon.util.Configurator; -import net.sf.jameleon.util.JameleonUtility; -import net.sf.jameleon.result.TestCaseResult; -import net.sf.jameleon.result.CountableFunctionResult; +import net.sf.jameleon.TestCaseTag; import net.sf.jameleon.bean.FunctionalPoint; -import net.sf.jameleon.TestCaseTag; import net.sf.jameleon.event.TestCaseEvent; import net.sf.jameleon.event.TestRunEvent; +import net.sf.jameleon.result.CountableFunctionResult; +import net.sf.jameleon.result.TestCaseResult; +import net.sf.jameleon.util.Configurator; +import net.sf.jameleon.util.JameleonUtility; import java.io.File; import java.io.StringWriter; @@ -152,7 +152,7 @@ String row = writer.toString(); assertTrue("The writer was populated with something", row.length() > 0); assertTrue("The file should contain a passed td " + row, row.indexOf("<td class=\"pass\" title=\"Test passed\">") >= 0); - assertTrue("The file should contain a passed gif " + row, row.indexOf("<img src=\"passed.gif\"/>") >= 0); + assertTrue("The file should contain a passed gif " + row, row.indexOf("passed.gif") >= 0); assertFalse("The file should not contain a failed row info column", row.indexOf("Row Failed") > -1); reporter.setWriter(new StringWriter()); @@ -167,7 +167,7 @@ row = writer.toString(); assertTrue("The writer was populated with something", row.length() > 0); assertTrue("The file should contain a failed td " + row, row.indexOf("<td class=\"fail\" title=\"Test failed\">") >= 0); - assertTrue("The file should contain a failed gif " + row, row.indexOf("<img src=\"failed.gif\"/>") >= 0); + assertTrue("The file should contain a failed gif " + row, row.indexOf("failed.gif") >= 0); assertTrue("The file should contain a failed line # " + row, row.indexOf("<td title=\"Line Failed\">23</td>") >= 0); assertTrue("The file should contain a failed tag " + row, row.indexOf("<td title=\"FunctionId of Point of Failure\"><i>failed-tag</i></td>") >= 0); assertTrue("The file should contain a failed row info column " + row, row.indexOf("Row Failed") > -1); @@ -218,6 +218,7 @@ FunctionalPoint fp = new FunctionalPoint(); fp.addTagName("tc"); TestCaseResult tcr = new TestCaseResult(fp); + tcr.setTestCaseDocsFile("some/dir/some_file.html"); tcr.setTestName("some name"); for (int i = 0; i < 3; i++){ new CountableFunctionResult(fp, tcr); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <en...@us...> - 2007-06-05 19:46:38
|
Revision: 1564 http://svn.sourceforge.net/jameleon/?rev=1564&view=rev Author: engrean Date: 2007-06-05 12:46:35 -0700 (Tue, 05 Jun 2007) Log Message: ----------- next step on implementing log4j separate reporting and timestamped results. Modified Paths: -------------- trunk/jameleon-core/src/java/net/sf/jameleon/ExecuteTestCase.java trunk/jameleon-core/src/java/net/sf/jameleon/TestSuiteTag.java trunk/jameleon-core/src/java/net/sf/jameleon/event/DataDrivableEventHandler.java trunk/jameleon-core/src/java/net/sf/jameleon/event/FunctionEventHandler.java trunk/jameleon-core/src/java/net/sf/jameleon/event/TestCaseEventHandler.java trunk/jameleon-core/src/java/net/sf/jameleon/event/TestRunEventHandler.java trunk/jameleon-core/src/java/net/sf/jameleon/event/TestSuiteEventHandler.java trunk/jameleon-core/src/java/net/sf/jameleon/plugin/junit/ExecuteJameleonScriptTag.java trunk/jameleon-core/src/java/net/sf/jameleon/reporting/HtmlResultsReporter.java trunk/jameleon-core/tst/java/net/sf/jameleon/reporting/HtmlResultsReporterTest.java Modified: trunk/jameleon-core/src/java/net/sf/jameleon/ExecuteTestCase.java =================================================================== --- trunk/jameleon-core/src/java/net/sf/jameleon/ExecuteTestCase.java 2007-06-05 13:33:25 UTC (rev 1563) +++ trunk/jameleon-core/src/java/net/sf/jameleon/ExecuteTestCase.java 2007-06-05 19:46:35 UTC (rev 1564) @@ -78,26 +78,16 @@ */ protected static final String US = "\n_______________________________________________________________\n"; protected final Logger log = Logger.getLogger(ExecuteTestCase.class.getName()); - private HtmlResultsReporter reporter = new HtmlResultsReporter(); + private HtmlResultsReporter reporter; + protected final static TestCaseTagLibrary tagLibrary = new TestCaseTagLibrary(); /** * The jameleon.conf configuration name for a list of desired TestCaseListeners to be registered. */ public static final String TEST_CASE_LISTENERS = "TestCaseListeners"; - private Calendar startTime; public ExecuteTestCase(){ contextVars = new HashMap(); - startTime = Calendar.getInstance(); - try{ - File baseDir = new File(new File(Configurator.getInstance().getValue("baseDir", ".")), JameleonDefaultValues.RESULTS_DIR); - File resultsFile = new File(HtmlResultsReporter.getResultsDir(baseDir, startTime), "TestResults.html"); - JameleonUtility.createDirStructure(resultsFile.getParentFile()); - Writer writer = new FileWriter(resultsFile); - reporter.setWriter(writer); - }catch(IOException ioe){ - throw new JameleonException("Could not configure Jameleon to write out results file", ioe); - } } public ExecuteTestCase(boolean debug){ @@ -113,6 +103,10 @@ registerEventListeners(true); } + public HtmlResultsReporter getResultsReporter(){ + return reporter; + } + /** * Read in desired TestCaseListeners defined in jameleon.conf and register them * in the TestCaseEventHandler. @@ -120,8 +114,7 @@ */ public void registerEventListeners(boolean useCurrentThread){ //Add the HtmlResultsReporter as test case and test run listener - TestCaseEventHandler.getInstance().addTestCaseListener(reporter); - TestRunEventHandler.getInstance().addTestRunListener(reporter); + beginTestRun(); String[] tcListeners = Configurator.getInstance().getValueAsArray(TEST_CASE_LISTENERS); TestCaseListener tcListener; Class c; @@ -161,8 +154,7 @@ * Remove all TestCaseListeners registered via the registerEventListeners method. */ public void deregisterEventListeners(){ - TestCaseEventHandler.getInstance().removeTestCaseListener(reporter); - TestRunEventHandler.getInstance().removeTestRunListener(reporter); + endTestRun(); TestCaseListener listener; for (Iterator it = testCaseListeners.iterator(); it.hasNext(); ) { listener = (TestCaseListener)it.next(); @@ -186,6 +178,44 @@ return waitTimeBetweenScripts; } + /** + * Begins the test run. This creates a new html reporter which in turn ends up + * generating another results file. + */ + public void beginTestRun(){ + Calendar startTime = Calendar.getInstance(); + try{ + File baseDir = new File(new File(Configurator.getInstance().getValue("baseDir", ".")), + JameleonDefaultValues.RESULTS_DIR); + File resultsFile = new File(HtmlResultsReporter.getResultsDir(baseDir, startTime), + "TestResults.html"); + JameleonUtility.createDirStructure(resultsFile.getParentFile()); + Writer writer = new FileWriter(resultsFile); + reporter = HtmlResultsReporter.getInstance(); + reporter.setWriter(writer); + }catch(IOException ioe){ + throw new JameleonException("Could not configure Jameleon to write out results file", ioe); + } + TestCaseEventHandler.getInstance().addTestCaseListener(reporter); + TestRunEventHandler.getInstance().addTestRunListener(reporter); + TestRunEventHandler.getInstance().beginTestRun(); + } + + /** + * Ends the test run. + */ + public void endTestRun(){ + TestRunEventHandler.getInstance().endTestRun(); + TestCaseEventHandler.getInstance().removeTestCaseListener(reporter); + TestRunEventHandler.getInstance().removeTestRunListener(reporter); + try { + reporter.getWriter().close(); + } catch (IOException e) { + System.err.println("Error closing test results summary writer"); + e.printStackTrace(); + } + } + /* * Runs through a list of files or directories (args[]), * executing each one. @@ -219,12 +249,6 @@ } }finally{ exec.deregisterEventListeners(); - - try { - exec.reporter.getWriter().close(); - } catch (IOException e) { - e.printStackTrace(); - } if (printFooterStatic) { closeAllLogs(); } @@ -266,7 +290,6 @@ } public String executeFiles(){ - TestRunEventHandler.getInstance().beginTestRun(); StringBuffer errMsg = new StringBuffer(); Iterator it = getFiles().iterator(); while (it.hasNext()) { @@ -276,7 +299,6 @@ delay(); } } - TestRunEventHandler.getInstance().endTestRun(); return errMsg.toString(); } Modified: trunk/jameleon-core/src/java/net/sf/jameleon/TestSuiteTag.java =================================================================== --- trunk/jameleon-core/src/java/net/sf/jameleon/TestSuiteTag.java 2007-06-05 13:33:25 UTC (rev 1563) +++ trunk/jameleon-core/src/java/net/sf/jameleon/TestSuiteTag.java 2007-06-05 19:46:35 UTC (rev 1564) @@ -97,11 +97,11 @@ TestSuiteEventHandler eventHandler = TestSuiteEventHandler.getInstance(); eventHandler.beginTestSuite(this); executor = new ExecuteTestCase(); - executor.registerEventListeners(); +// executor.registerEventListeners(); try{ invokeBody(out); }finally{ - executor.deregisterEventListeners(); + //executor.deregisterEventListeners(); eventHandler.endTestSuite(this); eventHandler.removeTestSuiteListener(listener); } Modified: trunk/jameleon-core/src/java/net/sf/jameleon/event/DataDrivableEventHandler.java =================================================================== --- trunk/jameleon-core/src/java/net/sf/jameleon/event/DataDrivableEventHandler.java 2007-06-05 13:33:25 UTC (rev 1563) +++ trunk/jameleon-core/src/java/net/sf/jameleon/event/DataDrivableEventHandler.java 2007-06-05 19:46:35 UTC (rev 1564) @@ -45,7 +45,9 @@ } public void addDataDrivableListener(DataDrivableListener ddl){ - dataDrivableListeners.add(ddl); + if (ddl != null && !dataDrivableListeners.contains(ddl)){ + dataDrivableListeners.add(ddl); + } } public List getDataDrivableListeners(){ Modified: trunk/jameleon-core/src/java/net/sf/jameleon/event/FunctionEventHandler.java =================================================================== --- trunk/jameleon-core/src/java/net/sf/jameleon/event/FunctionEventHandler.java 2007-06-05 13:33:25 UTC (rev 1563) +++ trunk/jameleon-core/src/java/net/sf/jameleon/event/FunctionEventHandler.java 2007-06-05 19:46:35 UTC (rev 1564) @@ -44,7 +44,9 @@ } public void addFunctionListener(FunctionListener fl){ - functionListeners.add(fl); + if (fl != null && !functionListeners.contains(fl)){ + functionListeners.add(fl); + } } public List getFunctionListeners(){ Modified: trunk/jameleon-core/src/java/net/sf/jameleon/event/TestCaseEventHandler.java =================================================================== --- trunk/jameleon-core/src/java/net/sf/jameleon/event/TestCaseEventHandler.java 2007-06-05 13:33:25 UTC (rev 1563) +++ trunk/jameleon-core/src/java/net/sf/jameleon/event/TestCaseEventHandler.java 2007-06-05 19:46:35 UTC (rev 1564) @@ -44,7 +44,9 @@ } public void addTestCaseListener(TestCaseListener tcl){ - testCaseListeners.add(tcl); + if (tcl != null && !testCaseListeners.contains(tcl)){ + testCaseListeners.add(tcl); + } } public List getTestCaseListeners(){ Modified: trunk/jameleon-core/src/java/net/sf/jameleon/event/TestRunEventHandler.java =================================================================== --- trunk/jameleon-core/src/java/net/sf/jameleon/event/TestRunEventHandler.java 2007-06-05 13:33:25 UTC (rev 1563) +++ trunk/jameleon-core/src/java/net/sf/jameleon/event/TestRunEventHandler.java 2007-06-05 19:46:35 UTC (rev 1564) @@ -43,7 +43,9 @@ } public void addTestRunListener(TestRunListener trl){ - testRunListeners.add(trl); + if (trl != null && !testRunListeners.contains(trl)){ + testRunListeners.add(trl); + } } public List getTestRunListeners(){ @@ -51,7 +53,7 @@ } public void removeTestRunListener(TestRunListener trl){ - testRunListeners.remove(trl); + testRunListeners.remove(trl); } public void beginTestRun(){ @@ -70,10 +72,10 @@ TestRunEvent tre = new TestRunEvent("End Test Run"); synchronized(testRunListeners){ Iterator it = testRunListeners.iterator(); - TestRunListener tsl; + TestRunListener trl; while (it.hasNext()) { - tsl = (TestRunListener)it.next(); - tsl.endTestRun(tre); + trl = (TestRunListener)it.next(); + trl.endTestRun(tre); } } } Modified: trunk/jameleon-core/src/java/net/sf/jameleon/event/TestSuiteEventHandler.java =================================================================== --- trunk/jameleon-core/src/java/net/sf/jameleon/event/TestSuiteEventHandler.java 2007-06-05 13:33:25 UTC (rev 1563) +++ trunk/jameleon-core/src/java/net/sf/jameleon/event/TestSuiteEventHandler.java 2007-06-05 19:46:35 UTC (rev 1564) @@ -44,7 +44,9 @@ } public void addTestSuiteListener(TestSuiteListener tsl){ - testSuiteListeners.add(tsl); + if (tsl != null && !testSuiteListeners.contains(tsl)){ + testSuiteListeners.add(tsl); + } } public List getTestSuiteListeners(){ Modified: trunk/jameleon-core/src/java/net/sf/jameleon/plugin/junit/ExecuteJameleonScriptTag.java =================================================================== --- trunk/jameleon-core/src/java/net/sf/jameleon/plugin/junit/ExecuteJameleonScriptTag.java 2007-06-05 13:33:25 UTC (rev 1563) +++ trunk/jameleon-core/src/java/net/sf/jameleon/plugin/junit/ExecuteJameleonScriptTag.java 2007-06-05 19:46:35 UTC (rev 1564) @@ -22,12 +22,14 @@ import java.io.File; import java.io.StringReader; import java.io.StringWriter; +import java.io.Writer; import java.util.ArrayList; import java.util.Iterator; import java.util.List; import net.sf.jameleon.ExecuteTestCase; import net.sf.jameleon.TestCaseTag; +import net.sf.jameleon.reporting.HtmlResultsReporter; import net.sf.jameleon.event.TestCaseEvent; import net.sf.jameleon.event.TestCaseEventHandler; import net.sf.jameleon.event.TestCaseListener; @@ -161,6 +163,7 @@ protected StringWriter testCaseResults; protected StringWriter htmlResults; protected StringWriter xmlResults; + protected Writer timestampedResults; protected ExecuteTestCase jmln; protected DenyAllFilter denyAll; protected Appender stdout; @@ -255,6 +258,8 @@ denyAll = new DenyAllFilter(); jmln = new ExecuteTestCase(DEBUG); jmln.setScriptName2StdOut(false); + timestampedResults = HtmlResultsReporter.getInstance().getWriter(); + HtmlResultsReporter.getInstance().setWriter(new StringWriter()); testCaseResults = new StringWriter(); htmlResults = new StringWriter(); xmlResults = new StringWriter(); @@ -320,8 +325,10 @@ stdout.setLayout(originalLayout); stdout.clearFilters(); } + HtmlResultsReporter.getInstance().setWriter(timestampedResults); jmln = null; TestCaseEventHandler.getInstance().removeTestCaseListener(listener); + } protected String executeScript(){ Modified: trunk/jameleon-core/src/java/net/sf/jameleon/reporting/HtmlResultsReporter.java =================================================================== --- trunk/jameleon-core/src/java/net/sf/jameleon/reporting/HtmlResultsReporter.java 2007-06-05 13:33:25 UTC (rev 1563) +++ trunk/jameleon-core/src/java/net/sf/jameleon/reporting/HtmlResultsReporter.java 2007-06-05 19:46:35 UTC (rev 1564) @@ -38,7 +38,28 @@ private int numPassed; private int numFailed; private Calendar startTime; + private static HtmlResultsReporter reporter; + private HtmlResultsReporter(){} + + public static HtmlResultsReporter getInstance(){ + if (reporter == null){ + reporter = new HtmlResultsReporter(); + } + return reporter; + } + + public static void clearInstance(){ + if (reporter != null){ + try{ + reporter.getWriter().flush(); + reporter.getWriter().close(); + }catch(IOException ioe){ + ioe.printStackTrace(); + } + reporter = null; + } + } /** * Gets the timestamp formatted results directory * @param baseDir - The director to use as the base or just '.' Modified: trunk/jameleon-core/tst/java/net/sf/jameleon/reporting/HtmlResultsReporterTest.java =================================================================== --- trunk/jameleon-core/tst/java/net/sf/jameleon/reporting/HtmlResultsReporterTest.java 2007-06-05 13:33:25 UTC (rev 1563) +++ trunk/jameleon-core/tst/java/net/sf/jameleon/reporting/HtmlResultsReporterTest.java 2007-06-05 19:46:35 UTC (rev 1564) @@ -54,15 +54,13 @@ public void setUp() throws Exception{ super.setUp(); - reporter = new HtmlResultsReporter(); + reporter = HtmlResultsReporter.getInstance(); reporter.setWriter(new StringWriter()); } public void tearDown() throws Exception { super.tearDown(); - if (reporter.getWriter() != null) { - reporter.getWriter().close(); - } + HtmlResultsReporter.clearInstance(); } public void testBeginTestRun(){ @@ -115,7 +113,7 @@ } public void testGettersSetters(){ - reporter = new HtmlResultsReporter(); + reporter = HtmlResultsReporter.getInstance(); Writer writer = new StringWriter(); reporter.setWriter(writer); assertTrue("writer", writer == reporter.getWriter()); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <en...@us...> - 2007-06-06 15:30:36
|
Revision: 1566 http://svn.sourceforge.net/jameleon/?rev=1566&view=rev Author: engrean Date: 2007-06-06 08:30:35 -0700 (Wed, 06 Jun 2007) Log Message: ----------- Added milliseconds to directory name and reset stats between test runs. Modified Paths: -------------- trunk/jameleon-core/src/java/net/sf/jameleon/reporting/HtmlResultsReporter.java trunk/jameleon-core/tst/java/net/sf/jameleon/reporting/HtmlResultsReporterTest.java Modified: trunk/jameleon-core/src/java/net/sf/jameleon/reporting/HtmlResultsReporter.java =================================================================== --- trunk/jameleon-core/src/java/net/sf/jameleon/reporting/HtmlResultsReporter.java 2007-06-06 01:30:24 UTC (rev 1565) +++ trunk/jameleon-core/src/java/net/sf/jameleon/reporting/HtmlResultsReporter.java 2007-06-06 15:30:35 UTC (rev 1566) @@ -26,7 +26,7 @@ */ public class HtmlResultsReporter implements TestCaseListener, TestRunListener { private Writer writer; - private static final SimpleDateFormat format = new SimpleDateFormat("yyyy-MMMMM-dd__hh-mm-ssaaa"); + private static final SimpleDateFormat format = new SimpleDateFormat("yyyy-MMMMM-dd__hh-mm-ss-SS-aaa"); public static final String DEFAULT_HEADER_TEMPLATE = "templates/results/summary/TestResultsHeader.txt"; public static final String DEFAULT_FOOTER_TEMPLATE = "templates/results/summary/TestResultsFooter.txt"; public static final String DEFAULT_RESULT_ROW_TEMPLATE = "templates/results/summary/TestResultRow.txt"; @@ -60,6 +60,7 @@ reporter = null; } } + /** * Gets the timestamp formatted results directory * @param baseDir - The director to use as the base or just '.' @@ -87,6 +88,7 @@ /** * Ouputs the result for a particular test case * @param tct The test case result to report on + * @throws JameleonException when the row result can't be written */ public void outputRow(TestCaseTag tct) throws JameleonException{ Map params = new HashMap(); @@ -131,6 +133,10 @@ this.numFailed += numFailed; } + public void incrementTestCaseNum(int num) { + testCaseNum += num; + } + /////////////////////////////////////////////////////////////////////////////////////////////// //// SETTERS & GETTERS //// /////////////////////////////////////////////////////////////////////////////////////////////// @@ -209,7 +215,7 @@ incrementFailed(failed); outputRow(tct); }finally{ - testCaseNum ++; + incrementTestCaseNum(1); } } @@ -220,5 +226,13 @@ public void endTestRun(TestRunEvent event) { outputFooter(Calendar.getInstance()); + resetStats(); + } + + public void resetStats() { + numFailed = 0; + numPassed = 0; + testCaseNum = 1; + } } Modified: trunk/jameleon-core/tst/java/net/sf/jameleon/reporting/HtmlResultsReporterTest.java =================================================================== --- trunk/jameleon-core/tst/java/net/sf/jameleon/reporting/HtmlResultsReporterTest.java 2007-06-06 01:30:24 UTC (rev 1565) +++ trunk/jameleon-core/tst/java/net/sf/jameleon/reporting/HtmlResultsReporterTest.java 2007-06-06 15:30:35 UTC (rev 1566) @@ -63,6 +63,16 @@ HtmlResultsReporter.clearInstance(); } + public void testResetStats(){ + reporter.incrementFailed(5); + reporter.incrementPassed(23); + reporter.incrementTestCaseNum(55); + reporter.resetStats(); + assertEquals("# failed", 0, reporter.getNumFailed()); + assertEquals("# passed", 0, reporter.getNumPassed()); + assertEquals("test case #", 1, reporter.getTestCaseNum()); + } + public void testBeginTestRun(){ Configurator config = Configurator.getInstance(); config.setValue("organization", "sf"); @@ -80,6 +90,9 @@ reporter.setStartTime(startTime); reporter.endTestRun(new TestRunEvent("end test run")); validateFooter("0h 0m 0"); + assertEquals("# passed", 0, reporter.getNumPassed()); + assertEquals("# failed", 0, reporter.getNumFailed()); + assertEquals("test case #", 1, reporter.getTestCaseNum()); } public void testEndTestCase(){ @@ -107,9 +120,10 @@ c.set(Calendar.HOUR_OF_DAY, 10); c.set(Calendar.MINUTE, 23); c.set(Calendar.SECOND, 32); + c.set(Calendar.MILLISECOND, 725); File f = HtmlResultsReporter.getResultsDir(BASE_DIR, c); assertEquals("resultsDir", JameleonUtility.fixFileSeparators( - "jameleon_test_results/2007-May-18__10-23-32AM"), f.getPath()); + "jameleon_test_results/2007-May-18__10-23-32-725-AM"), f.getPath()); } public void testGettersSetters(){ @@ -130,6 +144,12 @@ assertEquals("results result row", "foo", reporter.getTestResultRowTemplate()); } + public void testIncrementTestCaseNum(){ + assertEquals("initial test case #", 1, reporter.getTestCaseNum()); + reporter.incrementTestCaseNum(5); + assertEquals("test case #", 6, reporter.getTestCaseNum()); + } + public void testIncrementPassed(){ assertEquals("initial # passed", 0, reporter.getNumPassed()); reporter.incrementPassed(5); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <en...@us...> - 2007-06-06 15:48:19
|
Revision: 1567 http://svn.sourceforge.net/jameleon/?rev=1567&view=rev Author: engrean Date: 2007-06-06 08:48:18 -0700 (Wed, 06 Jun 2007) Log Message: ----------- Changed TestRunEventHandler to use a provided startTime and endTime and to wrap those dates in a TestRunEvent. Modified Paths: -------------- trunk/jameleon-core/src/java/net/sf/jameleon/ExecuteTestCase.java trunk/jameleon-core/src/java/net/sf/jameleon/event/TestRunEventHandler.java trunk/jameleon-core/src/java/net/sf/jameleon/reporting/HtmlResultsReporter.java trunk/jameleon-core/tst/java/net/sf/jameleon/event/TestRunEventHandlerTest.java trunk/jameleon-core/tst/java/net/sf/jameleon/reporting/HtmlResultsReporterTest.java Modified: trunk/jameleon-core/src/java/net/sf/jameleon/ExecuteTestCase.java =================================================================== --- trunk/jameleon-core/src/java/net/sf/jameleon/ExecuteTestCase.java 2007-06-06 15:30:35 UTC (rev 1566) +++ trunk/jameleon-core/src/java/net/sf/jameleon/ExecuteTestCase.java 2007-06-06 15:48:18 UTC (rev 1567) @@ -198,14 +198,14 @@ } TestCaseEventHandler.getInstance().addTestCaseListener(reporter); TestRunEventHandler.getInstance().addTestRunListener(reporter); - TestRunEventHandler.getInstance().beginTestRun(); + TestRunEventHandler.getInstance().beginTestRun(startTime); } /** * Ends the test run. */ public void endTestRun(){ - TestRunEventHandler.getInstance().endTestRun(); + TestRunEventHandler.getInstance().endTestRun(Calendar.getInstance()); TestCaseEventHandler.getInstance().removeTestCaseListener(reporter); TestRunEventHandler.getInstance().removeTestRunListener(reporter); try { Modified: trunk/jameleon-core/src/java/net/sf/jameleon/event/TestRunEventHandler.java =================================================================== --- trunk/jameleon-core/src/java/net/sf/jameleon/event/TestRunEventHandler.java 2007-06-06 15:30:35 UTC (rev 1566) +++ trunk/jameleon-core/src/java/net/sf/jameleon/event/TestRunEventHandler.java 2007-06-06 15:48:18 UTC (rev 1567) @@ -18,10 +18,7 @@ */ package net.sf.jameleon.event; -import java.util.Collections; -import java.util.Iterator; -import java.util.LinkedList; -import java.util.List; +import java.util.*; public class TestRunEventHandler{ @@ -56,8 +53,8 @@ testRunListeners.remove(trl); } - public void beginTestRun(){ - TestRunEvent tre = new TestRunEvent("Begin Test Run"); + public void beginTestRun(Calendar startTime){ + TestRunEvent tre = new TestRunEvent(startTime); synchronized(testRunListeners){ Iterator it = testRunListeners.iterator(); TestRunListener trl; @@ -68,8 +65,8 @@ } } - public void endTestRun(){ - TestRunEvent tre = new TestRunEvent("End Test Run"); + public void endTestRun(Calendar endTime){ + TestRunEvent tre = new TestRunEvent(endTime); synchronized(testRunListeners){ Iterator it = testRunListeners.iterator(); TestRunListener trl; Modified: trunk/jameleon-core/src/java/net/sf/jameleon/reporting/HtmlResultsReporter.java =================================================================== --- trunk/jameleon-core/src/java/net/sf/jameleon/reporting/HtmlResultsReporter.java 2007-06-06 15:30:35 UTC (rev 1566) +++ trunk/jameleon-core/src/java/net/sf/jameleon/reporting/HtmlResultsReporter.java 2007-06-06 15:48:18 UTC (rev 1567) @@ -181,6 +181,10 @@ this.testResultsFooterTemplate = testResultsFooterTemplate; } + public Calendar getStartTime(){ + return startTime; + } + public void setStartTime(Calendar startTime) { this.startTime = startTime; } @@ -220,12 +224,12 @@ } public void beginTestRun(TestRunEvent event) { - setStartTime(Calendar.getInstance()); + setStartTime((Calendar)event.getSource()); outputHeader(); } public void endTestRun(TestRunEvent event) { - outputFooter(Calendar.getInstance()); + outputFooter((Calendar)event.getSource()); resetStats(); } Modified: trunk/jameleon-core/tst/java/net/sf/jameleon/event/TestRunEventHandlerTest.java =================================================================== --- trunk/jameleon-core/tst/java/net/sf/jameleon/event/TestRunEventHandlerTest.java 2007-06-06 15:30:35 UTC (rev 1566) +++ trunk/jameleon-core/tst/java/net/sf/jameleon/event/TestRunEventHandlerTest.java 2007-06-06 15:48:18 UTC (rev 1567) @@ -24,6 +24,8 @@ import junit.framework.TestCase; import junit.framework.TestSuite; +import java.util.Calendar; + public class TestRunEventHandlerTest extends TestCase { private TestRunEventHandler eventHandler; @@ -74,17 +76,17 @@ mockListener.expect("beginTestRun", new AnyConstraintMatcher()); TestRunListener trl = (TestRunListener)mockListener.proxy(); eventHandler.addTestRunListener(trl); - eventHandler.beginTestRun(); + eventHandler.beginTestRun(Calendar.getInstance()); mockListener.verify(); } public void testEndTestRun(){ Mock mockListener = new Mock(TestRunListener.class); - mockListener.expect("endTestRun", new AnyConstraintMatcher()); + mockListener.expect("endTestRun", new AnyConstraintMatcher()); TestRunListener trl = (TestRunListener)mockListener.proxy(); eventHandler.addTestRunListener(trl); - eventHandler.endTestRun(); + eventHandler.endTestRun(Calendar.getInstance()); mockListener.verify(); } Modified: trunk/jameleon-core/tst/java/net/sf/jameleon/reporting/HtmlResultsReporterTest.java =================================================================== --- trunk/jameleon-core/tst/java/net/sf/jameleon/reporting/HtmlResultsReporterTest.java 2007-06-06 15:30:35 UTC (rev 1566) +++ trunk/jameleon-core/tst/java/net/sf/jameleon/reporting/HtmlResultsReporterTest.java 2007-06-06 15:48:18 UTC (rev 1567) @@ -78,7 +78,7 @@ config.setValue("organization", "sf"); config.setValue("testEnvironment", "foo"); Calendar startTime = Calendar.getInstance(); - reporter.beginTestRun(new TestRunEvent("begin test run")); + reporter.beginTestRun(new TestRunEvent(startTime)); validateHeader(startTime); } @@ -88,7 +88,7 @@ Calendar startTime = Calendar.getInstance(); Calendar endTime = Calendar.getInstance(); reporter.setStartTime(startTime); - reporter.endTestRun(new TestRunEvent("end test run")); + reporter.endTestRun(new TestRunEvent(endTime)); validateFooter("0h 0m 0"); assertEquals("# passed", 0, reporter.getNumPassed()); assertEquals("# failed", 0, reporter.getNumFailed()); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <en...@us...> - 2007-06-06 21:14:49
|
Revision: 1569 http://svn.sourceforge.net/jameleon/?rev=1569&view=rev Author: engrean Date: 2007-06-06 14:14:44 -0700 (Wed, 06 Jun 2007) Log Message: ----------- The test case result docs are now generated in the appropriate timestamped directory. Modified Paths: -------------- trunk/jameleon-core/res/testCaseDocs.js trunk/jameleon-core/src/java/net/sf/jameleon/TestCaseTag.java trunk/jameleon-core/src/java/net/sf/jameleon/plugin/junit/ExecuteJameleonScriptTag.java trunk/jameleon-core/src/java/net/sf/jameleon/reporting/HtmlResultsReporter.java trunk/jameleon-core/tst/xml/acceptance/fineGrainedTests.xml Modified: trunk/jameleon-core/res/testCaseDocs.js =================================================================== --- trunk/jameleon-core/res/testCaseDocs.js 2007-06-06 17:59:15 UTC (rev 1568) +++ trunk/jameleon-core/res/testCaseDocs.js 2007-06-06 21:14:44 UTC (rev 1569) @@ -1,7 +1,7 @@ var openImg = new Image(); -openImg.src = "../../res/icons/minus.gif"; +openImg.src = "../../../res/icons/minus.gif"; var closedImg = new Image(); -closedImg.src = "../../res/icons/plus.gif"; +closedImg.src = "../../../res/icons/plus.gif"; function expandAll(nodeId) { swap(nodeId, "block", openImg); Modified: trunk/jameleon-core/src/java/net/sf/jameleon/TestCaseTag.java =================================================================== --- trunk/jameleon-core/src/java/net/sf/jameleon/TestCaseTag.java 2007-06-06 17:59:15 UTC (rev 1568) +++ trunk/jameleon-core/src/java/net/sf/jameleon/TestCaseTag.java 2007-06-06 21:14:44 UTC (rev 1569) @@ -185,8 +185,18 @@ } /** + * Gets the template used to generate the test case docs. + * This is searched for in the classpath. + * @return the template used to generate the test case docs. + */ + public String getGenTestCaseDocsTemplate(){ + return genTestCaseDocsTemplate; + } + + /** * Sets the template used to generate the test case docs. * This is searched for in the classpath. + * @param genTestCaseDocsTemplate the template to use when generating the docs * @jameleon.attribute */ public void setGenTestCaseDocsTemplate(String genTestCaseDocsTemplate){ @@ -263,10 +273,25 @@ * @return the directory where the results will be written to. */ public File getResultsDir(){ - return new File(baseDir, resultsDir.getPath() + File.separator + getName()); + return getResultsDir(true); } /** + * Gets the directory where the results will be written to. + * @param addTestName Whether to add the test name at the end of the results directory + * @return the directory where the results will be written to. + */ + public File getResultsDir(boolean addTestName){ + File dir; + if (addTestName){ + dir = new File(baseDir, resultsDir.getPath() + File.separator + getName()); + }else{ + dir = new File(baseDir, resultsDir.getPath()); + } + return dir; + } + + /** * @return the directory where the results will be stored. */ protected File getResultsDir(int rowCount){ @@ -514,10 +539,18 @@ * @return true if the test is actually supposed to be executed. The default is <code>true</code> */ public boolean isExecuteTestCase(){ - return this.executeTestCase; + return executeTestCase; } /** + * @return true if the test case results docs are to be generated. + * The default is <code>true</code> + */ + public boolean isGenTestCaseDocs(){ + return genTestCaseDocs; + } + + /** * Sets the test case to be executed or not. * @param executeTestCase - Set to <code>false</code> if the functionality of the test case is not to be executed. * The default is <code>true</code>. This would be set to false if only the test case docs are to be generated. @@ -702,6 +735,8 @@ /** * Set up the test environment. + * + * @throws JellyTagException if the tag is not in the correct state. */ public void setUp() throws JellyTagException{ initResults(); @@ -716,9 +751,6 @@ name = testCase.getName(); } results.setTestName(name); - if(getResultsFile() != null){ - results.setTestCaseDocsFile(getResultsFile().getPath()); - } loadJameleonConfig(); //Must load this after loading the values from jameleon.conf //so that it can be set from both places. @@ -788,7 +820,6 @@ results.setError(new JameleonScriptException(msg, this)); } if ( failOnCSVFileNotFound || (!failOnCSVFileNotFound && !failedOnDataDriver) ) { - log.info(results); if (results.failed()) { JellyTagException jte = null; if (results.getError() != null) { @@ -816,10 +847,10 @@ } } }finally{ - if (genTestCaseDocs) { - generateResults(); + eventHandler.endTestCase(this); + if ( failOnCSVFileNotFound || (!failOnCSVFileNotFound && !failedOnDataDriver) ) { + log.info(results); } - eventHandler.endTestCase(this); tearDown(); } } @@ -895,26 +926,6 @@ } /** - * generate a result file for the testcase - */ - protected void generateResults(){ - File htmlFile = getResultsFile(); - TemplateProcessor processor = new TemplateProcessor(genTestCaseDocsTemplate); - HashMap vars = new HashMap(); - if (bugTrackerUrl != null) { - vars.put("bugTrackerUrl", bugTrackerUrl ); - } - - vars.put("tc", getTestCase()); - vars.put("fileSeparator", File.separator); - vars.put("results", getResults()); - vars.put("printFileName", Boolean.TRUE); - vars.put("results_res_dir", RESULTS_RES_DIR); - - processor.transform(htmlFile, vars); - } - - /** * Gets the results file that represents the test case execution. * @return the results file that represents the test case execution. */ Modified: trunk/jameleon-core/src/java/net/sf/jameleon/plugin/junit/ExecuteJameleonScriptTag.java =================================================================== --- trunk/jameleon-core/src/java/net/sf/jameleon/plugin/junit/ExecuteJameleonScriptTag.java 2007-06-06 17:59:15 UTC (rev 1568) +++ trunk/jameleon-core/src/java/net/sf/jameleon/plugin/junit/ExecuteJameleonScriptTag.java 2007-06-06 21:14:44 UTC (rev 1569) @@ -252,6 +252,10 @@ } } + protected void setupEnvironment(){ + super.setupEnvironment(); + postcondition = true; + } public void setup(){ postcondition = true; Modified: trunk/jameleon-core/src/java/net/sf/jameleon/reporting/HtmlResultsReporter.java =================================================================== --- trunk/jameleon-core/src/java/net/sf/jameleon/reporting/HtmlResultsReporter.java 2007-06-06 17:59:15 UTC (rev 1568) +++ trunk/jameleon-core/src/java/net/sf/jameleon/reporting/HtmlResultsReporter.java 2007-06-06 21:14:44 UTC (rev 1569) @@ -93,7 +93,7 @@ public void outputRow(TestCaseTag tct) throws JameleonException{ Map params = new HashMap(); params.put("result", tct.getResults()); - params.put("resultsFile", tct.getResultsFile().getPath()); + params.put("resultsFile", tct.getResults().getTestCaseDocsFile()); params.put("results_res_dir", JameleonDefaultValues.RESULTS_RES_DIR); params.put("testCaseNum", testCaseNum+""); outputToTemplate(testResultRowTemplate, params); @@ -125,6 +125,28 @@ } } + protected void genTestCaseResultsDoc(TestCaseTag tct){ + if (tct.isGenTestCaseDocs()) { + File resultsDir = new File(getResultsDir(tct.getResultsDir(false), startTime), + tct.getResults().getTestName()); + File htmlFile = new File(resultsDir, tct.getResults().getTestName()+".html"); + TemplateProcessor processor = new TemplateProcessor(tct.getGenTestCaseDocsTemplate()); + HashMap vars = new HashMap(); + if (tct.getBugTrackerUrl() != null) { + vars.put("bugTrackerUrl", tct.getBugTrackerUrl()); + } + + vars.put("tc", tct.getTestCase()); + vars.put("fileSeparator", File.separator); + vars.put("results", tct.getResults()); + vars.put("printFileName", Boolean.TRUE); + vars.put("results_res_dir", "../"+JameleonDefaultValues.RESULTS_RES_DIR); + + processor.transform(htmlFile, vars); + tct.getResults().setTestCaseDocsFile(htmlFile.getPath()); + } + } + public void incrementPassed(int numPassed) { this.numPassed += numPassed; } @@ -212,6 +234,7 @@ public void endTestCase(TestCaseEvent event) { try{ TestCaseTag tct = (TestCaseTag)event.getSource(); + genTestCaseResultsDoc(tct); TestCaseResult result = tct.getResults(); int totalRun = result.getCountableResults().size(); int failed = result.getFailedCountableResults().size(); Modified: trunk/jameleon-core/tst/xml/acceptance/fineGrainedTests.xml =================================================================== --- trunk/jameleon-core/tst/xml/acceptance/fineGrainedTests.xml 2007-06-06 17:59:15 UTC (rev 1568) +++ trunk/jameleon-core/tst/xml/acceptance/fineGrainedTests.xml 2007-06-06 21:14:44 UTC (rev 1569) @@ -219,14 +219,14 @@ script="tst/xml/framework/jameleon_test_case_test.xml" checkOutcomePassed="true" checkHtmlRowPassed="true" - testCaseDocsFile="./jameleon_test_results/jameleon_test_case_test/jameleon_test_case_test.html"/> + testCaseDocsFile="/jameleon_test_case_test/jameleon_test_case_test.html"/> <execute-jameleon-script functionId="failing script" script="tst/xml/framework/jameleon_test_case_test_failure.xml" checkOutcomeFailed="true" checkHtmlRowFailed="true" - testCaseDocsFile="./jameleon_test_results/jameleon_test_case_test_failure/jameleon_test_case_test_failure.html"/> + testCaseDocsFile="/jameleon_test_case_test_failure/jameleon_test_case_test_failure.html"/> <execute-jameleon-script functionId="functional points aren't executed in a csv tag when a function fails inside a nested csv tag." This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <en...@us...> - 2007-06-07 02:04:28
|
Revision: 1579 http://svn.sourceforge.net/jameleon/?rev=1579&view=rev Author: engrean Date: 2007-06-06 19:04:22 -0700 (Wed, 06 Jun 2007) Log Message: ----------- Got the snapshots working again. Modified Paths: -------------- trunk/jameleon-core/res/templates/results/summary/TestResultRow.txt trunk/jameleon-core/src/java/net/sf/jameleon/TestCaseTag.java trunk/jameleon-core/src/java/net/sf/jameleon/reporting/HtmlResultsReporter.java trunk/jameleon-core/src/java/net/sf/jameleon/util/JameleonUtility.java trunk/jameleon-core/tst/java/net/sf/jameleon/SessionTagTest.java trunk/jameleon-core/tst/java/net/sf/jameleon/TestCaseTagTest.java trunk/jameleon-core/tst/java/net/sf/jameleon/data/AbstractDataDrivableTagTest.java trunk/jameleon-core/tst/java/net/sf/jameleon/reporting/HtmlResultsReporterTest.java Modified: trunk/jameleon-core/res/templates/results/summary/TestResultRow.txt =================================================================== --- trunk/jameleon-core/res/templates/results/summary/TestResultRow.txt 2007-06-06 22:44:33 UTC (rev 1578) +++ trunk/jameleon-core/res/templates/results/summary/TestResultRow.txt 2007-06-07 02:04:22 UTC (rev 1579) @@ -28,7 +28,7 @@ <td title="FunctionId of Point of Failure"><i>$failedResult.identifier</i></td> <td title="Error Message"> #if($failedResult.errorFile) -<a href="${failedResult.errorFile.path}" target="_new"> +<a href="../../${failedResult.errorFile.path}" target="_new"> #end <pre>$!{failedResult.htmlFormattedErrorMsg}</pre> #if($failedResult.errorFile.path) Modified: trunk/jameleon-core/src/java/net/sf/jameleon/TestCaseTag.java =================================================================== --- trunk/jameleon-core/src/java/net/sf/jameleon/TestCaseTag.java 2007-06-06 22:44:33 UTC (rev 1578) +++ trunk/jameleon-core/src/java/net/sf/jameleon/TestCaseTag.java 2007-06-07 02:04:22 UTC (rev 1579) @@ -129,6 +129,10 @@ */ protected File resultsDir = new File(baseDir, JameleonDefaultValues.RESULTS_DIR); /** + * The timestamped directory to store the results to. + */ + protected File timestampedResultsDir; + /** * The name of the Jameleon configuration file. (default is defined in {@link net.sf.jameleon.util.Configurator}) */ protected String jameleonConfigName = Configurator.DEFAULT_CONFIG_NAME; @@ -213,6 +217,23 @@ } /** + * Sets the timestamped results directory where the test case result documentation will be stored. + * @param timestampedResultsDir The timestamped results directory where the test case result + * documentation will be stored. + */ + public void setTimestampedResultsDir(File timestampedResultsDir){ + this.timestampedResultsDir = timestampedResultsDir; + } + + /** + * Gets the timestamped results directory where the test case result documentation will be stored. + * @return the timestamped results directory where the test case result documentation will be stored. + */ + public File getTimestampedResultsDir(){ + return timestampedResultsDir; + } + + /** * Sets the test case to record the state of the application at a defined <code>event</code> * @param event - An event at which the state of the application will be stored. Valid values are: * <ul> @@ -278,21 +299,28 @@ /** * Gets the directory where the results will be written to. - * @param addTestName Whether to add the test name at the end of the results directory + * @param includeName set to true to include the test case name in the results directory. * @return the directory where the results will be written to. */ - public File getResultsDir(boolean addTestName){ - File dir; - if (addTestName){ - dir = new File(baseDir, resultsDir.getPath() + File.separator + getName()); - }else{ - dir = new File(baseDir, resultsDir.getPath()); + public File getResultsDir(boolean includeName){ + File dir = getTimestampedResultsDir(); + if (dir == null){ + if (includeName){ + if (baseDir.equals(resultsDir.getParentFile())){ + dir = new File(resultsDir, getName()); + }else{ + dir = new File(baseDir, resultsDir.getPath() + File.separator + getName()); + } + }else{ + dir = resultsDir; + } } - return dir; + return dir; } /** * @return the directory where the results will be stored. + * @param rowCount The row number the test case is on */ protected File getResultsDir(int rowCount){ return new File(getResultsDir(),""+rowCount); @@ -764,7 +792,6 @@ } validateAttributes(); setAssertLevels(); - setStateStoreOptions(); if (organization != null && organization.trim().length() > 0) { context.setVariable("organization", organization); } @@ -797,6 +824,8 @@ init(); setUp(); eventHandler.beginTestCase(this); + //Call this after beginTestCase so that the timestamp directory can be set up + setStateStoreOptions(); try{ testForUnsupportedAttributesCaught(); broker.transferAttributes(context); @@ -913,7 +942,7 @@ } protected void setStateStoreOptions(){ - stateStorer.setStoreDir(new File(resultsDir, name + File.separator)); + stateStorer.setStoreDir(getTimestampedResultsDir()); } protected void executeBody(Runnable r){ Modified: trunk/jameleon-core/src/java/net/sf/jameleon/reporting/HtmlResultsReporter.java =================================================================== --- trunk/jameleon-core/src/java/net/sf/jameleon/reporting/HtmlResultsReporter.java 2007-06-06 22:44:33 UTC (rev 1578) +++ trunk/jameleon-core/src/java/net/sf/jameleon/reporting/HtmlResultsReporter.java 2007-06-07 02:04:22 UTC (rev 1579) @@ -72,6 +72,10 @@ return new File(path); } + protected File getResultsDirectoryForTestCase(TestCaseTag tct){ + return new File(getResultsDir(tct.getResultsDir(false), startTime), tct.getResults().getTestName()); + } + /** * Output the header to the writer * @throws JameleonException when the results could not be written to @@ -127,9 +131,7 @@ protected void genTestCaseResultsDoc(TestCaseTag tct){ if (tct.isGenTestCaseDocs()) { - File resultsDir = new File(getResultsDir(tct.getResultsDir(false), startTime), - tct.getResults().getTestName()); - File htmlFile = new File(resultsDir, tct.getResults().getTestName()+".html"); + File htmlFile = new File(tct.getTimestampedResultsDir(), tct.getResults().getTestName()+".html"); TemplateProcessor processor = new TemplateProcessor(tct.getGenTestCaseDocsTemplate()); HashMap vars = new HashMap(); if (tct.getBugTrackerUrl() != null) { @@ -228,7 +230,8 @@ /////////////////////////////////////////////////////////////////////////////////////////////// public void beginTestCase(TestCaseEvent event) { - //Do nothing + TestCaseTag tct = (TestCaseTag)event.getSource(); + tct.setTimestampedResultsDir(getResultsDirectoryForTestCase(tct)); } public void endTestCase(TestCaseEvent event) { Modified: trunk/jameleon-core/src/java/net/sf/jameleon/util/JameleonUtility.java =================================================================== --- trunk/jameleon-core/src/java/net/sf/jameleon/util/JameleonUtility.java 2007-06-06 22:44:33 UTC (rev 1578) +++ trunk/jameleon-core/src/java/net/sf/jameleon/util/JameleonUtility.java 2007-06-07 02:04:22 UTC (rev 1579) @@ -167,6 +167,7 @@ /** * Ensures that a directory structure is created. + * @param f The directory to create the structure. */ public static void createDirStructure(File f){ if (!f.exists() && !f.mkdir()) { Modified: trunk/jameleon-core/tst/java/net/sf/jameleon/SessionTagTest.java =================================================================== --- trunk/jameleon-core/tst/java/net/sf/jameleon/SessionTagTest.java 2007-06-06 22:44:33 UTC (rev 1578) +++ trunk/jameleon-core/tst/java/net/sf/jameleon/SessionTagTest.java 2007-06-07 02:04:22 UTC (rev 1579) @@ -93,7 +93,7 @@ mst.delaySession(); endTime = System.currentTimeMillis(); totalTime = endTime - startTime; - assertTrue("execution time didn't exceed 500 millis "+totalTime, totalTime >= 500); + assertTrue("execution time didn't exceed 500 millis "+totalTime, totalTime >= 480); mst.setAttribute("sessionDelay","500"); Modified: trunk/jameleon-core/tst/java/net/sf/jameleon/TestCaseTagTest.java =================================================================== --- trunk/jameleon-core/tst/java/net/sf/jameleon/TestCaseTagTest.java 2007-06-06 22:44:33 UTC (rev 1578) +++ trunk/jameleon-core/tst/java/net/sf/jameleon/TestCaseTagTest.java 2007-06-07 02:04:22 UTC (rev 1579) @@ -36,6 +36,7 @@ import net.sf.jameleon.util.Configurator; import net.sf.jameleon.util.JameleonUtility; import net.sf.jameleon.util.StateStorer; +import net.sf.jameleon.result.TestCaseResult; import org.apache.commons.jelly.JellyContext; import org.apache.commons.jelly.JellyTagException; @@ -108,7 +109,7 @@ assertNull("results file should be null", tct.getResultsFile()); tct.setGenTestCaseDocs(true); File f = tct.getResultsFile(); - assertTrue("results file path",f.getPath().endsWith("jameleon_test_results"+File.separator+"name"+File.separator+"name.html")); + assertTrue("results file path " + f.getPath(),f.getPath().endsWith("jameleon_test_results"+File.separator+"name"+File.separator+"name.html")); assertEquals("results file", f, tct.resultsFile); } @@ -123,7 +124,8 @@ vars.put("var1", "val1"); vars.put("var2", "val2"); vars.put("var3", "val3"); - mTct.addVariablesToRowData(vars); + mTct.setName("some name"); + mTct.addVariablesToRowData(vars); mTct.executeDrivableRow(2); assertEquals("rowNum after call", 2, mTct.invokeChildrenRowNum); assertNotNull("dd result after call", mTct.mockTagDDResult); Modified: trunk/jameleon-core/tst/java/net/sf/jameleon/data/AbstractDataDrivableTagTest.java =================================================================== --- trunk/jameleon-core/tst/java/net/sf/jameleon/data/AbstractDataDrivableTagTest.java 2007-06-06 22:44:33 UTC (rev 1578) +++ trunk/jameleon-core/tst/java/net/sf/jameleon/data/AbstractDataDrivableTagTest.java 2007-06-07 02:04:22 UTC (rev 1579) @@ -20,6 +20,7 @@ import java.util.HashMap; import java.util.Map; +import java.io.File; import org.apache.commons.jelly.JellyContext; import org.apache.commons.jelly.JellyTagException; @@ -35,6 +36,7 @@ import net.sf.jameleon.MockSessionTag; import net.sf.jameleon.TestCaseTag; +import net.sf.jameleon.util.StateStorer; import net.sf.jameleon.result.*; @@ -87,6 +89,7 @@ } public void testSetUpDataDrivable(){ + StateStorer.getInstance().setStoreDir(new File(".")); assertNull("test case tag", mockDdTag.tct); assertNull("previousStateDir", mockDdTag.previousStateDir); mockDdTag.setUpDataDrivable(); Modified: trunk/jameleon-core/tst/java/net/sf/jameleon/reporting/HtmlResultsReporterTest.java =================================================================== --- trunk/jameleon-core/tst/java/net/sf/jameleon/reporting/HtmlResultsReporterTest.java 2007-06-06 22:44:33 UTC (rev 1578) +++ trunk/jameleon-core/tst/java/net/sf/jameleon/reporting/HtmlResultsReporterTest.java 2007-06-07 02:04:22 UTC (rev 1579) @@ -63,6 +63,19 @@ HtmlResultsReporter.clearInstance(); } + public void testGetResultsDirectoryForTestCase(){ + TestCaseTag tct = new TestCaseTag(); + TestCaseResult tcr = new TestCaseResult(); + tcr.setTestName("some-name"); + tct.setResults(tcr); + Calendar c = getCalendar(2007, Calendar.MAY, 18, 10, 23, 32, 725); + reporter.setStartTime(c); + File dir = reporter.getResultsDirectoryForTestCase(tct); + assertEquals("test case res dir", JameleonUtility.fixFileSeparators( + "./jameleon_test_results/2007-May-18__10-23-32-725-AM/some-name"), + dir.getPath()); + } + public void testResetStats(){ reporter.incrementFailed(5); reporter.incrementPassed(23); @@ -95,6 +108,18 @@ assertEquals("test case #", 1, reporter.getTestCaseNum()); } + public void testBeginTestCase(){ + Calendar c = getCalendar(2007, Calendar.MAY, 18, 10, 23, 32, 725); + reporter.setStartTime(c); + TestCaseTag tct = initTestCaseTag(); + assertNull("timestamped results dir", tct.getTimestampedResultsDir()); + reporter.beginTestCase(new TestCaseEvent(tct)); + assertNotNull("timestamped results dir", tct.getTimestampedResultsDir()); + assertEquals("timestamped results dir", JameleonUtility.fixFileSeparators( + "./jameleon_test_results/2007-May-18__10-23-32-725-AM/some name"), + tct.getTimestampedResultsDir().getPath()); + } + public void testEndTestCase(){ TestCaseTag tct = initTestCaseTag(); TestCaseEvent tce = new TestCaseEvent(tct); @@ -104,7 +129,8 @@ cfr.setFailed(); cfr.setError(new RuntimeException("an error message")); cfr.setLineNumber(23); - + reporter.setStartTime(Calendar.getInstance()); + reporter.beginTestCase(tce); reporter.endTestCase(tce); assertEquals("# of tests passed", 3, reporter.getNumPassed()); assertEquals("# of tests failed", 1, reporter.getNumFailed()); @@ -113,14 +139,7 @@ } public void testGetResultsDirectory(){ - Calendar c = Calendar.getInstance(); - c.set(Calendar.YEAR, 2007); - c.set(Calendar.MONTH, Calendar.MAY); - c.set(Calendar.DAY_OF_MONTH, 18); - c.set(Calendar.HOUR_OF_DAY, 10); - c.set(Calendar.MINUTE, 23); - c.set(Calendar.SECOND, 32); - c.set(Calendar.MILLISECOND, 725); + Calendar c = getCalendar(2007, Calendar.MAY, 18, 10, 23, 32, 725); File f = HtmlResultsReporter.getResultsDir(BASE_DIR, c); assertEquals("resultsDir", JameleonUtility.fixFileSeparators( "jameleon_test_results/2007-May-18__10-23-32-725-AM"), f.getPath()); @@ -212,6 +231,18 @@ validateFooter("0h 0m 3"); } + private Calendar getCalendar(int year, int month, int day, int hour, int min, int sec, int milli){ + Calendar c = Calendar.getInstance(); + c.set(Calendar.YEAR, year); + c.set(Calendar.MONTH, month); + c.set(Calendar.DAY_OF_MONTH, day); + c.set(Calendar.HOUR_OF_DAY, hour); + c.set(Calendar.MINUTE, min); + c.set(Calendar.SECOND, sec); + c.set(Calendar.MILLISECOND, milli); + return c; + } + private void validateHeader(Calendar startTime){ StringWriter writer = (StringWriter)reporter.getWriter(); String header = writer.toString(); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <en...@us...> - 2007-06-08 22:44:58
|
Revision: 1585 http://svn.sourceforge.net/jameleon/?rev=1585&view=rev Author: engrean Date: 2007-06-08 15:44:54 -0700 (Fri, 08 Jun 2007) Log Message: ----------- execute-jameleon-script no longer uses log4j results. Modified Paths: -------------- trunk/jameleon-core/res/log4j.properties trunk/jameleon-core/res/templates/results/summary/TestResultRow.txt trunk/jameleon-core/src/java/net/sf/jameleon/TestCaseTag.java trunk/jameleon-core/src/java/net/sf/jameleon/plugin/junit/ExecuteJameleonScriptTag.java trunk/jameleon-core/src/java/net/sf/jameleon/result/JameleonTestResult.java Modified: trunk/jameleon-core/res/log4j.properties =================================================================== --- trunk/jameleon-core/res/log4j.properties 2007-06-08 14:24:55 UTC (rev 1584) +++ trunk/jameleon-core/res/log4j.properties 2007-06-08 22:44:54 UTC (rev 1585) @@ -1,10 +1,6 @@ log4j.rootLogger=INFO, STDOUT log4j.logger.net.sf.jameleon=DEBUG, J2, J1, SLO -log4j.appender.STDOUT=org.apache.log4j.ConsoleAppender -log4j.appender.STDOUT.Threshold=FATAL -log4j.appender.STDOUT.layout=org.apache.log4j.SimpleLayout - log4j.appender.J1=org.apache.log4j.FileAppender log4j.appender.J1.Threshold=INFO log4j.appender.J1.Append=true @@ -24,3 +20,7 @@ log4j.appender.J2.File=TestResults.xml log4j.appender.J2.layout=net.sf.jameleon.logging.JameleonXMLLayout log4j.appender.J2.layout.logErrorsOnly=true + +log4j.appender.STDOUT=org.apache.log4j.ConsoleAppender +log4j.appender.STDOUT.Threshold=FATAL +log4j.appender.STDOUT.layout=org.apache.log4j.SimpleLayout \ No newline at end of file Modified: trunk/jameleon-core/res/templates/results/summary/TestResultRow.txt =================================================================== --- trunk/jameleon-core/res/templates/results/summary/TestResultRow.txt 2007-06-08 14:24:55 UTC (rev 1584) +++ trunk/jameleon-core/res/templates/results/summary/TestResultRow.txt 2007-06-08 22:44:54 UTC (rev 1585) @@ -38,7 +38,6 @@ </tr> #end </table> -</td> #else #end Modified: trunk/jameleon-core/src/java/net/sf/jameleon/TestCaseTag.java =================================================================== --- trunk/jameleon-core/src/java/net/sf/jameleon/TestCaseTag.java 2007-06-08 14:24:55 UTC (rev 1584) +++ trunk/jameleon-core/src/java/net/sf/jameleon/TestCaseTag.java 2007-06-08 22:44:54 UTC (rev 1585) @@ -873,6 +873,8 @@ throw jte; } } + }else{ + setGenTestCaseDocs(false); } } }finally{ Modified: trunk/jameleon-core/src/java/net/sf/jameleon/plugin/junit/ExecuteJameleonScriptTag.java =================================================================== --- trunk/jameleon-core/src/java/net/sf/jameleon/plugin/junit/ExecuteJameleonScriptTag.java 2007-06-08 14:24:55 UTC (rev 1584) +++ trunk/jameleon-core/src/java/net/sf/jameleon/plugin/junit/ExecuteJameleonScriptTag.java 2007-06-08 22:44:54 UTC (rev 1585) @@ -19,35 +19,14 @@ package net.sf.jameleon.plugin.junit; -import java.io.File; -import java.io.StringReader; -import java.io.StringWriter; -import java.io.Writer; -import java.util.ArrayList; -import java.util.Iterator; -import java.util.List; - import net.sf.jameleon.ExecuteTestCase; import net.sf.jameleon.TestCaseTag; -import net.sf.jameleon.reporting.HtmlResultsReporter; import net.sf.jameleon.event.TestCaseEvent; import net.sf.jameleon.event.TestCaseEventHandler; import net.sf.jameleon.event.TestCaseListener; -import net.sf.jameleon.logging.JameleonHTMLLayout; -import net.sf.jameleon.logging.JameleonXMLLayout; -import net.sf.jameleon.result.CountableDataDrivableResultContainer; -import net.sf.jameleon.result.CountableFunctionResult; -import net.sf.jameleon.result.FunctionResultRecordable; -import net.sf.jameleon.result.FunctionResult; -import net.sf.jameleon.result.JameleonTestResult; -import net.sf.jameleon.result.TestCaseResult; - -import org.apache.log4j.Appender; -import org.apache.log4j.Layout; -import org.apache.log4j.Level; -import org.apache.log4j.LogManager; -import org.apache.log4j.Logger; -import org.apache.log4j.WriterAppender; +import net.sf.jameleon.reporting.HtmlResultsReporter; +import net.sf.jameleon.result.*; +import org.apache.log4j.*; import org.apache.log4j.spi.LoggerRepository; import org.apache.log4j.varia.DenyAllFilter; import org.dom4j.Document; @@ -55,6 +34,14 @@ import org.dom4j.Node; import org.dom4j.io.SAXReader; +import java.io.File; +import java.io.StringReader; +import java.io.StringWriter; +import java.io.Writer; +import java.util.ArrayList; +import java.util.Iterator; +import java.util.List; + /** * Used to acceptance test Jameleon tags. Executes a Jameleon script and checks various outputs. * @jameleon.function name="execute-jameleon-script" type="action" @@ -160,21 +147,14 @@ */ protected String testCaseName; - protected StringWriter testCaseResults; protected StringWriter htmlResults; - protected StringWriter xmlResults; protected Writer timestampedResults; protected ExecuteTestCase jmln; protected DenyAllFilter denyAll; protected Appender stdout; - protected Appender html; - protected Appender xml; - protected Appender htmlWriter; - protected Appender xmlWriter; protected Appender stdoutWriter; protected static SAXReader parser = new SAXReader(); protected Layout originalLayout; - protected Layout originalHtmlLayout; protected TestCaseResult result; protected TestCaseListener listener = new TestCaseListener(){ public void beginTestCase(TestCaseEvent event) { @@ -200,7 +180,7 @@ assertOutcomeFailed(); } if (noTestCaseResults) { - assertTrue("No information about this test case should be given.", xmlResults.toString().indexOf("<test-case") == -1); + assertNull("No information about this test case should be given.", result.getTestCaseDocsFile()); } if (numOfFailures != null) { assertNumOfFailures(numOfFailures.intValue()); @@ -263,36 +243,14 @@ jmln = new ExecuteTestCase(DEBUG); jmln.setScriptName2StdOut(false); timestampedResults = HtmlResultsReporter.getInstance().getWriter(); - HtmlResultsReporter.getInstance().setWriter(new StringWriter()); - testCaseResults = new StringWriter(); htmlResults = new StringWriter(); - xmlResults = new StringWriter(); + HtmlResultsReporter.getInstance().setWriter(htmlResults); LoggerRepository repos = LogManager.getLoggerRepository(); Logger base = repos.getLogger("net.sf.jameleon"); stdout = base.getAppender("SLO"); - originalLayout = stdout.getLayout(); - stdout.setLayout(new JameleonXMLLayout()); - Layout patternLayout = stdout.getLayout(); - stdoutWriter = new WriterAppender(patternLayout, testCaseResults); - base.addAppender(stdoutWriter); stdout.addFilter(denyAll); - - html = base.getAppender("J1"); - originalHtmlLayout = html.getLayout(); - html.setLayout(new JameleonHTMLLayout()); - Layout htmlLayout = html.getLayout(); - htmlWriter = new WriterAppender(htmlLayout, htmlResults); - base.addAppender(htmlWriter); - html.addFilter(denyAll); - - xml = base.getAppender("J2"); - xml.addFilter(denyAll); - Layout xmlLayout = xml.getLayout(); - xmlWriter = new WriterAppender(xmlLayout, xmlResults); - base.addAppender(xmlWriter); base.setLevel(Level.INFO); - TestCaseEventHandler.getInstance().addTestCaseListener(listener); } @@ -308,25 +266,7 @@ public void tearDown(){ LoggerRepository repos = LogManager.getLoggerRepository(); Logger base = repos.getLogger("net.sf.jameleon"); - base.removeAppender(xmlWriter); - xmlWriter.close(); - xmlWriter = null; - base.removeAppender(htmlWriter); - htmlWriter.close(); - htmlWriter = null; - base.removeAppender(stdoutWriter); - stdoutWriter.close(); - stdoutWriter = null; - - if (html != null) { - html.setLayout(originalHtmlLayout); - html.clearFilters(); - } - if (xml != null) { - xml.clearFilters(); - } if (stdout != null) { - stdout.setLayout(originalLayout); stdout.clearFilters(); } HtmlResultsReporter.getInstance().setWriter(timestampedResults); @@ -337,7 +277,6 @@ protected String executeScript(){ String errMsg = jmln.executeJellyScript(script); - htmlResults.write("</table></body></html>"); return errMsg; } @@ -383,19 +322,19 @@ assertTrue("Test Case doc file should end with <"+expected+"> was <"+getTestCaseDocFile()+">", getTestCaseDocFile().endsWith(expected)); } - protected void assertExecutionTimeLessThan(int lessThanTime){ - int execTime = getExecutionTime(); + protected void assertExecutionTimeLessThan(long lessThanTime){ + long execTime = getExecutionTime(); assertTrue("Execution Time <"+execTime+"> should be less than <"+lessThanTime+">", execTime < lessThanTime); } - protected void assertExecutionTimeGreaterThan(int greaterThanTime){ - int execTime = getExecutionTime(); + protected void assertExecutionTimeGreaterThan(long greaterThanTime){ + long execTime = getExecutionTime(); assertTrue("Execution Time <"+execTime+"> should be greater than <"+greaterThanTime+">", execTime > greaterThanTime); } protected String getOutcome(){ - return getValueFromElement("outcome", testCaseResults.toString()); + return result.getOutcome(); } protected List getFunctionsRun(){ @@ -418,22 +357,22 @@ return result.getFailedCountableResults().size(); } - protected int getExecutionTime(){ - return Integer.parseInt(getValueFromElement("execution-time-millis", testCaseResults.toString())); + protected long getExecutionTime(){ + return result.getExecutionTime(); } protected String getTestCaseDocFile(){ - return getValueFromElement("doc-file", testCaseResults.toString()); + return result.getTestCaseDocsFile(); } protected void assertHtmlRowFailed(){ assertFalse("test case expected to fail!", getOutcomeFromHtml()); - assertEquals("test case symbol should be an X!", "✗", getHtmlDisplayedOutcome()); + assertTrue("test case symbol should be an X!", getHtmlDisplayedOutcome().endsWith("/failed.gif\"/>")); } protected void assertHtmlRowPassed(){ assertTrue("test case expected to pass!", getOutcomeFromHtml()); - assertEquals("test case symbol should be a check!", "✓", getHtmlDisplayedOutcome()); + assertTrue("test case symbol should be an check!", getHtmlDisplayedOutcome().endsWith("/passed.gif\"/>")); } protected void assertHtmlTestCaseName(String expected){ @@ -478,12 +417,18 @@ protected String stripHtmlRow(){ String row = getRowFromHtml(); - return row.substring(row.indexOf("</td>")+6); + String subString = null; + try{ + subString = row.substring(row.indexOf("</td>")+6); + }catch(Exception e){ + System.err.println(row); + e.printStackTrace(); + } + return subString; } protected String getRowFromHtml(){ - String htmlS = htmlResults.toString(); - return htmlS.substring(htmlS.indexOf("</tr>")+7); + return htmlResults.toString(); } protected String getValueFromElement(String elementName, String message){ @@ -504,12 +449,8 @@ return getDocument(htmlResults); } - protected Document getXmlDocument(){ - return getDocument(testCaseResults); - } - protected Document getDocument(StringWriter results){ - StringReader sr = new StringReader(results.toString()); + StringReader sr = new StringReader(results.toString()); Document doc = null; try{ doc = parser.read(sr); Modified: trunk/jameleon-core/src/java/net/sf/jameleon/result/JameleonTestResult.java =================================================================== --- trunk/jameleon-core/src/java/net/sf/jameleon/result/JameleonTestResult.java 2007-06-08 14:24:55 UTC (rev 1584) +++ trunk/jameleon-core/src/java/net/sf/jameleon/result/JameleonTestResult.java 2007-06-08 22:44:54 UTC (rev 1585) @@ -160,7 +160,11 @@ * @return the stack trace stating was happened */ public String getHtmlFormattedErrorMsg(){ - return JameleonUtility.decodeTextToXML(getErrorMsg()); + String em = ""; + if (getErrorMsg() != null){ + em = JameleonUtility.decodeTextToXML(getErrorMsg()); + } + return em; } /** This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <en...@us...> - 2007-06-09 16:30:57
|
Revision: 1590 http://svn.sourceforge.net/jameleon/?rev=1590&view=rev Author: engrean Date: 2007-06-09 09:30:55 -0700 (Sat, 09 Jun 2007) Log Message: ----------- Beginning of replacing stdout results via log4j's Modified Paths: -------------- trunk/jameleon-core/res/log4j.properties trunk/jameleon-core/src/java/net/sf/jameleon/ExecuteTestCase.java trunk/jameleon-core/src/java/net/sf/jameleon/plugin/junit/ExecuteJameleonScriptTag.java trunk/jameleon-core/src/java/net/sf/jameleon/reporting/HtmlResultsReporter.java trunk/jameleon-core/src/java/net/sf/jameleon/ui/TestCasePane.java trunk/jameleon-core/src/java/net/sf/jameleon/util/JameleonUtility.java trunk/jameleon-core/tst/java/net/sf/jameleon/reporting/HtmlResultsReporterTest.java trunk/jameleon-core/tst/java/net/sf/jameleon/util/JameleonUtilityTest.java trunk/jameleon-core/tst/xml/acceptance/fineGrainedTests.xml Modified: trunk/jameleon-core/res/log4j.properties =================================================================== --- trunk/jameleon-core/res/log4j.properties 2007-06-09 13:32:51 UTC (rev 1589) +++ trunk/jameleon-core/res/log4j.properties 2007-06-09 16:30:55 UTC (rev 1590) @@ -1,5 +1,6 @@ log4j.rootLogger=INFO, STDOUT -log4j.logger.net.sf.jameleon=DEBUG, J2, J1, SLO +#log4j.logger.net.sf.jameleon=DEBUG, J2, J1, SLO +log4j.logger.net.sf.jameleon=DEBUG, J2, J1 log4j.appender.J1=org.apache.log4j.FileAppender log4j.appender.J1.Threshold=INFO @@ -10,9 +11,9 @@ log4j.appender.J1.layout.Title=Jameleon Test Case Results log4j.appender.J1.layout.logErrorsOnly=false -log4j.appender.SLO=org.apache.log4j.ConsoleAppender -log4j.appender.SLO.Threshold=INFO -log4j.appender.SLO.layout=net.sf.jameleon.logging.JameleonSimpleLayout +#log4j.appender.SLO=org.apache.log4j.ConsoleAppender +#log4j.appender.SLO.Threshold=INFO +#log4j.appender.SLO.layout=net.sf.jameleon.logging.JameleonSimpleLayout log4j.appender.J2=org.apache.log4j.FileAppender log4j.appender.J2.Append=false Modified: trunk/jameleon-core/src/java/net/sf/jameleon/ExecuteTestCase.java =================================================================== --- trunk/jameleon-core/src/java/net/sf/jameleon/ExecuteTestCase.java 2007-06-09 13:32:51 UTC (rev 1589) +++ trunk/jameleon-core/src/java/net/sf/jameleon/ExecuteTestCase.java 2007-06-09 16:30:55 UTC (rev 1590) @@ -60,10 +60,6 @@ /** * Print the name of the script being executed to stdout */ - protected boolean scriptName2StdOut = true; - /** - * Print the name of the script being executed to stdout - */ protected boolean printFooter = true; /** * The # of milliseconds to wait between each script execution @@ -162,10 +158,6 @@ } } - public void setScriptName2StdOut(boolean scriptName2StdOut){ - this.scriptName2StdOut = scriptName2StdOut; - } - public void setPrintFooter(boolean printFooter){ this.printFooter = printFooter; } @@ -340,9 +332,6 @@ //This seems to cause jelly to max out on memory if set. //context.setCacheTags(false); String fileName = file.getPath(); - if (scriptName2StdOut) { - System.out.println("\nExecuting: "+fileName); - } JellyContext scriptContext = null; try{ context.registerTagLibrary("jelly:jameleon", tagLibrary); Modified: trunk/jameleon-core/src/java/net/sf/jameleon/plugin/junit/ExecuteJameleonScriptTag.java =================================================================== --- trunk/jameleon-core/src/java/net/sf/jameleon/plugin/junit/ExecuteJameleonScriptTag.java 2007-06-09 13:32:51 UTC (rev 1589) +++ trunk/jameleon-core/src/java/net/sf/jameleon/plugin/junit/ExecuteJameleonScriptTag.java 2007-06-09 16:30:55 UTC (rev 1590) @@ -152,10 +152,7 @@ protected Writer timestampedResults; protected ExecuteTestCase jmln; protected DenyAllFilter denyAll; - protected Appender stdout; - protected Appender stdoutWriter; protected static SAXReader parser = new SAXReader(); - protected Layout originalLayout; protected TestCaseResult result; protected TestCaseListener listener = new TestCaseListener(){ public void beginTestCase(TestCaseEvent event) { @@ -241,16 +238,11 @@ postcondition = true; denyAll = new DenyAllFilter(); jmln = new ExecuteTestCase(DEBUG); - jmln.setScriptName2StdOut(false); timestampedResults = HtmlResultsReporter.getInstance().getWriter(); htmlResults = new StringWriter(); HtmlResultsReporter.getInstance().setWriter(htmlResults); LoggerRepository repos = LogManager.getLoggerRepository(); - Logger base = repos.getLogger("net.sf.jameleon"); - stdout = base.getAppender("SLO"); - stdout.addFilter(denyAll); - base.setLevel(Level.INFO); TestCaseEventHandler.getInstance().addTestCaseListener(listener); } @@ -264,9 +256,6 @@ } public void tearDown(){ - if (stdout != null) { - stdout.clearFilters(); - } HtmlResultsReporter.getInstance().setWriter(timestampedResults); jmln = null; TestCaseEventHandler.getInstance().removeTestCaseListener(listener); Modified: trunk/jameleon-core/src/java/net/sf/jameleon/reporting/HtmlResultsReporter.java =================================================================== --- trunk/jameleon-core/src/java/net/sf/jameleon/reporting/HtmlResultsReporter.java 2007-06-09 13:32:51 UTC (rev 1589) +++ trunk/jameleon-core/src/java/net/sf/jameleon/reporting/HtmlResultsReporter.java 2007-06-09 16:30:55 UTC (rev 1590) @@ -7,6 +7,7 @@ import net.sf.jameleon.event.TestRunListener; import net.sf.jameleon.exception.JameleonException; import net.sf.jameleon.result.TestCaseResult; +import net.sf.jameleon.result.JameleonTestResult; import net.sf.jameleon.util.Configurator; import net.sf.jameleon.util.JameleonDefaultValues; import net.sf.jameleon.util.JameleonUtility; @@ -16,9 +17,7 @@ import java.io.IOException; import java.io.Writer; import java.text.SimpleDateFormat; -import java.util.Calendar; -import java.util.HashMap; -import java.util.Map; +import java.util.*; /** * Writes the HTML results out to a file. This class writes both the main results @@ -26,7 +25,8 @@ */ public class HtmlResultsReporter implements TestCaseListener, TestRunListener { private Writer writer; - private static final SimpleDateFormat format = new SimpleDateFormat("yyyy-MMMMM-dd__hh-mm-ss-SS-aaa"); + private static final SimpleDateFormat format = new SimpleDateFormat("yyyy-MMMMM-dd_hh-mm-ss-SS-aaa"); + private static final SimpleDateFormat shortFormat = new SimpleDateFormat("dd-MM HH:mm:ss:SS"); public static final String DEFAULT_HEADER_TEMPLATE = "templates/results/summary/TestResultsHeader.txt"; public static final String DEFAULT_FOOTER_TEMPLATE = "templates/results/summary/TestResultsFooter.txt"; public static final String DEFAULT_RESULT_ROW_TEMPLATE = "templates/results/summary/TestResultRow.txt"; @@ -112,13 +112,16 @@ Map params = new HashMap(); params.put("totalPassed", new Integer(numPassed)); params.put("totalFailed", new Integer(numFailed)); - params.put("totalTime", JameleonUtility.executionTimeToString(endTime.getTimeInMillis() - - startTime.getTimeInMillis())); + params.put("totalTime", getExecutionTime(endTime)); String percentagePassed = TestCaseResult.getPercentagePassed(numPassed + numFailed, numFailed); params.put("percentPassed", percentagePassed); outputToTemplate(testResultsFooterTemplate, params); } + private String getExecutionTime(Calendar endTime){ + return JameleonUtility.executionTimeToString(endTime.getTimeInMillis() - startTime.getTimeInMillis()); + } + private void outputToTemplate(String template, Map params){ try { TemplateProcessor processor = new TemplateProcessor(template); @@ -244,11 +247,29 @@ incrementPassed(totalRun - failed); incrementFailed(failed); outputRow(tct); + printTestCaseResultsToStdOut(tct); }finally{ incrementTestCaseNum(1); } } + private void printTestCaseResultsToStdOut(TestCaseTag tct){ + System.out.print("\n"+JameleonUtility.getFileNameFromScriptPath(tct.getFileName()) + " : "); + TestCaseResult tcr = tct.getResults(); + if (tcr.failed()){ + List failedResults = tcr.getFailedResults(); + JameleonTestResult jtr; + for (Iterator it = failedResults.iterator(); it.hasNext();){ + jtr = (JameleonTestResult)it.next(); + System.out.println("\nFunctionId: " + jtr.getIdentifier()); + System.out.println("Line #: " + jtr.getLineNumber()); + System.out.println("Row #: " + jtr.getFailedRowNum()); + System.out.println("Error Message: " + jtr.getErrorMsg()); + } + } + System.out.println(tct.getResults().getOutcome()); + } + public void beginTestRun(TestRunEvent event) { setStartTime((Calendar)event.getSource()); outputHeader(); @@ -256,8 +277,13 @@ public void endTestRun(TestRunEvent event) { outputFooter((Calendar)event.getSource()); + System.out.println("______________________________________________________\n"); + System.out.println("Test Run: " + shortFormat.format(startTime.getTime())); + System.out.print("Tests run: " + (numPassed + numFailed)); + System.out.print(" Failed: " + numFailed); + System.out.println(" Time: " + getExecutionTime((Calendar)event.getSource())); + System.out.println("______________________________________________________"); resetStats(); - } public void resetStats() { Modified: trunk/jameleon-core/src/java/net/sf/jameleon/ui/TestCasePane.java =================================================================== --- trunk/jameleon-core/src/java/net/sf/jameleon/ui/TestCasePane.java 2007-06-09 13:32:51 UTC (rev 1589) +++ trunk/jameleon-core/src/java/net/sf/jameleon/ui/TestCasePane.java 2007-06-09 16:30:55 UTC (rev 1590) @@ -233,7 +233,6 @@ Thread t = new Thread() { public void run() { ExecuteTestCase executor = new ExecuteTestCase(); - executor.setScriptName2StdOut(false); executor.registerEventListeners(); for (int i = 0; i < selectedTcs.length && !stopExecution; i++) { Object obj = selectedTcs[i].getLastPathComponent(); Modified: trunk/jameleon-core/src/java/net/sf/jameleon/util/JameleonUtility.java =================================================================== --- trunk/jameleon-core/src/java/net/sf/jameleon/util/JameleonUtility.java 2007-06-09 13:32:51 UTC (rev 1589) +++ trunk/jameleon-core/src/java/net/sf/jameleon/util/JameleonUtility.java 2007-06-09 16:30:55 UTC (rev 1590) @@ -237,6 +237,18 @@ return fileName; } + public static String getFileNameFromScriptPath(String path){ + String fileName = path; + if (fileName != null){ + fileName = fixFileSeparators(fileName); + int index = fileName.lastIndexOf(File.separator); + if (index != -1) { + fileName = fileName.substring(index+1); + } + } + return fileName; + } + /** * @param path a path using forward slashes * @return the original path with all forward slashes replaced by unix slash Modified: trunk/jameleon-core/tst/java/net/sf/jameleon/reporting/HtmlResultsReporterTest.java =================================================================== --- trunk/jameleon-core/tst/java/net/sf/jameleon/reporting/HtmlResultsReporterTest.java 2007-06-09 13:32:51 UTC (rev 1589) +++ trunk/jameleon-core/tst/java/net/sf/jameleon/reporting/HtmlResultsReporterTest.java 2007-06-09 16:30:55 UTC (rev 1590) @@ -72,7 +72,7 @@ reporter.setStartTime(c); File dir = reporter.getResultsDirectoryForTestCase(tct); assertEquals("test case res dir", JameleonUtility.fixFileSeparators( - "./jameleon_test_results/2007-May-18__10-23-32-725-AM/some-name"), + "./jameleon_test_results/2007-May-18_10-23-32-725-AM/some-name"), dir.getPath()); } @@ -116,7 +116,7 @@ reporter.beginTestCase(new TestCaseEvent(tct)); assertNotNull("timestamped results dir", tct.getTimestampedResultsDir()); assertEquals("timestamped results dir", JameleonUtility.fixFileSeparators( - "./jameleon_test_results/2007-May-18__10-23-32-725-AM/some name"), + "./jameleon_test_results/2007-May-18_10-23-32-725-AM/some name"), tct.getTimestampedResultsDir().getPath()); } @@ -142,7 +142,7 @@ Calendar c = getCalendar(2007, Calendar.MAY, 18, 10, 23, 32, 725); File f = HtmlResultsReporter.getResultsDir(BASE_DIR, c); assertEquals("resultsDir", JameleonUtility.fixFileSeparators( - "jameleon_test_results/2007-May-18__10-23-32-725-AM"), f.getPath()); + "jameleon_test_results/2007-May-18_10-23-32-725-AM"), f.getPath()); } public void testGettersSetters(){ Modified: trunk/jameleon-core/tst/java/net/sf/jameleon/util/JameleonUtilityTest.java =================================================================== --- trunk/jameleon-core/tst/java/net/sf/jameleon/util/JameleonUtilityTest.java 2007-06-09 13:32:51 UTC (rev 1589) +++ trunk/jameleon-core/tst/java/net/sf/jameleon/util/JameleonUtilityTest.java 2007-06-09 16:30:55 UTC (rev 1590) @@ -234,6 +234,16 @@ assertEquals("somefile",name); } + public void testGetFileNameFromScriptPath(){ + String name = JameleonUtility.getFileNameFromScriptPath( + JameleonUtility.fixFileSeparators("file:/some/dir/tst/xml/httpunit/somefile.xml")); + assertEquals("somefile.xml",name); + name = JameleonUtility.getFileNameFromScriptPath("file:/C:/tst/xml/httpunit/some file.xml"); + assertEquals("some file.xml",name); + name = JameleonUtility.getFileNameFromScriptPath("file:\\C:\\tst\\xml\\httpunit\\somefile.xml"); + assertEquals("somefile.xml",name); + } + public void testTetFileNameFromPathDotBak(){ String name = JameleonUtility.getFileNameFromPath( JameleonUtility.fixFileSeparators("tst/xml/httpunit/somefile.xml.bak")); Modified: trunk/jameleon-core/tst/xml/acceptance/fineGrainedTests.xml =================================================================== --- trunk/jameleon-core/tst/xml/acceptance/fineGrainedTests.xml 2007-06-09 13:32:51 UTC (rev 1589) +++ trunk/jameleon-core/tst/xml/acceptance/fineGrainedTests.xml 2007-06-09 16:30:55 UTC (rev 1590) @@ -363,7 +363,7 @@ functionId="Nothing happens when the maxExecutionTime is not exceeded" script="tst/xml/framework/max_execution_time_not_exceeded.xml" executionTimeGreaterThan="0" - executionTimeLessThan="100" + executionTimeLessThan="150" checkOutcomePassed="true"/> <execute-jameleon-script This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <se...@us...> - 2007-06-11 03:21:49
|
Revision: 1593 http://svn.sourceforge.net/jameleon/?rev=1593&view=rev Author: selie Date: 2007-06-10 20:21:45 -0700 (Sun, 10 Jun 2007) Log Message: ----------- Add dtree generation code. Modified Paths: -------------- trunk/jameleon-core/src/java/net/sf/jameleon/TestCaseTag.java trunk/jameleon-core/src/java/net/sf/jameleon/reporting/HtmlResultsReporter.java Added Paths: ----------- trunk/jameleon-core/src/java/net/sf/jameleon/reporting/DTreeManager.java trunk/jameleon-core/src/java/net/sf/jameleon/reporting/DTreeNode.java trunk/jameleon-core/tst/java/net/sf/jameleon/reporting/DTreeNodeTest.java Modified: trunk/jameleon-core/src/java/net/sf/jameleon/TestCaseTag.java =================================================================== --- trunk/jameleon-core/src/java/net/sf/jameleon/TestCaseTag.java 2007-06-11 03:17:55 UTC (rev 1592) +++ trunk/jameleon-core/src/java/net/sf/jameleon/TestCaseTag.java 2007-06-11 03:21:45 UTC (rev 1593) @@ -80,7 +80,7 @@ protected boolean genTestCaseDocs = true; protected boolean executeTestCase = true; protected String genTestCaseDocsTemplate = GEN_TEST_CASE_DOCS_TEMPLATE_DEFAULT; - public static final String GEN_TEST_CASE_DOCS_TEMPLATE_DEFAULT = "TestCaseResultsTemplate.txt"; + public static final String GEN_TEST_CASE_DOCS_TEMPLATE_DEFAULT = "templates/results/TestCaseResultsTemplate.txt"; public static final String RESULTS_RES_DIR = JameleonDefaultValues.RESULTS_RES_DIR; protected TestCaseEventHandler eventHandler = TestCaseEventHandler.getInstance(); protected long startTime; Added: trunk/jameleon-core/src/java/net/sf/jameleon/reporting/DTreeManager.java =================================================================== --- trunk/jameleon-core/src/java/net/sf/jameleon/reporting/DTreeManager.java (rev 0) +++ trunk/jameleon-core/src/java/net/sf/jameleon/reporting/DTreeManager.java 2007-06-11 03:21:45 UTC (rev 1593) @@ -0,0 +1,365 @@ +package net.sf.jameleon.reporting; + +import net.sf.jameleon.TestCaseTag; +import net.sf.jameleon.bean.Attribute; +import net.sf.jameleon.util.JameleonDefaultValues; +import net.sf.jameleon.result.*; + +import java.io.File; +import java.io.BufferedWriter; +import java.io.FileWriter; +import java.io.IOException; + +/** + * Manages the creation of a dtree and all of its nodes + * TODO: refactor BufferedWriter usage to allow unit testing + */ +public class DTreeManager { + + public static final String TESTCASE_DTREE_DEFAULT_NAME = "testcase_dtree"; + public static final String TESTCASE_DTREE_JS_FILE_DEFAULT = "testcase_dtree.js"; + private String testcaseDTreeName = TESTCASE_DTREE_DEFAULT_NAME; + private String testcaseDTreeFile = TESTCASE_DTREE_JS_FILE_DEFAULT; + private DTreeNode node; + BufferedWriter out = null; + + + // --------------------------------- + // High-level dtree managing methods + // --------------------------------- + /** + * Add a countable data driven node in the dtree + * @param results the results to process + * @throws IOException if unable to write + */ + private void addDataDrivenNode(DataDrivableRowResult results) throws IOException { + addNode(results, Integer.toString(results.getRowNum())); + addNodeInfo(results); + + if (results.getRowData() != null && results.getRowData().keySet().size() > 0) { + // add data driven node data + node.setId(results.hashCode()+"data"); + node.setParentId(results.hashCode()); + node.setName("data: key = value"); + node.setIcon("../"+JameleonDefaultValues.RESULTS_RES_DIR+"/img/data.png"); + node.setIconOpen("../"+JameleonDefaultValues.RESULTS_RES_DIR+"/img/data.png"); + out.write(node.toDTreeAdd()); + node.reset(); + + // add leaf node data content + String[] keys = new String[0]; + keys = (String[]) results.getRowData().keySet().toArray(keys); + node.setParentId(results.hashCode()+"data"); + node.setOpen(true); + for (int i = 0; i < keys.length; i++) { + node.setId(results.hashCode()+"data"+i); + node.setName(keys[i]+" = "+results.getRowData().get(keys[i])); + out.write(node.toDTreeAdd()); + } + node.reset(); + } + + addNodeError(results); + } + + /** + * Add a not countable data driven node in the dtree + * @param results the results to process + * @throws IOException if unable to write + */ + private void addDataDrivenNotCountableNode(DataDrivableResultContainer results) throws IOException { + addNode(results); + + addNodeInfo(results); + + // regroup child datas in a single table for compact format + if (results.getChildrenResults().size() > 0) { + DataDrivableRowResult firstChildResult = (DataDrivableRowResult) results.getChildrenResults().get(0); + if ((firstChildResult.getRowData() != null) && (firstChildResult.getRowData().keySet().size() > 0)) { + // add data driven node data + node.setId(results.hashCode()+"data"); + node.setParentId(results.getParentResults().hashCode()); + node.setName("data: key = value"); + node.setIcon("../"+JameleonDefaultValues.RESULTS_RES_DIR+"/img/data.png"); + node.setIconOpen("../"+JameleonDefaultValues.RESULTS_RES_DIR+"/img/data.png"); + out.write(node.toDTreeAdd()); + node.reset(); + + // add leaf node data content + String[] keys = new String[0]; + keys = (String[]) firstChildResult.getRowData().keySet().toArray(keys); + node.setParentId(results.hashCode()+"data"); + node.setOpen(true); + for (int i = 0; i < keys.length; i++) { + node.setId(results.hashCode()+"data"+i); + node.setName("row "+i+": "+keys[i]+" = "+firstChildResult.getRowData().get(keys[i])); + out.write(node.toDTreeAdd()); + } + node.reset(); + + } + + } + + addNodeError(results); + } + + /** + * Add a parent node in the dtree + * @param results the results to process + * @throws IOException if unable to write + */ + private void addParentNode(JameleonTestResult results) throws IOException { + addNode(results); + } + + /** + * Add a leaf node in the dtree + * @param results the results to process + * @throws IOException if unable to write + */ + private void addLeafNode(JameleonTestResult results) throws IOException { + addNode(results); + + // add leaf node snapshot + if ( results.getErrorFile() != null ) { + node.setId(results.hashCode()+"error"); + node.setParentId(results.hashCode()); + node.setName("snapshot"); + node.setUrl("../../"+results.getErrorFile().getPath()); + node.setIcon("../"+JameleonDefaultValues.RESULTS_RES_DIR+"/img/snapshot.png"); + node.setIconOpen("../"+JameleonDefaultValues.RESULTS_RES_DIR+"/img/snapshot.png"); + node.setOpen(true); + out.write(node.toDTreeAdd()); + node.reset(); + } + + // add leaf node steps + node.setId(results.hashCode()+"steps"); + node.setParentId(results.hashCode()); + node.setName("steps"); + node.setIcon("../"+JameleonDefaultValues.RESULTS_RES_DIR+"/img/steps.png"); + node.setIconOpen("../"+JameleonDefaultValues.RESULTS_RES_DIR+"/img/steps.png"); + out.write(node.toDTreeAdd()); + node.reset(); + + for (int i = 0; i < results.getTag().getSteps().size(); i++) { + String step = (String) results.getTag().getSteps().get(i); + node.setId(results.hashCode()+"step"+i); + node.setParentId(results.hashCode()+"steps"); + node.setName(step); + node.setOpen(true); + out.write(node.toDTreeAdd()); + } + node.reset(); + + addNodeInfo(results); + + addNodeError(results); + } + + // --------------------------------- + // Low-level dtree managing methods + // --------------------------------- + /** + * Add a new node in the dtree + * @param results the results to process + * @param row the data driven row + * @throws IOException if unable to write + */ + private void addNode(JameleonTestResult results, String row) throws IOException { + node.setId(results.hashCode()); + node.setParentId(results.getParentResults().hashCode()); + if (row == null) { + node.setName(results.getIdentifier()); + } else { + node.setName(results.getIdentifier()+" - row "+row); + } + node.setIcon("../"+ JameleonDefaultValues.RESULTS_RES_DIR+"/img/"+results.getOutcome().toLowerCase()+".png"); + node.setIconOpen("../"+JameleonDefaultValues.RESULTS_RES_DIR+"/img/"+results.getOutcome().toLowerCase()+".png"); + node.setOpen(false); + out.write(node.toDTreeAdd()); + node.reset(); + } + + /** + * Add a new node under its parent results node + * @param results the results to process + * @throws IOException if unable to write + */ + private void addNode(JameleonTestResult results) throws IOException { + addNode(results, null); + } + + /** + * Add the node info under the current results node + * @param results the results to process + * @throws IOException if unable to write + */ + private void addNodeInfo(JameleonTestResult results) throws IOException { + // add leaf node info + node.setId(results.hashCode()+"info"); + node.setParentId(results.hashCode()); + node.setName("info"); + node.setIcon("../"+JameleonDefaultValues.RESULTS_RES_DIR+"/img/info.png"); + node.setIconOpen("../"+JameleonDefaultValues.RESULTS_RES_DIR+"/img/info.png"); + out.write(node.toDTreeAdd()); + node.reset(); + + // add leaf node info content + node.setId(results.hashCode()+"info"+"elementname"); + node.setParentId(results.hashCode()+"info"); + node.setName("XML element name: "+results.getElementName()); + out.write(node.toDTreeAdd()); + + node.setId(results.hashCode()+"info"+"executiontime"); + node.setName("time: "+results.getExecutionTimeToDisplay()); + out.write(node.toDTreeAdd()); + + // add leaf node info content attributes values section + node.reset(); + node.setId(results.hashCode()+"infoattributes"); + node.setParentId(results.hashCode()+"info"); + node.setName("attributes values"); + out.write(node.toDTreeAdd()); + node.reset(); + + Attribute[] attributes = new Attribute[0]; + attributes = (Attribute[]) results.getTag().getAttributes().values().toArray(attributes); + node.setParentId(results.hashCode()+"infoattributes"); + node.setOpen(true); + for (int i = 0; i < attributes.length; i++) { + if (attributes[i].isValueSet() && !attributes[i].getName().equals("functionId")) { + node.setId(results.hashCode()+"infoattributes"+i); + node.setName(attributes[i].getName()+" = "+attributes[i].getDisplayedValue()); + out.write(node.toDTreeAdd()); + } + } + node.reset(); + } + + /** + * Add the node error under the current results node + * @param results the results to process + * @throws IOException if unable to write + */ + private void addNodeError(JameleonTestResult results) throws IOException { + if (results.failed() && results.getError() != null) { + String errMsg = null; + if (results.getErrorMsg() != null) { + if (results instanceof FunctionResult) { + errMsg = results.getHtmlFormattedErrorMsg(); + } else { + errMsg = "<"+results.getTag().getDefaultTagName()+"/> - "+results.getHtmlFormattedErrorMsg(); + } + } else { + errMsg = "See stacktrace for details"; + } + + node.setId(results.hashCode()+"error"); + node.setParentId(results.hashCode()); + node.setName(errMsg); + node.setIcon("../"+JameleonDefaultValues.RESULTS_RES_DIR+"/img/stacktrace.png"); + node.setIconOpen("../"+JameleonDefaultValues.RESULTS_RES_DIR+"/img/stacktrace.png"); + out.write(node.toDTreeAdd()); + node.reset(); + + StackTraceElement[] stackTraceElements = results.getError().getStackTrace(); + node.setParentId(results.hashCode()+"error"); + node.setOpen(true); + for (int i = 0; i < stackTraceElements.length; i++) { + node.setId(results.hashCode()+"errorstacktrace"+i); + node.setName(stackTraceElements[i].toString()); + out.write(node.toDTreeAdd()); + } + node.reset(); + } + } + + /** + * Determine the type of a results and process it according to its type + * @param results the results to process + * @throws IOException if unable to write + */ + private void processResults(TestResultWithChildren results) throws IOException { + for (java.util.Iterator it = results.getChildrenResults().iterator(); it.hasNext();) { + JameleonTestResult childResults = (JameleonTestResult) it.next(); + + if (childResults.isDataDriven()) { + //Only display data-drivable tags that have children + int numOfChildren = results.getChildrenResults().size(); + if (numOfChildren > 0 || (numOfChildren == 0 && childResults.failed()) ) { + //Is it a container? + if (childResults instanceof RowResultContainer) { +// RowResultContainer rrcResults = (RowResultContainer) childResults; +// if (rrcResults.isCountable()) { +// processResults((TestResultWithChildren) childResults); +// } else { + addDataDrivenNotCountableNode((DataDrivableResultContainer) childResults); + processResults((TestResultWithChildren) childResults); +// } + } else { + //This means it isn't a container, but it's a countable row + if (childResults instanceof CountableDataDrivableRowResult) { + addDataDrivenNode((CountableDataDrivableRowResult) childResults); + processResults((TestResultWithChildren) childResults); + } else { +// since it's not a countable row result, we don't want to see info on the tag + processResults((TestResultWithChildren) childResults); + } + } + } + + } else if (childResults.isParent()) { + addParentNode(childResults); + processResults((TestResultWithChildren) childResults); + + } else { // leaf node + addLeafNode(childResults); + } + } + } + + /** + * Generate a dtree javascript file describing all the results of the testcase + * @param tct the TestCaseTag + */ + public void genTestCaseResultsTree(TestCaseTag tct){ + if (tct.isGenTestCaseDocs()) { + File dtreeJsFile = new File(tct.getTimestampedResultsDir(), testcaseDTreeFile); + node = new DTreeNode(testcaseDTreeName); + + TestCaseResult results = tct.getResults(); + + try { + out = new BufferedWriter(new FileWriter(dtreeJsFile)); + + out.write(testcaseDTreeName+" = new dTree('"+testcaseDTreeName+"');" + +System.getProperty("line.separator")); + + // add root node + node.setId(results.hashCode()); + node.setParentId(-1); + node.setName(results.getIdentifier()); + node.setIcon("../"+ JameleonDefaultValues.RESULTS_RES_DIR+"/img/"+results.getOutcome().toLowerCase()+".png"); + node.setIconOpen("../"+JameleonDefaultValues.RESULTS_RES_DIR+"/img/"+results.getOutcome().toLowerCase()+".png"); + node.setOpen(false); + out.write(node.toDTreeAdd()); + node.reset(); + + processResults(results); + out.close(); + } + catch(IOException ioe) { + ioe.printStackTrace(); + } finally { + if (out != null){ + try { + out.close(); + } catch (IOException e) {e.printStackTrace();} + } + } + } + } + +} Property changes on: trunk/jameleon-core/src/java/net/sf/jameleon/reporting/DTreeManager.java ___________________________________________________________________ Name: svn:mime-type + text/plain Name: svn:eol-style + native Added: trunk/jameleon-core/src/java/net/sf/jameleon/reporting/DTreeNode.java =================================================================== --- trunk/jameleon-core/src/java/net/sf/jameleon/reporting/DTreeNode.java (rev 0) +++ trunk/jameleon-core/src/java/net/sf/jameleon/reporting/DTreeNode.java 2007-06-11 03:21:45 UTC (rev 1593) @@ -0,0 +1,140 @@ +package net.sf.jameleon.reporting; + +import net.sf.jameleon.util.JameleonUtility; + +import java.io.File; + +/** + * Bean to help the dtree generation. + */ +public class DTreeNode { + private final String dtreeName; + private String id; + private String parentId; + private String name; + private String url; + private String title; + private String target; + private String icon; + private String iconOpen; + private boolean isOpen; + + + /** Default constructor + * @param dtreeName the name of the dtree in the JavaScript + */ + public DTreeNode(String dtreeName) { + this.dtreeName = dtreeName; + reset(); + } + + /** + * reset all dtree node fields to their default values + */ + public void reset() { + id = null; + parentId = null; + name = null; + url = ""; + title = ""; + target = ""; + icon = "noicon"; + iconOpen = "noicon"; + isOpen = false; + } + + /** + * Convert the bean in a javascript command to add the node to the dtree + * @return the javascript command to add the node to the dtree + */ + public String toDTreeAdd() { + if (id == null || parentId == null || name == null) { + throw new NullPointerException( + "dtree.add with a null id, parentId or name will results in an invalid dtree node"); + } + return dtreeName+".add('"+ + id+"','"+parentId+"','"+name.replaceAll("'", "\\\\'")+ + "','"+url+"','"+title+"','"+target+"','"+icon+"','"+ + iconOpen+"','"+isOpen+"');"+System.getProperty("line.separator"); + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public void setId(int id) { + this.id = Integer.toString(id); + } + + public String getParentId() { + return parentId; + } + + public void setParentId(String parentId) { + this.parentId = parentId; + } + + public void setParentId(int parentId) { + this.parentId = Integer.toString(parentId); + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public String getUrl() { + return url; + } + + public void setUrl(String url) { + this.url = url; + } + + public String getTitle() { + return title; + } + + public void setTitle(String title) { + this.title = title; + } + + public String getTarget() { + return target; + } + + public void setTarget(String target) { + this.target = target; + } + + public String getIcon() { + return icon; + } + + public void setIcon(String icon) { + this.icon = icon; + } + + public String getIconOpen() { + return iconOpen; + } + + public void setIconOpen(String iconOpen) { + this.iconOpen = iconOpen; + } + + public boolean isOpen() { + return isOpen; + } + + public void setOpen(boolean open) { + isOpen = open; + } +} Property changes on: trunk/jameleon-core/src/java/net/sf/jameleon/reporting/DTreeNode.java ___________________________________________________________________ Name: svn:mime-type + text/plain Name: svn:eol-style + native Modified: trunk/jameleon-core/src/java/net/sf/jameleon/reporting/HtmlResultsReporter.java =================================================================== --- trunk/jameleon-core/src/java/net/sf/jameleon/reporting/HtmlResultsReporter.java 2007-06-11 03:17:55 UTC (rev 1592) +++ trunk/jameleon-core/src/java/net/sf/jameleon/reporting/HtmlResultsReporter.java 2007-06-11 03:21:45 UTC (rev 1593) @@ -6,12 +6,12 @@ import net.sf.jameleon.event.TestRunEvent; import net.sf.jameleon.event.TestRunListener; import net.sf.jameleon.exception.JameleonException; +import net.sf.jameleon.result.JameleonTestResult; import net.sf.jameleon.result.TestCaseResult; -import net.sf.jameleon.result.JameleonTestResult; -import net.sf.jameleon.util.Configurator; import net.sf.jameleon.util.JameleonDefaultValues; import net.sf.jameleon.util.JameleonUtility; import net.sf.jameleon.util.TemplateProcessor; +import net.sf.jameleon.util.Configurator; import java.io.File; import java.io.IOException; @@ -39,11 +39,14 @@ private int numFailed; private Calendar startTime; private static HtmlResultsReporter reporter; + private static DTreeManager dtreeManager; + // Make this class a singleton private HtmlResultsReporter(){} public static HtmlResultsReporter getInstance(){ if (reporter == null){ + dtreeManager = new DTreeManager(); reporter = new HtmlResultsReporter(); } return reporter; @@ -241,6 +244,7 @@ try{ TestCaseTag tct = (TestCaseTag)event.getSource(); genTestCaseResultsDoc(tct); + dtreeManager.genTestCaseResultsTree(tct); TestCaseResult result = tct.getResults(); int totalRun = result.getCountableResults().size(); int failed = result.getFailedCountableResults().size(); Added: trunk/jameleon-core/tst/java/net/sf/jameleon/reporting/DTreeNodeTest.java =================================================================== --- trunk/jameleon-core/tst/java/net/sf/jameleon/reporting/DTreeNodeTest.java (rev 0) +++ trunk/jameleon-core/tst/java/net/sf/jameleon/reporting/DTreeNodeTest.java 2007-06-11 03:21:45 UTC (rev 1593) @@ -0,0 +1,142 @@ +package net.sf.jameleon.reporting; + +import junit.framework.*; +import net.sf.jameleon.reporting.DTreeNode; + +public class DTreeNodeTest extends TestCase { + DTreeNode dTreeNode; + + protected void setUp() throws Exception { + dTreeNode = new DTreeNode("mytree"); + } + + protected void tearDown() throws Exception { + dTreeNode = null; + } + + public void testDTreeNodeDefaultValues() { + assertEquals(null,dTreeNode.getId()); + assertEquals(null,dTreeNode.getParentId()); + assertEquals(null,dTreeNode.getName()); + assertEquals("",dTreeNode.getUrl()); + assertEquals("",dTreeNode.getTitle()); + assertEquals("",dTreeNode.getTarget()); + assertEquals("noicon",dTreeNode.getIcon()); + assertEquals("noicon",dTreeNode.getIconOpen()); + assertEquals(false,dTreeNode.isOpen()); + } + + public void testSettersAndGetters() { + dTreeNode.setId(1); + dTreeNode.setParentId(2); + dTreeNode.setName("a"); + dTreeNode.setUrl("b"); + dTreeNode.setTitle("c"); + dTreeNode.setTarget("d"); + dTreeNode.setIcon("e"); + dTreeNode.setIconOpen("f"); + dTreeNode.setOpen(true); + + assertEquals("1",dTreeNode.getId()); + assertEquals("2",dTreeNode.getParentId()); + assertEquals("a",dTreeNode.getName()); + assertEquals("b",dTreeNode.getUrl()); + assertEquals("c",dTreeNode.getTitle()); + assertEquals("d",dTreeNode.getTarget()); + assertEquals("e",dTreeNode.getIcon()); + assertEquals("f",dTreeNode.getIconOpen()); + assertEquals(true,dTreeNode.isOpen()); + + dTreeNode.setId(1+"x"); + dTreeNode.setParentId(2+"y"); + assertEquals("1x",dTreeNode.getId()); + assertEquals("2y",dTreeNode.getParentId()); + } + + public void testReset() { + dTreeNode.setId(1); + dTreeNode.setParentId(2); + dTreeNode.setName("a"); + dTreeNode.setUrl("b"); + dTreeNode.setTitle("c"); + dTreeNode.setTarget("d"); + dTreeNode.setIcon("e"); + dTreeNode.setIconOpen("f"); + dTreeNode.setOpen(true); + + dTreeNode.reset(); + assertEquals(null,dTreeNode.getId()); + assertEquals(null,dTreeNode.getParentId()); + assertEquals(null,dTreeNode.getName()); + assertEquals("",dTreeNode.getUrl()); + assertEquals("",dTreeNode.getTitle()); + assertEquals("",dTreeNode.getTarget()); + assertEquals("noicon",dTreeNode.getIcon()); + assertEquals("noicon",dTreeNode.getIconOpen()); + assertEquals(false,dTreeNode.isOpen()); + } + + public void testToDTreeAddException() { + dTreeNode.setId(null); + dTreeNode.setParentId(2); + dTreeNode.setName("name"); + try { + dTreeNode.toDTreeAdd(); + fail("exception should have occured because id is null"); + } catch(NullPointerException e) { + assertEquals("dtree.add with a null id, parentId or name will results in an invalid dtree node", + e.getMessage()); + } + + dTreeNode.setId(1); + dTreeNode.setParentId(null); + dTreeNode.setName("name"); + try { + dTreeNode.toDTreeAdd(); + fail("exception should have occured because parentid is null"); + } catch(NullPointerException e) { + assertEquals("dtree.add with a null id, parentId or name will results in an invalid dtree node", + e.getMessage()); + } + + dTreeNode.setId(1); + dTreeNode.setParentId(2); + dTreeNode.setName(null); + try { + dTreeNode.toDTreeAdd(); + fail("exception should have occured because name is null"); + } catch(NullPointerException e) { + assertEquals("dtree.add with a null id, parentId or name will results in an invalid dtree node", + e.getMessage()); + } + } + + public void testToDTreeAdd() { + dTreeNode.setId(1); + dTreeNode.setParentId(2); + dTreeNode.setName("a"); + dTreeNode.setUrl("b"); + dTreeNode.setTitle("c"); + dTreeNode.setTarget("d"); + dTreeNode.setIcon("e"); + dTreeNode.setIconOpen("f"); + dTreeNode.setOpen(true); + + assertEquals("mytree.add('1','2','a','b','c','d','e','f','true');"+System.getProperty("line.separator"),dTreeNode.toDTreeAdd()); + } + + public void testToDTreeAddEscapedName() { + dTreeNode.setId(1); + dTreeNode.setParentId(2); + dTreeNode.setName("my boss's paycheck"); + dTreeNode.setUrl("b"); + dTreeNode.setTitle("c"); + dTreeNode.setTarget("d"); + dTreeNode.setIcon("e"); + dTreeNode.setIconOpen("f"); + dTreeNode.setOpen(true); + + assertEquals("mytree.add('1','2','my boss\\'s paycheck','b','c','d','e','f','true');"+System.getProperty("line.separator"),dTreeNode.toDTreeAdd()); + } + +} \ No newline at end of file Property changes on: trunk/jameleon-core/tst/java/net/sf/jameleon/reporting/DTreeNodeTest.java ___________________________________________________________________ Name: svn:mime-type + text/plain Name: svn:eol-style + native This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <en...@us...> - 2007-06-11 13:58:18
|
Revision: 1594 http://svn.sourceforge.net/jameleon/?rev=1594&view=rev Author: engrean Date: 2007-06-11 06:58:16 -0700 (Mon, 11 Jun 2007) Log Message: ----------- Added copyrights Fixed an OS dependent path bug in the unit tests Renamed HtmlResultsReporter to ResultsReporter since the results reporter will be used to report to stdout, html and later on the database (or filesystem). Modified Paths: -------------- trunk/jameleon-core/src/java/net/sf/jameleon/ExecuteTestCase.java trunk/jameleon-core/src/java/net/sf/jameleon/plugin/junit/ExecuteJameleonScriptTag.java trunk/jameleon-core/src/java/net/sf/jameleon/reporting/DTreeManager.java trunk/jameleon-core/src/java/net/sf/jameleon/reporting/DTreeNode.java trunk/jameleon-core/src/java/net/sf/jameleon/util/JameleonUtility.java trunk/jameleon-core/tst/java/net/sf/jameleon/util/JameleonUtilityTest.java Added Paths: ----------- trunk/jameleon-core/src/java/net/sf/jameleon/reporting/ResultsReporter.java trunk/jameleon-core/tst/java/net/sf/jameleon/reporting/ResultsReporterTest.java Removed Paths: ------------- trunk/jameleon-core/src/java/net/sf/jameleon/reporting/HtmlResultsReporter.java trunk/jameleon-core/tst/java/net/sf/jameleon/reporting/HtmlResultsReporterTest.java Modified: trunk/jameleon-core/src/java/net/sf/jameleon/ExecuteTestCase.java =================================================================== --- trunk/jameleon-core/src/java/net/sf/jameleon/ExecuteTestCase.java 2007-06-11 03:21:45 UTC (rev 1593) +++ trunk/jameleon-core/src/java/net/sf/jameleon/ExecuteTestCase.java 2007-06-11 13:58:16 UTC (rev 1594) @@ -22,7 +22,7 @@ import net.sf.jameleon.event.TestCaseListener; import net.sf.jameleon.event.TestRunEventHandler; import net.sf.jameleon.exception.JameleonException; -import net.sf.jameleon.reporting.HtmlResultsReporter; +import net.sf.jameleon.reporting.ResultsReporter; import net.sf.jameleon.util.Configurator; import net.sf.jameleon.util.JameleonDefaultValues; import net.sf.jameleon.util.JameleonUtility; @@ -74,7 +74,7 @@ */ protected static final String US = "\n_______________________________________________________________\n"; protected final Logger log = Logger.getLogger(ExecuteTestCase.class.getName()); - private HtmlResultsReporter reporter; + private ResultsReporter reporter; protected final static TestCaseTagLibrary tagLibrary = new TestCaseTagLibrary(); /** @@ -99,7 +99,7 @@ registerEventListeners(true); } - public HtmlResultsReporter getResultsReporter(){ + public ResultsReporter getResultsReporter(){ return reporter; } @@ -109,7 +109,7 @@ * @param useCurrentThread if set to true, then use the current thread's classloader */ public void registerEventListeners(boolean useCurrentThread){ - //Add the HtmlResultsReporter as test case and test run listener + //Add the ResultsReporter as test case and test run listener beginTestRun(); String[] tcListeners = Configurator.getInstance().getValueAsArray(TEST_CASE_LISTENERS); TestCaseListener tcListener; @@ -179,11 +179,11 @@ try{ File baseDir = new File(new File(Configurator.getInstance().getValue("baseDir", ".")), JameleonDefaultValues.RESULTS_DIR); - File resultsFile = new File(HtmlResultsReporter.getResultsDir(baseDir, startTime), + File resultsFile = new File(ResultsReporter.getResultsDir(baseDir, startTime), "TestResults.html"); JameleonUtility.createDirStructure(resultsFile.getParentFile()); Writer writer = new FileWriter(resultsFile); - reporter = HtmlResultsReporter.getInstance(); + reporter = ResultsReporter.getInstance(); reporter.setWriter(writer); }catch(IOException ioe){ throw new JameleonException("Could not configure Jameleon to write out results file", ioe); Modified: trunk/jameleon-core/src/java/net/sf/jameleon/plugin/junit/ExecuteJameleonScriptTag.java =================================================================== --- trunk/jameleon-core/src/java/net/sf/jameleon/plugin/junit/ExecuteJameleonScriptTag.java 2007-06-11 03:21:45 UTC (rev 1593) +++ trunk/jameleon-core/src/java/net/sf/jameleon/plugin/junit/ExecuteJameleonScriptTag.java 2007-06-11 13:58:16 UTC (rev 1594) @@ -21,13 +21,13 @@ import net.sf.jameleon.ExecuteTestCase; import net.sf.jameleon.TestCaseTag; -import net.sf.jameleon.util.JameleonUtility; import net.sf.jameleon.event.TestCaseEvent; import net.sf.jameleon.event.TestCaseEventHandler; import net.sf.jameleon.event.TestCaseListener; -import net.sf.jameleon.reporting.HtmlResultsReporter; +import net.sf.jameleon.reporting.ResultsReporter; import net.sf.jameleon.result.*; -import org.apache.log4j.*; +import net.sf.jameleon.util.JameleonUtility; +import org.apache.log4j.LogManager; import org.apache.log4j.spi.LoggerRepository; import org.apache.log4j.varia.DenyAllFilter; import org.dom4j.Document; @@ -238,9 +238,9 @@ postcondition = true; denyAll = new DenyAllFilter(); jmln = new ExecuteTestCase(DEBUG); - timestampedResults = HtmlResultsReporter.getInstance().getWriter(); + timestampedResults = ResultsReporter.getInstance().getWriter(); htmlResults = new StringWriter(); - HtmlResultsReporter.getInstance().setWriter(htmlResults); + ResultsReporter.getInstance().setWriter(htmlResults); LoggerRepository repos = LogManager.getLoggerRepository(); TestCaseEventHandler.getInstance().addTestCaseListener(listener); @@ -256,7 +256,7 @@ } public void tearDown(){ - HtmlResultsReporter.getInstance().setWriter(timestampedResults); + ResultsReporter.getInstance().setWriter(timestampedResults); jmln = null; TestCaseEventHandler.getInstance().removeTestCaseListener(listener); reverseTestCaseCount(); @@ -272,7 +272,7 @@ int numRun = result.getCountableResults().size(); int numFailed = result.getFailedCountableResults().size(); int numPassed = numRun - numFailed; - HtmlResultsReporter reporter = HtmlResultsReporter.getInstance(); + ResultsReporter reporter = ResultsReporter.getInstance(); reporter.incrementFailed(-numFailed); reporter.incrementPassed(-numPassed); reporter.incrementTestCaseNum(-1); Modified: trunk/jameleon-core/src/java/net/sf/jameleon/reporting/DTreeManager.java =================================================================== --- trunk/jameleon-core/src/java/net/sf/jameleon/reporting/DTreeManager.java 2007-06-11 03:21:45 UTC (rev 1593) +++ trunk/jameleon-core/src/java/net/sf/jameleon/reporting/DTreeManager.java 2007-06-11 13:58:16 UTC (rev 1594) @@ -1,3 +1,22 @@ +/* + Jameleon - An automation testing tool.. + Copyright (C) 2007 Christian W. Hargraves (en...@ho...) and + Stephane Elie + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +*/ package net.sf.jameleon.reporting; import net.sf.jameleon.TestCaseTag; @@ -2,7 +21,7 @@ import net.sf.jameleon.bean.Attribute; +import net.sf.jameleon.result.*; import net.sf.jameleon.util.JameleonDefaultValues; -import net.sf.jameleon.result.*; +import java.io.BufferedWriter; import java.io.File; -import java.io.BufferedWriter; import java.io.FileWriter; Modified: trunk/jameleon-core/src/java/net/sf/jameleon/reporting/DTreeNode.java =================================================================== --- trunk/jameleon-core/src/java/net/sf/jameleon/reporting/DTreeNode.java 2007-06-11 03:21:45 UTC (rev 1593) +++ trunk/jameleon-core/src/java/net/sf/jameleon/reporting/DTreeNode.java 2007-06-11 13:58:16 UTC (rev 1594) @@ -1,9 +1,24 @@ -package net.sf.jameleon.reporting; +/* + Jameleon - An automation testing tool.. + Copyright (C) 2007 Christian W. Hargraves (en...@ho...) and + Stephane Elie -import net.sf.jameleon.util.JameleonUtility; + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. -import java.io.File; + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +*/ +package net.sf.jameleon.reporting; + /** * Bean to help the dtree generation. */ Deleted: trunk/jameleon-core/src/java/net/sf/jameleon/reporting/HtmlResultsReporter.java =================================================================== --- trunk/jameleon-core/src/java/net/sf/jameleon/reporting/HtmlResultsReporter.java 2007-06-11 03:21:45 UTC (rev 1593) +++ trunk/jameleon-core/src/java/net/sf/jameleon/reporting/HtmlResultsReporter.java 2007-06-11 13:58:16 UTC (rev 1594) @@ -1,298 +0,0 @@ -package net.sf.jameleon.reporting; - -import net.sf.jameleon.TestCaseTag; -import net.sf.jameleon.event.TestCaseEvent; -import net.sf.jameleon.event.TestCaseListener; -import net.sf.jameleon.event.TestRunEvent; -import net.sf.jameleon.event.TestRunListener; -import net.sf.jameleon.exception.JameleonException; -import net.sf.jameleon.result.JameleonTestResult; -import net.sf.jameleon.result.TestCaseResult; -import net.sf.jameleon.util.JameleonDefaultValues; -import net.sf.jameleon.util.JameleonUtility; -import net.sf.jameleon.util.TemplateProcessor; -import net.sf.jameleon.util.Configurator; - -import java.io.File; -import java.io.IOException; -import java.io.Writer; -import java.text.SimpleDateFormat; -import java.util.*; - -/** - * Writes the HTML results out to a file. This class writes both the main results - * as well as the individual testcase docs. - */ -public class HtmlResultsReporter implements TestCaseListener, TestRunListener { - private Writer writer; - private static final SimpleDateFormat format = new SimpleDateFormat("yyyy-MMMMM-dd_hh-mm-ss-SS-aaa"); - private static final SimpleDateFormat shortFormat = new SimpleDateFormat("dd-MM HH:mm:ss:SS"); - public static final String DEFAULT_HEADER_TEMPLATE = "templates/results/summary/TestResultsHeader.txt"; - public static final String DEFAULT_FOOTER_TEMPLATE = "templates/results/summary/TestResultsFooter.txt"; - public static final String DEFAULT_RESULT_ROW_TEMPLATE = "templates/results/summary/TestResultRow.txt"; - private String testResultsHeaderTemplate = DEFAULT_HEADER_TEMPLATE; - private String testResultsFooterTemplate = DEFAULT_FOOTER_TEMPLATE; - private String testResultRowTemplate = DEFAULT_RESULT_ROW_TEMPLATE; - private int testCaseNum = 1; - - private int numPassed; - private int numFailed; - private Calendar startTime; - private static HtmlResultsReporter reporter; - private static DTreeManager dtreeManager; - - // Make this class a singleton - private HtmlResultsReporter(){} - - public static HtmlResultsReporter getInstance(){ - if (reporter == null){ - dtreeManager = new DTreeManager(); - reporter = new HtmlResultsReporter(); - } - return reporter; - } - - public static void clearInstance(){ - if (reporter != null){ - try{ - reporter.getWriter().flush(); - reporter.getWriter().close(); - }catch(IOException ioe){ - ioe.printStackTrace(); - } - reporter = null; - } - } - - /** - * Gets the timestamp formatted results directory - * @param baseDir - The director to use as the base or just '.' - * @param c - The date and time - * @return a file representing the directory to store the results to - */ - public static File getResultsDir(File baseDir, Calendar c) { - String path = baseDir.getPath()+File.separator + format.format(c.getTime()); - return new File(path); - } - - protected File getResultsDirectoryForTestCase(TestCaseTag tct){ - return new File(getResultsDir(tct.getResultsDir(false), startTime), tct.getResults().getTestName()); - } - - /** - * Output the header to the writer - * @throws JameleonException when the results could not be written to - */ - protected void outputHeader() throws JameleonException{ - Configurator config = Configurator.getInstance(); - Map params = new HashMap(); - params.put("organization", config.getValue("organization")); - params.put("environment", config.getValue("testEnvironment")); - params.put("startTime", startTime.getTime()); - outputToTemplate(testResultsHeaderTemplate, params); - } - - /** - * Ouputs the result for a particular test case - * @param tct The test case result to report on - * @throws JameleonException when the row result can't be written - */ - public void outputRow(TestCaseTag tct) throws JameleonException{ - Map params = new HashMap(); - params.put("result", tct.getResults()); - params.put("resultsFile", tct.getResults().getTestCaseDocsFile()); - params.put("results_res_dir", JameleonDefaultValues.RESULTS_RES_DIR); - params.put("testCaseNum", testCaseNum+""); - outputToTemplate(testResultRowTemplate, params); - } - - /** - * Output the footer to the writer - * @param endTime the time the test run ended - * @throws JameleonException when the results could not be written to - */ - protected void outputFooter(Calendar endTime) throws JameleonException { - Map params = new HashMap(); - params.put("totalPassed", new Integer(numPassed)); - params.put("totalFailed", new Integer(numFailed)); - params.put("totalTime", getExecutionTime(endTime)); - String percentagePassed = TestCaseResult.getPercentagePassed(numPassed + numFailed, numFailed); - params.put("percentPassed", percentagePassed); - outputToTemplate(testResultsFooterTemplate, params); - } - - private String getExecutionTime(Calendar endTime){ - return JameleonUtility.executionTimeToString(endTime.getTimeInMillis() - startTime.getTimeInMillis()); - } - - private void outputToTemplate(String template, Map params){ - try { - TemplateProcessor processor = new TemplateProcessor(template); - writer.write(processor.transformToString(params)); - writer.flush(); - } catch (IOException e) { - throw new JameleonException("Could not write results to main HTML results file: "+e.getMessage()); - } - } - - protected void genTestCaseResultsDoc(TestCaseTag tct){ - if (tct.isGenTestCaseDocs()) { - File htmlFile = new File(tct.getTimestampedResultsDir(), tct.getResults().getTestName()+".html"); - TemplateProcessor processor = new TemplateProcessor(tct.getGenTestCaseDocsTemplate()); - HashMap vars = new HashMap(); - if (tct.getBugTrackerUrl() != null) { - vars.put("bugTrackerUrl", tct.getBugTrackerUrl()); - } - - vars.put("tc", tct.getTestCase()); - vars.put("fileSeparator", File.separator); - vars.put("results", tct.getResults()); - vars.put("printFileName", Boolean.TRUE); - vars.put("results_res_dir", "../"+JameleonDefaultValues.RESULTS_RES_DIR); - - processor.transform(htmlFile, vars); - tct.getResults().setTestCaseDocsFile(htmlFile.getPath()); - } - } - - public void incrementPassed(int numPassed) { - this.numPassed += numPassed; - } - - public void incrementFailed(int numFailed) { - this.numFailed += numFailed; - } - - public void incrementTestCaseNum(int num) { - testCaseNum += num; - } - - /////////////////////////////////////////////////////////////////////////////////////////////// - //// SETTERS & GETTERS //// - /////////////////////////////////////////////////////////////////////////////////////////////// - - public void setWriter(Writer writer) { - this.writer = writer; - } - - public Writer getWriter() { - return writer; - } - - public int getNumPassed() { - return numPassed; - } - - public int getNumFailed() { - return numFailed; - } - - /** - * Gets the template for the overall results header file - * @return the template for the overall results header file - */ - public String getTestResultsHeaderTemplate() { - return testResultsHeaderTemplate; - } - - /** - * Sets the template for the overall results header file - * @param testResultsHeaderTemplate the template to use for the header of the overall results - */ - public void setTestResultsHeaderTemplate(String testResultsHeaderTemplate) { - this.testResultsHeaderTemplate = testResultsHeaderTemplate; - } - - public String getTestResultsFooterTemplate() { - return testResultsFooterTemplate; - } - - public void setTestResultsFooterTemplate(String testResultsFooterTemplate) { - this.testResultsFooterTemplate = testResultsFooterTemplate; - } - - public Calendar getStartTime(){ - return startTime; - } - - public void setStartTime(Calendar startTime) { - this.startTime = startTime; - } - - public void setTestResultRowTemplate(String testResultRowTemplate) { - this.testResultRowTemplate = testResultRowTemplate; - } - - public String getTestResultRowTemplate() { - return testResultRowTemplate; - } - - public int getTestCaseNum() { - return testCaseNum; - } - - /////////////////////////////////////////////////////////////////////////////////////////////// - //// TestCaseListner methods //// - /////////////////////////////////////////////////////////////////////////////////////////////// - - public void beginTestCase(TestCaseEvent event) { - TestCaseTag tct = (TestCaseTag)event.getSource(); - tct.setTimestampedResultsDir(getResultsDirectoryForTestCase(tct)); - } - - public void endTestCase(TestCaseEvent event) { - try{ - TestCaseTag tct = (TestCaseTag)event.getSource(); - genTestCaseResultsDoc(tct); - dtreeManager.genTestCaseResultsTree(tct); - TestCaseResult result = tct.getResults(); - int totalRun = result.getCountableResults().size(); - int failed = result.getFailedCountableResults().size(); - incrementPassed(totalRun - failed); - incrementFailed(failed); - outputRow(tct); - printTestCaseResultsToStdOut(tct); - }finally{ - incrementTestCaseNum(1); - } - } - - private void printTestCaseResultsToStdOut(TestCaseTag tct){ - System.out.print("\n"+JameleonUtility.getFileNameFromScriptPath(tct.getFileName()) + " : "); - TestCaseResult tcr = tct.getResults(); - if (tcr.failed()){ - List failedResults = tcr.getFailedResults(); - JameleonTestResult jtr; - for (Iterator it = failedResults.iterator(); it.hasNext();){ - jtr = (JameleonTestResult)it.next(); - System.out.println("\nFunctionId: " + jtr.getIdentifier()); - System.out.println("Line #: " + jtr.getLineNumber()); - System.out.println("Row #: " + jtr.getFailedRowNum()); - System.out.println("Error Message: " + jtr.getErrorMsg()); - } - } - System.out.println(tct.getResults().getOutcome()); - } - - public void beginTestRun(TestRunEvent event) { - setStartTime((Calendar)event.getSource()); - outputHeader(); - } - - public void endTestRun(TestRunEvent event) { - outputFooter((Calendar)event.getSource()); - System.out.println("______________________________________________________\n"); - System.out.println("Test Run: " + shortFormat.format(startTime.getTime())); - System.out.print("Tests run: " + (numPassed + numFailed)); - System.out.print(" Failed: " + numFailed); - System.out.println(" Time: " + getExecutionTime((Calendar)event.getSource())); - System.out.println("______________________________________________________"); - resetStats(); - } - - public void resetStats() { - numFailed = 0; - numPassed = 0; - testCaseNum = 1; - } -} Copied: trunk/jameleon-core/src/java/net/sf/jameleon/reporting/ResultsReporter.java (from rev 1593, trunk/jameleon-core/src/java/net/sf/jameleon/reporting/HtmlResultsReporter.java) =================================================================== --- trunk/jameleon-core/src/java/net/sf/jameleon/reporting/ResultsReporter.java (rev 0) +++ trunk/jameleon-core/src/java/net/sf/jameleon/reporting/ResultsReporter.java 2007-06-11 13:58:16 UTC (rev 1594) @@ -0,0 +1,316 @@ +/* + Jameleon - An automation testing tool.. + Copyright (C) 2007 Christian W. Hargraves (en...@ho...) + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +*/ +package net.sf.jameleon.reporting; + +import net.sf.jameleon.TestCaseTag; +import net.sf.jameleon.event.TestCaseEvent; +import net.sf.jameleon.event.TestCaseListener; +import net.sf.jameleon.event.TestRunEvent; +import net.sf.jameleon.event.TestRunListener; +import net.sf.jameleon.exception.JameleonException; +import net.sf.jameleon.result.JameleonTestResult; +import net.sf.jameleon.result.TestCaseResult; +import net.sf.jameleon.util.Configurator; +import net.sf.jameleon.util.JameleonDefaultValues; +import net.sf.jameleon.util.JameleonUtility; +import net.sf.jameleon.util.TemplateProcessor; + +import java.io.File; +import java.io.IOException; +import java.io.Writer; +import java.text.SimpleDateFormat; +import java.util.*; + +/** + * Writes the HTML results out to a file. This class writes both the main results + * as well as the individual testcase docs. + */ +public class ResultsReporter implements TestCaseListener, TestRunListener { + private Writer writer; + private static final SimpleDateFormat format = new SimpleDateFormat("yyyy-MMMMM-dd_hh-mm-ss-SS-aaa"); + private static final SimpleDateFormat shortFormat = new SimpleDateFormat("dd-MM HH:mm:ss:SS"); + public static final String DEFAULT_HEADER_TEMPLATE = "templates/results/summary/TestResultsHeader.txt"; + public static final String DEFAULT_FOOTER_TEMPLATE = "templates/results/summary/TestResultsFooter.txt"; + public static final String DEFAULT_RESULT_ROW_TEMPLATE = "templates/results/summary/TestResultRow.txt"; + private String testResultsHeaderTemplate = DEFAULT_HEADER_TEMPLATE; + private String testResultsFooterTemplate = DEFAULT_FOOTER_TEMPLATE; + private String testResultRowTemplate = DEFAULT_RESULT_ROW_TEMPLATE; + private int testCaseNum = 1; + + private int numPassed; + private int numFailed; + private Calendar startTime; + private static ResultsReporter reporter; + private static DTreeManager dtreeManager; + + // Make this class a singleton + private ResultsReporter(){} + + public static ResultsReporter getInstance(){ + if (reporter == null){ + dtreeManager = new DTreeManager(); + reporter = new ResultsReporter(); + } + return reporter; + } + + public static void clearInstance(){ + if (reporter != null){ + try{ + reporter.getWriter().flush(); + reporter.getWriter().close(); + }catch(IOException ioe){ + ioe.printStackTrace(); + } + reporter = null; + } + } + + /** + * Gets the timestamp formatted results directory + * @param baseDir - The director to use as the base or just '.' + * @param c - The date and time + * @return a file representing the directory to store the results to + */ + public static File getResultsDir(File baseDir, Calendar c) { + String path = baseDir.getPath()+File.separator + format.format(c.getTime()); + return new File(path); + } + + protected File getResultsDirectoryForTestCase(TestCaseTag tct){ + return new File(getResultsDir(tct.getResultsDir(false), startTime), tct.getResults().getTestName()); + } + + /** + * Output the header to the writer + * @throws JameleonException when the results could not be written to + */ + protected void outputHeader() throws JameleonException{ + Configurator config = Configurator.getInstance(); + Map params = new HashMap(); + params.put("organization", config.getValue("organization")); + params.put("environment", config.getValue("testEnvironment")); + params.put("startTime", startTime.getTime()); + outputToTemplate(testResultsHeaderTemplate, params); + } + + /** + * Ouputs the result for a particular test case + * @param tct The test case result to report on + * @throws JameleonException when the row result can't be written + */ + public void outputRow(TestCaseTag tct) throws JameleonException{ + Map params = new HashMap(); + params.put("result", tct.getResults()); + params.put("resultsFile", tct.getResults().getTestCaseDocsFile()); + params.put("results_res_dir", JameleonDefaultValues.RESULTS_RES_DIR); + params.put("testCaseNum", testCaseNum+""); + outputToTemplate(testResultRowTemplate, params); + } + + /** + * Output the footer to the writer + * @param endTime the time the test run ended + * @throws JameleonException when the results could not be written to + */ + protected void outputFooter(Calendar endTime) throws JameleonException { + Map params = new HashMap(); + params.put("totalPassed", new Integer(numPassed)); + params.put("totalFailed", new Integer(numFailed)); + params.put("totalTime", getExecutionTime(endTime)); + String percentagePassed = TestCaseResult.getPercentagePassed(numPassed + numFailed, numFailed); + params.put("percentPassed", percentagePassed); + outputToTemplate(testResultsFooterTemplate, params); + } + + private String getExecutionTime(Calendar endTime){ + return JameleonUtility.executionTimeToString(endTime.getTimeInMillis() - startTime.getTimeInMillis()); + } + + private void outputToTemplate(String template, Map params){ + try { + TemplateProcessor processor = new TemplateProcessor(template); + writer.write(processor.transformToString(params)); + writer.flush(); + } catch (IOException e) { + throw new JameleonException("Could not write results to main HTML results file: "+e.getMessage()); + } + } + + protected void genTestCaseResultsDoc(TestCaseTag tct){ + if (tct.isGenTestCaseDocs()) { + File htmlFile = new File(tct.getTimestampedResultsDir(), tct.getResults().getTestName()+".html"); + TemplateProcessor processor = new TemplateProcessor(tct.getGenTestCaseDocsTemplate()); + HashMap vars = new HashMap(); + if (tct.getBugTrackerUrl() != null) { + vars.put("bugTrackerUrl", tct.getBugTrackerUrl()); + } + + vars.put("tc", tct.getTestCase()); + vars.put("fileSeparator", File.separator); + vars.put("results", tct.getResults()); + vars.put("printFileName", Boolean.TRUE); + vars.put("results_res_dir", "../"+JameleonDefaultValues.RESULTS_RES_DIR); + + processor.transform(htmlFile, vars); + tct.getResults().setTestCaseDocsFile(htmlFile.getPath()); + } + } + + public void incrementPassed(int numPassed) { + this.numPassed += numPassed; + } + + public void incrementFailed(int numFailed) { + this.numFailed += numFailed; + } + + public void incrementTestCaseNum(int num) { + testCaseNum += num; + } + + /////////////////////////////////////////////////////////////////////////////////////////////// + //// SETTERS & GETTERS //// + /////////////////////////////////////////////////////////////////////////////////////////////// + + public void setWriter(Writer writer) { + this.writer = writer; + } + + public Writer getWriter() { + return writer; + } + + public int getNumPassed() { + return numPassed; + } + + public int getNumFailed() { + return numFailed; + } + + /** + * Gets the template for the overall results header file + * @return the template for the overall results header file + */ + public String getTestResultsHeaderTemplate() { + return testResultsHeaderTemplate; + } + + /** + * Sets the template for the overall results header file + * @param testResultsHeaderTemplate the template to use for the header of the overall results + */ + public void setTestResultsHeaderTemplate(String testResultsHeaderTemplate) { + this.testResultsHeaderTemplate = testResultsHeaderTemplate; + } + + public String getTestResultsFooterTemplate() { + return testResultsFooterTemplate; + } + + public void setTestResultsFooterTemplate(String testResultsFooterTemplate) { + this.testResultsFooterTemplate = testResultsFooterTemplate; + } + + public Calendar getStartTime(){ + return startTime; + } + + public void setStartTime(Calendar startTime) { + this.startTime = startTime; + } + + public void setTestResultRowTemplate(String testResultRowTemplate) { + this.testResultRowTemplate = testResultRowTemplate; + } + + public String getTestResultRowTemplate() { + return testResultRowTemplate; + } + + public int getTestCaseNum() { + return testCaseNum; + } + + /////////////////////////////////////////////////////////////////////////////////////////////// + //// TestCaseListner methods //// + /////////////////////////////////////////////////////////////////////////////////////////////// + + public void beginTestCase(TestCaseEvent event) { + TestCaseTag tct = (TestCaseTag)event.getSource(); + tct.setTimestampedResultsDir(getResultsDirectoryForTestCase(tct)); + } + + public void endTestCase(TestCaseEvent event) { + try{ + TestCaseTag tct = (TestCaseTag)event.getSource(); + genTestCaseResultsDoc(tct); + dtreeManager.genTestCaseResultsTree(tct); + TestCaseResult result = tct.getResults(); + int totalRun = result.getCountableResults().size(); + int failed = result.getFailedCountableResults().size(); + incrementPassed(totalRun - failed); + incrementFailed(failed); + outputRow(tct); + printTestCaseResultsToStdOut(tct); + }finally{ + incrementTestCaseNum(1); + } + } + + private void printTestCaseResultsToStdOut(TestCaseTag tct){ + System.out.print("\n"+JameleonUtility.getFileNameFromScriptPath(tct.getFileName()) + " : "); + TestCaseResult tcr = tct.getResults(); + if (tcr.failed()){ + List failedResults = tcr.getFailedResults(); + JameleonTestResult jtr; + for (Iterator it = failedResults.iterator(); it.hasNext();){ + jtr = (JameleonTestResult)it.next(); + System.out.println("\nFunctionId: " + jtr.getIdentifier()); + System.out.println("Line #: " + jtr.getLineNumber()); + System.out.println("Row #: " + jtr.getFailedRowNum()); + System.out.println("Error Message: " + jtr.getErrorMsg()); + } + } + System.out.println(tct.getResults().getOutcome()); + } + + public void beginTestRun(TestRunEvent event) { + setStartTime((Calendar)event.getSource()); + outputHeader(); + } + + public void endTestRun(TestRunEvent event) { + outputFooter((Calendar)event.getSource()); + System.out.println("______________________________________________________\n"); + System.out.println("Test Run: " + shortFormat.format(startTime.getTime())); + System.out.print("Tests run: " + (numPassed + numFailed)); + System.out.print(" Failed: " + numFailed); + System.out.println(" Time: " + getExecutionTime((Calendar)event.getSource())); + System.out.println("______________________________________________________"); + resetStats(); + } + + public void resetStats() { + numFailed = 0; + numPassed = 0; + testCaseNum = 1; + } +} Property changes on: trunk/jameleon-core/src/java/net/sf/jameleon/reporting/ResultsReporter.java ___________________________________________________________________ Name: svn:mime-type + text/plain Name: svn:eol-style + native Modified: trunk/jameleon-core/src/java/net/sf/jameleon/util/JameleonUtility.java =================================================================== --- trunk/jameleon-core/src/java/net/sf/jameleon/util/JameleonUtility.java 2007-06-11 03:21:45 UTC (rev 1593) +++ trunk/jameleon-core/src/java/net/sf/jameleon/util/JameleonUtility.java 2007-06-11 13:58:16 UTC (rev 1594) @@ -18,20 +18,11 @@ */ package net.sf.jameleon.util; -import java.io.BufferedWriter; -import java.io.File; -import java.io.FileOutputStream; -import java.io.FileWriter; -import java.io.IOException; -import java.io.InputStream; -import java.io.OutputStreamWriter; -import java.io.PrintWriter; -import java.io.StringWriter; -import java.io.UnsupportedEncodingException; - import net.sf.jameleon.bean.FunctionalPoint; import net.sf.jameleon.exception.JameleonScriptException; +import java.io.*; + public class JameleonUtility { /** @@ -241,7 +232,7 @@ String fileName = path; if (fileName != null){ fileName = fixFileSeparators(fileName); - int index = fileName.lastIndexOf(File.separator); + int index = fileName.lastIndexOf("/"); if (index != -1) { fileName = fileName.substring(index+1); } @@ -264,7 +255,16 @@ */ public static String fixFileSeparators(String path, String fileSeparator) { String fixedPath = ""; - String[] pathParts = path.split("/"); + String separator = File.separator; + if (path.indexOf(separator) == -1){ + if (separator.equals("/")){ + //Need to escape the escape because it is getting passed as a regex to the split method + separator = "\\\\"; + }else{ + separator = "/"; + } + } + String[] pathParts = path.split(separator); for (int i = 0; i < pathParts.length; i++) { fixedPath += pathParts[i]; if (i != pathParts.length - 1) { Deleted: trunk/jameleon-core/tst/java/net/sf/jameleon/reporting/HtmlResultsReporterTest.java =================================================================== --- trunk/jameleon-core/tst/java/net/sf/jameleon/reporting/HtmlResultsReporterTest.java 2007-06-11 03:21:45 UTC (rev 1593) +++ trunk/jameleon-core/tst/java/net/sf/jameleon/reporting/HtmlResultsReporterTest.java 2007-06-11 13:58:16 UTC (rev 1594) @@ -1,279 +0,0 @@ -/* - Jameleon - An automation testing tool.. - Copyright (C) 2007 Christian W. Hargraves (en...@ho...) - - This library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - This library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with this library; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -*/ -package net.sf.jameleon.reporting; - -import junit.framework.Test; -import junit.framework.TestCase; -import junit.framework.TestSuite; -import net.sf.jameleon.TestCaseTag; -import net.sf.jameleon.bean.FunctionalPoint; -import net.sf.jameleon.event.TestCaseEvent; -import net.sf.jameleon.event.TestRunEvent; -import net.sf.jameleon.result.CountableFunctionResult; -import net.sf.jameleon.result.TestCaseResult; -import net.sf.jameleon.util.Configurator; -import net.sf.jameleon.util.JameleonUtility; - -import java.io.File; -import java.io.StringWriter; -import java.io.Writer; -import java.util.Calendar; - -public class HtmlResultsReporterTest extends TestCase { - - private HtmlResultsReporter reporter; - private static final File BASE_DIR = new File("jameleon_test_results"); - - public static void main(String args[]) { - junit.textui.TestRunner.run(suite()); - } - - public static Test suite() { - return new TestSuite(HtmlResultsReporterTest.class); - } - - public HtmlResultsReporterTest(String name) { - super(name); - } - - public void setUp() throws Exception{ - super.setUp(); - reporter = HtmlResultsReporter.getInstance(); - reporter.setWriter(new StringWriter()); - } - - public void tearDown() throws Exception { - super.tearDown(); - HtmlResultsReporter.clearInstance(); - } - - public void testGetResultsDirectoryForTestCase(){ - TestCaseTag tct = new TestCaseTag(); - TestCaseResult tcr = new TestCaseResult(); - tcr.setTestName("some-name"); - tct.setResults(tcr); - Calendar c = getCalendar(2007, Calendar.MAY, 18, 10, 23, 32, 725); - reporter.setStartTime(c); - File dir = reporter.getResultsDirectoryForTestCase(tct); - assertEquals("test case res dir", JameleonUtility.fixFileSeparators( - "./jameleon_test_results/2007-May-18_10-23-32-725-AM/some-name"), - dir.getPath()); - } - - public void testResetStats(){ - reporter.incrementFailed(5); - reporter.incrementPassed(23); - reporter.incrementTestCaseNum(55); - reporter.resetStats(); - assertEquals("# failed", 0, reporter.getNumFailed()); - assertEquals("# passed", 0, reporter.getNumPassed()); - assertEquals("test case #", 1, reporter.getTestCaseNum()); - } - - public void testBeginTestRun(){ - Configurator config = Configurator.getInstance(); - config.setValue("organization", "sf"); - config.setValue("testEnvironment", "foo"); - Calendar startTime = Calendar.getInstance(); - reporter.beginTestRun(new TestRunEvent(startTime)); - validateHeader(startTime); - } - - public void testEndTestRun(){ - reporter.incrementPassed(12); - reporter.incrementFailed(12); - Calendar startTime = Calendar.getInstance(); - Calendar endTime = Calendar.getInstance(); - reporter.setStartTime(startTime); - reporter.endTestRun(new TestRunEvent(endTime)); - validateFooter("0h 0m 0"); - assertEquals("# passed", 0, reporter.getNumPassed()); - assertEquals("# failed", 0, reporter.getNumFailed()); - assertEquals("test case #", 1, reporter.getTestCaseNum()); - } - - public void testBeginTestCase(){ - Calendar c = getCalendar(2007, Calendar.MAY, 18, 10, 23, 32, 725); - reporter.setStartTime(c); - TestCaseTag tct = initTestCaseTag(); - assertNull("timestamped results dir", tct.getTimestampedResultsDir()); - reporter.beginTestCase(new TestCaseEvent(tct)); - assertNotNull("timestamped results dir", tct.getTimestampedResultsDir()); - assertEquals("timestamped results dir", JameleonUtility.fixFileSeparators( - "./jameleon_test_results/2007-May-18_10-23-32-725-AM/some name"), - tct.getTimestampedResultsDir().getPath()); - } - - public void testEndTestCase(){ - TestCaseTag tct = initTestCaseTag(); - TestCaseEvent tce = new TestCaseEvent(tct); - FunctionalPoint fp2 = new FunctionalPoint(); - fp2.addTagName("failed-tag"); - CountableFunctionResult cfr = new CountableFunctionResult(fp2, tct.getResults()); - cfr.setFailed(); - cfr.setError(new RuntimeException("an error message")); - cfr.setLineNumber(23); - reporter.setStartTime(Calendar.getInstance()); - reporter.beginTestCase(tce); - reporter.endTestCase(tce); - assertEquals("# of tests passed", 3, reporter.getNumPassed()); - assertEquals("# of tests failed", 1, reporter.getNumFailed()); - assertEquals("test case #", 2, reporter.getTestCaseNum()); - - } - - public void testGetResultsDirectory(){ - Calendar c = getCalendar(2007, Calendar.MAY, 18, 10, 23, 32, 725); - File f = HtmlResultsReporter.getResultsDir(BASE_DIR, c); - assertEquals("resultsDir", JameleonUtility.fixFileSeparators( - "jameleon_test_results/2007-May-18_10-23-32-725-AM"), f.getPath()); - } - - public void testGettersSetters(){ - reporter = HtmlResultsReporter.getInstance(); - Writer writer = new StringWriter(); - reporter.setWriter(writer); - assertTrue("writer", writer == reporter.getWriter()); - assertEquals("Default results header", HtmlResultsReporter.DEFAULT_HEADER_TEMPLATE, reporter.getTestResultsHeaderTemplate()); - reporter.setTestResultsHeaderTemplate("foo"); - assertEquals("results header", "foo", reporter.getTestResultsHeaderTemplate()); - - assertEquals("Default results footer", HtmlResultsReporter.DEFAULT_FOOTER_TEMPLATE, reporter.getTestResultsFooterTemplate()); - reporter.setTestResultsFooterTemplate("foo"); - assertEquals("results footer", "foo", reporter.getTestResultsFooterTemplate()); - - assertEquals("Default result row", HtmlResultsReporter.DEFAULT_RESULT_ROW_TEMPLATE, reporter.getTestResultRowTemplate()); - reporter.setTestResultRowTemplate("foo"); - assertEquals("results result row", "foo", reporter.getTestResultRowTemplate()); - } - - public void testIncrementTestCaseNum(){ - assertEquals("initial test case #", 1, reporter.getTestCaseNum()); - reporter.incrementTestCaseNum(5); - assertEquals("test case #", 6, reporter.getTestCaseNum()); - } - - public void testIncrementPassed(){ - assertEquals("initial # passed", 0, reporter.getNumPassed()); - reporter.incrementPassed(5); - assertEquals("# passed", 5, reporter.getNumPassed()); - } - - public void testIncrementFailed(){ - assertEquals("initial # failed", 0, reporter.getNumFailed()); - reporter.incrementFailed(5); - assertEquals("# failed", 5, reporter.getNumFailed()); - } - - public void testOutputRow() throws Exception{ - TestCaseTag tct = initTestCaseTag(); - reporter.outputRow(tct); - - StringWriter writer = (StringWriter)reporter.getWriter(); - String row = writer.toString(); - assertTrue("The writer was populated with something", row.length() > 0); - assertTrue("The file should contain a passed td " + row, row.indexOf("<td class=\"pass\" title=\"Test passed\">") >= 0); - assertTrue("The file should contain a passed gif " + row, row.indexOf("passed.gif") >= 0); - assertFalse("The file should not contain a failed row info column", row.indexOf("Row Failed") > -1); - - reporter.setWriter(new StringWriter()); - FunctionalPoint fp2 = new FunctionalPoint(); - fp2.addTagName("failed-tag"); - CountableFunctionResult cfr = new CountableFunctionResult(fp2, tct.getResults()); - cfr.setFailed(); - cfr.setError(new RuntimeException("an error message")); - cfr.setLineNumber(23); - reporter.outputRow(tct); - writer = (StringWriter)reporter.getWriter(); - row = writer.toString(); - assertTrue("The writer was populated with something", row.length() > 0); - assertTrue("The file should contain a failed td " + row, row.indexOf("<td class=\"fail\" title=\"Test failed\">") >= 0); - assertTrue("The file should contain a failed gif " + row, row.indexOf("failed.gif") >= 0); - assertTrue("The file should contain a failed line # " + row, row.indexOf("<td title=\"Line Failed\">23</td>") >= 0); - assertTrue("The file should contain a failed tag " + row, row.indexOf("<td title=\"FunctionId of Point of Failure\"><i>failed-tag</i></td>") >= 0); - assertTrue("The file should contain a failed row info column " + row, row.indexOf("Row Failed") > -1); - } - - public void testOutputHeader() throws Exception{ - Configurator config = Configurator.getInstance(); - config.setValue("organization", "sf"); - config.setValue("testEnvironment", "foo"); - Calendar startTime = Calendar.getInstance(); - reporter.setStartTime(startTime); - reporter.outputHeader(); - validateHeader(startTime); - } - - public void testOutputFooter() throws Exception{ - reporter.incrementPassed(12); - reporter.incrementFailed(12); - Calendar startTime = Calendar.getInstance(); - Calendar endTime = Calendar.getInstance(); - endTime.set(Calendar.SECOND, startTime.get(Calendar.SECOND) + 3); - reporter.setStartTime(startTime); - reporter.outputFooter(endTime); - validateFooter("0h 0m 3"); - } - - private Calendar getCalendar(int year, int month, int day, int hour, int min, int sec, int milli){ - Calendar c = Calendar.getInstance(); - c.set(Calendar.YEAR, year); - c.set(Calendar.MONTH, month); - c.set(Calendar.DAY_OF_MONTH, day); - c.set(Calendar.HOUR_OF_DAY, hour); - c.set(Calendar.MINUTE, min); - c.set(Calendar.SECOND, sec); - c.set(Calendar.MILLISECOND, milli); - return c; - } - - private void validateHeader(Calendar startTime){ - StringWriter writer = (StringWriter)reporter.getWriter(); - String header = writer.toString(); - assertTrue("The writer was populated with something", header.length() > 0); - assertTrue("The writer should contain an org", header.indexOf("Start time: "+startTime.getTime()+"<br/>") > 0); - assertTrue("The file should contain an organization", header.indexOf("Organization: sf<br/>") >= 0); - assertTrue("The file should contain an environment", header.indexOf("Environment: foo<br/>") >= 0); - } - - private void validateFooter(String time){ - StringWriter writer = (StringWriter)reporter.getWriter(); - String results = writer.toString(); - assertTrue("The writer was populated with something", results.length() > 0); - assertTrue("execution time " + results, results.indexOf("<td id=\"totalTime\">"+time) >= 0); - assertTrue("total executed", results.indexOf("<td id=\"totalRun\">24") > 0); - assertTrue("total passed", results.indexOf("<td id=\"totalPassed\">12") > 0); - assertTrue("total failed", results.indexOf("<td id=\"totalFailed\">12") > 0); - assertTrue("percent passed", results.indexOf("<td id=\"percentPassed\">50%") > 0); - } - - private TestCaseTag initTestCaseTag(){ - FunctionalPoint fp = new FunctionalPoint(); - fp.addTagName("tc"); - TestCaseResult tcr = new TestCaseResult(fp); - tcr.setTestCaseDocsFile("some/dir/some_file.html"); - tcr.setTestName("some name"); - for (int i = 0; i < 3; i++){ - new CountableFunctionResult(fp, tcr); - } - TestCaseTag tct = new TestCaseTag(); - tct.setResults(tcr); - return tct; - } -} Copied: trunk/jameleon-core/tst/java/net/sf/jameleon/reporting/ResultsReporterTest.java (from rev 1593, trunk/jameleon-core/tst/java/net/sf/jameleon/reporting/HtmlResultsReporterTest.java) =================================================================== --- trunk/jameleon-core/tst/java/net/sf/jameleon/reporting/ResultsReporterTest.java (rev 0) +++ trunk/jameleon-core/tst/java/net/sf/jameleon/reporting/ResultsReporterTest.java 2007-06-11 13:58:16 UTC (rev 1594) @@ -0,0 +1,279 @@ +/* + Jameleon - An automation testing tool.. + Copyright (C) 2007 Christian W. Hargraves (en...@ho...) + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +*/ +package net.sf.jameleon.reporting; + +import junit.framework.Test; +import junit.framework.TestCase; +import junit.framework.TestSuite; +import net.sf.jameleon.TestCaseTag; +import net.sf.jameleon.bean.FunctionalPoint; +import net.sf.jameleon.event.TestCaseEvent; +import net.sf.jameleon.event.TestRunEvent; +import net.sf.jameleon.result.CountableFunctionResult; +import net.sf.jameleon.result.TestCaseResult; +import net.sf.jameleon.util.Configurator; +import net.sf.jameleon.util.JameleonUtility; + +import java.io.File; +import java.io.StringWriter; +import java.io.Writer; +import java.util.Calendar; + +public class ResultsReporterTest extends TestCase { + + private ResultsReporter reporter; + private static final File BASE_DIR = new File("jameleon_test_results"); + + public static void main(String args[]) { + junit.textui.TestRunner.run(suite()); + } + + public static Test suite() { + return new TestSuite(ResultsReporterTest.class); + } + + public ResultsReporterTest(String name) { + super(name); + } + + public void setUp() throws Exception{ + super.setUp(); + reporter = ResultsReporter.getInstance(); + reporter.setWriter(new StringWriter()); + } + + public void tearDown() throws Exception { + super.tearDown(); + ResultsReporter.clearInstance(); + } + + public void testGetResultsDirectoryForTestCase(){ + TestCaseTag tct = new TestCaseTag(); + TestCaseResult tcr = new TestCaseResult(); + tcr.setTestName("some-name"); + tct.setResults(tcr); + Calendar c = getCalendar(2007, Calendar.MAY, 18, 10, 23, 32, 725); + reporter.setStartTime(c); + File dir = reporter.getResultsDirectoryForTestCase(tct); + assertEquals("test case res dir", JameleonUtility.fixFileSeparators( + "./jameleon_test_results/2007-May-18_10-23-32-725-AM/some-name"), + dir.getPath()); + } + + public void testResetStats(){ + reporter.incrementFailed(5); + reporter.incrementPassed(23); + reporter.incrementTestCaseNum(55); + reporter.resetStats(); + assertEquals("# failed", 0, reporter.getNumFailed()); + assertEquals("# passed", 0, reporter.getNumPassed()); + assertEquals("test case #", 1, reporter.getTestCaseNum()); + } + + public void testBeginTestRun(){ + Configurator config = Configurator.getInstance(); + config.setValue("organization", "sf"); + config.setValue("testEnvironment", "foo"); + Calendar startTime = Calendar.getInstance(); + reporter.beginTestRun(new TestRunEvent(startTime)); + validateHeader(startTime); + } + + public void testEndTestRun(){ + reporter.incrementPassed(12); + reporter.incrementFailed(12); + Calendar startTime = Calendar.getInstance(); + Calendar endTime = Calendar.getInstance(); + reporter.setStartTime(startTime); + reporter.endTestRun(new TestRunEvent(endTime)); + validateFooter("0h 0m 0"); + assertEquals("# passed", 0, reporter.getNumPassed()); + assertEquals("# failed", 0, reporter.getNumFailed()); + assertEquals("test case #", 1, reporter.getTestCaseNum()); + } + + public void testBeginTestCase(){ + Calendar c = getCalendar(2007, Calendar.MAY, 18, 10, 23, 32, 725); + reporter.setStartTime(c); + TestCaseTag tct = initTestCaseTag(); + assertNull("timestamped results dir", tct.getTimestampedResultsDir()); + reporter.beginTestCase(new TestCaseEvent(tct)); + assertNotNull("timestamped results dir", tct.getTimestampedResultsDir()); + assertEquals("timestamped results dir", JameleonUtility.fixFileSeparators( + "./jameleon_test_results/2007-May-18_10-23-32-725-AM/some name"), + tct.getTimestampedResultsDir().getPath()); + } + + public void testEndTestCase(){ + TestCaseTag tct = initTestCaseTag(); + TestCaseEvent tce = new TestCaseEvent(tct); + FunctionalPoint fp2 = new FunctionalPoint(); + fp2.addTagName("failed-tag"); + CountableFunctionResult cfr = new CountableFunctionResult(fp2, tct.getResults()); + cfr.setFailed(); + cfr.setError(new RuntimeException("an error message")); + cfr.setLineNumber(23); + reporter.setStartTime(Calendar.getInstance()); + reporter.beginTestCase(tce); + reporter.endTestCase(tce); + assertEquals("# of tests passed", 3, reporter.getNumPassed()); + assertEquals("# of tests failed", 1, reporter.getNumFailed()); + assertEquals("test case #", 2, reporter.getTestCaseNum()); + + } + + public void testGetResultsDirectory(){ + Calendar c = getCalendar(2007, Calendar.MAY, 18, 10, 23, 32, 725); + File f = ResultsReporter.getResultsDir(BASE_DIR, c); + assertEquals("resultsDir", JameleonUtility.fixFileSeparators( + "jameleon_test_results/2007-May-18_10-23-32-725-AM"), f.getPath()); + } + + public void testGettersSetters(){ + reporter = ResultsReporter.getInstance(); + Writer writer = new StringWriter(); + reporter.setWriter(writer); + assertTrue("writer", writer == reporter.getWriter()); + assertEquals("Default results header", ResultsReporter.DEFAULT_HEADER_TEMPLATE, reporter.getTestResultsHeaderTemplate()); + reporter.setTestResultsHeaderTemplate("foo"); + assertEquals("results header", "foo", reporter.getTestResultsHeaderTemplate()); + + assertEquals("Default results footer", ResultsReporter.DEFAULT_FOOTER_TEMPLATE, reporter.getTestResultsFooterTemplate()); + reporter.setTestResultsFooterTemplate("foo"); + assertEquals("results footer", "foo", reporter.getTestResultsFooterTemplate()); + + assertEquals("Default result row", ResultsReporter.DEFAULT_RESULT_ROW_TEMPLATE, reporter.getTestResultRowTemplate()); + reporter.setTestResultRowTemplate("foo"); + assertEquals("results result row", "foo", reporter.getTestResultRowTemplate()); + } + + public void testIncrementTestCaseNum(){ + assertEquals("initial test case #", 1, reporter.getTestCaseNum()); + reporter.incrementTestCaseNum(5); + assertEquals("test case #", 6, reporter.getTestCaseNum()); + } + + public void testIncrementPassed(){ + assertEquals("initial # passed", 0, reporter.getNumPassed()); + reporter.incrementPassed(5); + assertEquals("# passed", 5, reporter.getNumPassed()); + } + + public void testIncrementFailed(){ + assertEquals("initial # failed", 0, reporter.getNumFailed()); + reporter.incrementFailed(5); + assertEquals("# failed", 5, reporter.getNumFailed()); + } + + public void testOutputRow() throws Exception{ + TestCaseTag tct = initTestCaseTag(); + reporter.outputRow(tct); + + StringWriter writer = (StringWriter)reporter.getWriter(); + String row = writer.toString(); + assertTrue("The writer was populated with something", row.length() > 0); + assertTrue("The file should contain a passed td " + row, row.indexOf("<td class=\"pass\" title=\"Test passed\">") >= 0); + assertTrue("The file should contain a passed gif " + row, row.indexOf("passed.gif") >= 0); + assertFalse("The file should not contain a failed row info column", row.indexOf("Row Failed") > -1); + + reporter.setWriter(new StringWriter()); + FunctionalPoint fp2 = new FunctionalPoint(); + fp2.addTagName("failed-tag"); + CountableFunctionResult cfr = new CountableFunctionResult(fp2, tct.getResults()); + cfr.setFailed(); + cfr.setError(new RuntimeException("an error message")); + cfr.setLineNumber(23); + reporter.outputRow(tct); + writer = (StringWriter)reporter.getWriter(); + row = writer.toString(); + assertTrue("The writer was populated with something", row.length() > 0); + assertTrue("The file should contain a failed td " + row, row.indexOf("<td class=\"fail\" title=\"Test failed\">") >= 0); + assertTrue("The file should contain a failed gif " + row, row.indexOf("failed.gif") >= 0); + assertTrue("The file should contain a failed line # " + row, row.indexOf("<td title=\"Line Failed\">23</td>") >= 0); + assertTrue("The file should contain a failed tag " + row, row.indexOf("<td title=\"FunctionId of Point of Failure\"><i>failed-tag</i></td>") >= 0); + assertTrue("The file should contain a failed row info column " + row, row.indexOf("Row Failed") > -1); + } + + public void testOutputHeader() throws Exception{ + Configurator config = Configurator.getInstance(); + config.setValue("organization", "sf"); + config.s... [truncated message content] |
From: <se...@us...> - 2007-06-12 02:33:01
|
Revision: 1595 http://svn.sourceforge.net/jameleon/?rev=1595&view=rev Author: selie Date: 2007-06-11 19:32:57 -0700 (Mon, 11 Jun 2007) Log Message: ----------- fixed a couple of problems of the testcase results Modified Paths: -------------- trunk/jameleon-core/res/dtree.js trunk/jameleon-core/src/java/net/sf/jameleon/reporting/DTreeManager.java trunk/jameleon-core/src/java/net/sf/jameleon/reporting/DTreeNode.java trunk/jameleon-core/tst/java/net/sf/jameleon/reporting/DTreeNodeTest.java Modified: trunk/jameleon-core/res/dtree.js =================================================================== --- trunk/jameleon-core/res/dtree.js 2007-06-11 13:58:16 UTC (rev 1594) +++ trunk/jameleon-core/res/dtree.js 2007-06-12 02:32:57 UTC (rev 1595) @@ -68,7 +68,7 @@ useSelection : true, - useCookies : true, + useCookies : false, useLines : true, @@ -78,7 +78,7 @@ closeSameLevel : false, - inOrder : false + inOrder : true } @@ -256,9 +256,7 @@ } - if (node.icon != "noicon") { - str += '<img id="i' + this.obj + nodeId + '" src="' + ((node._io) ? node.iconOpen : node.icon) + '" alt="" />'; - } + str += '<img id="i' + this.obj + nodeId + '" src="' + ((node._io) ? node.iconOpen : node.icon) + '" alt="" />'; } Modified: trunk/jameleon-core/src/java/net/sf/jameleon/reporting/DTreeManager.java =================================================================== --- trunk/jameleon-core/src/java/net/sf/jameleon/reporting/DTreeManager.java 2007-06-11 13:58:16 UTC (rev 1594) +++ trunk/jameleon-core/src/java/net/sf/jameleon/reporting/DTreeManager.java 2007-06-12 02:32:57 UTC (rev 1595) @@ -69,7 +69,6 @@ String[] keys = new String[0]; keys = (String[]) results.getRowData().keySet().toArray(keys); node.setParentId(results.hashCode()+"data"); - node.setOpen(true); for (int i = 0; i < keys.length; i++) { node.setId(results.hashCode()+"data"+i); node.setName(keys[i]+" = "+results.getRowData().get(keys[i])); @@ -108,7 +107,6 @@ String[] keys = new String[0]; keys = (String[]) firstChildResult.getRowData().keySet().toArray(keys); node.setParentId(results.hashCode()+"data"); - node.setOpen(true); for (int i = 0; i < keys.length; i++) { node.setId(results.hashCode()+"data"+i); node.setName("row "+i+": "+keys[i]+" = "+firstChildResult.getRowData().get(keys[i])); @@ -148,7 +146,6 @@ node.setUrl("../../"+results.getErrorFile().getPath()); node.setIcon("../"+JameleonDefaultValues.RESULTS_RES_DIR+"/img/snapshot.png"); node.setIconOpen("../"+JameleonDefaultValues.RESULTS_RES_DIR+"/img/snapshot.png"); - node.setOpen(true); out.write(node.toDTreeAdd()); node.reset(); } @@ -167,7 +164,6 @@ node.setId(results.hashCode()+"step"+i); node.setParentId(results.hashCode()+"steps"); node.setName(step); - node.setOpen(true); out.write(node.toDTreeAdd()); } node.reset(); @@ -196,7 +192,9 @@ } node.setIcon("../"+ JameleonDefaultValues.RESULTS_RES_DIR+"/img/"+results.getOutcome().toLowerCase()+".png"); node.setIconOpen("../"+JameleonDefaultValues.RESULTS_RES_DIR+"/img/"+results.getOutcome().toLowerCase()+".png"); - node.setOpen(false); + if (results.failed()) { + node.setOpen(true); + } out.write(node.toDTreeAdd()); node.reset(); } @@ -246,7 +244,6 @@ Attribute[] attributes = new Attribute[0]; attributes = (Attribute[]) results.getTag().getAttributes().values().toArray(attributes); node.setParentId(results.hashCode()+"infoattributes"); - node.setOpen(true); for (int i = 0; i < attributes.length; i++) { if (attributes[i].isValueSet() && !attributes[i].getName().equals("functionId")) { node.setId(results.hashCode()+"infoattributes"+i); @@ -285,7 +282,6 @@ StackTraceElement[] stackTraceElements = results.getError().getStackTrace(); node.setParentId(results.hashCode()+"error"); - node.setOpen(true); for (int i = 0; i < stackTraceElements.length; i++) { node.setId(results.hashCode()+"errorstacktrace"+i); node.setName(stackTraceElements[i].toString()); @@ -362,7 +358,6 @@ node.setName(results.getIdentifier()); node.setIcon("../"+ JameleonDefaultValues.RESULTS_RES_DIR+"/img/"+results.getOutcome().toLowerCase()+".png"); node.setIconOpen("../"+JameleonDefaultValues.RESULTS_RES_DIR+"/img/"+results.getOutcome().toLowerCase()+".png"); - node.setOpen(false); out.write(node.toDTreeAdd()); node.reset(); Modified: trunk/jameleon-core/src/java/net/sf/jameleon/reporting/DTreeNode.java =================================================================== --- trunk/jameleon-core/src/java/net/sf/jameleon/reporting/DTreeNode.java 2007-06-11 13:58:16 UTC (rev 1594) +++ trunk/jameleon-core/src/java/net/sf/jameleon/reporting/DTreeNode.java 2007-06-12 02:32:57 UTC (rev 1595) @@ -70,7 +70,7 @@ return dtreeName+".add('"+ id+"','"+parentId+"','"+name.replaceAll("'", "\\\\'")+ "','"+url+"','"+title+"','"+target+"','"+icon+"','"+ - iconOpen+"','"+isOpen+"');"+System.getProperty("line.separator"); + iconOpen+"',"+isOpen+");"+System.getProperty("line.separator"); } public String getId() { Modified: trunk/jameleon-core/tst/java/net/sf/jameleon/reporting/DTreeNodeTest.java =================================================================== --- trunk/jameleon-core/tst/java/net/sf/jameleon/reporting/DTreeNodeTest.java 2007-06-11 13:58:16 UTC (rev 1594) +++ trunk/jameleon-core/tst/java/net/sf/jameleon/reporting/DTreeNodeTest.java 2007-06-12 02:32:57 UTC (rev 1595) @@ -122,7 +122,7 @@ dTreeNode.setIconOpen("f"); dTreeNode.setOpen(true); - assertEquals("mytree.add('1','2','a','b','c','d','e','f','true');"+System.getProperty("line.separator"),dTreeNode.toDTreeAdd()); + assertEquals("mytree.add('1','2','a','b','c','d','e','f',true);"+System.getProperty("line.separator"),dTreeNode.toDTreeAdd()); } public void testToDTreeAddEscapedName() { @@ -136,7 +136,7 @@ dTreeNode.setIconOpen("f"); dTreeNode.setOpen(true); - assertEquals("mytree.add('1','2','my boss\\'s paycheck','b','c','d','e','f','true');"+System.getProperty("line.separator"),dTreeNode.toDTreeAdd()); + assertEquals("mytree.add('1','2','my boss\\'s paycheck','b','c','d','e','f',true);"+System.getProperty("line.separator"),dTreeNode.toDTreeAdd()); } } \ No newline at end of file This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <en...@us...> - 2007-06-13 00:26:31
|
Revision: 1597 http://svn.sourceforge.net/jameleon/?rev=1597&view=rev Author: engrean Date: 2007-06-12 17:26:30 -0700 (Tue, 12 Jun 2007) Log Message: ----------- getFileNameFromScriptPath now uses a unix file separator as the default to replace the OS file separator with. Modified Paths: -------------- trunk/jameleon-core/src/java/net/sf/jameleon/util/JameleonUtility.java trunk/jameleon-core/tst/java/net/sf/jameleon/util/JameleonUtilityTest.java Modified: trunk/jameleon-core/src/java/net/sf/jameleon/util/JameleonUtility.java =================================================================== --- trunk/jameleon-core/src/java/net/sf/jameleon/util/JameleonUtility.java 2007-06-12 12:47:04 UTC (rev 1596) +++ trunk/jameleon-core/src/java/net/sf/jameleon/util/JameleonUtility.java 2007-06-13 00:26:30 UTC (rev 1597) @@ -231,7 +231,7 @@ public static String getFileNameFromScriptPath(String path){ String fileName = path; if (fileName != null){ - fileName = fixFileSeparators(fileName); + fileName = fixFileSeparators(fileName, "/"); int index = fileName.lastIndexOf("/"); if (index != -1) { fileName = fileName.substring(index+1); @@ -256,11 +256,11 @@ public static String fixFileSeparators(String path, String fileSeparator) { String fixedPath = ""; String separator = File.separator; + //Switch the separator to split on if the OS-specific separator isn't found if (path.indexOf(separator) == -1){ if (separator.equals("/")){ - //Need to escape the escape because it is getting passed as a regex to the split method separator = "\\"; - }else{ + }else if (separator.equals("\\")){ separator = "/"; } } Modified: trunk/jameleon-core/tst/java/net/sf/jameleon/util/JameleonUtilityTest.java =================================================================== --- trunk/jameleon-core/tst/java/net/sf/jameleon/util/JameleonUtilityTest.java 2007-06-12 12:47:04 UTC (rev 1596) +++ trunk/jameleon-core/tst/java/net/sf/jameleon/util/JameleonUtilityTest.java 2007-06-13 00:26:30 UTC (rev 1597) @@ -219,8 +219,8 @@ String before = "this/is/a/path"; String after = "this\\is\\a\\path"; assertEquals("convert / to \\", after, JameleonUtility.fixFileSeparators(before, "\\")); - assertEquals("convert \\ to /", before, JameleonUtility.fixFileSeparators(after)); - + assertEquals("convert \\ to /", before, JameleonUtility.fixFileSeparators(after, "/")); + assertEquals("convert / to \\", after, JameleonUtility.fixFileSeparators(before)); } public void testGetFileNameFromPath(){ @@ -232,8 +232,7 @@ } public void testGetFileNameFromScriptPath(){ - String name = JameleonUtility.getFileNameFromScriptPath( - JameleonUtility.fixFileSeparators("file:/some/dir/tst/xml/httpunit/somefile.xml")); + String name = JameleonUtility.getFileNameFromScriptPath("file:/some/dir/tst/somefile.xml"); assertEquals("somefile.xml",name); name = JameleonUtility.getFileNameFromScriptPath("file:/C:/tst/xml/httpunit/some file.xml"); assertEquals("some file.xml",name); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <en...@us...> - 2007-06-13 01:27:10
|
Revision: 1598 http://svn.sourceforge.net/jameleon/?rev=1598&view=rev Author: engrean Date: 2007-06-12 18:27:02 -0700 (Tue, 12 Jun 2007) Log Message: ----------- - Took out the "steps" node - Set open to 'true' for session and function nodes as well as errored results - Added a new image to represent blank space - Set default open and close images to nothing (opposed to noicon) and set dtree.js to use blank.gif for empty images Modified Paths: -------------- trunk/jameleon-core/res/dtree.js trunk/jameleon-core/src/java/net/sf/jameleon/reporting/DTreeManager.java trunk/jameleon-core/src/java/net/sf/jameleon/reporting/DTreeNode.java trunk/jameleon-core/tst/java/net/sf/jameleon/reporting/DTreeNodeTest.java Added Paths: ----------- trunk/jameleon-core/res/img/blank.gif Modified: trunk/jameleon-core/res/dtree.js =================================================================== --- trunk/jameleon-core/res/dtree.js 2007-06-13 00:26:30 UTC (rev 1597) +++ trunk/jameleon-core/res/dtree.js 2007-06-13 01:27:02 UTC (rev 1598) @@ -84,33 +84,33 @@ this.icon = { - root : '../../../res/img/user.png', + root : '../../../res/img/user.png', - folder : '../../../res/img/folder.gif', + folder : '../../../res/img/blank.gif', - folderOpen : '../../../res/img/folderopen.gif', + folderOpen : '../../../res/img/blank.gif', - node : '../../../res/img/page.gif', + node : '../../../res/img/blank.gif', - empty : '../../../res/img/empty.gif', + empty : '../../../res/img/empty.gif', - line : '../../../res/img/line.gif', + line : '../../../res/img/line.gif', - join : '../../../res/img/join.gif', + join : '../../../res/img/join.gif', joinBottom : '../../../res/img/joinbottom.gif', - plus : '../../../res/img/plus.gif', + plus : '../../../res/img/plus.gif', plusBottom : '../../../res/img/plusbottom.gif', - minus : '../../../res/img/minus.gif', + minus : '../../../res/img/minus.gif', minusBottom : '../../../res/img/minusbottom.gif', - nlPlus : '../../../res/img/nolines_plus.gif', + nlPlus : '../../../res/img/nolines_plus.gif', - nlMinus : '../../../res/img/nolines_minus.gif' + nlMinus : '../../../res/img/nolines_minus.gif' }; Added: trunk/jameleon-core/res/img/blank.gif =================================================================== (Binary files differ) Property changes on: trunk/jameleon-core/res/img/blank.gif ___________________________________________________________________ Name: svn:mime-type + application/octet-stream Modified: trunk/jameleon-core/src/java/net/sf/jameleon/reporting/DTreeManager.java =================================================================== --- trunk/jameleon-core/src/java/net/sf/jameleon/reporting/DTreeManager.java 2007-06-13 00:26:30 UTC (rev 1597) +++ trunk/jameleon-core/src/java/net/sf/jameleon/reporting/DTreeManager.java 2007-06-13 01:27:02 UTC (rev 1598) @@ -146,30 +146,30 @@ node.setUrl("../../"+results.getErrorFile().getPath()); node.setIcon("../"+JameleonDefaultValues.RESULTS_RES_DIR+"/img/snapshot.png"); node.setIconOpen("../"+JameleonDefaultValues.RESULTS_RES_DIR+"/img/snapshot.png"); + node.setOpen(true); out.write(node.toDTreeAdd()); node.reset(); } // add leaf node steps - node.setId(results.hashCode()+"steps"); - node.setParentId(results.hashCode()); - node.setName("steps"); - node.setIcon("../"+JameleonDefaultValues.RESULTS_RES_DIR+"/img/steps.png"); - node.setIconOpen("../"+JameleonDefaultValues.RESULTS_RES_DIR+"/img/steps.png"); - out.write(node.toDTreeAdd()); - node.reset(); +// node.setId(results.hashCode()+"steps"); +// node.setParentId(results.hashCode()); +// node.setName("steps"); +// node.setIcon("../"+JameleonDefaultValues.RESULTS_RES_DIR+"/img/steps.png"); +// node.setIconOpen("../"+JameleonDefaultValues.RESULTS_RES_DIR+"/img/steps.png"); +// out.write(node.toDTreeAdd()); +// node.reset(); for (int i = 0; i < results.getTag().getSteps().size(); i++) { String step = (String) results.getTag().getSteps().get(i); node.setId(results.hashCode()+"step"+i); - node.setParentId(results.hashCode()+"steps"); + node.setParentId(results.hashCode()); node.setName(step); out.write(node.toDTreeAdd()); } node.reset(); addNodeInfo(results); - addNodeError(results); } @@ -192,7 +192,7 @@ } node.setIcon("../"+ JameleonDefaultValues.RESULTS_RES_DIR+"/img/"+results.getOutcome().toLowerCase()+".png"); node.setIconOpen("../"+JameleonDefaultValues.RESULTS_RES_DIR+"/img/"+results.getOutcome().toLowerCase()+".png"); - if (results.failed()) { + if (results.failed() || results instanceof SessionResult || results instanceof FunctionResult) { node.setOpen(true); } out.write(node.toDTreeAdd()); Modified: trunk/jameleon-core/src/java/net/sf/jameleon/reporting/DTreeNode.java =================================================================== --- trunk/jameleon-core/src/java/net/sf/jameleon/reporting/DTreeNode.java 2007-06-13 00:26:30 UTC (rev 1597) +++ trunk/jameleon-core/src/java/net/sf/jameleon/reporting/DTreeNode.java 2007-06-13 01:27:02 UTC (rev 1598) @@ -53,8 +53,8 @@ url = ""; title = ""; target = ""; - icon = "noicon"; - iconOpen = "noicon"; + icon = ""; + iconOpen = ""; isOpen = false; } Modified: trunk/jameleon-core/tst/java/net/sf/jameleon/reporting/DTreeNodeTest.java =================================================================== --- trunk/jameleon-core/tst/java/net/sf/jameleon/reporting/DTreeNodeTest.java 2007-06-13 00:26:30 UTC (rev 1597) +++ trunk/jameleon-core/tst/java/net/sf/jameleon/reporting/DTreeNodeTest.java 2007-06-13 01:27:02 UTC (rev 1598) @@ -21,8 +21,8 @@ assertEquals("",dTreeNode.getUrl()); assertEquals("",dTreeNode.getTitle()); assertEquals("",dTreeNode.getTarget()); - assertEquals("noicon",dTreeNode.getIcon()); - assertEquals("noicon",dTreeNode.getIconOpen()); + assertEquals("",dTreeNode.getIcon()); + assertEquals("",dTreeNode.getIconOpen()); assertEquals(false,dTreeNode.isOpen()); } @@ -71,8 +71,8 @@ assertEquals("",dTreeNode.getUrl()); assertEquals("",dTreeNode.getTitle()); assertEquals("",dTreeNode.getTarget()); - assertEquals("noicon",dTreeNode.getIcon()); - assertEquals("noicon",dTreeNode.getIconOpen()); + assertEquals("",dTreeNode.getIcon()); + assertEquals("",dTreeNode.getIconOpen()); assertEquals(false,dTreeNode.isOpen()); } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <en...@us...> - 2007-06-13 22:38:11
|
Revision: 1600 http://svn.sourceforge.net/jameleon/?rev=1600&view=rev Author: engrean Date: 2007-06-13 15:38:05 -0700 (Wed, 13 Jun 2007) Log Message: ----------- Took out tests that run differently depending on OS. Modified Paths: -------------- trunk/jameleon-core/build.sh trunk/jameleon-core/tst/java/net/sf/jameleon/util/JameleonUtilityTest.java Modified: trunk/jameleon-core/build.sh =================================================================== --- trunk/jameleon-core/build.sh 2007-06-13 01:55:40 UTC (rev 1599) +++ trunk/jameleon-core/build.sh 2007-06-13 22:38:05 UTC (rev 1600) @@ -29,6 +29,6 @@ CP=.:$JAMELEON_HOME/lib/junit.jar:$LIBS/ant-launcher.jar:$JAVA_HOME/lib/tools.jar export PATH=$PATH:lib fi - "$JAVA_HOME/bin/java" -Xmx192m -Xms32m -classpath $CP org.apache.tools.ant.launch.Launcher -Dbuild.compiler=$COMPILER $* + "$JAVA_HOME/bin/java" -Xmx126m -Xms32m -classpath $CP org.apache.tools.ant.launch.Launcher -Dbuild.compiler=$COMPILER $* fi Modified: trunk/jameleon-core/tst/java/net/sf/jameleon/util/JameleonUtilityTest.java =================================================================== --- trunk/jameleon-core/tst/java/net/sf/jameleon/util/JameleonUtilityTest.java 2007-06-13 01:55:40 UTC (rev 1599) +++ trunk/jameleon-core/tst/java/net/sf/jameleon/util/JameleonUtilityTest.java 2007-06-13 22:38:05 UTC (rev 1600) @@ -220,7 +220,6 @@ String after = "this\\is\\a\\path"; assertEquals("convert / to \\", after, JameleonUtility.fixFileSeparators(before, "\\")); assertEquals("convert \\ to /", before, JameleonUtility.fixFileSeparators(after, "/")); - assertEquals("convert / to \\", after, JameleonUtility.fixFileSeparators(before)); } public void testGetFileNameFromPath(){ This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <en...@us...> - 2007-06-16 16:41:17
|
Revision: 1602 http://svn.sourceforge.net/jameleon/?rev=1602&view=rev Author: engrean Date: 2007-06-16 09:41:15 -0700 (Sat, 16 Jun 2007) Log Message: ----------- factored counting logic out of ResultsReporter. Modified Paths: -------------- trunk/jameleon-core/jameleon-core.iml trunk/jameleon-core/src/java/net/sf/jameleon/plugin/junit/ExecuteJameleonScriptTag.java trunk/jameleon-core/src/java/net/sf/jameleon/reporting/DTreeManager.java trunk/jameleon-core/src/java/net/sf/jameleon/reporting/ResultsReporter.java trunk/jameleon-core/tst/java/net/sf/jameleon/reporting/ResultsReporterTest.java Added Paths: ----------- trunk/jameleon-core/src/java/net/sf/jameleon/reporting/TestCaseCounter.java trunk/jameleon-core/tst/java/net/sf/jameleon/reporting/TestCaseCounterTest.java Modified: trunk/jameleon-core/jameleon-core.iml =================================================================== --- trunk/jameleon-core/jameleon-core.iml 2007-06-14 02:32:24 UTC (rev 1601) +++ trunk/jameleon-core/jameleon-core.iml 2007-06-16 16:41:15 UTC (rev 1602) @@ -189,6 +189,24 @@ <SOURCES /> </library> </orderEntry> + <orderEntry type="module-library"> + <library> + <CLASSES> + <root url="file://$MODULE_DIR$/Build" /> + </CLASSES> + <JAVADOC /> + <SOURCES /> + </library> + </orderEntry> + <orderEntry type="module-library"> + <library> + <CLASSES> + <root url="file://$MODULE_DIR$/tst/res" /> + </CLASSES> + <JAVADOC /> + <SOURCES /> + </library> + </orderEntry> <orderEntryProperties /> <javadoc-paths> <root url="http://java.sun.com/javase/6/docs/api/" /> Modified: trunk/jameleon-core/src/java/net/sf/jameleon/plugin/junit/ExecuteJameleonScriptTag.java =================================================================== --- trunk/jameleon-core/src/java/net/sf/jameleon/plugin/junit/ExecuteJameleonScriptTag.java 2007-06-14 02:32:24 UTC (rev 1601) +++ trunk/jameleon-core/src/java/net/sf/jameleon/plugin/junit/ExecuteJameleonScriptTag.java 2007-06-16 16:41:15 UTC (rev 1602) @@ -25,6 +25,7 @@ import net.sf.jameleon.event.TestCaseEventHandler; import net.sf.jameleon.event.TestCaseListener; import net.sf.jameleon.reporting.ResultsReporter; +import net.sf.jameleon.reporting.TestCaseCounter; import net.sf.jameleon.result.*; import net.sf.jameleon.util.JameleonUtility; import org.apache.log4j.LogManager; @@ -154,6 +155,8 @@ protected DenyAllFilter denyAll; protected static SAXReader parser = new SAXReader(); protected TestCaseResult result; + protected TestCaseCounter originalCounter; + protected TestCaseListener listener = new TestCaseListener(){ public void beginTestCase(TestCaseEvent event) { result = null; @@ -241,6 +244,8 @@ timestampedResults = ResultsReporter.getInstance().getWriter(); htmlResults = new StringWriter(); ResultsReporter.getInstance().setWriter(htmlResults); + originalCounter = ResultsReporter.getInstance().getTestCaseCounter(); + ResultsReporter.getInstance().setTestCaseCounter(new TestCaseCounter()); LoggerRepository repos = LogManager.getLoggerRepository(); TestCaseEventHandler.getInstance().addTestCaseListener(listener); @@ -268,15 +273,7 @@ * it is data-driven. Basically, one script equals one test case run. */ private void reverseTestCaseCount(){ - if (result != null){ - int numRun = result.getCountableResults().size(); - int numFailed = result.getFailedCountableResults().size(); - int numPassed = numRun - numFailed; - ResultsReporter reporter = ResultsReporter.getInstance(); - reporter.incrementFailed(-numFailed); - reporter.incrementPassed(-numPassed); - reporter.incrementTestCaseNum(-1); - } + ResultsReporter.getInstance().setTestCaseCounter(originalCounter); } protected String executeScript(){ Modified: trunk/jameleon-core/src/java/net/sf/jameleon/reporting/DTreeManager.java =================================================================== --- trunk/jameleon-core/src/java/net/sf/jameleon/reporting/DTreeManager.java 2007-06-14 02:32:24 UTC (rev 1601) +++ trunk/jameleon-core/src/java/net/sf/jameleon/reporting/DTreeManager.java 2007-06-16 16:41:15 UTC (rev 1602) @@ -152,15 +152,6 @@ node.reset(); } - // add leaf node steps -// node.setId(results.hashCode()+"steps"); -// node.setParentId(results.hashCode()); -// node.setName("steps"); -// node.setIcon("../"+JameleonDefaultValues.RESULTS_RES_DIR+"/img/steps.png"); -// node.setIconOpen("../"+JameleonDefaultValues.RESULTS_RES_DIR+"/img/steps.png"); -// out.write(node.toDTreeAdd()); -// node.reset(); - for (int i = 0; i < results.getTag().getSteps().size(); i++) { String step = (String) results.getTag().getSteps().get(i); node.setId(results.hashCode()+"step"+i); Modified: trunk/jameleon-core/src/java/net/sf/jameleon/reporting/ResultsReporter.java =================================================================== --- trunk/jameleon-core/src/java/net/sf/jameleon/reporting/ResultsReporter.java 2007-06-14 02:32:24 UTC (rev 1601) +++ trunk/jameleon-core/src/java/net/sf/jameleon/reporting/ResultsReporter.java 2007-06-16 16:41:15 UTC (rev 1602) @@ -51,16 +51,15 @@ private String testResultsHeaderTemplate = DEFAULT_HEADER_TEMPLATE; private String testResultsFooterTemplate = DEFAULT_FOOTER_TEMPLATE; private String testResultRowTemplate = DEFAULT_RESULT_ROW_TEMPLATE; - private int testCaseNum = 1; - - private int numPassed; - private int numFailed; private Calendar startTime; private static ResultsReporter reporter; private static DTreeManager dtreeManager; + private TestCaseCounter counter; // Make this class a singleton - private ResultsReporter(){} + private ResultsReporter(){ + counter = new TestCaseCounter(); + } public static ResultsReporter getInstance(){ if (reporter == null){ @@ -120,7 +119,7 @@ params.put("result", tct.getResults()); params.put("resultsFile", tct.getResults().getTestCaseDocsFile()); params.put("results_res_dir", JameleonDefaultValues.RESULTS_RES_DIR); - params.put("testCaseNum", testCaseNum+""); + params.put("testCaseNum", counter.getTestCaseNum()+""); outputToTemplate(testResultRowTemplate, params); } @@ -131,10 +130,10 @@ */ protected void outputFooter(Calendar endTime) throws JameleonException { Map params = new HashMap(); - params.put("totalPassed", new Integer(numPassed)); - params.put("totalFailed", new Integer(numFailed)); + params.put("totalPassed", new Integer(counter.getNumPassed())); + params.put("totalFailed", new Integer(counter.getNumFailed())); params.put("totalTime", getExecutionTime(endTime)); - String percentagePassed = TestCaseResult.getPercentagePassed(numPassed + numFailed, numFailed); + String percentagePassed = TestCaseResult.getPercentagePassed(counter.getNumRun(), counter.getNumFailed()); params.put("percentPassed", percentagePassed); outputToTemplate(testResultsFooterTemplate, params); } @@ -173,18 +172,13 @@ } } - public void incrementPassed(int numPassed) { - this.numPassed += numPassed; + /** + * Resets the test run stats (TestCaseCounter) + */ + public void resetStats() { + counter = new TestCaseCounter(); } - public void incrementFailed(int numFailed) { - this.numFailed += numFailed; - } - - public void incrementTestCaseNum(int num) { - testCaseNum += num; - } - /////////////////////////////////////////////////////////////////////////////////////////////// //// SETTERS & GETTERS //// /////////////////////////////////////////////////////////////////////////////////////////////// @@ -197,14 +191,6 @@ return writer; } - public int getNumPassed() { - return numPassed; - } - - public int getNumFailed() { - return numFailed; - } - /** * Gets the template for the overall results header file * @return the template for the overall results header file @@ -245,10 +231,14 @@ return testResultRowTemplate; } - public int getTestCaseNum() { - return testCaseNum; + public TestCaseCounter getTestCaseCounter() { + return counter; } + public void setTestCaseCounter(TestCaseCounter counter) { + this.counter = counter; + } + /////////////////////////////////////////////////////////////////////////////////////////////// //// TestCaseListner methods //// /////////////////////////////////////////////////////////////////////////////////////////////// @@ -266,12 +256,12 @@ TestCaseResult result = tct.getResults(); int totalRun = result.getCountableResults().size(); int failed = result.getFailedCountableResults().size(); - incrementPassed(totalRun - failed); - incrementFailed(failed); + counter.incrementPassed(totalRun - failed); + counter.incrementFailed(failed); outputRow(tct); printTestCaseResultsToStdOut(tct); }finally{ - incrementTestCaseNum(1); + counter.incrementTestCaseNum(1); } } @@ -301,16 +291,10 @@ outputFooter((Calendar)event.getSource()); System.out.println("______________________________________________________\n"); System.out.println("Test Run: " + shortFormat.format(startTime.getTime())); - System.out.print("Tests run: " + (numPassed + numFailed)); - System.out.print(" Failed: " + numFailed); + System.out.print("Tests run: " + counter.getNumRun()); + System.out.print(" Failed: " + counter.getNumFailed()); System.out.println(" Time: " + getExecutionTime((Calendar)event.getSource())); System.out.println("______________________________________________________"); resetStats(); } - - public void resetStats() { - numFailed = 0; - numPassed = 0; - testCaseNum = 1; - } } Added: trunk/jameleon-core/src/java/net/sf/jameleon/reporting/TestCaseCounter.java =================================================================== --- trunk/jameleon-core/src/java/net/sf/jameleon/reporting/TestCaseCounter.java (rev 0) +++ trunk/jameleon-core/src/java/net/sf/jameleon/reporting/TestCaseCounter.java 2007-06-16 16:41:15 UTC (rev 1602) @@ -0,0 +1,86 @@ +/* + Jameleon - An automation testing tool.. + Copyright (C) 2007 Christian W. Hargraves (en...@ho...) + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +*/ +package net.sf.jameleon.reporting; + +/** + * Keeps track of the test cases run and test case number in a given test run: + * <ul> + * <li>Tests Run</li> + * <li>Tests Failed</li> + * <li>Tests Passed</li> + * <li>Curent Test Script Number</li> + * </ul> + */ +public class TestCaseCounter { + private int testCaseNum = 1; + private int numPassed; + private int numFailed; + + /** + * Increment the number of tests passed. + * @param numPassed The number to increment by + */ + public void incrementPassed(int numPassed) { + this.numPassed += numPassed; + } + + /** + * Increment the number of tests failed. + * @param numFailed The number to increment by + */ + public void incrementFailed(int numFailed) { + this.numFailed += numFailed; + } + + /** + * Increment the test script number + * @param testCaseNum The number to increment by + */ + public void incrementTestCaseNum(int testCaseNum) { + this.testCaseNum += testCaseNum; + } + + /** + * Gest the total passed test cases + * @return + */ + public int getNumPassed() { + return numPassed; + } + + /** + * Gets the total failed tests cases + * @return + */ + public int getNumFailed() { + return numFailed; + } + + /** + * Gets the current test script number + * @return + */ + public int getTestCaseNum() { + return testCaseNum; + } + + public int getNumRun(){ + return getNumFailed() + getNumPassed(); + } +} Property changes on: trunk/jameleon-core/src/java/net/sf/jameleon/reporting/TestCaseCounter.java ___________________________________________________________________ Name: svn:mime-type + text/plain Name: svn:eol-style + native Modified: trunk/jameleon-core/tst/java/net/sf/jameleon/reporting/ResultsReporterTest.java =================================================================== --- trunk/jameleon-core/tst/java/net/sf/jameleon/reporting/ResultsReporterTest.java 2007-06-14 02:32:24 UTC (rev 1601) +++ trunk/jameleon-core/tst/java/net/sf/jameleon/reporting/ResultsReporterTest.java 2007-06-16 16:41:15 UTC (rev 1602) @@ -63,6 +63,15 @@ ResultsReporter.clearInstance(); } + public void testGetSetTestCaseCounter(){ + reporter.setTestCaseCounter(null); + assertNull("Expected a null TestCaseCounter", reporter.getTestCaseCounter()); + TestCaseCounter counter = new TestCaseCounter(); + reporter.setTestCaseCounter(counter); + assertTrue("TestCaseCounter should be the same as the one set", counter == reporter.getTestCaseCounter()); + + } + public void testGetResultsDirectoryForTestCase(){ TestCaseTag tct = new TestCaseTag(); TestCaseResult tcr = new TestCaseResult(); @@ -77,13 +86,13 @@ } public void testResetStats(){ - reporter.incrementFailed(5); - reporter.incrementPassed(23); - reporter.incrementTestCaseNum(55); + reporter.getTestCaseCounter().incrementFailed(5); + reporter.getTestCaseCounter().incrementPassed(23); + reporter.getTestCaseCounter().incrementTestCaseNum(55); reporter.resetStats(); - assertEquals("# failed", 0, reporter.getNumFailed()); - assertEquals("# passed", 0, reporter.getNumPassed()); - assertEquals("test case #", 1, reporter.getTestCaseNum()); + assertEquals("# failed", 0, reporter.getTestCaseCounter().getNumFailed()); + assertEquals("# passed", 0, reporter.getTestCaseCounter().getNumPassed()); + assertEquals("test case #", 1, reporter.getTestCaseCounter().getTestCaseNum()); } public void testBeginTestRun(){ @@ -96,16 +105,16 @@ } public void testEndTestRun(){ - reporter.incrementPassed(12); - reporter.incrementFailed(12); + reporter.getTestCaseCounter().incrementPassed(12); + reporter.getTestCaseCounter().incrementFailed(12); Calendar startTime = Calendar.getInstance(); Calendar endTime = Calendar.getInstance(); reporter.setStartTime(startTime); reporter.endTestRun(new TestRunEvent(endTime)); validateFooter("0h 0m 0"); - assertEquals("# passed", 0, reporter.getNumPassed()); - assertEquals("# failed", 0, reporter.getNumFailed()); - assertEquals("test case #", 1, reporter.getTestCaseNum()); + assertEquals("# passed", 0, reporter.getTestCaseCounter().getNumPassed()); + assertEquals("# failed", 0, reporter.getTestCaseCounter().getNumFailed()); + assertEquals("test case #", 1, reporter.getTestCaseCounter().getTestCaseNum()); } public void testBeginTestCase(){ @@ -132,9 +141,9 @@ reporter.setStartTime(Calendar.getInstance()); reporter.beginTestCase(tce); reporter.endTestCase(tce); - assertEquals("# of tests passed", 3, reporter.getNumPassed()); - assertEquals("# of tests failed", 1, reporter.getNumFailed()); - assertEquals("test case #", 2, reporter.getTestCaseNum()); + assertEquals("# of tests passed", 3, reporter.getTestCaseCounter().getNumPassed()); + assertEquals("# of tests failed", 1, reporter.getTestCaseCounter().getNumFailed()); + assertEquals("test case #", 2, reporter.getTestCaseCounter().getTestCaseNum()); } @@ -163,24 +172,6 @@ assertEquals("results result row", "foo", reporter.getTestResultRowTemplate()); } - public void testIncrementTestCaseNum(){ - assertEquals("initial test case #", 1, reporter.getTestCaseNum()); - reporter.incrementTestCaseNum(5); - assertEquals("test case #", 6, reporter.getTestCaseNum()); - } - - public void testIncrementPassed(){ - assertEquals("initial # passed", 0, reporter.getNumPassed()); - reporter.incrementPassed(5); - assertEquals("# passed", 5, reporter.getNumPassed()); - } - - public void testIncrementFailed(){ - assertEquals("initial # failed", 0, reporter.getNumFailed()); - reporter.incrementFailed(5); - assertEquals("# failed", 5, reporter.getNumFailed()); - } - public void testOutputRow() throws Exception{ TestCaseTag tct = initTestCaseTag(); reporter.outputRow(tct); @@ -221,8 +212,8 @@ } public void testOutputFooter() throws Exception{ - reporter.incrementPassed(12); - reporter.incrementFailed(12); + reporter.getTestCaseCounter().incrementPassed(12); + reporter.getTestCaseCounter().incrementFailed(12); Calendar startTime = Calendar.getInstance(); Calendar endTime = Calendar.getInstance(); endTime.set(Calendar.SECOND, startTime.get(Calendar.SECOND) + 3); Added: trunk/jameleon-core/tst/java/net/sf/jameleon/reporting/TestCaseCounterTest.java =================================================================== --- trunk/jameleon-core/tst/java/net/sf/jameleon/reporting/TestCaseCounterTest.java (rev 0) +++ trunk/jameleon-core/tst/java/net/sf/jameleon/reporting/TestCaseCounterTest.java 2007-06-16 16:41:15 UTC (rev 1602) @@ -0,0 +1,64 @@ +/* + Jameleon - An automation testing tool.. + Copyright (C) 2007 Christian W. Hargraves (en...@ho...) + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +*/ +package net.sf.jameleon.reporting; + +import junit.framework.Test; +import junit.framework.TestCase; +import junit.framework.TestSuite; + +public class TestCaseCounterTest extends TestCase { + + private TestCaseCounter counter; + + public static void main(String args[]) { + junit.textui.TestRunner.run(suite()); + } + + public static Test suite() { + return new TestSuite(TestCaseCounterTest.class); + } + + public TestCaseCounterTest(String name) { + super(name); + } + + public void setUp(){ + counter = new TestCaseCounter(); + } + + public void testIncrementTestCaseNum(){ + assertEquals("initial test case #", 1, counter.getTestCaseNum()); + counter.incrementTestCaseNum(5); + assertEquals("test case #", 6, counter.getTestCaseNum()); + } + + public void testIncrementPassed(){ + assertEquals("initial # passed", 0, counter.getNumPassed()); + counter.incrementPassed(5); + assertEquals("# passed", 5, counter.getNumPassed()); + } + + public void testIncrementFailed(){ + assertEquals("initial # failed", 0, counter.getNumFailed()); + counter.incrementFailed(5); + assertEquals("# failed", 5, counter.getNumFailed()); + } + + +} Property changes on: trunk/jameleon-core/tst/java/net/sf/jameleon/reporting/TestCaseCounterTest.java ___________________________________________________________________ Name: svn:mime-type + text/plain Name: svn:eol-style + native This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <se...@us...> - 2007-06-19 04:35:01
|
Revision: 1603 http://svn.sourceforge.net/jameleon/?rev=1603&view=rev Author: selie Date: 2007-06-18 21:34:57 -0700 (Mon, 18 Jun 2007) Log Message: ----------- fixed data driven results fixed results summary info borders change order of error vs. info vs. steps loosen check on wait tag unit test Modified Paths: -------------- trunk/jameleon-core/res/templates/results/TestCaseResultsTemplate.txt trunk/jameleon-core/src/java/net/sf/jameleon/reporting/DTreeManager.java trunk/jameleon-core/tst/xml/acceptance/fineGrainedTests.xml Modified: trunk/jameleon-core/res/templates/results/TestCaseResultsTemplate.txt =================================================================== --- trunk/jameleon-core/res/templates/results/TestCaseResultsTemplate.txt 2007-06-16 16:41:15 UTC (rev 1602) +++ trunk/jameleon-core/res/templates/results/TestCaseResultsTemplate.txt 2007-06-19 04:34:57 UTC (rev 1603) @@ -16,54 +16,54 @@ <table width="98%" cellspacing="0" class="fields"> <tr class="alt"> <td class="header" width="15%">Test Case</td> - <td>$!tc.name</td> + <td>$!tc.name </td> </tr> <tr> <td class="header">Summary</td> - <td>$!tc.summary</td> + <td>$!tc.summary </td> </tr> <tr class="alt"> <td class="header">Test Case ID</td> - <td>$!tc.testCaseId</td> + <td>$!tc.testCaseId </td> </tr> <tr> <td class="header">Requirement ID</td> - <td>$!tc.testCaseRequirement</td> + <td>$!tc.testCaseRequirement </td> </tr> <tr class="alt"> <td class="header">Author</td> - <td>$!tc.author</td> + <td>$!tc.author </td> </tr> <tr> <td class="header">Bug(s)</td> - <td>#foreach ( $bug in $tc.bugs ) <a href="${bugTrackerUrl}${bug}">$bug</a> #end</td> + <td>#foreach ( $bug in $tc.bugs ) <a href="${bugTrackerUrl}${bug}">$bug</a> #end </td> </tr> <tr class="alt"> <td class="header">Application Tested</td> - <td>$!tc.application</td> + <td>$!tc.application </td> </tr> <tr> <td class="header">Feature Tested</td> - <td>$!tc.functionalPointTested</td> + <td>$!tc.functionalPointTested </td> </tr> <tr class="alt"> <td class="header">Test Level(s)</td> - <td>#foreach ( $level in $tc.testLevels ) $level #end</td> + <td>#foreach ( $level in $tc.testLevels ) $level #end </td> </tr> <tr> <td class="header">Test Environment</td> - <td>$!tc.testEnvironment</td> + <td>$!tc.testEnvironment </td> </tr> <tr class="alt"> <td class="header">Organization</td> - <td>$!tc.organization</td> + <td>$!tc.organization </td> </tr> <tr> <td class="header">Script Source</td> <td><div><a href="javascript:showInfo('script_source')"><i>view source</i></a></div> <span id="script_source" class="source"> <pre> -$tc.scriptContents +$tc.scriptContents </pre> </span> </td> Modified: trunk/jameleon-core/src/java/net/sf/jameleon/reporting/DTreeManager.java =================================================================== --- trunk/jameleon-core/src/java/net/sf/jameleon/reporting/DTreeManager.java 2007-06-16 16:41:15 UTC (rev 1602) +++ trunk/jameleon-core/src/java/net/sf/jameleon/reporting/DTreeManager.java 2007-06-19 04:34:57 UTC (rev 1603) @@ -54,8 +54,9 @@ */ private void addDataDrivenNode(DataDrivableRowResult results) throws IOException { addNode(results, Integer.toString(results.getRowNum())); - addNodeInfo(results); + addNodeError(results); + if (results.getRowData() != null && results.getRowData().keySet().size() > 0) { // add data driven node data node.setId(results.hashCode()+"data"); @@ -78,7 +79,6 @@ node.reset(); } - addNodeError(results); } /** @@ -89,15 +89,16 @@ private void addDataDrivenNotCountableNode(DataDrivableResultContainer results) throws IOException { addNode(results); + addNodeError(results); addNodeInfo(results); - // regroup child datas in a single table for compact format + // regroup child datas in a single table for compact format (countRow=false) if (results.getChildrenResults().size() > 0) { DataDrivableRowResult firstChildResult = (DataDrivableRowResult) results.getChildrenResults().get(0); if ((firstChildResult.getRowData() != null) && (firstChildResult.getRowData().keySet().size() > 0)) { // add data driven node data node.setId(results.hashCode()+"data"); - node.setParentId(results.getParentResults().hashCode()); + node.setParentId(results.hashCode()); node.setName("data: key = value"); node.setIcon("../"+JameleonDefaultValues.RESULTS_RES_DIR+"/img/data.png"); node.setIconOpen("../"+JameleonDefaultValues.RESULTS_RES_DIR+"/img/data.png"); @@ -108,10 +109,13 @@ String[] keys = new String[0]; keys = (String[]) firstChildResult.getRowData().keySet().toArray(keys); node.setParentId(results.hashCode()+"data"); - for (int i = 0; i < keys.length; i++) { - node.setId(results.hashCode()+"data"+i); - node.setName("row "+i+": "+keys[i]+" = "+firstChildResult.getRowData().get(keys[i])); - out.write(node.toDTreeAdd()); + for (int r = 0; r < results.getChildrenResults().size() ; r++) { + DataDrivableRowResult currentChildResult = (DataDrivableRowResult) results.getChildrenResults().get(r); + for (int i = 0; i < keys.length; i++) { + node.setId(results.hashCode()+"data"+r+i); + node.setName("row "+r+": "+keys[i]+" = "+currentChildResult.getRowData().get(keys[i])); + out.write(node.toDTreeAdd()); + } } node.reset(); @@ -119,7 +123,6 @@ } - addNodeError(results); } /** @@ -129,6 +132,7 @@ */ private void addParentNode(JameleonTestResult results) throws IOException { addNode(results); + addNodeInfo(results); } /** @@ -152,6 +156,9 @@ node.reset(); } + addNodeError(results); + addNodeInfo(results); + for (int i = 0; i < results.getTag().getSteps().size(); i++) { String step = (String) results.getTag().getSteps().get(i); node.setId(results.hashCode()+"step"+i); @@ -161,8 +168,6 @@ } node.reset(); - addNodeInfo(results); - addNodeError(results); } // --------------------------------- @@ -176,7 +181,18 @@ */ private void addNode(JameleonTestResult results, String row) throws IOException { node.setId(results.hashCode()); - node.setParentId(results.getParentResults().hashCode()); + // TODO: this is ugly!!! + // the goal is that within a data driven tag which is not countable, we + // need to skip a node and not display the <csv> row tag, just the row content + JameleonTestResult parentResults = (JameleonTestResult) results.getParentResults(); + if ( !(parentResults instanceof TestCaseResult) && + parentResults.isDataDriven() && + !(parentResults instanceof RowResultContainer) && + !(parentResults instanceof CountableDataDrivableRowResult)) { + node.setParentId(parentResults.getParentResults().hashCode()); + } else { + node.setParentId(parentResults.hashCode()); + } if (row == null) { node.setName(results.getIdentifier()); } else { @@ -218,7 +234,7 @@ // add leaf node info content node.setId(results.hashCode()+"info"+"elementname"); node.setParentId(results.hashCode()+"info"); - node.setName("XML element name: "+results.getElementName()); + node.setName("tag: <"+results.getElementName()+">"); out.write(node.toDTreeAdd()); node.setId(results.hashCode()+"info"+"executiontime"); @@ -230,6 +246,7 @@ node.setId(results.hashCode()+"infoattributes"); node.setParentId(results.hashCode()+"info"); node.setName("attributes values"); + node.setOpen(true); out.write(node.toDTreeAdd()); node.reset(); @@ -298,20 +315,21 @@ if (numOfChildren > 0 || (numOfChildren == 0 && childResults.failed()) ) { //Is it a container? if (childResults instanceof RowResultContainer) { -// RowResultContainer rrcResults = (RowResultContainer) childResults; -// if (rrcResults.isCountable()) { -// processResults((TestResultWithChildren) childResults); -// } else { + RowResultContainer rrcResults = (RowResultContainer) childResults; + if (rrcResults.isCountable()) { + addParentNode(childResults); + processResults((TestResultWithChildren) childResults); + } else { addDataDrivenNotCountableNode((DataDrivableResultContainer) childResults); processResults((TestResultWithChildren) childResults); -// } + } } else { //This means it isn't a container, but it's a countable row if (childResults instanceof CountableDataDrivableRowResult) { addDataDrivenNode((CountableDataDrivableRowResult) childResults); processResults((TestResultWithChildren) childResults); } else { -// since it's not a countable row result, we don't want to see info on the tag + //since it's not a countable row result, we don't want to see info on the tag processResults((TestResultWithChildren) childResults); } } Modified: trunk/jameleon-core/tst/xml/acceptance/fineGrainedTests.xml =================================================================== --- trunk/jameleon-core/tst/xml/acceptance/fineGrainedTests.xml 2007-06-16 16:41:15 UTC (rev 1602) +++ trunk/jameleon-core/tst/xml/acceptance/fineGrainedTests.xml 2007-06-19 04:34:57 UTC (rev 1603) @@ -27,7 +27,7 @@ script="tst/xml/framework/waitTagSuccess.xml" testCaseName="waitTagSuccess" checkOutcomePassed="true" - executionTimeGreaterThan="300" + executionTimeGreaterThan="295" /> <execute-jameleon-script This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <en...@us...> - 2007-06-19 14:34:41
|
Revision: 1604 http://svn.sourceforge.net/jameleon/?rev=1604&view=rev Author: engrean Date: 2007-06-19 07:34:38 -0700 (Tue, 19 Jun 2007) Log Message: ----------- Refactoring reporter Modified Paths: -------------- trunk/jameleon-core/src/java/net/sf/jameleon/ExecuteTestCase.java trunk/jameleon-core/src/java/net/sf/jameleon/plugin/junit/ExecuteJameleonScriptTag.java trunk/jameleon-core/src/java/net/sf/jameleon/reporting/ResultsReporter.java trunk/jameleon-core/tst/java/net/sf/jameleon/reporting/ResultsReporterTest.java Added Paths: ----------- trunk/jameleon-core/res/templates/results/summary/TestRunResultsFooter.html trunk/jameleon-core/res/templates/results/summary/TestRunResultsHeader.html trunk/jameleon-core/res/templates/results/summary/TestRunRowResult.html trunk/jameleon-core/src/java/net/sf/jameleon/reporting/HtmlTestRunReporter.java trunk/jameleon-core/src/java/net/sf/jameleon/reporting/ReporterUtils.java trunk/jameleon-core/src/java/net/sf/jameleon/reporting/TestRunReporter.java trunk/jameleon-core/tst/java/net/sf/jameleon/reporting/HtmlTestRunReporterTest.java trunk/jameleon-core/tst/java/net/sf/jameleon/reporting/ReporterUtilsTest.java Removed Paths: ------------- trunk/jameleon-core/res/templates/results/summary/TestResultRow.txt trunk/jameleon-core/res/templates/results/summary/TestResultsFooter.txt trunk/jameleon-core/res/templates/results/summary/TestResultsHeader.txt Deleted: trunk/jameleon-core/res/templates/results/summary/TestResultRow.txt =================================================================== --- trunk/jameleon-core/res/templates/results/summary/TestResultRow.txt 2007-06-19 04:34:57 UTC (rev 1603) +++ trunk/jameleon-core/res/templates/results/summary/TestResultRow.txt 2007-06-19 14:34:38 UTC (rev 1604) @@ -1,45 +0,0 @@ -#if ($result.failed()) -<tr class="fail"> -#set( $outcome = 'fail') -#else -#set( $outcome = 'pass') -<tr> -#end -<td title="Test Case # $testCaseNum">$testCaseNum</td> -<td class="$outcome" title="Test ${outcome}ed"><img src="${results_res_dir}/icons/${outcome}ed.gif"/></td> -<td><a href="../../$result.testCaseDocsFile" target="_new">$result.testName</a></td> -<td title="Total Execution Time">$result.executionTimeToDisplay</td> -<td title="# Iterations Run" align="right">$result.countableResults.size()</td> -<td title="# Iterations Failed" align="right">$result.failedCountableResults.size()</td> -<td title="% Tests Passed" align="right">$result.percentagePassed</td> -<td> -#if ($result.failed()) -<table border="1" width="100%" id="${result.testName}_failed"> -<tr> -<th>Row</th> -<th>Line</th> -<th>Point of Failure</th> -<th>Reason</th> -</tr> -#foreach ($failedResult in $result.failedResults) -<tr class="fail" id="line_$!{failedResult.lineNumber}"> -<td title="Row Failed">$failedResult.failedRowNum</td> -<td title="Line Failed">$!{failedResult.lineNumber}</td> -<td title="FunctionId of Point of Failure"><i>$failedResult.identifier</i></td> -<td title="Error Message"> -#if($failedResult.errorFile) -<a href="../../${failedResult.errorFile.path}" target="_new"> -#end -<pre>$!{failedResult.htmlFormattedErrorMsg}</pre> -#if($failedResult.errorFile.path) -</a> -#end -</td> -</tr> -#end -</table> -#else - -#end -</td> -</tr> \ No newline at end of file Deleted: trunk/jameleon-core/res/templates/results/summary/TestResultsFooter.txt =================================================================== --- trunk/jameleon-core/res/templates/results/summary/TestResultsFooter.txt 2007-06-19 04:34:57 UTC (rev 1603) +++ trunk/jameleon-core/res/templates/results/summary/TestResultsFooter.txt 2007-06-19 14:34:38 UTC (rev 1604) @@ -1,21 +0,0 @@ -</table> -<hr/> -<table cellspacing="1" cellpadding="0" border="1" bordercolor="#224466" width="100%"> -<tr> -<th>Total Execution Time</th> -<th>Total Tests Executed</th> -<th>Total Tests Passed</th> -<th>Total Tests Failed</th> -<th>% Passed</th> -</tr> -<tr> -<td id="totalTime">$totalTime</td> -#set ($totalRun = $totalPassed + $totalFailed) -<td id="totalRun">$totalRun</td> -<td id="totalPassed">$totalPassed</td> -<td id="totalFailed">$totalFailed</td> -<td id="percentPassed">$percentPassed</td> -</tr> -</table> -<br/> -</body></html> \ No newline at end of file Deleted: trunk/jameleon-core/res/templates/results/summary/TestResultsHeader.txt =================================================================== --- trunk/jameleon-core/res/templates/results/summary/TestResultsHeader.txt 2007-06-19 04:34:57 UTC (rev 1603) +++ trunk/jameleon-core/res/templates/results/summary/TestResultsHeader.txt 2007-06-19 14:34:38 UTC (rev 1604) @@ -1,40 +0,0 @@ -<html> -<head> -<meta http-equiv='content-type' content='text/html; charset=UTF-8'/> -<title>Jameleon Test Case Results</title> -<style type="text/css"> -<!-- -body, table { font-family: arial,sans-serif; font-size: x-small;} -a:link {color #e41819;} -a:visited {color #e41819;} -th {background: #0b3b63; color: #FFFFFF; text-align: left; font-size: small;} -tr {background: #FFFFFF; color: #000; font-size: small;} -td {text-align: left;} -tr.fail {background: #d6d6d6;} -td.pass {color: #1cc32b; font-size: 1.6em; font-family: tahoma,geneva,helvetica,arial,sans-serif;} -td.fail {color: #e41819; font-size: large; font-weight: bold; font-family: tahoma,geneva,helvetica,arial,sans-serif;} ---> -</style> -</head> -<body bgcolor="#FFFFFF" topmargin="6" leftmargin="6"> -<hr size="1" noshade="true"/> -Start time: ${startTime}<br/> -#if ($organization) -Organization: ${organization}<br/> -#end -#if ($environment) -Environment: ${environment}<br/> -#end -<br/> -<table cellspacing="1" cellpadding="0" border="1" bordercolor="#224466" width="100%"> -<tr> -<th width="2%"></th> -<th width="1%"></th> - -<th width="25%">Test Case Name</th> -<th width="4%">Time</th> -<th width="2%">Run</th> -<th width="2%">Fail</th> -<th width="3%">Pass</th> -<th>Failures</th> -</tr> \ No newline at end of file Copied: trunk/jameleon-core/res/templates/results/summary/TestRunResultsFooter.html (from rev 1602, trunk/jameleon-core/res/templates/results/summary/TestResultsFooter.txt) =================================================================== --- trunk/jameleon-core/res/templates/results/summary/TestRunResultsFooter.html (rev 0) +++ trunk/jameleon-core/res/templates/results/summary/TestRunResultsFooter.html 2007-06-19 14:34:38 UTC (rev 1604) @@ -0,0 +1,21 @@ +</table> +<hr/> +<table cellspacing="1" cellpadding="0" border="1" bordercolor="#224466" width="100%"> +<tr> +<th>Total Execution Time</th> +<th>Total Tests Executed</th> +<th>Total Tests Passed</th> +<th>Total Tests Failed</th> +<th>% Passed</th> +</tr> +<tr> +<td id="totalTime">$totalTime</td> +#set ($totalRun = $totalPassed + $totalFailed) +<td id="totalRun">$totalRun</td> +<td id="totalPassed">$totalPassed</td> +<td id="totalFailed">$totalFailed</td> +<td id="percentPassed">$percentPassed</td> +</tr> +</table> +<br/> +</body></html> \ No newline at end of file Property changes on: trunk/jameleon-core/res/templates/results/summary/TestRunResultsFooter.html ___________________________________________________________________ Name: svn:mime-type + text/plain Name: svn:eol-style + native Copied: trunk/jameleon-core/res/templates/results/summary/TestRunResultsHeader.html (from rev 1602, trunk/jameleon-core/res/templates/results/summary/TestResultsHeader.txt) =================================================================== --- trunk/jameleon-core/res/templates/results/summary/TestRunResultsHeader.html (rev 0) +++ trunk/jameleon-core/res/templates/results/summary/TestRunResultsHeader.html 2007-06-19 14:34:38 UTC (rev 1604) @@ -0,0 +1,40 @@ +<html> +<head> +<meta http-equiv='content-type' content='text/html; charset=UTF-8'/> +<title>Jameleon Test Case Results</title> +<style type="text/css"> +<!-- +body, table { font-family: arial,sans-serif; font-size: x-small;} +a:link {color #e41819;} +a:visited {color #e41819;} +th {background: #0b3b63; color: #FFFFFF; text-align: left; font-size: small;} +tr {background: #FFFFFF; color: #000; font-size: small;} +td {text-align: left;} +tr.fail {background: #d6d6d6;} +td.pass {color: #1cc32b; font-size: 1.6em; font-family: tahoma,geneva,helvetica,arial,sans-serif;} +td.fail {color: #e41819; font-size: large; font-weight: bold; font-family: tahoma,geneva,helvetica,arial,sans-serif;} +--> +</style> +</head> +<body bgcolor="#FFFFFF" topmargin="6" leftmargin="6"> +<hr size="1" noshade="true"/> +Start time: ${startTime}<br/> +#if ($organization) +Organization: ${organization}<br/> +#end +#if ($environment) +Environment: ${environment}<br/> +#end +<br/> +<table cellspacing="1" cellpadding="0" border="1" bordercolor="#224466" width="100%"> +<tr> +<th width="2%"></th> +<th width="1%"></th> + +<th width="25%">Test Case Name</th> +<th width="4%">Time</th> +<th width="2%">Run</th> +<th width="2%">Fail</th> +<th width="3%">Pass</th> +<th>Failures</th> +</tr> \ No newline at end of file Property changes on: trunk/jameleon-core/res/templates/results/summary/TestRunResultsHeader.html ___________________________________________________________________ Name: svn:mime-type + text/plain Name: svn:eol-style + native Copied: trunk/jameleon-core/res/templates/results/summary/TestRunRowResult.html (from rev 1602, trunk/jameleon-core/res/templates/results/summary/TestResultRow.txt) =================================================================== --- trunk/jameleon-core/res/templates/results/summary/TestRunRowResult.html (rev 0) +++ trunk/jameleon-core/res/templates/results/summary/TestRunRowResult.html 2007-06-19 14:34:38 UTC (rev 1604) @@ -0,0 +1,45 @@ +#if ($result.failed()) +<tr class="fail"> +#set( $outcome = 'fail') +#else +#set( $outcome = 'pass') +<tr> +#end +<td title="Test Case # $testCaseNum">$testCaseNum</td> +<td class="$outcome" title="Test ${outcome}ed"><img src="${results_res_dir}/icons/${outcome}ed.gif"/></td> +<td><a href="../../$result.testCaseDocsFile" target="_new">$result.testName</a></td> +<td title="Total Execution Time">$result.executionTimeToDisplay</td> +<td title="# Iterations Run" align="right">$result.countableResults.size()</td> +<td title="# Iterations Failed" align="right">$result.failedCountableResults.size()</td> +<td title="% Tests Passed" align="right">$result.percentagePassed</td> +<td> +#if ($result.failed()) +<table border="1" width="100%" id="${result.testName}_failed"> +<tr> +<th>Row</th> +<th>Line</th> +<th>Point of Failure</th> +<th>Reason</th> +</tr> +#foreach ($failedResult in $result.failedResults) +<tr class="fail" id="line_$!{failedResult.lineNumber}"> +<td title="Row Failed">$failedResult.failedRowNum</td> +<td title="Line Failed">$!{failedResult.lineNumber}</td> +<td title="FunctionId of Point of Failure"><i>$failedResult.identifier</i></td> +<td title="Error Message"> +#if($failedResult.errorFile) +<a href="../../${failedResult.errorFile.path}" target="_new"> +#end +<pre>$!{failedResult.htmlFormattedErrorMsg}</pre> +#if($failedResult.errorFile.path) +</a> +#end +</td> +</tr> +#end +</table> +#else + +#end +</td> +</tr> \ No newline at end of file Property changes on: trunk/jameleon-core/res/templates/results/summary/TestRunRowResult.html ___________________________________________________________________ Name: svn:mime-type + text/plain Name: svn:eol-style + native Modified: trunk/jameleon-core/src/java/net/sf/jameleon/ExecuteTestCase.java =================================================================== --- trunk/jameleon-core/src/java/net/sf/jameleon/ExecuteTestCase.java 2007-06-19 04:34:57 UTC (rev 1603) +++ trunk/jameleon-core/src/java/net/sf/jameleon/ExecuteTestCase.java 2007-06-19 14:34:38 UTC (rev 1604) @@ -184,7 +184,7 @@ JameleonUtility.createDirStructure(resultsFile.getParentFile()); Writer writer = new FileWriter(resultsFile); reporter = ResultsReporter.getInstance(); - reporter.setWriter(writer); + reporter.getTestRunReporter().setWriter(writer); }catch(IOException ioe){ throw new JameleonException("Could not configure Jameleon to write out results file", ioe); } @@ -199,9 +199,9 @@ public void endTestRun(){ TestRunEventHandler.getInstance().endTestRun(Calendar.getInstance()); TestCaseEventHandler.getInstance().removeTestCaseListener(reporter); - TestRunEventHandler.getInstance().removeTestRunListener(reporter); + TestRunEventHandler.getInstance().removeTestRunListener(reporter); try { - reporter.getWriter().close(); + reporter.getTestRunReporter().getWriter().close(); } catch (IOException e) { System.err.println("Error closing test results summary writer"); e.printStackTrace(); Modified: trunk/jameleon-core/src/java/net/sf/jameleon/plugin/junit/ExecuteJameleonScriptTag.java =================================================================== --- trunk/jameleon-core/src/java/net/sf/jameleon/plugin/junit/ExecuteJameleonScriptTag.java 2007-06-19 04:34:57 UTC (rev 1603) +++ trunk/jameleon-core/src/java/net/sf/jameleon/plugin/junit/ExecuteJameleonScriptTag.java 2007-06-19 14:34:38 UTC (rev 1604) @@ -241,9 +241,9 @@ postcondition = true; denyAll = new DenyAllFilter(); jmln = new ExecuteTestCase(DEBUG); - timestampedResults = ResultsReporter.getInstance().getWriter(); + timestampedResults = ResultsReporter.getInstance().getTestRunReporter().getWriter(); htmlResults = new StringWriter(); - ResultsReporter.getInstance().setWriter(htmlResults); + ResultsReporter.getInstance().getTestRunReporter().setWriter(htmlResults); originalCounter = ResultsReporter.getInstance().getTestCaseCounter(); ResultsReporter.getInstance().setTestCaseCounter(new TestCaseCounter()); LoggerRepository repos = LogManager.getLoggerRepository(); @@ -261,7 +261,7 @@ } public void tearDown(){ - ResultsReporter.getInstance().setWriter(timestampedResults); + ResultsReporter.getInstance().getTestRunReporter().setWriter(timestampedResults); jmln = null; TestCaseEventHandler.getInstance().removeTestCaseListener(listener); reverseTestCaseCount(); Added: trunk/jameleon-core/src/java/net/sf/jameleon/reporting/HtmlTestRunReporter.java =================================================================== --- trunk/jameleon-core/src/java/net/sf/jameleon/reporting/HtmlTestRunReporter.java (rev 0) +++ trunk/jameleon-core/src/java/net/sf/jameleon/reporting/HtmlTestRunReporter.java 2007-06-19 14:34:38 UTC (rev 1604) @@ -0,0 +1,156 @@ +/* + Jameleon - An automation testing tool.. + Copyright (C) 2007 Christian W. Hargraves (en...@ho...) + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +*/ +package net.sf.jameleon.reporting; + +import net.sf.jameleon.TestCaseTag; +import net.sf.jameleon.result.TestCaseResult; +import net.sf.jameleon.util.Configurator; +import net.sf.jameleon.util.JameleonDefaultValues; + +import java.io.IOException; +import java.io.Writer; +import java.util.Calendar; +import java.util.HashMap; +import java.util.Map; + +/** + * Reports on all script results in a given test run as a summary in HTML. The current implementation reports + * a single result as an HTML table row. + */ +public class HtmlTestRunReporter implements TestRunReporter { + + public static final String DEFAULT_HEADER_TEMPLATE = "templates/results/summary/TestRunResultsHeader.html"; + public static final String DEFAULT_FOOTER_TEMPLATE = "templates/results/summary/TestRunResultsFooter.html"; + public static final String DEFAULT_RESULT_ROW_TEMPLATE = "templates/results/summary/TestRunRowResult.html"; + + private Writer writer; + + private String testRunResultsHeaderTemplate = DEFAULT_HEADER_TEMPLATE; + private String testResultRowTemplate = DEFAULT_RESULT_ROW_TEMPLATE; + private String testRunResultsFooterTemplate = DEFAULT_FOOTER_TEMPLATE; + + public void reportScriptResult(TestCaseTag tct, TestCaseCounter counter) { + Map params = new HashMap(); + params.put("result", tct.getResults()); + params.put("resultsFile", tct.getResults().getTestCaseDocsFile()); + params.put("results_res_dir", JameleonDefaultValues.RESULTS_RES_DIR); + params.put("testCaseNum", counter.getTestCaseNum()+""); + ReporterUtils.outputToTemplate(writer, testResultRowTemplate, params); + } + + public void reportTestRunStart(Calendar startTime) { + Configurator config = Configurator.getInstance(); + Map params = new HashMap(); + params.put("organization", config.getValue("organization")); + params.put("environment", config.getValue("testEnvironment")); + params.put("startTime", startTime.getTime()); + ReporterUtils.outputToTemplate(writer, testRunResultsHeaderTemplate, params); + } + + public void reportTestRunComplete(Calendar startTime, Calendar endTime, TestCaseCounter counter) { + Map params = new HashMap(); + params.put("totalPassed", new Integer(counter.getNumPassed())); + params.put("totalFailed", new Integer(counter.getNumFailed())); + params.put("totalTime", ReporterUtils.getExecutionTime(startTime, endTime)); + String percentagePassed = TestCaseResult.getPercentagePassed(counter.getNumRun(), counter.getNumFailed()); + params.put("percentPassed", percentagePassed); + ReporterUtils.outputToTemplate(writer, testRunResultsFooterTemplate, params); + } + + public void cleanUp() { + try{ + if (writer != null){ + writer.flush(); + writer.close(); + writer = null; + } + }catch(IOException ioe){ + ioe.printStackTrace(); + } + } + + + ////////////////////////////////////////////////////////////////////////////////////////////////////////// + ////// GETTERS & SETTERS ////// + ////////////////////////////////////////////////////////////////////////////////////////////////////////// + + /** + * Gets the Writer to write the html row out. + * @return The Writer to write the html row out. + */ + public Writer getWriter() { + return writer; + } + + /** + * Sets the Writer to write the html row out. + * @param writer The Writer to write the html row out. + */ + public void setWriter(Writer writer) { + this.writer = writer; + } + + /** + * Gets the test run results footer template + * @return The test run results footer template + */ + public String getTestRunResultsFooterTemplate() { + return testRunResultsFooterTemplate; + } + + /** + * Sets the test run results footer template + * @param testRunResultsFooterTemplate The test run results footer template + */ + public void setTestRunResultsFooterTemplate(String testRunResultsFooterTemplate) { + this.testRunResultsFooterTemplate = testRunResultsFooterTemplate; + } + + /** + * Gets the template for the test run results header file + * @return The test run results template + */ + public String getTestRunResultsHeaderTemplate() { + return testRunResultsHeaderTemplate; + } + + /** + * Sets the template for the test run results header file + * @param testRunResultsHeaderTemplate The test run results template + */ + public void setTestRunResultsHeaderTemplate(String testRunResultsHeaderTemplate) { + this.testRunResultsHeaderTemplate = testRunResultsHeaderTemplate; + } + + /** + * Gets the template for the invidual test script result + * @return The template for the invidual test script result + */ + public String getTestResultRowTemplate() { + return testResultRowTemplate; + } + + /** + * Sets the template for the invidual test script result + * @param testResultRowTemplate The template for the invidual test script result + */ + public void setTestResultRowTemplate(String testResultRowTemplate) { + this.testResultRowTemplate = testResultRowTemplate; + } +} Property changes on: trunk/jameleon-core/src/java/net/sf/jameleon/reporting/HtmlTestRunReporter.java ___________________________________________________________________ Name: svn:mime-type + text/plain Name: svn:eol-style + natiave Added: trunk/jameleon-core/src/java/net/sf/jameleon/reporting/ReporterUtils.java =================================================================== --- trunk/jameleon-core/src/java/net/sf/jameleon/reporting/ReporterUtils.java (rev 0) +++ trunk/jameleon-core/src/java/net/sf/jameleon/reporting/ReporterUtils.java 2007-06-19 14:34:38 UTC (rev 1604) @@ -0,0 +1,52 @@ +/* + Jameleon - An automation testing tool.. + Copyright (C) 2007 Christian W. Hargraves (en...@ho...) + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +*/ +package net.sf.jameleon.reporting; + +import net.sf.jameleon.exception.JameleonException; +import net.sf.jameleon.util.JameleonUtility; +import net.sf.jameleon.util.TemplateProcessor; + +import java.io.IOException; +import java.io.Writer; +import java.util.Calendar; +import java.util.Map; + +/** + * A utility class for the reporting package + */ +public class ReporterUtils { + + private ReporterUtils(){} + + public static String getExecutionTime(Calendar startTime, Calendar endTime){ + return JameleonUtility.executionTimeToString(endTime.getTimeInMillis() - startTime.getTimeInMillis()); + } + + public static void outputToTemplate(Writer writer, String template, Map params){ + try { + TemplateProcessor processor = new TemplateProcessor(template); + writer.write(processor.transformToString(params)); + writer.flush(); + } catch (IOException e) { + throw new JameleonException("Could not write results to main HTML results file: "+e.getMessage()); + } + } + + +} Property changes on: trunk/jameleon-core/src/java/net/sf/jameleon/reporting/ReporterUtils.java ___________________________________________________________________ Name: svn:mime-type + text/plain Name: svn:eol-style + native Modified: trunk/jameleon-core/src/java/net/sf/jameleon/reporting/ResultsReporter.java =================================================================== --- trunk/jameleon-core/src/java/net/sf/jameleon/reporting/ResultsReporter.java 2007-06-19 04:34:57 UTC (rev 1603) +++ trunk/jameleon-core/src/java/net/sf/jameleon/reporting/ResultsReporter.java 2007-06-19 14:34:38 UTC (rev 1604) @@ -23,47 +23,44 @@ import net.sf.jameleon.event.TestCaseListener; import net.sf.jameleon.event.TestRunEvent; import net.sf.jameleon.event.TestRunListener; -import net.sf.jameleon.exception.JameleonException; import net.sf.jameleon.result.JameleonTestResult; import net.sf.jameleon.result.TestCaseResult; -import net.sf.jameleon.util.Configurator; import net.sf.jameleon.util.JameleonDefaultValues; import net.sf.jameleon.util.JameleonUtility; import net.sf.jameleon.util.TemplateProcessor; import java.io.File; -import java.io.IOException; -import java.io.Writer; import java.text.SimpleDateFormat; -import java.util.*; +import java.util.Calendar; +import java.util.HashMap; +import java.util.Iterator; +import java.util.List; /** * Writes the HTML results out to a file. This class writes both the main results * as well as the individual testcase docs. */ public class ResultsReporter implements TestCaseListener, TestRunListener { - private Writer writer; + private static final SimpleDateFormat format = new SimpleDateFormat("yyyy-MMMMM-dd_hh-mm-ss-SS-aaa"); private static final SimpleDateFormat shortFormat = new SimpleDateFormat("dd-MM HH:mm:ss:SS"); - public static final String DEFAULT_HEADER_TEMPLATE = "templates/results/summary/TestResultsHeader.txt"; - public static final String DEFAULT_FOOTER_TEMPLATE = "templates/results/summary/TestResultsFooter.txt"; - public static final String DEFAULT_RESULT_ROW_TEMPLATE = "templates/results/summary/TestResultRow.txt"; - private String testResultsHeaderTemplate = DEFAULT_HEADER_TEMPLATE; - private String testResultsFooterTemplate = DEFAULT_FOOTER_TEMPLATE; - private String testResultRowTemplate = DEFAULT_RESULT_ROW_TEMPLATE; - private Calendar startTime; + private static ResultsReporter reporter; - private static DTreeManager dtreeManager; + + private Calendar startTime; + private DTreeManager dtreeManager; private TestCaseCounter counter; + private TestRunReporter testRunReporter; // Make this class a singleton private ResultsReporter(){ counter = new TestCaseCounter(); + dtreeManager = new DTreeManager(); + testRunReporter = new HtmlTestRunReporter(); } public static ResultsReporter getInstance(){ if (reporter == null){ - dtreeManager = new DTreeManager(); reporter = new ResultsReporter(); } return reporter; @@ -71,12 +68,7 @@ public static void clearInstance(){ if (reporter != null){ - try{ - reporter.getWriter().flush(); - reporter.getWriter().close(); - }catch(IOException ioe){ - ioe.printStackTrace(); - } + reporter.getTestRunReporter().cleanUp(); reporter = null; } } @@ -96,62 +88,6 @@ return new File(getResultsDir(tct.getResultsDir(false), startTime), tct.getResults().getTestName()); } - /** - * Output the header to the writer - * @throws JameleonException when the results could not be written to - */ - protected void outputHeader() throws JameleonException{ - Configurator config = Configurator.getInstance(); - Map params = new HashMap(); - params.put("organization", config.getValue("organization")); - params.put("environment", config.getValue("testEnvironment")); - params.put("startTime", startTime.getTime()); - outputToTemplate(testResultsHeaderTemplate, params); - } - - /** - * Ouputs the result for a particular test case - * @param tct The test case result to report on - * @throws JameleonException when the row result can't be written - */ - public void outputRow(TestCaseTag tct) throws JameleonException{ - Map params = new HashMap(); - params.put("result", tct.getResults()); - params.put("resultsFile", tct.getResults().getTestCaseDocsFile()); - params.put("results_res_dir", JameleonDefaultValues.RESULTS_RES_DIR); - params.put("testCaseNum", counter.getTestCaseNum()+""); - outputToTemplate(testResultRowTemplate, params); - } - - /** - * Output the footer to the writer - * @param endTime the time the test run ended - * @throws JameleonException when the results could not be written to - */ - protected void outputFooter(Calendar endTime) throws JameleonException { - Map params = new HashMap(); - params.put("totalPassed", new Integer(counter.getNumPassed())); - params.put("totalFailed", new Integer(counter.getNumFailed())); - params.put("totalTime", getExecutionTime(endTime)); - String percentagePassed = TestCaseResult.getPercentagePassed(counter.getNumRun(), counter.getNumFailed()); - params.put("percentPassed", percentagePassed); - outputToTemplate(testResultsFooterTemplate, params); - } - - private String getExecutionTime(Calendar endTime){ - return JameleonUtility.executionTimeToString(endTime.getTimeInMillis() - startTime.getTimeInMillis()); - } - - private void outputToTemplate(String template, Map params){ - try { - TemplateProcessor processor = new TemplateProcessor(template); - writer.write(processor.transformToString(params)); - writer.flush(); - } catch (IOException e) { - throw new JameleonException("Could not write results to main HTML results file: "+e.getMessage()); - } - } - protected void genTestCaseResultsDoc(TestCaseTag tct){ if (tct.isGenTestCaseDocs()) { File htmlFile = new File(tct.getTimestampedResultsDir(), tct.getResults().getTestName()+".html"); @@ -183,38 +119,6 @@ //// SETTERS & GETTERS //// /////////////////////////////////////////////////////////////////////////////////////////////// - public void setWriter(Writer writer) { - this.writer = writer; - } - - public Writer getWriter() { - return writer; - } - - /** - * Gets the template for the overall results header file - * @return the template for the overall results header file - */ - public String getTestResultsHeaderTemplate() { - return testResultsHeaderTemplate; - } - - /** - * Sets the template for the overall results header file - * @param testResultsHeaderTemplate the template to use for the header of the overall results - */ - public void setTestResultsHeaderTemplate(String testResultsHeaderTemplate) { - this.testResultsHeaderTemplate = testResultsHeaderTemplate; - } - - public String getTestResultsFooterTemplate() { - return testResultsFooterTemplate; - } - - public void setTestResultsFooterTemplate(String testResultsFooterTemplate) { - this.testResultsFooterTemplate = testResultsFooterTemplate; - } - public Calendar getStartTime(){ return startTime; } @@ -223,14 +127,6 @@ this.startTime = startTime; } - public void setTestResultRowTemplate(String testResultRowTemplate) { - this.testResultRowTemplate = testResultRowTemplate; - } - - public String getTestResultRowTemplate() { - return testResultRowTemplate; - } - public TestCaseCounter getTestCaseCounter() { return counter; } @@ -239,6 +135,14 @@ this.counter = counter; } + public TestRunReporter getTestRunReporter() { + return testRunReporter; + } + + public void setTestRunReporter(TestRunReporter testRunReporter) { + this.testRunReporter = testRunReporter; + } + /////////////////////////////////////////////////////////////////////////////////////////////// //// TestCaseListner methods //// /////////////////////////////////////////////////////////////////////////////////////////////// @@ -258,7 +162,7 @@ int failed = result.getFailedCountableResults().size(); counter.incrementPassed(totalRun - failed); counter.incrementFailed(failed); - outputRow(tct); + testRunReporter.reportScriptResult(tct, counter); printTestCaseResultsToStdOut(tct); }finally{ counter.incrementTestCaseNum(1); @@ -284,16 +188,16 @@ public void beginTestRun(TestRunEvent event) { setStartTime((Calendar)event.getSource()); - outputHeader(); + testRunReporter.reportTestRunStart(getStartTime()); } public void endTestRun(TestRunEvent event) { - outputFooter((Calendar)event.getSource()); + testRunReporter.reportTestRunComplete(getStartTime(), (Calendar)event.getSource(), counter); System.out.println("______________________________________________________\n"); System.out.println("Test Run: " + shortFormat.format(startTime.getTime())); System.out.print("Tests run: " + counter.getNumRun()); System.out.print(" Failed: " + counter.getNumFailed()); - System.out.println(" Time: " + getExecutionTime((Calendar)event.getSource())); + System.out.println(" Time: " + ReporterUtils.getExecutionTime(startTime, (Calendar)event.getSource())); System.out.println("______________________________________________________"); resetStats(); } Added: trunk/jameleon-core/src/java/net/sf/jameleon/reporting/TestRunReporter.java =================================================================== --- trunk/jameleon-core/src/java/net/sf/jameleon/reporting/TestRunReporter.java (rev 0) +++ trunk/jameleon-core/src/java/net/sf/jameleon/reporting/TestRunReporter.java 2007-06-19 14:34:38 UTC (rev 1604) @@ -0,0 +1,67 @@ +/* + Jameleon - An automation testing tool.. + Copyright (C) 2007 Christian W. Hargraves (en...@ho...) + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +*/ +package net.sf.jameleon.reporting; + +import net.sf.jameleon.TestCaseTag; + +import java.io.Writer; +import java.util.Calendar; + +/** + * Reports on a test run, including each script result. + */ +public interface TestRunReporter { + /** + * Reports the result of the script. + * @param tct The test case of the script + * @param counter The test case counter of the test run + */ + void reportScriptResult(TestCaseTag tct, TestCaseCounter counter); + + /** + * Reports the start of a test run. + * @param startTime The time the test run was kicked off + */ + void reportTestRunStart(Calendar startTime); + + /** + * Reports the completion of a test run. + * @param startTime The time the test run began + * @param endTime The time the test run was completed + * @param counter The number of test cases run passed and failed. + */ + void reportTestRunComplete(Calendar startTime, Calendar endTime, TestCaseCounter counter); + + /** + * Cleans up any resources used + */ + void cleanUp(); + + /** + * Gets the Writer to use to write to results to + * @return The Writer to use to write to results to + */ + Writer getWriter(); + + /** + * Sets the Writer to use to write to results to + * @param writer The Writer to use to write to results to + */ + void setWriter(Writer writer); +} Property changes on: trunk/jameleon-core/src/java/net/sf/jameleon/reporting/TestRunReporter.java ___________________________________________________________________ Name: svn:mime-type + text/plain Name: svn:eol-style + native Added: trunk/jameleon-core/tst/java/net/sf/jameleon/reporting/HtmlTestRunReporterTest.java =================================================================== --- trunk/jameleon-core/tst/java/net/sf/jameleon/reporting/HtmlTestRunReporterTest.java (rev 0) +++ trunk/jameleon-core/tst/java/net/sf/jameleon/reporting/HtmlTestRunReporterTest.java 2007-06-19 14:34:38 UTC (rev 1604) @@ -0,0 +1,162 @@ +/* + Jameleon - An automation testing tool.. + Copyright (C) 2007 Christian W. Hargraves (en...@ho...) + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +*/ +package net.sf.jameleon.reporting; + +import junit.framework.Test; +import junit.framework.TestCase; +import junit.framework.TestSuite; +import net.sf.jameleon.TestCaseTag; +import net.sf.jameleon.bean.FunctionalPoint; +import net.sf.jameleon.result.CountableFunctionResult; +import net.sf.jameleon.result.TestCaseResult; +import net.sf.jameleon.util.Configurator; + +import java.io.StringWriter; +import java.util.Calendar; + +public class HtmlTestRunReporterTest extends TestCase { + + HtmlTestRunReporter reporter; + StringWriter writer; + + public static void main(String args[]) { + junit.textui.TestRunner.run(suite()); + } + + public static Test suite() { + return new TestSuite(HtmlTestRunReporterTest.class); + } + + public HtmlTestRunReporterTest(String name) { + super(name); + } + + public void setUp(){ + reporter = new HtmlTestRunReporter(); + writer = new StringWriter(); + reporter.setWriter(writer); + } + + public void testCleanUp() throws Exception{ + assertNotNull("Writer should not be null", reporter.getWriter()); + reporter.getWriter().write("some text"); + reporter.cleanUp(); + assertNull("writer should be null", reporter.getWriter()); + } + + public void testGetSetWriter(){ + reporter.setWriter(writer); + assertTrue("writer should be the same", writer == reporter.getWriter()); + } + + public void testGettersSetters(){ + assertEquals("Default results header", HtmlTestRunReporter.DEFAULT_HEADER_TEMPLATE, reporter.getTestRunResultsHeaderTemplate()); + reporter.setTestRunResultsHeaderTemplate("foo"); + assertEquals("results header", "foo", reporter.getTestRunResultsHeaderTemplate()); + + assertEquals("Default results footer", HtmlTestRunReporter.DEFAULT_FOOTER_TEMPLATE, reporter.getTestRunResultsFooterTemplate()); + reporter.setTestRunResultsFooterTemplate("foo"); + assertEquals("results footer", "foo", reporter.getTestRunResultsFooterTemplate()); + + assertEquals("Default result row", HtmlTestRunReporter.DEFAULT_RESULT_ROW_TEMPLATE, reporter.getTestResultRowTemplate()); + reporter.setTestResultRowTemplate("foo"); + assertEquals("results result row", "foo", reporter.getTestResultRowTemplate()); + } + + + public void testReportTestRunStart() throws Exception{ + Configurator config = Configurator.getInstance(); + config.setValue("organization", "sf"); + config.setValue("testEnvironment", "foo"); + Calendar startTime = Calendar.getInstance(); + reporter.reportTestRunStart(startTime); + String header = writer.toString(); + assertTrue("The writer was populated with something", header.length() > 0); + assertTrue("The writer should contain an org", header.indexOf("Start time: "+startTime.getTime()+"<br/>") > 0); + assertTrue("The file should contain an organization", header.indexOf("Organization: sf<br/>") >= 0); + assertTrue("The file should contain an environment", header.indexOf("Environment: foo<br/>") >= 0); + } + + public void testReportTestRunComplete() throws Exception{ + TestCaseCounter counter = new TestCaseCounter(); + counter.incrementPassed(12); + counter.incrementFailed(12); + Calendar startTime = Calendar.getInstance(); + Calendar endTime = Calendar.getInstance(); + endTime.set(Calendar.SECOND, startTime.get(Calendar.SECOND) + 3); + reporter.reportTestRunComplete(startTime, endTime, counter); + String results = writer.toString(); + assertTrue("The writer was populated with something", results.length() > 0); + assertTrue("execution time " + results, results.indexOf("<td id=\"totalTime\">0h 0m 3") >= 0); + assertTrue("total executed", results.indexOf("<td id=\"totalRun\">24") > 0); + assertTrue("total passed", results.indexOf("<td id=\"totalPassed\">12") > 0); + assertTrue("total failed", results.indexOf("<td id=\"totalFailed\">12") > 0); + assertTrue("percent passed", results.indexOf("<td id=\"percentPassed\">50%") > 0); + } + + + public void testReportScriptResult(){ + TestCaseTag tct = initTestCaseTag(); + TestCaseCounter counter = new TestCaseCounter(); + reporter.reportScriptResult(tct, counter); + + StringWriter writer = (StringWriter)reporter.getWriter(); + String row = writer.toString(); + assertTrue("The writer was populated with something", row.length() > 0); + assertTrue("Should be the 1st test case",row.indexOf("<td title=\"Test Case # 1\">1</td>") >=0 ); + assertTrue("The file should contain a passed td " + row, row.indexOf("<td class=\"pass\" title=\"Test passed\">") >= 0); + assertTrue("The file should contain a passed gif " + row, row.indexOf("passed.gif") >= 0); + assertFalse("The file should not contain a failed row info column", row.indexOf("Row Failed") > -1); + + counter.incrementTestCaseNum(1); + reporter.setWriter(new StringWriter()); + FunctionalPoint fp2 = new FunctionalPoint(); + fp2.addTagName("failed-tag"); + CountableFunctionResult cfr = new CountableFunctionResult(fp2, tct.getResults()); + cfr.setFailed(); + cfr.setError(new RuntimeException("an error message")); + cfr.setLineNumber(23); + reporter.reportScriptResult(tct, counter); + writer = (StringWriter)reporter.getWriter(); + row = writer.toString(); + assertTrue("The writer was populated with something", row.length() > 0); + assertTrue("Should be the 1st test case",row.indexOf("<td title=\"Test Case # 2\">2</td>") >=0 ); + assertTrue("The file should contain a failed td " + row, row.indexOf("<td class=\"fail\" title=\"Test failed\">") >= 0); + assertTrue("The file should contain a failed gif " + row, row.indexOf("failed.gif") >= 0); + assertTrue("The file should contain a failed line # " + row, row.indexOf("<td title=\"Line Failed\">23</td>") >= 0); + assertTrue("The file should contain a failed tag " + row, row.indexOf("<td title=\"FunctionId of Point of Failure\"><i>failed-tag</i></td>") >= 0); + assertTrue("The file should contain a failed row info column " + row, row.indexOf("Row Failed") > -1); + + } + + private TestCaseTag initTestCaseTag(){ + FunctionalPoint fp = new FunctionalPoint(); + fp.addTagName("tc"); + TestCaseResult tcr = new TestCaseResult(fp); + tcr.setTestCaseDocsFile("some/dir/some_file.html"); + tcr.setTestName("some name"); + for (int i = 0; i < 3; i++){ + new CountableFunctionResult(fp, tcr); + } + TestCaseTag tct = new TestCaseTag(); + tct.setResults(tcr); + return tct; + } + +} Property changes on: trunk/jameleon-core/tst/java/net/sf/jameleon/reporting/HtmlTestRunReporterTest.java ___________________________________________________________________ Name: svn:mime-type + text/plain Name: svn:eol-style + native Added: trunk/jameleon-core/tst/java/net/sf/jameleon/reporting/ReporterUtilsTest.java =================================================================== --- trunk/jameleon-core/tst/java/net/sf/jameleon/reporting/ReporterUtilsTest.java (rev 0) +++ trunk/jameleon-core/tst/java/net/sf/jameleon/reporting/ReporterUtilsTest.java 2007-06-19 14:34:38 UTC (rev 1604) @@ -0,0 +1,50 @@ +/* + Jameleon - An automation testing tool.. + Copyright (C) 2007 Christian W. Hargraves (en...@ho...) + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +*/ +package net.sf.jameleon.reporting; + +import junit.framework.Test; +import junit.framework.TestCase; +import junit.framework.TestSuite; + +import java.util.Calendar; + +public class ReporterUtilsTest extends TestCase { + + public static void main(String args[]) { + junit.textui.TestRunner.run(suite()); + } + + public static Test suite() { + return new TestSuite(ReporterUtilsTest.class); + } + + public ReporterUtilsTest(String name) { + super(name); + } + + public void testGetExecutionTime(){ + Calendar startTime = Calendar.getInstance(); + Calendar endTime = Calendar.getInstance(); + endTime.set(Calendar.SECOND, startTime.get(Calendar.SECOND) + 3); + endTime.set(Calendar.MINUTE, startTime.get(Calendar.MINUTE) + 2); + endTime.set(Calendar.HOUR, startTime.get(Calendar.HOUR) + 1); + String execTime = ReporterUtils.getExecutionTime(startTime, endTime); + assertEquals("execution time", "1h 2m 3.000s", execTime); + } +} Property changes on: trunk/jameleon-core/tst/java/net/sf/jameleon/reporting/ReporterUtilsTest.java ___________________________________________________________________ Name: svn:mime-type + text/plain Name: svn:eol-style + native Modified: trunk/jameleon-core/tst/java/net/sf/jameleon/reporting/ResultsReporterTest.java =================================================================== --- trunk/jameleon-core/tst/java/net/sf/jameleon/reporting/ResultsReporterTest.java 2007-06-19 04:34:57 UTC (rev 1603) +++ trunk/jameleon-core/tst/java/net/sf/jameleon/reporting/ResultsReporterTest.java 2007-06-19 14:34:38 UTC (rev 1604) @@ -31,7 +31,6 @@ import net.sf.jameleon.util.JameleonUtility; import java.io.File; -import java.io.StringWriter; import java.io.Writer; import java.util.Calendar; @@ -39,6 +38,7 @@ private ResultsReporter reporter; private static final File BASE_DIR = new File("jameleon_test_results"); + private TestRunReporterStub testRunReporter; public static void main(String args[]) { junit.textui.TestRunner.run(suite()); @@ -55,7 +55,8 @@ public void setUp() throws Exception{ super.setUp(); reporter = ResultsReporter.getInstance(); - reporter.setWriter(new StringWriter()); + testRunReporter = new TestRunReporterStub(); + reporter.setTestRunReporter(testRunReporter); } public void tearDown() throws Exception { @@ -101,7 +102,8 @@ config.setValue("testEnvironment", "foo"); Calendar startTime = Calendar.getInstance(); reporter.beginTestRun(new TestRunEvent(startTime)); - validateHeader(startTime); + assertEquals("Start time", startTime, reporter.getStartTime()); + assertTrue("reportTestRunStart wasn't called", testRunReporter.reportTestRunStartCalled); } public void testEndTestRun(){ @@ -111,10 +113,11 @@ Calendar endTime = Calendar.getInstance(); reporter.setStartTime(startTime); reporter.endTestRun(new TestRunEvent(endTime)); - validateFooter("0h 0m 0"); assertEquals("# passed", 0, reporter.getTestCaseCounter().getNumPassed()); assertEquals("# failed", 0, reporter.getTestCaseCounter().getNumFailed()); assertEquals("test case #", 1, reporter.getTestCaseCounter().getTestCaseNum()); + assertTrue("reportTestRunComplete wasn't called", testRunReporter.reportTestRunCompleteCalled); + } public void testBeginTestCase(){ @@ -144,6 +147,7 @@ assertEquals("# of tests passed", 3, reporter.getTestCaseCounter().getNumPassed()); assertEquals("# of tests failed", 1, reporter.getTestCaseCounter().getNumFailed()); assertEquals("test case #", 2, reporter.getTestCaseCounter().getTestCaseNum()); + assertTrue("reportScriptResult wasn't called", testRunReporter.reportScriptResultCalled); } @@ -154,74 +158,6 @@ "jameleon_test_results/2007-May-18_10-23-32-725-AM"), f.getPath()); } - public void testGettersSetters(){ - reporter = ResultsReporter.getInstance(); - Writer writer = new StringWriter(); - reporter.setWriter(writer); - assertTrue("writer", writer == reporter.getWriter()); - assertEquals("Default results header", ResultsReporter.DEFAULT_HEADER_TEMPLATE, reporter.getTestResultsHeaderTemplate()); - reporter.setTestResultsHeaderTemplate("foo"); - assertEquals("results header", "foo", reporter.getTestResultsHeaderTemplate()); - - assertEquals("Default results footer", ResultsReporter.DEFAULT_FOOTER_TEMPLATE, reporter.getTestResultsFooterTemplate()); - reporter.setTestResultsFooterTemplate("foo"); - assertEquals("results footer", "foo", reporter.getTestResultsFooterTemplate()); - - assertEquals("Default result row", ResultsReporter.DEFAULT_RESULT_ROW_TEMPLATE, reporter.getTestResultRowTemplate()); - reporter.setTestResultRowTemplate("foo"); - assertEquals("results result row", "foo", reporter.getTestResultRowTemplate()); - } - - public void testOutputRow() throws Exception{ - TestCaseTag tct = initTestCaseTag(); - reporter.outputRow(tct); - - StringWriter writer = (StringWriter)reporter.getWriter(); - String row = writer.toString(); - assertTrue("The writer was populated with something", row.length() > 0); - assertTrue("The file should contain a passed td " + row, row.indexOf("<td class=\"pass\" title=\"Test passed\">") >= 0); - assertTrue("The file should contain a passed gif " + row, row.indexOf("passed.gif") >= 0); - assertFalse("The file should not contain a failed row info column", row.indexOf("Row Failed") > -1); - - reporter.setWriter(new StringWriter()); - FunctionalPoint fp2 = new FunctionalPoint(); - fp2.addTagName("failed-tag"); - CountableFunctionResult cfr = new CountableFunctionResult(fp2, tct.getResults()); - cfr.setFailed(); - cfr.setError(new RuntimeException("an error message")); - cfr.setLineNumber(23); - reporter.outputRow(tct); - writer = (StringWriter)reporter.getWriter(); - row = writer.toString(); - assertTrue("The writer was populated with something", row.length() > 0); - assertTrue("The file should contain a failed td " + row, row.indexOf("<td class=\"fail\" title=\"Test failed\">") >= 0); - assertTrue("The file should contain a failed gif " + row, row.indexOf("failed.gif") >= 0); - assertTrue("The file should contain a failed line # " + row, row.indexOf("<td title=\"Line Failed\">23</td>") >= 0); - assertTrue("The file should contain a failed tag " + row, row.indexOf("<td title=\"FunctionId of Point of Failure\"><i>failed-tag</i></td>") >= 0); - assertTrue("The file should contain a failed row info column " + row, row.indexOf("Row Failed") > -1); - } - - public void testOutputHeader() throws Exception{ - Configurator config = Configurator.getInstance(); - config.setValue("organization", "sf"); - config.setValue("testEnvironment", "foo"); - Calendar startTime = Calendar.getInstance(); - reporter.setStartTime(startTime); - reporter.outputHeader(); - validateHeader(startTime); - } - - public void testOutputFooter() throws Exception{ - reporter.getTestCaseCounter().incrementPassed(12); - reporter.getTestCaseCounter().incrementFailed(12); - Calendar startTime = Calendar.getInstance(); - Calendar endTime = Calendar.getInstance(); - endTime.set(Calendar.SECOND, startTime.get(Calendar.SECOND) + 3); - reporter.setStartTime(startTime); - reporter.outputFooter(endTime); - validateFooter("0h 0m 3"); - } - private Calendar getCalendar(int year, int month, int day, int hour, int min, int sec, int milli){ Calendar c = Calendar.getInstance(); c.set(Calendar.YEAR, year); @@ -234,26 +170,6 @@ return c; } - private void validateHeader(Calendar startTime){ - StringWriter writer = (StringWriter)reporter.getWriter(); - String header = writer.toString(); - assertTrue("The writer was populated with something", header.length() > 0); - assertTrue("The writer should contain an org", header.indexOf("Start time: "+startTime.getTime()+"<br/>") > 0); - assertTrue("The file should contain an organization", header.indexOf("Organization: sf<br/>") >= 0); - assertTrue("The file should contain an environment", header.indexOf("Environment: foo<br/>") >= 0); - } - - private void validateFooter(String time){ - StringWriter writer = (StringWriter)reporter.getWriter(); - String results = writer.toString(); - assertTrue("The writer was populated with something", results.length() > 0); - assertTrue("execution time " + results, results.indexOf("<td id=\"totalTime\">"+time) >= 0); - assertTrue("total executed", results.indexOf("<td id=\"totalRun\">24") > 0); - assertTrue("total passed", results.indexOf("<td id=\"totalPassed\">12") > 0); - assertTrue("total failed", results.indexOf("<td id=\"totalFailed\">12") > 0); - assertTrue("percent passed", results.indexOf("<td id=\"percentPassed\">50%") > 0); - } - private TestCaseTag initTestCaseTag(){ FunctionalPoint fp = new FunctionalPoint(); fp.addTagName("tc"); @@ -267,4 +183,35 @@ tct.setResults(tcr); return tct; } + + private class TestRunReporterStub implements TestRunReporter{ + + boolean reportScriptResultCalled; + boolean reportTestRunStartCalled; + boolean reportTestRunCompleteCalled; + boolean cleanUpCalled; + + public void reportScriptResult(TestCaseTag tct, TestCaseCounter counter) { + reportScriptResultCalled = true; + } + + public void reportTestRunStart(Calendar startTime) { + reportTestRunStartCalled = true; + } + + public void reportTestRunComplete(Calendar startTime, Calendar endTime, TestCaseCounter counter) { + reportTestRunCompleteCalled = true; + } + + public void cleanUp() { + cleanUpCalled = true; + } + + public Writer getWriter() { + return null; + } + + public void setWriter(Writer writer) { + } + } } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <en...@us...> - 2007-06-19 18:22:42
|
Revision: 1605 http://svn.sourceforge.net/jameleon/?rev=1605&view=rev Author: engrean Date: 2007-06-19 11:22:34 -0700 (Tue, 19 Jun 2007) Log Message: ----------- execute-jameleon-script tag no longer outputs the results of the test it is executing. Modified Paths: -------------- trunk/jameleon-core/src/java/net/sf/jameleon/ExecuteTestCase.java trunk/jameleon-core/src/java/net/sf/jameleon/plugin/junit/ExecuteJameleonScriptTag.java trunk/jameleon-core/src/java/net/sf/jameleon/reporting/HtmlTestRunReporter.java trunk/jameleon-core/src/java/net/sf/jameleon/reporting/ResultsReporter.java trunk/jameleon-core/tst/java/net/sf/jameleon/reporting/HtmlTestRunReporterTest.java trunk/jameleon-core/tst/java/net/sf/jameleon/reporting/ResultsReporterTest.java Added Paths: ----------- trunk/jameleon-core/src/java/net/sf/jameleon/reporting/AbstractTestRunReporter.java trunk/jameleon-core/src/java/net/sf/jameleon/reporting/SimpleTestRunReporter.java trunk/jameleon-core/tst/java/net/sf/jameleon/reporting/AbstractTestRunReporterTest.java trunk/jameleon-core/tst/java/net/sf/jameleon/reporting/SimpleTestRunReporterTest.java Modified: trunk/jameleon-core/src/java/net/sf/jameleon/ExecuteTestCase.java =================================================================== --- trunk/jameleon-core/src/java/net/sf/jameleon/ExecuteTestCase.java 2007-06-19 14:34:38 UTC (rev 1604) +++ trunk/jameleon-core/src/java/net/sf/jameleon/ExecuteTestCase.java 2007-06-19 18:22:34 UTC (rev 1605) @@ -184,7 +184,7 @@ JameleonUtility.createDirStructure(resultsFile.getParentFile()); Writer writer = new FileWriter(resultsFile); reporter = ResultsReporter.getInstance(); - reporter.getTestRunReporter().setWriter(writer); + reporter.getHtmlTestRunReporter().setWriter(writer); }catch(IOException ioe){ throw new JameleonException("Could not configure Jameleon to write out results file", ioe); } @@ -201,7 +201,7 @@ TestCaseEventHandler.getInstance().removeTestCaseListener(reporter); TestRunEventHandler.getInstance().removeTestRunListener(reporter); try { - reporter.getTestRunReporter().getWriter().close(); + reporter.getHtmlTestRunReporter().getWriter().close(); } catch (IOException e) { System.err.println("Error closing test results summary writer"); e.printStackTrace(); Modified: trunk/jameleon-core/src/java/net/sf/jameleon/plugin/junit/ExecuteJameleonScriptTag.java =================================================================== --- trunk/jameleon-core/src/java/net/sf/jameleon/plugin/junit/ExecuteJameleonScriptTag.java 2007-06-19 14:34:38 UTC (rev 1604) +++ trunk/jameleon-core/src/java/net/sf/jameleon/plugin/junit/ExecuteJameleonScriptTag.java 2007-06-19 18:22:34 UTC (rev 1605) @@ -156,6 +156,7 @@ protected static SAXReader parser = new SAXReader(); protected TestCaseResult result; protected TestCaseCounter originalCounter; + protected Writer stdOutWriter; protected TestCaseListener listener = new TestCaseListener(){ public void beginTestCase(TestCaseEvent event) { @@ -241,11 +242,14 @@ postcondition = true; denyAll = new DenyAllFilter(); jmln = new ExecuteTestCase(DEBUG); - timestampedResults = ResultsReporter.getInstance().getTestRunReporter().getWriter(); + timestampedResults = ResultsReporter.getInstance().getHtmlTestRunReporter().getWriter(); htmlResults = new StringWriter(); - ResultsReporter.getInstance().getTestRunReporter().setWriter(htmlResults); - originalCounter = ResultsReporter.getInstance().getTestCaseCounter(); - ResultsReporter.getInstance().setTestCaseCounter(new TestCaseCounter()); + ResultsReporter reporter = ResultsReporter.getInstance(); + reporter.getHtmlTestRunReporter().setWriter(htmlResults); + originalCounter = reporter.getTestCaseCounter(); + stdOutWriter = reporter.getSimpleTestRunReporter().getWriter(); + reporter.getSimpleTestRunReporter().setWriter(new StringWriter()); + reporter.setTestCaseCounter(new TestCaseCounter()); LoggerRepository repos = LogManager.getLoggerRepository(); TestCaseEventHandler.getInstance().addTestCaseListener(listener); @@ -261,10 +265,11 @@ } public void tearDown(){ - ResultsReporter.getInstance().getTestRunReporter().setWriter(timestampedResults); + ResultsReporter.getInstance().getHtmlTestRunReporter().setWriter(timestampedResults); jmln = null; TestCaseEventHandler.getInstance().removeTestCaseListener(listener); reverseTestCaseCount(); + ResultsReporter.getInstance().getSimpleTestRunReporter().setWriter(stdOutWriter); } /** Added: trunk/jameleon-core/src/java/net/sf/jameleon/reporting/AbstractTestRunReporter.java =================================================================== --- trunk/jameleon-core/src/java/net/sf/jameleon/reporting/AbstractTestRunReporter.java (rev 0) +++ trunk/jameleon-core/src/java/net/sf/jameleon/reporting/AbstractTestRunReporter.java 2007-06-19 18:22:34 UTC (rev 1605) @@ -0,0 +1,47 @@ +/* + Jameleon - An automation testing tool.. + Copyright (C) 2007 Christian W. Hargraves (en...@ho...) + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +*/ +package net.sf.jameleon.reporting; + +import java.io.IOException; +import java.io.Writer; + +public abstract class AbstractTestRunReporter implements TestRunReporter{ + private Writer writer; + + public void cleanUp() { + try{ + if (writer != null){ + writer.flush(); + writer.close(); + writer = null; + } + }catch(IOException ioe){ + ioe.printStackTrace(); + } + } + + + public Writer getWriter() { + return writer; + } + + public void setWriter(Writer writer) { + this.writer = writer; + } +} Property changes on: trunk/jameleon-core/src/java/net/sf/jameleon/reporting/AbstractTestRunReporter.java ___________________________________________________________________ Name: svn:mime-type + text/plain Name: svn:eol-style + native Modified: trunk/jameleon-core/src/java/net/sf/jameleon/reporting/HtmlTestRunReporter.java =================================================================== --- trunk/jameleon-core/src/java/net/sf/jameleon/reporting/HtmlTestRunReporter.java 2007-06-19 14:34:38 UTC (rev 1604) +++ trunk/jameleon-core/src/java/net/sf/jameleon/reporting/HtmlTestRunReporter.java 2007-06-19 18:22:34 UTC (rev 1605) @@ -23,8 +23,6 @@ import net.sf.jameleon.util.Configurator; import net.sf.jameleon.util.JameleonDefaultValues; -import java.io.IOException; -import java.io.Writer; import java.util.Calendar; import java.util.HashMap; import java.util.Map; @@ -33,14 +31,12 @@ * Reports on all script results in a given test run as a summary in HTML. The current implementation reports * a single result as an HTML table row. */ -public class HtmlTestRunReporter implements TestRunReporter { +public class HtmlTestRunReporter extends AbstractTestRunReporter { public static final String DEFAULT_HEADER_TEMPLATE = "templates/results/summary/TestRunResultsHeader.html"; public static final String DEFAULT_FOOTER_TEMPLATE = "templates/results/summary/TestRunResultsFooter.html"; public static final String DEFAULT_RESULT_ROW_TEMPLATE = "templates/results/summary/TestRunRowResult.html"; - private Writer writer; - private String testRunResultsHeaderTemplate = DEFAULT_HEADER_TEMPLATE; private String testResultRowTemplate = DEFAULT_RESULT_ROW_TEMPLATE; private String testRunResultsFooterTemplate = DEFAULT_FOOTER_TEMPLATE; @@ -51,7 +47,7 @@ params.put("resultsFile", tct.getResults().getTestCaseDocsFile()); params.put("results_res_dir", JameleonDefaultValues.RESULTS_RES_DIR); params.put("testCaseNum", counter.getTestCaseNum()+""); - ReporterUtils.outputToTemplate(writer, testResultRowTemplate, params); + ReporterUtils.outputToTemplate(getWriter(), testResultRowTemplate, params); } public void reportTestRunStart(Calendar startTime) { @@ -60,7 +56,7 @@ params.put("organization", config.getValue("organization")); params.put("environment", config.getValue("testEnvironment")); params.put("startTime", startTime.getTime()); - ReporterUtils.outputToTemplate(writer, testRunResultsHeaderTemplate, params); + ReporterUtils.outputToTemplate(getWriter(), testRunResultsHeaderTemplate, params); } public void reportTestRunComplete(Calendar startTime, Calendar endTime, TestCaseCounter counter) { @@ -70,43 +66,16 @@ params.put("totalTime", ReporterUtils.getExecutionTime(startTime, endTime)); String percentagePassed = TestCaseResult.getPercentagePassed(counter.getNumRun(), counter.getNumFailed()); params.put("percentPassed", percentagePassed); - ReporterUtils.outputToTemplate(writer, testRunResultsFooterTemplate, params); + ReporterUtils.outputToTemplate(getWriter(), testRunResultsFooterTemplate, params); } - public void cleanUp() { - try{ - if (writer != null){ - writer.flush(); - writer.close(); - writer = null; - } - }catch(IOException ioe){ - ioe.printStackTrace(); - } - } - ////////////////////////////////////////////////////////////////////////////////////////////////////////// ////// GETTERS & SETTERS ////// ////////////////////////////////////////////////////////////////////////////////////////////////////////// - /** - * Gets the Writer to write the html row out. - * @return The Writer to write the html row out. - */ - public Writer getWriter() { - return writer; - } /** - * Sets the Writer to write the html row out. - * @param writer The Writer to write the html row out. - */ - public void setWriter(Writer writer) { - this.writer = writer; - } - - /** * Gets the test run results footer template * @return The test run results footer template */ Modified: trunk/jameleon-core/src/java/net/sf/jameleon/reporting/ResultsReporter.java =================================================================== --- trunk/jameleon-core/src/java/net/sf/jameleon/reporting/ResultsReporter.java 2007-06-19 14:34:38 UTC (rev 1604) +++ trunk/jameleon-core/src/java/net/sf/jameleon/reporting/ResultsReporter.java 2007-06-19 18:22:34 UTC (rev 1605) @@ -23,18 +23,15 @@ import net.sf.jameleon.event.TestCaseListener; import net.sf.jameleon.event.TestRunEvent; import net.sf.jameleon.event.TestRunListener; -import net.sf.jameleon.result.JameleonTestResult; import net.sf.jameleon.result.TestCaseResult; import net.sf.jameleon.util.JameleonDefaultValues; -import net.sf.jameleon.util.JameleonUtility; import net.sf.jameleon.util.TemplateProcessor; import java.io.File; +import java.io.PrintWriter; import java.text.SimpleDateFormat; import java.util.Calendar; import java.util.HashMap; -import java.util.Iterator; -import java.util.List; /** * Writes the HTML results out to a file. This class writes both the main results @@ -50,13 +47,17 @@ private Calendar startTime; private DTreeManager dtreeManager; private TestCaseCounter counter; - private TestRunReporter testRunReporter; + private TestRunReporter htmlTestRunReporter; + private TestRunReporter simpleTestRunReporter; // Make this class a singleton private ResultsReporter(){ counter = new TestCaseCounter(); dtreeManager = new DTreeManager(); - testRunReporter = new HtmlTestRunReporter(); + htmlTestRunReporter = new HtmlTestRunReporter(); + simpleTestRunReporter = new SimpleTestRunReporter(); + PrintWriter printWriter = new PrintWriter(System.out); + simpleTestRunReporter.setWriter(printWriter); } public static ResultsReporter getInstance(){ @@ -68,7 +69,7 @@ public static void clearInstance(){ if (reporter != null){ - reporter.getTestRunReporter().cleanUp(); + reporter.getHtmlTestRunReporter().cleanUp(); reporter = null; } } @@ -135,14 +136,22 @@ this.counter = counter; } - public TestRunReporter getTestRunReporter() { - return testRunReporter; + public TestRunReporter getHtmlTestRunReporter() { + return htmlTestRunReporter; } - public void setTestRunReporter(TestRunReporter testRunReporter) { - this.testRunReporter = testRunReporter; + public void setHtmlTestRunReporter(TestRunReporter htmlTestRunReporter) { + this.htmlTestRunReporter = htmlTestRunReporter; } + public TestRunReporter getSimpleTestRunReporter() { + return simpleTestRunReporter; + } + + public void setSimpleTestRunReporter(TestRunReporter simpleTestRunReporter) { + this.simpleTestRunReporter = simpleTestRunReporter; + } + /////////////////////////////////////////////////////////////////////////////////////////////// //// TestCaseListner methods //// /////////////////////////////////////////////////////////////////////////////////////////////// @@ -162,43 +171,40 @@ int failed = result.getFailedCountableResults().size(); counter.incrementPassed(totalRun - failed); counter.incrementFailed(failed); - testRunReporter.reportScriptResult(tct, counter); - printTestCaseResultsToStdOut(tct); + htmlTestRunReporter.reportScriptResult(tct, counter); + simpleTestRunReporter.reportScriptResult(tct, counter); +// printTestCaseResultsToStdOut(tct); }finally{ counter.incrementTestCaseNum(1); } } - private void printTestCaseResultsToStdOut(TestCaseTag tct){ - System.out.print("\n"+JameleonUtility.getFileNameFromScriptPath(tct.getFileName()) + " : "); - TestCaseResult tcr = tct.getResults(); - if (tcr.failed()){ - List failedResults = tcr.getFailedResults(); - JameleonTestResult jtr; - for (Iterator it = failedResults.iterator(); it.hasNext();){ - jtr = (JameleonTestResult)it.next(); - System.out.println("\nFunctionId: " + jtr.getIdentifier()); - System.out.println("Line #: " + jtr.getLineNumber()); - System.out.println("Row #: " + jtr.getFailedRowNum()); - System.out.println("Error Message: " + jtr.getErrorMsg()); - } - } - System.out.println(tct.getResults().getOutcome()); - } +// private void printTestCaseResultsToStdOut(TestCaseTag tct){ +// System.out.print("\n"+JameleonUtility.getFileNameFromScriptPath(tct.getFileName()) + " : "); +// TestCaseResult tcr = tct.getResults(); +// if (tcr.failed()){ +// List failedResults = tcr.getFailedResults(); +// JameleonTestResult jtr; +// for (Iterator it = failedResults.iterator(); it.hasNext();){ +// jtr = (JameleonTestResult)it.next(); +// System.out.println("\nFunctionId: " + jtr.getIdentifier()); +// System.out.println("Line #: " + jtr.getLineNumber()); +// System.out.println("Row #: " + jtr.getFailedRowNum()); +// System.out.println("Error Message: " + jtr.getErrorMsg()); +// } +// } +// System.out.println(tct.getResults().getOutcome()); +// } public void beginTestRun(TestRunEvent event) { setStartTime((Calendar)event.getSource()); - testRunReporter.reportTestRunStart(getStartTime()); + htmlTestRunReporter.reportTestRunStart(getStartTime()); } public void endTestRun(TestRunEvent event) { - testRunReporter.reportTestRunComplete(getStartTime(), (Calendar)event.getSource(), counter); - System.out.println("______________________________________________________\n"); - System.out.println("Test Run: " + shortFormat.format(startTime.getTime())); - System.out.print("Tests run: " + counter.getNumRun()); - System.out.print(" Failed: " + counter.getNumFailed()); - System.out.println(" Time: " + ReporterUtils.getExecutionTime(startTime, (Calendar)event.getSource())); - System.out.println("______________________________________________________"); + Calendar endTime = (Calendar)event.getSource(); + htmlTestRunReporter.reportTestRunComplete(getStartTime(), endTime, counter); + simpleTestRunReporter.reportTestRunComplete(getStartTime(), endTime, counter); resetStats(); } } Added: trunk/jameleon-core/src/java/net/sf/jameleon/reporting/SimpleTestRunReporter.java =================================================================== --- trunk/jameleon-core/src/java/net/sf/jameleon/reporting/SimpleTestRunReporter.java (rev 0) +++ trunk/jameleon-core/src/java/net/sf/jameleon/reporting/SimpleTestRunReporter.java 2007-06-19 18:22:34 UTC (rev 1605) @@ -0,0 +1,81 @@ +/* + Jameleon - An automation testing tool.. + Copyright (C) 2007 Christian W. Hargraves (en...@ho...) + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +*/ +package net.sf.jameleon.reporting; + +import net.sf.jameleon.TestCaseTag; +import net.sf.jameleon.exception.JameleonException; +import net.sf.jameleon.result.JameleonTestResult; +import net.sf.jameleon.result.TestCaseResult; +import net.sf.jameleon.util.JameleonUtility; + +import java.io.IOException; +import java.text.SimpleDateFormat; +import java.util.Calendar; +import java.util.Iterator; +import java.util.List; + +/** + * Reports the test run results is a simple form, suitable for STD OUT or a simple text file + */ +public class SimpleTestRunReporter extends AbstractTestRunReporter{ + private static final SimpleDateFormat shortFormat = new SimpleDateFormat("dd-MM HH:mm:ss:SS"); + + public void reportScriptResult(TestCaseTag tct, TestCaseCounter counter) { + try{ + String scriptName = JameleonUtility.getFileNameFromScriptPath(tct.getFileName()); + getWriter().write("\n"+ scriptName ); + TestCaseResult tcr = tct.getResults(); + if (tcr.failed()){ + List failedResults = tcr.getFailedResults(); + JameleonTestResult jtr; + for (Iterator it = failedResults.iterator(); it.hasNext();){ + jtr = (JameleonTestResult)it.next(); + getWriter().write("\nFunctionId: " + jtr.getIdentifier()); + getWriter().write("\nLine #: " + jtr.getLineNumber()); + getWriter().write("\nRow #: " + jtr.getFailedRowNum()); + getWriter().write("\nError Message: " + jtr.getErrorMsg()+"\n"); + } + getWriter().write(scriptName); + } + getWriter().write(" : " +tct.getResults().getOutcome()); + getWriter().flush(); + }catch(IOException ioe){ + throw new JameleonException("Could not report simple results: "+ioe.getMessage()); + } + } + + public void reportTestRunComplete(Calendar startTime, Calendar endTime, TestCaseCounter counter) { + try{ + getWriter().write("______________________________________________________\n\n"); + getWriter().write("Test Run: " + shortFormat.format(startTime.getTime())); + getWriter().write("\nTests run: " + counter.getNumRun()); + getWriter().write(" Failed: " + counter.getNumFailed()); + getWriter().write(" Time: " + ReporterUtils.getExecutionTime(startTime, endTime)); + getWriter().write("\n______________________________________________________\n"); + getWriter().flush(); + }catch(IOException ioe){ + throw new JameleonException("Could not report summary results: "+ioe.getMessage()); + } + } + + public void reportTestRunStart(Calendar startTime) { + + } + +} Property changes on: trunk/jameleon-core/src/java/net/sf/jameleon/reporting/SimpleTestRunReporter.java ___________________________________________________________________ Name: svn:mime-type + text/plain Name: svn:eol-style + native Added: trunk/jameleon-core/tst/java/net/sf/jameleon/reporting/AbstractTestRunReporterTest.java =================================================================== --- trunk/jameleon-core/tst/java/net/sf/jameleon/reporting/AbstractTestRunReporterTest.java (rev 0) +++ trunk/jameleon-core/tst/java/net/sf/jameleon/reporting/AbstractTestRunReporterTest.java 2007-06-19 18:22:34 UTC (rev 1605) @@ -0,0 +1,74 @@ +/* + Jameleon - An automation testing tool.. + Copyright (C) 2007 Christian W. Hargraves (en...@ho...) + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +*/ +package net.sf.jameleon.reporting; + +import junit.framework.Test; +import junit.framework.TestCase; +import junit.framework.TestSuite; +import net.sf.jameleon.TestCaseTag; + +import java.io.StringWriter; +import java.util.Calendar; + +/** + * User: hargravescw + * Date: Jun 19, 2007 + * Time: 8:53:38 AM + */ +public class AbstractTestRunReporterTest extends TestCase { + + AbstractTestRunReporter reporter; + StringWriter writer; + + public static void main(String args[]) { + junit.textui.TestRunner.run(suite()); + } + + public static Test suite() { + return new TestSuite(AbstractTestRunReporterTest.class); + } + + public AbstractTestRunReporterTest(String name) { + super(name); + } + + public void setUp(){ + reporter = new AbstractTestRunReporter(){ + public void reportScriptResult(TestCaseTag tct, TestCaseCounter counter) {} + public void reportTestRunStart(Calendar startTime) {} + public void reportTestRunComplete(Calendar startTime, Calendar endTime, TestCaseCounter counter) {} + }; + writer = new StringWriter(); + reporter.setWriter(writer); + } + + public void testCleanUp() throws Exception{ + assertNotNull("Writer should not be null", reporter.getWriter()); + reporter.getWriter().write("some text"); + reporter.cleanUp(); + assertNull("writer should be null", reporter.getWriter()); + } + + public void testGetSetWriter(){ + reporter.setWriter(writer); + assertTrue("writer should be the same", writer == reporter.getWriter()); + } + + +} Property changes on: trunk/jameleon-core/tst/java/net/sf/jameleon/reporting/AbstractTestRunReporterTest.java ___________________________________________________________________ Name: svn:mime-type + text/plain Name: svn:eol-style + native Modified: trunk/jameleon-core/tst/java/net/sf/jameleon/reporting/HtmlTestRunReporterTest.java =================================================================== --- trunk/jameleon-core/tst/java/net/sf/jameleon/reporting/HtmlTestRunReporterTest.java 2007-06-19 14:34:38 UTC (rev 1604) +++ trunk/jameleon-core/tst/java/net/sf/jameleon/reporting/HtmlTestRunReporterTest.java 2007-06-19 18:22:34 UTC (rev 1605) @@ -53,18 +53,6 @@ reporter.setWriter(writer); } - public void testCleanUp() throws Exception{ - assertNotNull("Writer should not be null", reporter.getWriter()); - reporter.getWriter().write("some text"); - reporter.cleanUp(); - assertNull("writer should be null", reporter.getWriter()); - } - - public void testGetSetWriter(){ - reporter.setWriter(writer); - assertTrue("writer should be the same", writer == reporter.getWriter()); - } - public void testGettersSetters(){ assertEquals("Default results header", HtmlTestRunReporter.DEFAULT_HEADER_TEMPLATE, reporter.getTestRunResultsHeaderTemplate()); reporter.setTestRunResultsHeaderTemplate("foo"); Modified: trunk/jameleon-core/tst/java/net/sf/jameleon/reporting/ResultsReporterTest.java =================================================================== --- trunk/jameleon-core/tst/java/net/sf/jameleon/reporting/ResultsReporterTest.java 2007-06-19 14:34:38 UTC (rev 1604) +++ trunk/jameleon-core/tst/java/net/sf/jameleon/reporting/ResultsReporterTest.java 2007-06-19 18:22:34 UTC (rev 1605) @@ -56,7 +56,7 @@ super.setUp(); reporter = ResultsReporter.getInstance(); testRunReporter = new TestRunReporterStub(); - reporter.setTestRunReporter(testRunReporter); + reporter.setHtmlTestRunReporter(testRunReporter); } public void tearDown() throws Exception { @@ -176,11 +176,13 @@ TestCaseResult tcr = new TestCaseResult(fp); tcr.setTestCaseDocsFile("some/dir/some_file.html"); tcr.setTestName("some name"); + for (int i = 0; i < 3; i++){ new CountableFunctionResult(fp, tcr); } TestCaseTag tct = new TestCaseTag(); tct.setResults(tcr); + tct.setFileName("some/path/sometest.xml"); return tct; } Added: trunk/jameleon-core/tst/java/net/sf/jameleon/reporting/SimpleTestRunReporterTest.java =================================================================== --- trunk/jameleon-core/tst/java/net/sf/jameleon/reporting/SimpleTestRunReporterTest.java (rev 0) +++ trunk/jameleon-core/tst/java/net/sf/jameleon/reporting/SimpleTestRunReporterTest.java 2007-06-19 18:22:34 UTC (rev 1605) @@ -0,0 +1,128 @@ +/* + Jameleon - An automation testing tool.. + Copyright (C) 2007 Christian W. Hargraves (en...@ho...) + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +*/ +package net.sf.jameleon.reporting; + +import junit.framework.Test; +import junit.framework.TestCase; +import junit.framework.TestSuite; +import net.sf.jameleon.TestCaseTag; +import net.sf.jameleon.bean.FunctionalPoint; +import net.sf.jameleon.result.CountableFunctionResult; +import net.sf.jameleon.result.TestCaseResult; + +import java.io.StringWriter; +import java.util.Calendar; + +public class SimpleTestRunReporterTest extends TestCase { + + private SimpleTestRunReporter reporter; + private StringWriter writer; + + public static void main(String args[]) { + junit.textui.TestRunner.run(suite()); + } + + public static Test suite() { + return new TestSuite(SimpleTestRunReporterTest.class); + } + + public SimpleTestRunReporterTest(String name) { + super(name); + } + + public void setUp() throws Exception{ + reporter = new SimpleTestRunReporter(); + writer = new StringWriter(); + reporter.setWriter(writer); + } + + public void testReportTestRunStart() throws Exception{ + Calendar startTime = Calendar.getInstance(); + reporter.reportTestRunStart(startTime); + String header = writer.toString(); + assertTrue("The writer was not populated", header.length() == 0); + } + + public void testReportTestRunComplete() throws Exception{ + TestCaseCounter counter = new TestCaseCounter(); + counter.incrementPassed(12); + counter.incrementFailed(12); + Calendar startTime = Calendar.getInstance(); + Calendar endTime = Calendar.getInstance(); + endTime.set(Calendar.SECOND, startTime.get(Calendar.SECOND) + 3); + reporter.reportTestRunComplete(startTime, endTime, counter); + String results = writer.toString(); + assertTrue("The writer was populated with something", results.length() > 0); + assertTrue("execution time " + results, results.indexOf("Time: 0h 0m 3") >= 0); + assertTrue("total executed", results.indexOf("Tests run: 24") > 0); + assertTrue("total failed", results.indexOf("Failed: 12") > 0); + } + + + public void testReportScriptResult(){ + TestCaseTag tct = initTestCaseTag(); + TestCaseCounter counter = new TestCaseCounter(); + reporter.reportScriptResult(tct, counter); + + StringWriter writer = (StringWriter)reporter.getWriter(); + String row = writer.toString(); + assertTrue("The writer was populated with something", row.length() > 0); + assertTrue("script result", row.indexOf("testcase.xml : PASSED") >= 0); + + counter.incrementTestCaseNum(1); + reporter.setWriter(new StringWriter()); + FunctionalPoint fp2 = new FunctionalPoint(); + fp2.addTagName("failed-tag"); + CountableFunctionResult cfr = new CountableFunctionResult(fp2, tct.getResults()); + cfr.setFailed(); + cfr.setError(new RuntimeException("an error message")); + cfr.setLineNumber(23); + fp2.setFunctionId("function identifier"); + reporter.reportScriptResult(tct, counter); + writer = (StringWriter)reporter.getWriter(); + row = writer.toString(); + assertTrue("The writer was populated with something", row.length() > 0); + assertTrue("Test case name",row.indexOf("testcase.xml : ") >=0 ); + assertTrue("Test case didn't failed",row.indexOf("FAILED") >=0 ); + assertTrue("The output should contain a failed line # " + row, row.indexOf("Line #: 23") >= 0); + assertTrue("The output should contain a failed functionId " + row, row.indexOf("FunctionId: function identifier") >= 0); + assertTrue("The output should contain a failed row info column " + row, row.indexOf("Row #: 0") > -1); + assertTrue("The output should contain an error message " + row, row.indexOf("Error Message: an error message") > -1); + + } + + private TestCaseTag initTestCaseTag(){ + FunctionalPoint fp = new FunctionalPoint(); + fp.addTagName("tc"); + TestCaseResult tcr = new TestCaseResult(fp); + tcr.setTestCaseDocsFile("some/dir/some_file.html"); + tcr.setTestName("some name"); + + for (int i = 0; i < 3; i++){ + new CountableFunctionResult(fp, tcr); + } + TestCaseTag tct = new TestCaseTag(); + tct.setResults(tcr); + tct.setFileName("some/dir/testcase.xml"); + return tct; + } + + + +} Property changes on: trunk/jameleon-core/tst/java/net/sf/jameleon/reporting/SimpleTestRunReporterTest.java ___________________________________________________________________ Name: svn:mime-type + text/plain Name: svn:eol-style + native This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <en...@us...> - 2007-06-20 13:36:30
|
Revision: 1608 http://svn.sourceforge.net/jameleon/?rev=1608&view=rev Author: engrean Date: 2007-06-20 06:36:20 -0700 (Wed, 20 Jun 2007) Log Message: ----------- Changed test run date format for both the html and stdout results. Modified Paths: -------------- trunk/jameleon-core/src/java/net/sf/jameleon/reporting/ReporterUtils.java trunk/jameleon-core/src/java/net/sf/jameleon/reporting/ResultsReporter.java trunk/jameleon-core/src/java/net/sf/jameleon/reporting/SimpleTestRunReporter.java trunk/jameleon-core/tst/java/net/sf/jameleon/reporting/ResultsReporterTest.java Modified: trunk/jameleon-core/src/java/net/sf/jameleon/reporting/ReporterUtils.java =================================================================== --- trunk/jameleon-core/src/java/net/sf/jameleon/reporting/ReporterUtils.java 2007-06-19 18:35:02 UTC (rev 1607) +++ trunk/jameleon-core/src/java/net/sf/jameleon/reporting/ReporterUtils.java 2007-06-20 13:36:20 UTC (rev 1608) @@ -24,6 +24,7 @@ import java.io.IOException; import java.io.Writer; +import java.text.SimpleDateFormat; import java.util.Calendar; import java.util.Map; @@ -31,6 +32,7 @@ * A utility class for the reporting package */ public class ReporterUtils { + private static final SimpleDateFormat shortFormat = new SimpleDateFormat("yyyyMMddHHmmssSS"); private ReporterUtils(){} @@ -38,6 +40,10 @@ return JameleonUtility.executionTimeToString(endTime.getTimeInMillis() - startTime.getTimeInMillis()); } + public static String formatTime(Calendar time){ + return shortFormat.format(time.getTime()); + } + public static void outputToTemplate(Writer writer, String template, Map params){ try { TemplateProcessor processor = new TemplateProcessor(template); Modified: trunk/jameleon-core/src/java/net/sf/jameleon/reporting/ResultsReporter.java =================================================================== --- trunk/jameleon-core/src/java/net/sf/jameleon/reporting/ResultsReporter.java 2007-06-19 18:35:02 UTC (rev 1607) +++ trunk/jameleon-core/src/java/net/sf/jameleon/reporting/ResultsReporter.java 2007-06-20 13:36:20 UTC (rev 1608) @@ -29,7 +29,6 @@ import java.io.File; import java.io.PrintWriter; -import java.text.SimpleDateFormat; import java.util.Calendar; import java.util.HashMap; @@ -39,9 +38,6 @@ */ public class ResultsReporter implements TestCaseListener, TestRunListener { - private static final SimpleDateFormat format = new SimpleDateFormat("yyyy-MMMMM-dd_hh-mm-ss-SS-aaa"); - private static final SimpleDateFormat shortFormat = new SimpleDateFormat("dd-MM HH:mm:ss:SS"); - private static ResultsReporter reporter; private Calendar startTime; @@ -81,7 +77,7 @@ * @return a file representing the directory to store the results to */ public static File getResultsDir(File baseDir, Calendar c) { - String path = baseDir.getPath()+File.separator + format.format(c.getTime()); + String path = baseDir.getPath()+File.separator + ReporterUtils.formatTime(c); return new File(path); } Modified: trunk/jameleon-core/src/java/net/sf/jameleon/reporting/SimpleTestRunReporter.java =================================================================== --- trunk/jameleon-core/src/java/net/sf/jameleon/reporting/SimpleTestRunReporter.java 2007-06-19 18:35:02 UTC (rev 1607) +++ trunk/jameleon-core/src/java/net/sf/jameleon/reporting/SimpleTestRunReporter.java 2007-06-20 13:36:20 UTC (rev 1608) @@ -25,7 +25,6 @@ import net.sf.jameleon.util.JameleonUtility; import java.io.IOException; -import java.text.SimpleDateFormat; import java.util.Calendar; import java.util.Iterator; import java.util.List; @@ -34,7 +33,6 @@ * Reports the test run results is a simple form, suitable for STD OUT or a simple text file */ public class SimpleTestRunReporter extends AbstractTestRunReporter{ - private static final SimpleDateFormat shortFormat = new SimpleDateFormat("dd-MM HH:mm:ss:SS"); public void reportScriptResult(TestCaseTag tct, TestCaseCounter counter) { try{ @@ -63,7 +61,7 @@ public void reportTestRunComplete(Calendar startTime, Calendar endTime, TestCaseCounter counter) { try{ getWriter().write("______________________________________________________\n\n"); - getWriter().write("Test Run: " + shortFormat.format(startTime.getTime())); + getWriter().write("Test Run: " + ReporterUtils.formatTime(startTime)); getWriter().write("\nTests run: " + counter.getNumRun()); getWriter().write(" Failed: " + counter.getNumFailed()); getWriter().write(" Time: " + ReporterUtils.getExecutionTime(startTime, endTime)); Modified: trunk/jameleon-core/tst/java/net/sf/jameleon/reporting/ResultsReporterTest.java =================================================================== --- trunk/jameleon-core/tst/java/net/sf/jameleon/reporting/ResultsReporterTest.java 2007-06-19 18:35:02 UTC (rev 1607) +++ trunk/jameleon-core/tst/java/net/sf/jameleon/reporting/ResultsReporterTest.java 2007-06-20 13:36:20 UTC (rev 1608) @@ -85,7 +85,7 @@ reporter.setStartTime(c); File dir = reporter.getResultsDirectoryForTestCase(tct); assertEquals("test case res dir", JameleonUtility.fixFileSeparators( - "./jameleon_test_results/2007-May-18_10-23-32-725-AM/some-name"), + "./jameleon_test_results/20070518102332725/some-name"), dir.getPath()); } @@ -132,7 +132,7 @@ reporter.beginTestCase(new TestCaseEvent(tct)); assertNotNull("timestamped results dir", tct.getTimestampedResultsDir()); assertEquals("timestamped results dir", JameleonUtility.fixFileSeparators( - "./jameleon_test_results/2007-May-18_10-23-32-725-AM/some name"), + "./jameleon_test_results/20070518102332725/some name"), tct.getTimestampedResultsDir().getPath()); } @@ -160,7 +160,7 @@ Calendar c = getCalendar(2007, Calendar.MAY, 18, 10, 23, 32, 725); File f = ResultsReporter.getResultsDir(BASE_DIR, c); assertEquals("resultsDir", JameleonUtility.fixFileSeparators( - "jameleon_test_results/2007-May-18_10-23-32-725-AM"), f.getPath()); + "jameleon_test_results/20070518102332725"), f.getPath()); } private Calendar getCalendar(int year, int month, int day, int hour, int min, int sec, int milli){ This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <en...@us...> - 2007-06-22 02:02:11
|
Revision: 1609 http://svn.sourceforge.net/jameleon/?rev=1609&view=rev Author: engrean Date: 2007-06-21 19:02:06 -0700 (Thu, 21 Jun 2007) Log Message: ----------- Changed execution time format Redesigned test run html report Modified Paths: -------------- trunk/jameleon-core/res/templates/results/summary/TestRunResultsHeader.html trunk/jameleon-core/res/templates/results/summary/TestRunRowResult.html trunk/jameleon-core/src/java/net/sf/jameleon/util/JameleonUtility.java trunk/jameleon-core/tst/java/net/sf/jameleon/reporting/HtmlTestRunReporterTest.java trunk/jameleon-core/tst/java/net/sf/jameleon/reporting/SimpleTestRunReporterTest.java trunk/jameleon-core/tst/java/net/sf/jameleon/util/JameleonUtilityTest.java Modified: trunk/jameleon-core/res/templates/results/summary/TestRunResultsHeader.html =================================================================== --- trunk/jameleon-core/res/templates/results/summary/TestRunResultsHeader.html 2007-06-20 13:36:20 UTC (rev 1608) +++ trunk/jameleon-core/res/templates/results/summary/TestRunResultsHeader.html 2007-06-22 02:02:06 UTC (rev 1609) @@ -5,18 +5,22 @@ <style type="text/css"> <!-- body, table { font-family: arial,sans-serif; font-size: x-small;} -a:link {color #e41819;} -a:visited {color #e41819;} -th {background: #0b3b63; color: #FFFFFF; text-align: left; font-size: small;} +a.pass:link {color: green;} +a.pass:visited {color: green;} +a.fail:link {color: red;} +a.fail:visited {color: red;} +table {border-color: #224466;} +th {background: #0b3b63; color: #FFFFFF; text-align: left; font-size: small; padding-left: 3px; padding-right: 3px;} tr {background: #FFFFFF; color: #000; font-size: small;} -td {text-align: left;} -tr.fail {background: #d6d6d6;} -td.pass {color: #1cc32b; font-size: 1.6em; font-family: tahoma,geneva,helvetica,arial,sans-serif;} -td.fail {color: #e41819; font-size: large; font-weight: bold; font-family: tahoma,geneva,helvetica,arial,sans-serif;} +td {text-align: left; padding-left: 3px; padding-right: 3px; font-family: tahoma,geneva,helvetica,arial,sans-serif;} +tr.fail {background: #d6d6d6; border: thin;} +td.pass {color: #1cc32b} +td.fail {color: #e41819;} +td.dotted { border-bottom-width: thin; border-bottom-style: dotted; border-bottom-color: #FFFFFF;} --> </style> </head> -<body bgcolor="#FFFFFF" topmargin="6" leftmargin="6"> +<body bgcolor="#FFFFFF"> <hr size="1" noshade="true"/> Start time: ${startTime}<br/> #if ($organization) @@ -26,7 +30,7 @@ Environment: ${environment}<br/> #end <br/> -<table cellspacing="1" cellpadding="0" border="1" bordercolor="#224466" width="100%"> +<table cellspacing="1" cellpadding="0" width="100%"> <tr> <th width="2%"></th> <th width="1%"></th> @@ -36,5 +40,5 @@ <th width="2%">Run</th> <th width="2%">Fail</th> <th width="3%">Pass</th> -<th>Failures</th> +<th>Failure Reasons</th> </tr> \ No newline at end of file Modified: trunk/jameleon-core/res/templates/results/summary/TestRunRowResult.html =================================================================== --- trunk/jameleon-core/res/templates/results/summary/TestRunRowResult.html 2007-06-20 13:36:20 UTC (rev 1608) +++ trunk/jameleon-core/res/templates/results/summary/TestRunRowResult.html 2007-06-22 02:02:06 UTC (rev 1609) @@ -7,14 +7,14 @@ #end <td title="Test Case # $testCaseNum">$testCaseNum</td> <td class="$outcome" title="Test ${outcome}ed"><img src="${results_res_dir}/icons/${outcome}ed.gif"/></td> -<td><a href="../../$result.testCaseDocsFile" target="_new">$result.testName</a></td> -<td title="Total Execution Time">$result.executionTimeToDisplay</td> -<td title="# Iterations Run" align="right">$result.countableResults.size()</td> -<td title="# Iterations Failed" align="right">$result.failedCountableResults.size()</td> -<td title="% Tests Passed" align="right">$result.percentagePassed</td> +<td><a class="$outcome" href="../../$result.testCaseDocsFile" target="_new">$result.testName</a></td> +<td class="$outcome" title="Total Execution Time">$result.executionTimeToDisplay</td> +<td class="$outcome" title="# Iterations Run" align="right">$result.countableResults.size()</td> +<td class="$outcome" title="# Iterations Failed" align="right">$result.failedCountableResults.size()</td> +<td class="$outcome" title="% Tests Passed" align="right">$result.percentagePassed</td> <td> #if ($result.failed()) -<table border="1" width="100%" id="${result.testName}_failed"> +<table width="100%" id="${result.testName}_failed"> <tr> <th>Row</th> <th>Line</th> @@ -22,11 +22,16 @@ <th>Reason</th> </tr> #foreach ($failedResult in $result.failedResults) +#if ($velocityCount < $result.failedResults.size()) + #set( $dotted = 'class="dotted"') +#else + #set( $dotted = '') +#end <tr class="fail" id="line_$!{failedResult.lineNumber}"> -<td title="Row Failed">$failedResult.failedRowNum</td> -<td title="Line Failed">$!{failedResult.lineNumber}</td> -<td title="FunctionId of Point of Failure"><i>$failedResult.identifier</i></td> -<td title="Error Message"> +<td $dotted title="Row Failed">$failedResult.failedRowNum</td> +<td $dotted title="Line Failed">$!{failedResult.lineNumber}</td> +<td $dotted title="FunctionId of Point of Failure"><i>$failedResult.identifier</i></td> +<td $dotted title="Error Message"> #if($failedResult.errorFile) <a href="../../${failedResult.errorFile.path}" target="_new"> #end Modified: trunk/jameleon-core/src/java/net/sf/jameleon/util/JameleonUtility.java =================================================================== --- trunk/jameleon-core/src/java/net/sf/jameleon/util/JameleonUtility.java 2007-06-20 13:36:20 UTC (rev 1608) +++ trunk/jameleon-core/src/java/net/sf/jameleon/util/JameleonUtility.java 2007-06-22 02:02:06 UTC (rev 1609) @@ -182,26 +182,40 @@ } public static String executionTimeToString(long time){ - long hours, mins, secs; + long hours, mins, secs, tempTime; hours = time / 3600000; - time = time % 3600000; - mins = time / 60000; - time = time % 60000; - secs = time / 1000; - time = time % 1000; + tempTime = time % 3600000; + mins = tempTime / 60000; + tempTime = tempTime % 60000; + secs = tempTime / 1000; + tempTime = tempTime % 1000; String msS = null; - if (time < 10) { - msS = "00"+time; - }else if (time < 100) { + if (tempTime < 10) { + msS = "00"+tempTime; + }else if (tempTime < 100) { msS = "0"+time; }else{ - msS = time+""; + msS = tempTime+""; } + String formattedTime = concatNum(hours, "h "); + formattedTime += concatNum(mins, "m "); + if( time == 0 || secs > 0 || tempTime > 0){ + formattedTime += secs + "."+msS+"s"; + } - return hours+"h "+mins+"m "+secs+"."+msS+"s"; + return formattedTime.trim(); +// return hours+"h "+mins+"m "+secs+"."+msS+"s"; } + private static String concatNum(long num, String postfix){ + String concat = ""; + if (num > 0){ + concat = num + postfix; + } + return concat; + } + public static String stripHtmlComments(String text){ return text.replaceAll("(?s)<\\!--.*?-->",""); //return java.util.regex.Pattern.compile("<\\!--.*?-->",""); Modified: trunk/jameleon-core/tst/java/net/sf/jameleon/reporting/HtmlTestRunReporterTest.java =================================================================== --- trunk/jameleon-core/tst/java/net/sf/jameleon/reporting/HtmlTestRunReporterTest.java 2007-06-20 13:36:20 UTC (rev 1608) +++ trunk/jameleon-core/tst/java/net/sf/jameleon/reporting/HtmlTestRunReporterTest.java 2007-06-22 02:02:06 UTC (rev 1609) @@ -86,12 +86,12 @@ counter.incrementPassed(12); counter.incrementFailed(12); Calendar startTime = Calendar.getInstance(); - Calendar endTime = Calendar.getInstance(); + Calendar endTime = (Calendar) startTime.clone(); endTime.set(Calendar.SECOND, startTime.get(Calendar.SECOND) + 3); reporter.reportTestRunComplete(startTime, endTime, counter); String results = writer.toString(); assertTrue("The writer was populated with something", results.length() > 0); - assertTrue("execution time " + results, results.indexOf("<td id=\"totalTime\">0h 0m 3") >= 0); + assertTrue("execution time " + results, results.indexOf("<td id=\"totalTime\">3.000s") >= 0); assertTrue("total executed", results.indexOf("<td id=\"totalRun\">24") > 0); assertTrue("total passed", results.indexOf("<td id=\"totalPassed\">12") > 0); assertTrue("total failed", results.indexOf("<td id=\"totalFailed\">12") > 0); @@ -127,8 +127,8 @@ assertTrue("Should be the 1st test case",row.indexOf("<td title=\"Test Case # 2\">2</td>") >=0 ); assertTrue("The file should contain a failed td " + row, row.indexOf("<td class=\"fail\" title=\"Test failed\">") >= 0); assertTrue("The file should contain a failed gif " + row, row.indexOf("failed.gif") >= 0); - assertTrue("The file should contain a failed line # " + row, row.indexOf("<td title=\"Line Failed\">23</td>") >= 0); - assertTrue("The file should contain a failed tag " + row, row.indexOf("<td title=\"FunctionId of Point of Failure\"><i>failed-tag</i></td>") >= 0); + assertTrue("The file should contain a failed line # " + row, row.indexOf("<td title=\"Line Failed\">23</td>") >= 0); + assertTrue("The file should contain a failed tag " + row, row.indexOf("<td title=\"FunctionId of Point of Failure\"><i>failed-tag</i></td>") >= 0); assertTrue("The file should contain a failed row info column " + row, row.indexOf("Row Failed") > -1); } Modified: trunk/jameleon-core/tst/java/net/sf/jameleon/reporting/SimpleTestRunReporterTest.java =================================================================== --- trunk/jameleon-core/tst/java/net/sf/jameleon/reporting/SimpleTestRunReporterTest.java 2007-06-20 13:36:20 UTC (rev 1608) +++ trunk/jameleon-core/tst/java/net/sf/jameleon/reporting/SimpleTestRunReporterTest.java 2007-06-22 02:02:06 UTC (rev 1609) @@ -64,12 +64,12 @@ counter.incrementPassed(12); counter.incrementFailed(12); Calendar startTime = Calendar.getInstance(); - Calendar endTime = Calendar.getInstance(); + Calendar endTime = (Calendar)startTime.clone(); endTime.set(Calendar.SECOND, startTime.get(Calendar.SECOND) + 3); reporter.reportTestRunComplete(startTime, endTime, counter); String results = writer.toString(); assertTrue("The writer was populated with something", results.length() > 0); - assertTrue("execution time " + results, results.indexOf("Time: 0h 0m 3") >= 0); + assertTrue("execution time " + results, results.indexOf("Time: 3.000s") >= 0); assertTrue("total executed", results.indexOf("Tests run: 24") > 0); assertTrue("total failed", results.indexOf("Failed: 12") > 0); } Modified: trunk/jameleon-core/tst/java/net/sf/jameleon/util/JameleonUtilityTest.java =================================================================== --- trunk/jameleon-core/tst/java/net/sf/jameleon/util/JameleonUtilityTest.java 2007-06-20 13:36:20 UTC (rev 1608) +++ trunk/jameleon-core/tst/java/net/sf/jameleon/util/JameleonUtilityTest.java 2007-06-22 02:02:06 UTC (rev 1609) @@ -119,63 +119,75 @@ public void testExecutionTimeToStringMS1(){ long time = 55L; String timeS = JameleonUtility.executionTimeToString(time); - assertEquals("Execution time in MS:", "0h 0m 0.055s", timeS); + assertEquals("Execution time in MS:", "0.055s", timeS); } public void testExecutionTimeToStringMS2(){ long time = 555L; String timeS = JameleonUtility.executionTimeToString(time); - assertEquals("Execution time in MS:", "0h 0m 0.555s", timeS); + assertEquals("Execution time in MS:", "0.555s", timeS); } public void testExecutionTimeToStringMS3(){ long time = 5L; String timeS = JameleonUtility.executionTimeToString(time); - assertEquals("Execution time in MS:", "0h 0m 0.005s", timeS); + assertEquals("Execution time in MS:", "0.005s", timeS); } public void testExecutionTimeToStringMinMS1(){ long time = 5005L; String timeS = JameleonUtility.executionTimeToString(time); - assertEquals("Execution time in MS:", "0h 0m 5.005s", timeS); + assertEquals("Execution time in MS:", "5.005s", timeS); } public void testExecutionTimeToStringMinMS2(){ long time = 15005L; String timeS = JameleonUtility.executionTimeToString(time); - assertEquals("Execution time in MS:", "0h 0m 15.005s", timeS); + assertEquals("Execution time in MS:", "15.005s", timeS); } public void testExecutionTimeToStringMinMS3(){ long time = 60000L; String timeS = JameleonUtility.executionTimeToString(time); - assertEquals("Execution time in MS:" + timeS, "0h 1m 0.000s", timeS); + assertEquals("Execution time", "1m", timeS); } public void testExecutionTimeToStringMinMS4(){ long time = 61505L; String timeS = JameleonUtility.executionTimeToString(time); - assertEquals("Execution time in MS:" + timeS, "0h 1m 1.505s", timeS); + assertEquals("Execution time in MS:" + timeS, "1m 1.505s", timeS); } public void testExecutionTimeToStringMinMS5(){ long time = 111505L; String timeS = JameleonUtility.executionTimeToString(time); - assertEquals("Execution time in MS:" + timeS, "0h 1m 51.505s", timeS); + assertEquals("Execution time in MS:" + timeS, "1m 51.505s", timeS); } public void testExecutionTimeToStringHH1(){ long time = 3600000L; String timeS = JameleonUtility.executionTimeToString(time); - assertEquals("Execution time in MS:" + timeS, "1h 0m 0.000s", timeS); + assertEquals("Execution time in MS:" + timeS, "1h", timeS); } - public void testExecutionTimeToStringHHMinMS1(){ + public void testExecutionTimeToStringHHMin1MS1(){ + long time = 7305402L; + String timeS = JameleonUtility.executionTimeToString(time); + assertEquals("Execution time in MS:" + timeS, "2h 1m 45.402s", timeS); + } + + public void testExecutionTimeToStringHHMin0MS1(){ long time = 7245402L; String timeS = JameleonUtility.executionTimeToString(time); - assertEquals("Execution time in MS:" + timeS, "2h 0m 45.402s", timeS); + assertEquals("Execution time in MS:" + timeS, "2h 45.402s", timeS); } + public void testExecutionTimeToString0(){ + long time = 0L; + String timeS = JameleonUtility.executionTimeToString(time); + assertEquals("Execution time in MS:" + timeS, "0.000s", timeS); + } + public void testStripHtmlCommentsOneComment(){ String html = "<head><!--some text--></head>"; String stripped = JameleonUtility.stripHtmlComments(html); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |