Author: stan.silvert(a)jboss.com
Date: 2009-01-13 16:39:30 -0500 (Tue, 13 Jan 2009)
New Revision: 106
Added:
trunk/jsfunit/src/main/webapp/WEB-INF/classes/
trunk/jsfunit/src/main/webapp/WEB-INF/classes/cactus.properties
trunk/jsfunit/src/main/webapp/cactus-report.xsl
Modified:
trunk/jsfunit/pom.xml
trunk/jsfunit/src/main/webapp/WEB-INF/web.xml
trunk/jsfunit/src/test/java/org/jboss/jopr/jsfunit/EmbjoprTestCase.java
trunk/jsfunit/src/test/java/org/jboss/jopr/jsfunit/as5/DatasourceTest.java
Log:
Revert to HtmlUnit 2.3 and add support for kicking off tests from the browser.
Modified: trunk/jsfunit/pom.xml
===================================================================
--- trunk/jsfunit/pom.xml 2009-01-13 00:47:57 UTC (rev 105)
+++ trunk/jsfunit/pom.xml 2009-01-13 21:39:30 UTC (rev 106)
@@ -28,7 +28,22 @@
</pluginRepositories>
<dependencies>
+
+ <!-- Dropping back to HtmlUnit 2.3 with Rhino until bug can be addressed -->
<dependency>
+ <groupId>net.sourceforge.htmlunit</groupId>
+ <artifactId>htmlunit</artifactId>
+ <scope>compile</scope>
+ <version>2.3</version>
+ </dependency>
+ <dependency>
+ <groupId>rhino</groupId>
+ <artifactId>js</artifactId>
+ <scope>compile</scope>
+ <version>1.7R1</version>
+ </dependency>
+
+ <dependency>
<groupId>org.jboss.jsfunit</groupId>
<artifactId>jboss-jsfunit-core</artifactId>
<version>1.0.0.GA-SNAPSHOT</version>
@@ -38,6 +53,10 @@
<groupId>xerces</groupId>
<artifactId>xercesImpl</artifactId>
</exclusion>
+ <exclusion>
+ <groupId>net.sourceforge.htmlunit</groupId>
+ <artifactId>htmlunit</artifactId>
+ </exclusion>
</exclusions>
</dependency>
<dependency>
Added: trunk/jsfunit/src/main/webapp/WEB-INF/classes/cactus.properties
===================================================================
--- trunk/jsfunit/src/main/webapp/WEB-INF/classes/cactus.properties
(rev 0)
+++ trunk/jsfunit/src/main/webapp/WEB-INF/classes/cactus.properties 2009-01-13 21:39:30
UTC (rev 106)
@@ -0,0 +1 @@
+cactus.servletRedirectorName=ServletRedirector.jsfunit
\ No newline at end of file
Modified: trunk/jsfunit/src/main/webapp/WEB-INF/web.xml
===================================================================
--- trunk/jsfunit/src/main/webapp/WEB-INF/web.xml 2009-01-13 00:47:57 UTC (rev 105)
+++ trunk/jsfunit/src/main/webapp/WEB-INF/web.xml 2009-01-13 21:39:30 UTC (rev 106)
@@ -69,7 +69,7 @@
<servlet-mapping>
<servlet-name>ServletTestRunner</servlet-name>
- <url-pattern>/ServletTestRunner</url-pattern>
+ <url-pattern>/ServletTestRunner.jsfunit</url-pattern>
</servlet-mapping>
Added: trunk/jsfunit/src/main/webapp/cactus-report.xsl
===================================================================
--- trunk/jsfunit/src/main/webapp/cactus-report.xsl (rev 0)
+++ trunk/jsfunit/src/main/webapp/cactus-report.xsl 2009-01-13 21:39:30 UTC (rev 106)
@@ -0,0 +1,355 @@
+<?xml version="1.0"?>
+<!--
+ The Apache Software License, Version 1.1
+
+ Copyright (c) 2001-2003 The Apache Software Foundation. All rights
+ reserved.
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions
+ are met:
+
+ 1. Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+
+ 2. Redistributions in binary form must reproduce the above copyright
+ notice, this list of conditions and the following disclaimer in
+ the documentation and/or other materials provided with the
+ distribution.
+
+ 3. The end-user documentation included with the redistribution, if
+ any, must include the following acknowlegement:
+ "This product includes software developed by the
+ Apache Software Foundation (
http://www.apache.org/)."
+ Alternately, this acknowlegement may appear in the software itself,
+ if and wherever such third-party acknowlegements normally appear.
+
+ 4. The names "The Jakarta Project", "Cactus", and "Apache
Software
+ Foundation" must not be used to endorse or promote products derived
+ from this software without prior written permission. For written
+ permission, please contact apache(a)apache.org.
+
+ 5. Products derived from this software may not be called "Apache"
+ nor may "Apache" appear in their names without prior written
+ permission of the Apache Group.
+
+ THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
+ WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
+ ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
+ USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+ ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+ OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
+ OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ SUCH DAMAGE.
+ ====================================================================
+
+ This software consists of voluntary contributions made by many
+ individuals on behalf of the Apache Software Foundation. For more
+ information on the Apache Software Foundation, please see
+ <
http://www.apache.org/>.
+ -->
+
+<!--
+
+ Sample stylesheet to be used with the Cactus ServletTestRunner output.
+ Based on the file junit-noframes.xsl from Apache Ant 1.5.
+
+ @author Stephane Bailliez <a href="mailto:sbailliez@apache.org"/>
+ @author Erik Hatcher <a href="mailto:ehatcher@apache.org"/>
+ @author Christopher Lenz <a href="mailto:cmlenz@apache.org"/>
+
+-->
+<xsl:stylesheet
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
version="1.0">
+ <xsl:output method="html" indent="yes"
encoding="US-ASCII"/>
+ <xsl:decimal-format decimal-separator="." grouping-separator=","
/>
+ <xsl:template match="testsuites">
+ <html>
+ <head>
+ <style type="text/css">
+ body {
+ font:normal 68% verdana,arial,helvetica;
+ color:#000000;
+ }
+ table tr td, table tr th {
+ font-size: 68%;
+ }
+ table.details tr th{
+ font-weight: bold;
+ text-align:left;
+ background:#a6caf0;
+ }
+ table.details tr td{
+ background:#eeeee0;
+ }
+
+ p {
+ line-height:1.5em;
+ margin-top:0.5em; margin-bottom:1.0em;
+ }
+ h1 {
+ margin: 0px 0px 5px; font: 165% verdana,arial,helvetica
+ }
+ h2 {
+ margin-top: 1em; margin-bottom: 0.5em; font: bold 125%
verdana,arial,helvetica
+ }
+ h3 {
+ margin-bottom: 0.5em; font: bold 115% verdana,arial,helvetica
+ }
+ h4 {
+ margin-bottom: 0.5em; font: bold 100% verdana,arial,helvetica
+ }
+ h5 {
+ margin-bottom: 0.5em; font: bold 100% verdana,arial,helvetica
+ }
+ h6 {
+ margin-bottom: 0.5em; font: bold 100% verdana,arial,helvetica
+ }
+ .Error {
+ font-weight:bold; color:red;
+ }
+ .Failure {
+ font-weight:bold; color:purple;
+ }
+ </style>
+ </head>
+ <body>
+ <a name="top"></a>
+ <xsl:call-template name="header"/>
+ <xsl:call-template name="summary"/>
+ <hr size="1" width="95%" align="left"/>
+ <xsl:call-template name="classes"/>
+ </body>
+ </html>
+ </xsl:template>
+
+ <xsl:template name="header">
+ <h1>Unit Test Results</h1>
+ <table width="100%">
+ <tr>
+ <td align="left"></td>
+ <td align="right">
+ Designed for use with
+ <a
href='http://jakarta.apache.org/cactus/'>Cactus</a>.
+ </td>
+ </tr>
+ </table>
+ <hr size="1"/>
+ </xsl:template>
+
+ <xsl:template name="summary">
+ <h2>Summary</h2>
+ <xsl:variable name="testCount"
select="sum(testsuite/@tests)"/>
+ <xsl:variable name="errorCount"
select="sum(testsuite/@errors)"/>
+ <xsl:variable name="failureCount"
select="sum(testsuite/@failures)"/>
+ <xsl:variable name="timeCount"
select="sum(testsuite/@time)"/>
+ <xsl:variable name="successRate" select="($testCount -
$failureCount - $errorCount) div $testCount"/>
+ <table class="details" border="0" cellpadding="5"
cellspacing="2" width="95%">
+ <tr valign="top">
+ <th>Tests</th>
+ <th>Failures</th>
+ <th>Errors</th>
+ <th>Success rate</th>
+ <th>Time</th>
+ </tr>
+ <tr valign="top">
+ <xsl:attribute name="class">
+ <xsl:choose>
+ <xsl:when test="$failureCount >
0">Failure</xsl:when>
+ <xsl:when test="$errorCount > 0">Error</xsl:when>
+ </xsl:choose>
+ </xsl:attribute>
+ <td><xsl:value-of select="$testCount"/></td>
+ <td><xsl:value-of select="$failureCount"/></td>
+ <td><xsl:value-of select="$errorCount"/></td>
+ <td>
+ <xsl:call-template name="display-percent">
+ <xsl:with-param name="value" select="$successRate"/>
+ </xsl:call-template>
+ </td>
+ <td>
+ <xsl:call-template name="display-time">
+ <xsl:with-param name="value" select="$timeCount"/>
+ </xsl:call-template>
+ </td>
+ </tr>
+ </table>
+ <table border="0" width="95%">
+ <tr>
+ <td style="text-align: justify;">
+ Note: <i>failures</i> are anticipated and checked for with assertions
+ while <i>errors</i> are unanticipated.
+ </td>
+ </tr>
+ </table>
+ </xsl:template>
+
+ <xsl:template name="classes">
+ <xsl:for-each select="testsuite">
+ <xsl:sort select="@name"/>
+ <!-- create an anchor to this class name -->
+ <a name="{@name}"></a>
+ <h3>TestCase <xsl:value-of select="@name"/></h3>
+
+ <table class="details" border="0" cellpadding="5"
cellspacing="2" width="95%">
+ <xsl:call-template name="testcase.test.header"/>
+ <!--
+ test can even not be started at all (failure to load the class)
+ so report the error directly
+ -->
+ <xsl:if test="./error">
+ <tr class="Error">
+ <td colspan="4"><xsl:apply-templates
select="./error"/></td>
+ </tr>
+ </xsl:if>
+ <xsl:apply-templates select="./testcase"
mode="print.test"/>
+ </table>
+ <p/>
+ <a href="#top">Back to top</a>
+ </xsl:for-each>
+ </xsl:template>
+
+ <xsl:template match="testsuite" mode="header">
+ <tr valign="top">
+ <th width="80%">Name</th>
+ <th>Tests</th>
+ <th>Errors</th>
+ <th>Failures</th>
+ <th nowrap="nowrap">Time(s)</th>
+ </tr>
+ </xsl:template>
+
+ <!-- class header -->
+ <xsl:template name="testsuite.test.header">
+ <tr valign="top">
+ <th width="80%">Name</th>
+ <th>Tests</th>
+ <th>Errors</th>
+ <th>Failures</th>
+ <th nowrap="nowrap">Time(s)</th>
+ </tr>
+ </xsl:template>
+
+ <!-- method header -->
+ <xsl:template name="testcase.test.header">
+ <tr valign="top">
+ <th>Name</th>
+ <th>Status</th>
+ <th width="80%">Type</th>
+ <th nowrap="nowrap">Time(s)</th>
+ </tr>
+ </xsl:template>
+
+ <!-- class information -->
+ <xsl:template match="testsuite" mode="print.test">
+ <tr valign="top">
+ <!-- set a nice color depending if there is an error/failure -->
+ <xsl:attribute name="class">
+ <xsl:choose>
+ <xsl:when test="(a)failures[.&gt;
0]">Failure</xsl:when>
+ <xsl:when test="(a)errors[.&gt; 0]">Error</xsl:when>
+ </xsl:choose>
+ </xsl:attribute>
+ <!-- print testsuite information -->
+ <td><a href="#{@name}"><xsl:value-of
select="@name"/></a></td>
+ <td><xsl:value-of select="@tests"/></td>
+ <td><xsl:value-of select="@errors"/></td>
+ <td><xsl:value-of select="@failures"/></td>
+ <td>
+ <xsl:call-template name="display-time">
+ <xsl:with-param name="value" select="@time"/>
+ </xsl:call-template>
+ </td>
+ </tr>
+ </xsl:template>
+
+ <xsl:template match="testcase" mode="print.test">
+ <tr valign="top">
+ <xsl:attribute name="class">
+ <xsl:choose>
+ <xsl:when test="failure | error">Error</xsl:when>
+ </xsl:choose>
+ </xsl:attribute>
+ <td><xsl:value-of select="@name"/></td>
+ <xsl:choose>
+ <xsl:when test="failure">
+ <td>Failure</td>
+ <td><xsl:apply-templates select="failure"/></td>
+ </xsl:when>
+ <xsl:when test="error">
+ <td>Error</td>
+ <td><xsl:apply-templates select="error"/></td>
+ </xsl:when>
+ <xsl:otherwise>
+ <td>Success</td>
+ <td></td>
+ </xsl:otherwise>
+ </xsl:choose>
+ <td>
+ <xsl:call-template name="display-time">
+ <xsl:with-param name="value" select="@time"/>
+ </xsl:call-template>
+ </td>
+ </tr>
+ </xsl:template>
+
+ <xsl:template match="failure">
+ <xsl:call-template name="display-failures"/>
+ </xsl:template>
+
+ <xsl:template match="error">
+ <xsl:call-template name="display-failures"/>
+ </xsl:template>
+
+ <!-- Style for the error and failure in the tescase template -->
+ <xsl:template name="display-failures">
+ <xsl:choose>
+ <xsl:when test="not(@message)">N/A</xsl:when>
+ <xsl:otherwise>
+ <xsl:value-of select="@message"/>
+ </xsl:otherwise>
+ </xsl:choose>
+ <!-- display the stacktrace -->
+ <code>
+ <p/>
+ <xsl:call-template name="br-replace">
+ <xsl:with-param name="word" select="."/>
+ </xsl:call-template>
+ </code>
+ </xsl:template>
+
+ <!--
+ template that will convert a carriage return into a br tag
+ @param word the text from which to convert CR to BR tag
+ -->
+ <xsl:template name="br-replace">
+ <xsl:param name="word"/>
+ <xsl:choose>
+ <xsl:when test="contains($word,'
')">
+ <xsl:value-of
select="substring-before($word,'
')"/>
+ <br/>
+ <xsl:call-template name="br-replace">
+ <xsl:with-param name="word"
select="substring-after($word,'
')"/>
+ </xsl:call-template>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:value-of select="$word"/>
+ </xsl:otherwise>
+ </xsl:choose>
+ </xsl:template>
+
+ <xsl:template name="display-time">
+ <xsl:param name="value"/>
+ <xsl:value-of select="format-number($value,'0.000')"/>
+ </xsl:template>
+
+ <xsl:template name="display-percent">
+ <xsl:param name="value"/>
+ <xsl:value-of select="format-number($value,'0.00%')"/>
+ </xsl:template>
+
+</xsl:stylesheet>
+
Modified: trunk/jsfunit/src/test/java/org/jboss/jopr/jsfunit/EmbjoprTestCase.java
===================================================================
--- trunk/jsfunit/src/test/java/org/jboss/jopr/jsfunit/EmbjoprTestCase.java 2009-01-13
00:47:57 UTC (rev 105)
+++ trunk/jsfunit/src/test/java/org/jboss/jopr/jsfunit/EmbjoprTestCase.java 2009-01-13
21:39:30 UTC (rev 106)
@@ -22,7 +22,9 @@
package org.jboss.jopr.jsfunit;
+import com.gargoylesoftware.htmlunit.BrowserVersion;
import com.gargoylesoftware.htmlunit.WebClient;
+import com.gargoylesoftware.htmlunit.html.ClickableElement;
import com.gargoylesoftware.htmlunit.html.HtmlAnchor;
import com.gargoylesoftware.htmlunit.html.HtmlButtonInput;
import com.gargoylesoftware.htmlunit.html.HtmlForm;
@@ -72,7 +74,7 @@
.startsWith("4");
// Initial JSF request
- WebClientSpec wcSpec = new WebClientSpec("/");
+ WebClientSpec wcSpec = new WebClientSpec("/",
BrowserVersion.FIREFOX_3);
// This is temporary because embedded Jopr can't find /js/rhq.js
wcSpec.getWebClient().setThrowExceptionOnFailingStatusCode(false);
@@ -137,16 +139,15 @@
* (eg. "Web Applications (WAR)", "Datasources", etc.) in the
* navigation tree.
*/
- public HtmlImage getNavTreeArrow(String resourceName) {
+ public ClickableElement getNavTreeArrow(String resourceName) {
HtmlAnchor link = getNavTreeLink(resourceName);
String id = link.getIdAttribute();
// An example id is:
"navTreeForm:navTree:81:82:83:84::typeSummaryLink"
// The icon's id would be:
"81:82:83:84::typeSummary:handle:img:collapsed"
int index = id.lastIndexOf("Link");
- id = id.substring("navTreeForm:navTree:".length(), index)
- + ":handle:img:collapsed";
- return (HtmlImage)client.getElement(id);
+ id = id.substring(0, index) + ":handle";
+ return (ClickableElement)client.getElement(id);
}
/**
Modified: trunk/jsfunit/src/test/java/org/jboss/jopr/jsfunit/as5/DatasourceTest.java
===================================================================
--- trunk/jsfunit/src/test/java/org/jboss/jopr/jsfunit/as5/DatasourceTest.java 2009-01-13
00:47:57 UTC (rev 105)
+++ trunk/jsfunit/src/test/java/org/jboss/jopr/jsfunit/as5/DatasourceTest.java 2009-01-13
21:39:30 UTC (rev 106)
@@ -22,6 +22,7 @@
package org.jboss.jopr.jsfunit.as5;
+import com.gargoylesoftware.htmlunit.html.ClickableElement;
import org.jboss.jopr.jsfunit.*;
import com.gargoylesoftware.htmlunit.html.HtmlAnchor;
import com.gargoylesoftware.htmlunit.html.HtmlButtonInput;
@@ -77,9 +78,8 @@
Map<String, String> propertiesMap) throws
IOException {
// Expand the "Datasources" tree node
- HtmlImage resourceNodeImage = getNavTreeArrow("Datasources");
- resourceNodeImage.click();
-
+ ClickableElement datasourcesArrow = getNavTreeArrow("Datasources");
+ datasourcesArrow.click();
HtmlAnchor datasourceLink = getNavTreeLink(datasourceType);
datasourceLink.click();