You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@lenya.apache.org by an...@apache.org on 2009/03/19 14:05:13 UTC

svn commit: r755981 [2/3] - in /lenya/contributions/2_0_X/modules: atom/ atom/config/ atom/config/cocoon-xconf/ atom/java/ atom/java/src/ atom/java/src/org/ atom/java/src/org/apache/ atom/java/src/org/apache/lenya/ atom/java/src/org/apache/lenya/module...

Added: lenya/contributions/2_0_X/modules/atom/test/canoo/resources/conceptsInvalid.html
URL: http://svn.apache.org/viewvc/lenya/contributions/2_0_X/modules/atom/test/canoo/resources/conceptsInvalid.html?rev=755981&view=auto
==============================================================================
--- lenya/contributions/2_0_X/modules/atom/test/canoo/resources/conceptsInvalid.html (added)
+++ lenya/contributions/2_0_X/modules/atom/test/canoo/resources/conceptsInvalid.html Thu Mar 19 13:05:10 2009
@@ -0,0 +1,66 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<html xmlns="http://www.w3.org/1999/xhtml" xmlns:xhtml="http://www.w3.org/1999/xhtml" xmlns:lenya="http://apache.org/cocoon/lenya/page-envelope/1.0">
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one or more
+  contributor license agreements.  See the NOTICE file distributed with
+  this work for additional information regarding copyright ownership.
+  The ASF licenses this file to You under the Apache License, Version 2.0
+  (the "License"); you may not use this file except in compliance with
+  the License.  You may obtain a copy of the License at
+
+      http://www.apache.org/licenses/LICENSE-2.0
+
+  Unless required by applicable law or agreed to in writing, software
+  distributed under the License is distributed on an "AS IS" BASIS,
+  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  See the License for the specific language governing permissions and
+  limitations under the License.
+-->
+
+<!-- $Id: index_en 528434 2007-04-13 10:42:52Z andreas $ -->
+  <head>
+    <title>Concepts</title>
+  </head>
+  <body>
+    <h1>Concepts</h1>
+
+    <foo>atomTest</foo>
+    
+    <h2>Publications</h2>
+    
+    <p>In Apache Lenya, a website is called a
+    <strong>publication</strong>.</p>
+    
+    <h2>Areas: Authoring, Live, ...</h2>
+
+    <p>Apache Lenya separates between different areas:</p>
+    <ul>
+      <li>The authoring area is for creating and editing of
+      content. All CMS functions are available here.</li>
+
+      <li>Once the content has been published it is moved to the live
+      area. The live area can be served by a web server directly or
+      you can add another intermediate step where the content is
+      replicated from the live area to the actual web server. In any
+      case the live area simply serves as a preview to the content
+      that will be served by the web server.</li>
+      <li>
+        Other standard areas are and archive. If necessary, further
+        areas can be declared.
+      </li>
+    </ul>
+    
+    <h2>Resource Types</h2>
+
+    <p>As Apache Lenya is based on Apache Cocoon, it has strong XML and
+    XSLT foundations. It is possible to ensure that a document
+    conforms to an XML schema. Typically you define different types of
+    documents, like an news article or an opinion piece, conforming to
+    different XML schemas. These different types are referred to as
+    document types. They are used to ensure the XML schema conformance
+    when editing and typically also when preparing a presentation of
+    the document, where an opinion piece has a different layout than a
+    news article.</p>
+
+  </body>
+</html>

Added: lenya/contributions/2_0_X/modules/atom/test/canoo/resources/entry.xml
URL: http://svn.apache.org/viewvc/lenya/contributions/2_0_X/modules/atom/test/canoo/resources/entry.xml?rev=755981&view=auto
==============================================================================
--- lenya/contributions/2_0_X/modules/atom/test/canoo/resources/entry.xml (added)
+++ lenya/contributions/2_0_X/modules/atom/test/canoo/resources/entry.xml Thu Mar 19 13:05:10 2009
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<entry xmlns="http://purl.org/atom/app#"
+  xmlns:dc="http://purl.org/dc/elements/1.1/">
+  <dc:title>A Test Title</dc:title>
+  <dc:subject>A Test Subject</dc:subject>
+</entry>
\ No newline at end of file

Added: lenya/contributions/2_0_X/modules/atom/test/canoo/resources/lock.xml
URL: http://svn.apache.org/viewvc/lenya/contributions/2_0_X/modules/atom/test/canoo/resources/lock.xml?rev=755981&view=auto
==============================================================================
--- lenya/contributions/2_0_X/modules/atom/test/canoo/resources/lock.xml (added)
+++ lenya/contributions/2_0_X/modules/atom/test/canoo/resources/lock.xml Thu Mar 19 13:05:10 2009
@@ -0,0 +1,2 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<entry xmlns="http://purl.org/atom/app#"/>
\ No newline at end of file

Added: lenya/contributions/2_0_X/modules/atom/test/canoo/resources/project-logo.png
URL: http://svn.apache.org/viewvc/lenya/contributions/2_0_X/modules/atom/test/canoo/resources/project-logo.png?rev=755981&view=auto
==============================================================================
Binary file - no diff available.

Propchange: lenya/contributions/2_0_X/modules/atom/test/canoo/resources/project-logo.png
------------------------------------------------------------------------------
    svn:mime-type = application/octet-stream

Added: lenya/contributions/2_0_X/modules/atom/test/canoo/results/WebTestOverview.junit.xml
URL: http://svn.apache.org/viewvc/lenya/contributions/2_0_X/modules/atom/test/canoo/results/WebTestOverview.junit.xml?rev=755981&view=auto
==============================================================================
--- lenya/contributions/2_0_X/modules/atom/test/canoo/results/WebTestOverview.junit.xml (added)
+++ lenya/contributions/2_0_X/modules/atom/test/canoo/results/WebTestOverview.junit.xml Thu Mar 19 13:05:10 2009
@@ -0,0 +1,18 @@
+<?xml version="1.0" encoding="UTF-8"?><testsuite time="132.529" tests="9" name="WebTest" failures="0" errors="1">
+<!--
+			This is an overview of the WebTest results in JUnit "standard" format.
+			It doesn't present all the information available in WebTest reports but can be easily be integrated
+			in reports of continuous integration tools like Cruise Control.
+			-->
+<testcase time="0.315" name="atom.setup" classname="WebTest"/>
+<testcase time="22.075" name="atom.entry" classname="WebTest">
+<failure type="Failed test" message="Failing step: atom.entry ()"/>
+</testcase>
+<testcase time="6.871" name="atom.login" classname="WebTest"/>
+<testcase time="21.375" name="atom.assetUpload" classname="WebTest"/>
+<testcase time="19.649" name="atom.workspace" classname="WebTest"/>
+<testcase time="18.388" name="atom.edit" classname="WebTest"/>
+<testcase time="13.222" name="atom.editMetaData" classname="WebTest"/>
+<testcase time="17.111" name="atom.lock" classname="WebTest"/>
+<testcase time="13.523" name="atom.workspace" classname="WebTest"/>
+</testsuite>

Added: lenya/contributions/2_0_X/modules/atom/test/canoo/results/WebTestOverview.xml
URL: http://svn.apache.org/viewvc/lenya/contributions/2_0_X/modules/atom/test/canoo/results/WebTestOverview.xml?rev=755981&view=auto
==============================================================================
--- lenya/contributions/2_0_X/modules/atom/test/canoo/results/WebTestOverview.xml (added)
+++ lenya/contributions/2_0_X/modules/atom/test/canoo/results/WebTestOverview.xml Thu Mar 19 13:05:10 2009
@@ -0,0 +1,31 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<overview Implementation-Title="Canoo Webtest" Implementation-Version="development">
+	<folder name="009_Atomsetup">
+<summary starttime='Mon Oct 13 16:30:11 CEST 2008' name='atom.setup' successful='yes' duration='315'><topsteps total='1' failed='0' notexecuted='0' successful='1'></topsteps><steps total='1' failed='0' notexecuted='0' successful='1'></steps><timingprofile average='NaN' number='0'><range to='1' from='0' number='0'></range><range to='3' from='1' number='0'></range><range to='5' from='3' number='0'></range><range to='10' from='5' number='0'></range><range to='30' from='10' number='0'></range><range from='30' number='0'></range></timingprofile></summary>
+</folder>
+<folder name="010_Atomentry">
+<summary starttime='Mon Oct 13 16:30:12 CEST 2008' name='atom.entry' successful='no' duration='22075'><topsteps total='13' failed='1' notexecuted='8' successful='4'></topsteps><steps total='28' failed='3' notexecuted='10' successful='15'></steps><timingprofile average='6899' number='3'><range to='1' from='0' number='1'></range><range to='3' from='1' number='0'></range><range to='5' from='3' number='2'></range><range to='10' from='5' number='1'></range><range to='30' from='10' number='1'></range><range from='30' number='0'></range></timingprofile><failingstep description='' name='verifyProperty'></failingstep></summary>
+</folder>
+<folder name="011_Atomlogin">
+<summary starttime='Mon Oct 13 16:30:34 CEST 2008' name='atom.login' successful='yes' duration='6871'><topsteps total='2' failed='0' notexecuted='0' successful='2'></topsteps><steps total='15' failed='2' notexecuted='2' successful='11'></steps><timingprofile average='3289' number='2'><range to='1' from='0' number='0'></range><range to='3' from='1' number='1'></range><range to='5' from='3' number='1'></range><range to='10' from='5' number='1'></range><range to='30' from='10' number='0'></range><range from='30' number='0'></range></timingprofile></summary>
+</folder>
+<folder name="012_AtomassetUpload">
+<summary starttime='Mon Oct 13 16:30:42 CEST 2008' name='atom.assetUpload' successful='yes' duration='21375'><topsteps total='15' failed='0' notexecuted='0' successful='15'></topsteps><steps total='27' failed='3' notexecuted='2' successful='22'></steps><timingprofile average='2974' number='7'><range to='1' from='0' number='3'></range><range to='3' from='1' number='1'></range><range to='5' from='3' number='3'></range><range to='10' from='5' number='2'></range><range to='30' from='10' number='0'></range><range from='30' number='0'></range></timingprofile></summary>
+</folder>
+<folder name="013_Atomworkspace">
+<summary starttime='Mon Oct 13 16:31:04 CEST 2008' name='atom.workspace' successful='yes' duration='19649'><topsteps total='12' failed='0' notexecuted='0' successful='12'></topsteps><steps total='27' failed='2' notexecuted='2' successful='23'></steps><timingprofile average='2409' number='8'><range to='1' from='0' number='3'></range><range to='3' from='1' number='3'></range><range to='5' from='3' number='2'></range><range to='10' from='5' number='2'></range><range to='30' from='10' number='0'></range><range from='30' number='0'></range></timingprofile></summary>
+</folder>
+<folder name="014_Atomedit">
+<summary starttime='Mon Oct 13 16:31:24 CEST 2008' name='atom.edit' successful='yes' duration='18388'><topsteps total='12' failed='0' notexecuted='0' successful='12'></topsteps><steps total='35' failed='3' notexecuted='2' successful='30'></steps><timingprofile average='1806' number='10'><range to='1' from='0' number='4'></range><range to='3' from='1' number='4'></range><range to='5' from='3' number='2'></range><range to='10' from='5' number='2'></range><range to='30' from='10' number='0'></range><range from='30' number='0'></range></timingprofile></summary>
+</folder>
+<folder name="015_AtomeditMetaData">
+<summary starttime='Mon Oct 13 16:31:42 CEST 2008' name='atom.editMetaData' successful='yes' duration='13222'><topsteps total='7' failed='0' notexecuted='0' successful='7'></topsteps><steps total='24' failed='2' notexecuted='2' successful='20'></steps><timingprofile average='2175' number='6'><range to='1' from='0' number='1'></range><range to='3' from='1' number='4'></range><range to='5' from='3' number='1'></range><range to='10' from='5' number='1'></range><range to='30' from='10' number='0'></range><range from='30' number='0'></range></timingprofile></summary>
+</folder>
+<folder name="016_Atomlock">
+<summary starttime='Mon Oct 13 16:31:56 CEST 2008' name='atom.lock' successful='yes' duration='17111'><topsteps total='31' failed='0' notexecuted='0' successful='31'></topsteps><steps total='89' failed='9' notexecuted='6' successful='74'></steps><timingprofile average='780' number='21'><range to='1' from='0' number='17'></range><range to='3' from='1' number='3'></range><range to='5' from='3' number='1'></range><range to='10' from='5' number='1'></range><range to='30' from='10' number='0'></range><range from='30' number='0'></range></timingprofile></summary>
+</folder>
+<folder name="017_Atomworkspace">
+<summary starttime='Mon Oct 13 16:32:13 CEST 2008' name='atom.workspace' successful='yes' duration='13523'><topsteps total='6' failed='0' notexecuted='0' successful='6'></topsteps><steps total='25' failed='2' notexecuted='2' successful='21'></steps><timingprofile average='2167' number='6'><range to='1' from='0' number='1'></range><range to='3' from='1' number='4'></range><range to='5' from='3' number='1'></range><range to='10' from='5' number='0'></range><range to='30' from='10' number='0'></range><range from='30' number='0'></range></timingprofile></summary>
+</folder>
+
+</overview>

Added: lenya/contributions/2_0_X/modules/atom/test/canoo/results/index.html
URL: http://svn.apache.org/viewvc/lenya/contributions/2_0_X/modules/atom/test/canoo/results/index.html?rev=755981&view=auto
==============================================================================
--- lenya/contributions/2_0_X/modules/atom/test/canoo/results/index.html (added)
+++ lenya/contributions/2_0_X/modules/atom/test/canoo/results/index.html Thu Mar 19 13:05:10 2009
@@ -0,0 +1,187 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<html lang="en">
+<head>
+<META http-equiv="Content-Type" content="text/html; charset=us-ascii">
+<title>WebTest Test Report - Test Result Overview</title>
+<link rel="shortcut icon" type="image/x-icon" href="resources/images/favicon.ico">
+<link rel="icon" type="image/x-icon" href="resources/images/favicon.ico">
+<meta content="text/css" http-equiv="content-style-type">
+<link href="resources/report.css" type="text/css" rel="stylesheet">
+<script src="resources/sorttable.js" type="text/javascript"></script>
+</head>
+<body>
+<div class="header">
+<img alt="WebTest" src="resources/images/webtest.jpg"><br>WebTest Test Report&nbsp;&nbsp;&nbsp;&nbsp;Tests started at Mon Oct 13 16:30:11 CEST 2008</div>
+<table width="100%" cellspacing="2" border="0" cellpadding="0">
+<tr>
+<td width="50%" valign="top">
+<h4>Result Summary</h4>
+<table width="100%" cellspacing="0" border="0" cellpadding="3">
+<tbody>
+<tr>
+<th>WebTests</th><th align="right">#</th><th align="right">%</th><th>Graph</th>
+</tr>
+<tr>
+<td class="light"><img alt="ok" src="resources/images/ok.gif"></td><td align="right" class="light">8</td><td align="right" class="light">89</td><td class="light" width="80%">
+<div style="width: 88.88888888888889%; background: lightgreen;" class="colorBar" title="Successful WebTests"></div>
+</td>
+</tr>
+<tr>
+<td class="light"><img alt="x" src="resources/images/todo.gif"></td><td align="right" class="light">1</td><td align="right" class="light">11</td><td class="light" width="80%">
+<div style="width: 11.11111111111111%; background: red;" class="colorBar" title="Failed WebTests"></div>
+</td>
+</tr>
+</tbody>
+<tbody>
+<tr>
+<td class="light"><b>Sum</b></td><td align="right" class="light"><b>&nbsp;9</b></td><td align="right" class="light"><b>&nbsp;100</b></td><td class="light">&nbsp;</td>
+</tr>
+</tbody>
+<tbody>
+<tr>
+<th>Steps</th><th align="right">#</th><th align="right">%</th><th>Graph</th>
+</tr>
+<tr>
+<td class="light"><img alt="ok" src="resources/images/ok.gif"></td><td align="right" class="light">90</td><td align="right" class="light">91</td><td class="light" width="80%">
+<div style="width: 90.9090909090909%; background: lightgreen;" class="colorBar" title="Successful steps"></div>
+</td>
+</tr>
+<tr>
+<td class="light"><img alt="x" src="resources/images/todo.gif"></td><td align="right" class="light">1</td><td align="right" class="light">1</td><td class="light" width="80%">
+<div style="width: 1.0101010101010102%; background: red;" class="colorBar" title="Failed steps"></div>
+</td>
+</tr>
+<tr>
+<td class="light"><img alt="o" src="resources/images/optional.gif"></td><td align="right" class="light">8</td><td align="right" class="light">8</td><td class="light" width="80%">
+<div style="width: 8.080808080808081%; background: yellow;" class="colorBar" title="Skipped steps"></div>
+</td>
+</tr>
+</tbody>
+<tbody>
+<tr>
+<td class="light"><b>Sum</b></td><td align="right" class="light"><b>&nbsp;99</b></td><td align="right" class="light"><b>&nbsp;100</b></td><td class="light">&nbsp;</td>
+</tr>
+</tbody>
+</table>
+</td><td valign="top">
+<h4>Server Roundtrip Timing Profile</h4>
+<table width="100%" cellspacing="0" border="0" cellpadding="3">
+<thead>
+<tr>
+<th align="center">Secs</th><th align="right">#</th><th align="right">%</th><th>Histogram</th>
+</tr>
+</thead>
+<tfoot>
+<tr>
+<td class="light"><b>Sum</b></td><td align="right" class="light"><b>&nbsp;74</b></td><td align="right" class="light"><b>&nbsp;100</b></td><td class="light">&nbsp;</td>
+</tr>
+<tr>
+<td class="light"><b>Avg</b></td><td align="right" class="light">
+                        &nbsp;
+                    </td><td align="right" class="light">
+                        &nbsp;
+                    </td><td class="light"><b>2104 ms</b></td>
+</tr>
+</tfoot>
+<tbody>
+<tr>
+<td align="center" nowrap class="light">0 - 1</td><td align="right" class="light">30</td><td align="right" class="light">41</td><td class="light" width="80%">
+<div style="width: 40.54054054054054%; background: lightblue;" class="colorBar"></div>
+</td>
+</tr>
+<tr>
+<td align="center" nowrap class="light">1 - 3</td><td align="right" class="light">20</td><td align="right" class="light">27</td><td class="light" width="80%">
+<div style="width: 27.027027027027028%; background: lightblue;" class="colorBar"></div>
+</td>
+</tr>
+<tr>
+<td align="center" nowrap class="light">3 - 5</td><td align="right" class="light">13</td><td align="right" class="light">18</td><td class="light" width="80%">
+<div style="width: 17.56756756756757%; background: lightblue;" class="colorBar"></div>
+</td>
+</tr>
+<tr>
+<td align="center" nowrap class="light">5 - 10</td><td align="right" class="light">10</td><td align="right" class="light">14</td><td class="light" width="80%">
+<div style="width: 13.513513513513514%; background: lightblue;" class="colorBar"></div>
+</td>
+</tr>
+<tr>
+<td align="center" nowrap class="light">10 - 30</td><td align="right" class="light">1</td><td align="right" class="light">1</td><td class="light" width="80%">
+<div style="width: 1.3513513513513513%; background: lightblue;" class="colorBar"></div>
+</td>
+</tr>
+<tr>
+<td align="center" nowrap class="light">&gt; 30</td><td align="right" class="light">0</td><td align="right" class="light">0</td><td class="light" width="80%"></td>
+</tr>
+</tbody>
+</table>
+</td>
+</tr>
+</table>
+<h4>
+<a name="overview">Test Scenario Overview (00:02:13)</a>
+</h4>
+<table class="sortable" width="100%" cellspacing="0" border="0" cellpadding="5">
+<thead>
+<tr>
+<th rowspan="2">#</th><th rowspan="2">Result</th><th rowspan="2">Name</th><th title="Number of successful executed steps / Total number of steps" rowspan="2"># Steps</th><th colspan="3">Timing profile</th><th style="white-space: nowrap" rowspan="2">Failing step</th>
+</tr>
+<tr>
+<th>Duration</th><th>%</th><th>Graph</th>
+</tr>
+</thead>
+<tbody>
+<tr>
+<td align="right" class="light">1</td><td align="center" class="light"><img alt="ok" src="resources/images/ok.gif"></td><td nowrap class="light"><a href="009_Atomsetup/WebTestReport.html">atom.setup</a></td><td style="white-space: nowrap" align="right" class="light">1 / 1</td><td nowrap align="right" class="light">315</td><td align="right" class="light">0</td><td class="light" width="20%">
+<div style="width: 0.2376838276905432%; background: lightblue;" class="colorBar"></div>
+</td><td class="light"></td>
+</tr>
+<tr>
+<td align="right" class="light">2</td><td align="center" class="light"><a onclick="showTargetStep(this)" href="#testspec1-error"><img alt="x" src="resources/images/todo.gif"></a></td><td nowrap class="light"><a href="010_Atomentry/WebTestReport.html">atom.entry</a></td><td style="white-space: nowrap" align="right" class="light">15 / 28</td><td nowrap align="right" class="light">00:00:22</td><td align="right" class="light">17</td><td class="light" width="20%">
+<div style="width: 16.65673173418648%; background: lightblue;" class="colorBar"></div>
+</td><td class="light"><b>verifyProperty</b> </td>
+</tr>
+<tr>
+<td align="right" class="light">3</td><td align="center" class="light"><img alt="ok" src="resources/images/ok.gif"></td><td nowrap class="light"><a href="011_Atomlogin/WebTestReport.html">atom.login</a></td><td style="white-space: nowrap" align="right" class="light">11 / 15</td><td nowrap align="right" class="light">00:00:07</td><td align="right" class="light">5</td><td class="light" width="20%">
+<div style="width: 5.1845256509895945%; background: lightblue;" class="colorBar"></div>
+</td><td class="light"></td>
+</tr>
+<tr>
+<td align="right" class="light">4</td><td align="center" class="light"><img alt="ok" src="resources/images/ok.gif"></td><td nowrap class="light"><a href="012_AtomassetUpload/WebTestReport.html">atom.assetUpload</a></td><td style="white-space: nowrap" align="right" class="light">22 / 27</td><td nowrap align="right" class="light">00:00:21</td><td align="right" class="light">16</td><td class="light" width="20%">
+<div style="width: 16.128545450429716%; background: lightblue;" class="colorBar"></div>
+</td><td class="light"></td>
+</tr>
+<tr>
+<td align="right" class="light">5</td><td align="center" class="light"><img alt="ok" src="resources/images/ok.gif"></td><td nowrap class="light"><a href="013_Atomworkspace/WebTestReport.html">atom.workspace</a></td><td style="white-space: nowrap" align="right" class="light">23 / 27</td><td nowrap align="right" class="light">00:00:20</td><td align="right" class="light">15</td><td class="light" width="20%">
+<div style="width: 14.826188985052328%; background: lightblue;" class="colorBar"></div>
+</td><td class="light"></td>
+</tr>
+<tr>
+<td align="right" class="light">6</td><td align="center" class="light"><img alt="ok" src="resources/images/ok.gif"></td><td nowrap class="light"><a href="014_Atomedit/WebTestReport.html">atom.edit</a></td><td style="white-space: nowrap" align="right" class="light">30 / 35</td><td nowrap align="right" class="light">00:00:18</td><td align="right" class="light">14</td><td class="light" width="20%">
+<div style="width: 13.874699122456217%; background: lightblue;" class="colorBar"></div>
+</td><td class="light"></td>
+</tr>
+<tr>
+<td align="right" class="light">7</td><td align="center" class="light"><img alt="ok" src="resources/images/ok.gif"></td><td nowrap class="light"><a href="015_AtomeditMetaData/WebTestReport.html">atom.editMetaData</a></td><td style="white-space: nowrap" align="right" class="light">20 / 24</td><td nowrap align="right" class="light">00:00:13</td><td align="right" class="light">10</td><td class="light" width="20%">
+<div style="width: 9.97668434833131%; background: lightblue;" class="colorBar"></div>
+</td><td class="light"></td>
+</tr>
+<tr>
+<td align="right" class="light">8</td><td align="center" class="light"><img alt="ok" src="resources/images/ok.gif"></td><td nowrap class="light"><a href="016_Atomlock/WebTestReport.html">atom.lock</a></td><td style="white-space: nowrap" align="right" class="light">74 / 89</td><td nowrap align="right" class="light">00:00:17</td><td align="right" class="light">13</td><td class="light" width="20%">
+<div style="width: 12.911136430517095%; background: lightblue;" class="colorBar"></div>
+</td><td class="light"></td>
+</tr>
+<tr>
+<td align="right" class="light">9</td><td align="center" class="light"><img alt="ok" src="resources/images/ok.gif"></td><td nowrap class="light"><a href="017_Atomworkspace/WebTestReport.html">atom.workspace</a></td><td style="white-space: nowrap" align="right" class="light">21 / 25</td><td nowrap align="right" class="light">00:00:14</td><td align="right" class="light">10</td><td class="light" width="20%">
+<div style="width: 10.203804450346716%; background: lightblue;" class="colorBar"></div>
+</td><td class="light"></td>
+</tr>
+</tbody>
+</table>
+<hr>
+<table width="100%">
+<tr>
+<td valign="bottom">Created using <a href="http://webtest.canoo.com">Canoo Webtest</a> (development). Report created at 13.10.2008 16:32</td><td align="right"><img src="http://webtest.canoo.com/webtest/manual/images/webtest.jpg?build=development" alt="WebTest"> is an Open Source project founded and hosted by <a href="http://www.canoo.com"><img src="resources/images/canoo.gif" alt="Canoo"></a></td>
+</tr>
+</table>
+</body>
+</html>

Added: lenya/contributions/2_0_X/modules/atom/test/canoo/results/resources/images/canoo.gif
URL: http://svn.apache.org/viewvc/lenya/contributions/2_0_X/modules/atom/test/canoo/results/resources/images/canoo.gif?rev=755981&view=auto
==============================================================================
Binary file - no diff available.

Propchange: lenya/contributions/2_0_X/modules/atom/test/canoo/results/resources/images/canoo.gif
------------------------------------------------------------------------------
    svn:mime-type = application/octet-stream

Added: lenya/contributions/2_0_X/modules/atom/test/canoo/results/resources/images/collapseall.png
URL: http://svn.apache.org/viewvc/lenya/contributions/2_0_X/modules/atom/test/canoo/results/resources/images/collapseall.png?rev=755981&view=auto
==============================================================================
Binary file - no diff available.

Propchange: lenya/contributions/2_0_X/modules/atom/test/canoo/results/resources/images/collapseall.png
------------------------------------------------------------------------------
    svn:mime-type = application/octet-stream

Added: lenya/contributions/2_0_X/modules/atom/test/canoo/results/resources/images/expandMinus.png
URL: http://svn.apache.org/viewvc/lenya/contributions/2_0_X/modules/atom/test/canoo/results/resources/images/expandMinus.png?rev=755981&view=auto
==============================================================================
Binary file - no diff available.

Propchange: lenya/contributions/2_0_X/modules/atom/test/canoo/results/resources/images/expandMinus.png
------------------------------------------------------------------------------
    svn:mime-type = application/octet-stream

Added: lenya/contributions/2_0_X/modules/atom/test/canoo/results/resources/images/expandPlus.png
URL: http://svn.apache.org/viewvc/lenya/contributions/2_0_X/modules/atom/test/canoo/results/resources/images/expandPlus.png?rev=755981&view=auto
==============================================================================
Binary file - no diff available.

Propchange: lenya/contributions/2_0_X/modules/atom/test/canoo/results/resources/images/expandPlus.png
------------------------------------------------------------------------------
    svn:mime-type = application/octet-stream

Added: lenya/contributions/2_0_X/modules/atom/test/canoo/results/resources/images/expandall.png
URL: http://svn.apache.org/viewvc/lenya/contributions/2_0_X/modules/atom/test/canoo/results/resources/images/expandall.png?rev=755981&view=auto
==============================================================================
Binary file - no diff available.

Propchange: lenya/contributions/2_0_X/modules/atom/test/canoo/results/resources/images/expandall.png
------------------------------------------------------------------------------
    svn:mime-type = application/octet-stream

Added: lenya/contributions/2_0_X/modules/atom/test/canoo/results/resources/images/failed.gif
URL: http://svn.apache.org/viewvc/lenya/contributions/2_0_X/modules/atom/test/canoo/results/resources/images/failed.gif?rev=755981&view=auto
==============================================================================
Binary file - no diff available.

Propchange: lenya/contributions/2_0_X/modules/atom/test/canoo/results/resources/images/failed.gif
------------------------------------------------------------------------------
    svn:mime-type = application/octet-stream

Added: lenya/contributions/2_0_X/modules/atom/test/canoo/results/resources/images/favicon.ico
URL: http://svn.apache.org/viewvc/lenya/contributions/2_0_X/modules/atom/test/canoo/results/resources/images/favicon.ico?rev=755981&view=auto
==============================================================================
Binary file - no diff available.

Propchange: lenya/contributions/2_0_X/modules/atom/test/canoo/results/resources/images/favicon.ico
------------------------------------------------------------------------------
    svn:mime-type = application/octet-stream

Added: lenya/contributions/2_0_X/modules/atom/test/canoo/results/resources/images/less.gif
URL: http://svn.apache.org/viewvc/lenya/contributions/2_0_X/modules/atom/test/canoo/results/resources/images/less.gif?rev=755981&view=auto
==============================================================================
Binary file - no diff available.

Propchange: lenya/contributions/2_0_X/modules/atom/test/canoo/results/resources/images/less.gif
------------------------------------------------------------------------------
    svn:mime-type = application/octet-stream

Added: lenya/contributions/2_0_X/modules/atom/test/canoo/results/resources/images/more.gif
URL: http://svn.apache.org/viewvc/lenya/contributions/2_0_X/modules/atom/test/canoo/results/resources/images/more.gif?rev=755981&view=auto
==============================================================================
Binary file - no diff available.

Propchange: lenya/contributions/2_0_X/modules/atom/test/canoo/results/resources/images/more.gif
------------------------------------------------------------------------------
    svn:mime-type = application/octet-stream

Added: lenya/contributions/2_0_X/modules/atom/test/canoo/results/resources/images/ok.gif
URL: http://svn.apache.org/viewvc/lenya/contributions/2_0_X/modules/atom/test/canoo/results/resources/images/ok.gif?rev=755981&view=auto
==============================================================================
Binary file - no diff available.

Propchange: lenya/contributions/2_0_X/modules/atom/test/canoo/results/resources/images/ok.gif
------------------------------------------------------------------------------
    svn:mime-type = application/octet-stream

Added: lenya/contributions/2_0_X/modules/atom/test/canoo/results/resources/images/optional.gif
URL: http://svn.apache.org/viewvc/lenya/contributions/2_0_X/modules/atom/test/canoo/results/resources/images/optional.gif?rev=755981&view=auto
==============================================================================
Binary file - no diff available.

Propchange: lenya/contributions/2_0_X/modules/atom/test/canoo/results/resources/images/optional.gif
------------------------------------------------------------------------------
    svn:mime-type = application/octet-stream

Added: lenya/contributions/2_0_X/modules/atom/test/canoo/results/resources/images/todo.gif
URL: http://svn.apache.org/viewvc/lenya/contributions/2_0_X/modules/atom/test/canoo/results/resources/images/todo.gif?rev=755981&view=auto
==============================================================================
Binary file - no diff available.

Propchange: lenya/contributions/2_0_X/modules/atom/test/canoo/results/resources/images/todo.gif
------------------------------------------------------------------------------
    svn:mime-type = application/octet-stream

Added: lenya/contributions/2_0_X/modules/atom/test/canoo/results/resources/images/webtest.jpg
URL: http://svn.apache.org/viewvc/lenya/contributions/2_0_X/modules/atom/test/canoo/results/resources/images/webtest.jpg?rev=755981&view=auto
==============================================================================
Binary file - no diff available.

Propchange: lenya/contributions/2_0_X/modules/atom/test/canoo/results/resources/images/webtest.jpg
------------------------------------------------------------------------------
    svn:mime-type = application/octet-stream

Added: lenya/contributions/2_0_X/modules/atom/test/canoo/results/resources/report.css
URL: http://svn.apache.org/viewvc/lenya/contributions/2_0_X/modules/atom/test/canoo/results/resources/report.css?rev=755981&view=auto
==============================================================================
--- lenya/contributions/2_0_X/modules/atom/test/canoo/results/resources/report.css (added)
+++ lenya/contributions/2_0_X/modules/atom/test/canoo/results/resources/report.css Thu Mar 19 13:05:10 2009
@@ -0,0 +1,97 @@
+body {
+/* top-level settings, inherited by all elements */
+	font-size: 10pt;
+	font-family: Arial, Helvetica, sans-serif;
+	margin: 10px;
+}
+
+TH {
+	FONT-WEIGHT: bold;
+	BACKGROUND-COLOR: #e1e1e1;
+}
+
+TD.topmenu1Container {
+	background-color: #FFFFFF;
+}
+
+TD.light {
+	background-color: #f8f8f8;
+}
+
+h4 {
+	COLOR: #768bc2;
+}
+
+PRE.text {
+	FONT-FAMILY: Courier new, monospace, sans-serif;
+	FONT-WEIGHT: bold;
+	WHITE-SPACE: pre;
+}
+
+.location {
+	font-family: Courier new, monospace, sans-serif;
+}
+.parameterWrapper {
+	overflow: auto; width: 1000px;
+}
+.parameterName {
+	background-color: #f8f8f8;
+	white-space: nowrap;
+	font-weight: bold;
+}
+.parameterValue {
+	background-color: #f8f8f8;
+}
+
+A {
+	COLOR: #768bc2;
+	TEXT-DECORATION: none;
+}
+
+A:link {
+	COLOR: #768bc2;
+	TEXT-DECORATION: none;
+}
+
+A:visited {
+	COLOR: #768bc2;
+	TEXT-DECORATION: none;
+}
+
+A:active {
+	COLOR: #768bc2;
+	TEXT-DECORATION: none;
+}
+
+A:hover {
+	TEXT-DECORATION: underline;
+}
+
+A.linkToError {
+	FONT-SIZE: smaller;
+}
+
+img {
+	border: 0;
+}
+TABLE.collapsed { display: none; }
+TABLE.expanded { display: inline; }
+DIV.header { color: #768bc2; margin-left: 10px; }
+DIV.header IMG { margin-left: -10px; border:0; }
+DIV.colorBar { height: 1em; border: 0; margin-left: 2px; margin-right: 1px; }
+
+.withPointer {
+	cursor: pointer; /* cursor: hand; specify both */
+}
+
+.detailName
+{
+	font-weight: bold;
+	vertical-align: top;
+}
+.detailText
+{
+	white-space: pre;
+	font-family: Courier new, monospace, sans-serif;
+}
+

Added: lenya/contributions/2_0_X/modules/atom/test/canoo/results/resources/responseBrowser.html
URL: http://svn.apache.org/viewvc/lenya/contributions/2_0_X/modules/atom/test/canoo/results/resources/responseBrowser.html?rev=755981&view=auto
==============================================================================
--- lenya/contributions/2_0_X/modules/atom/test/canoo/results/resources/responseBrowser.html (added)
+++ lenya/contributions/2_0_X/modules/atom/test/canoo/results/resources/responseBrowser.html Thu Mar 19 13:05:10 2009
@@ -0,0 +1,95 @@
+<html>
+<head>
+<title>Webtest Result browser</title>
+<script type="text/javascript">
+
+var tabResults = new Array();
+var currentPosition = 0;
+
+function showFirst() { show(0) };
+function showLast() { show(tabResults.length - 1) };
+function showNext() { show(++currentPosition) };
+function showPrevious() { show(--currentPosition) };
+function show(_iIndex, _bSkipScroll)
+{
+	if (opener && opener.selectedLink)
+		opener.selectedLink.style.backgroundColor = "";
+
+	currentPosition = Math.max(0, Math.min(_iIndex, tabResults.length-1))
+	var oFrame = document.getElementById("resultPage");
+	var oCurResult = tabResults[currentPosition];
+	oFrame.src = oCurResult.resultFilename;
+
+	// notify the command frame that the result has been loaded 	
+	window.frames.commandsFrame.resultLoaded(oCurResult)
+	
+	opener.selectedLink = oCurResult.link;
+	opener.selectedLink.style.backgroundColor = "#ffcccc";
+	if (!_bSkipScroll)
+		opener.selectedLink.scrollIntoView(false);
+		
+	showPrePreviews(currentPosition);
+};
+
+/**
+Shows the mini preview of the pages before and after the currently displayed one
+@param _iIndex the index of the currently displayed page
+*/
+function showPrePreviews(_iIndex)
+{
+	var iNbPreviews = 5; // has to be odd!!
+	var iNbBefore = (iNbPreviews - 1) / 2;
+	var iStart = Math.min(Math.max(_iIndex - iNbBefore, 0), tabResults.length-1);
+	var iEnd =  Math.min(iStart + iNbPreviews,  tabResults.length-1);
+	for (var i=iStart; i<iEnd; ++i)
+	{
+		var oCurResult = tabResults[i];
+		var iIndice = i - iStart;
+		var oFrame = window.frames.previewsFrame.document.getElementById("prePreviewFrame" + iIndice);
+		oFrame.src = oCurResult.resultFilename;
+		oFrame.className = (i == _iIndex) ? "prePreviewCurrent" : "";
+	}
+	
+}
+
+function loadResults()
+{
+	if (!window.opener)
+	{
+		alert("This file is not intended to be opened directly!\n\nUse it from the result report");
+		return;
+	}
+	
+	tabResults = window.opener.tabResultLinks;
+	if (opener.selectedLink)
+	{
+		for (var i=0; i<tabResults.length; ++i)
+		{
+			if (tabResults[i].link == opener.selectedLink)
+			{
+				show(i, true);
+				break;
+			}
+		}
+	}
+	else
+		show(0);
+		
+	window.focus();
+}
+window.onload = loadResults;
+
+</script>
+</head>
+
+
+<frameset cols="20%,*">
+	<frame name="previewsFrame" id="previewsFrame" src="responseBrowserPreviews.html"/>
+	<frameset rows="90%,*">
+		<frame id="resultPage" name="resultPage" src="about:blank"/>
+		<frame id="commandsFrame" name="commandsFrame" src="responseBrowserCommands.html"/>
+	</frameset>
+</frameset>
+
+</html>
+

Added: lenya/contributions/2_0_X/modules/atom/test/canoo/results/resources/responseBrowser.js
URL: http://svn.apache.org/viewvc/lenya/contributions/2_0_X/modules/atom/test/canoo/results/resources/responseBrowser.js?rev=755981&view=auto
==============================================================================
--- lenya/contributions/2_0_X/modules/atom/test/canoo/results/resources/responseBrowser.js (added)
+++ lenya/contributions/2_0_X/modules/atom/test/canoo/results/resources/responseBrowser.js Thu Mar 19 13:05:10 2009
@@ -0,0 +1,195 @@
+/**
+Dynamically enhance the links "Resulting page" from the report to provide a simplified visualisation of the captured responses
+*/
+var tabResultLinks = [];
+var mapHRef2Links = new Object(); // main link href -> link object
+function loadJob()
+{
+	var baseUrl = readBaseUrl();
+	var cookie = readCookie();
+
+	var colLinks = document.getElementsByTagName("A");
+	var nb = 0;
+	for (var i=0; i<colLinks.length; ++i)
+	{
+		var oLink = colLinks[i];
+		// improve XSL to have an other criterium, eg a class
+		var bResultPageLink = (oLink.innerHTML == "Resulting page")
+		var bGroupResultPageLink = (oLink.innerHTML == "last result page of this group")
+		if (bResultPageLink || bGroupResultPageLink)
+		{
+			oLink.onclick = handleResultLinkClick;
+			oLink.title += " (Ctrl+mouse over: preview floating over this page, Ctrl+Click: opens in results browser)";
+			oLink.onmouseover = handleResultMouseOver;
+			oLink.onmouseout = handleResultMouseOut;
+			addReferenceParameters(oLink, baseUrl, cookie); 
+
+			if (bResultPageLink)
+			{
+				var newResult = {
+					resultFilename: oLink.href, 
+					link: oLink, 
+					index: tabResultLinks.length,
+					tabResultLinks: tabResultLinks
+				};
+				tabResultLinks[tabResultLinks.length] = newResult;
+				mapHRef2Links[oLink.href] = oLink
+			}
+			++nb;
+		}
+	}
+}
+
+function addEvent(_obj, _eventType, _function)
+{
+	if (_obj.addEventListener)
+		_obj.addEventListener(_eventType, _function, false); 
+	else if (_obj.attachEvent)
+		_obj.attachEvent("on" + _eventType, _function);
+}
+addEvent(window, 'load', loadJob);
+
+/**
+Handles the click on a link to a result file
+If no special key is pressed, nothing special is done and the link can be normally opened
+*/
+function handleResultLinkClick(_event)
+{
+	var event = _event ? _event : window.event;
+	if (event.ctrlKey)
+	{
+		window.selectedLink = mapHRef2Links[this.href];
+		// compute the location of the html file: in the same dir as this js file but maybe not in the same dir as the report
+		var oScript = document.getElementById("scriptResponseBrowser");
+		var strResponseBrowserHref = oScript.src.replace(".js", ".html"); // -> responseBrowser.html in the right dir
+		// Shift gives the possibility to open a new Overview window. This may be usefull to compare 2 results films
+		var targetWindowName = event.shiftKey ? "_blank" : "overview";
+		window.open(strResponseBrowserHref, targetWindowName);
+		event.cancelBubble = true;
+		return false;
+	}
+	// normal click, do nothing
+	return true;
+}
+
+/**
+Shows a preview in a floating div if the ctr key is pressed while moving the pointer on a link
+*/
+function handleResultMouseOver(_event)
+{
+	var event = _event ? _event : window.event;
+	if (event.ctrlKey)
+	{
+		showPreview(this);
+	}
+}
+
+/**
+Hides the preview (if it was visible)
+*/
+function handleResultMouseOut(_event)
+{
+	if (window.oPreviewDiv != null)
+	{
+		window.oPreviewDiv.style.visibility = "hidden";
+	}
+}
+
+/**
+Load the href of the link in a floating preview frame
+*/
+function showPreview(_oLink)
+{
+	var bIsIE = (document.all != null); // IE CSS support is not that good
+	if (window.oPreviewDiv == null)
+	{
+		window.oPreviewDiv = document.createElement("div");
+		oPreviewDiv.id = "previewDiv";
+		document.body.appendChild(oPreviewDiv);
+		oPreviewDiv.style.position = "fixed";
+		oPreviewDiv.style.backgroundColor = "white";
+		oPreviewDiv.style.borderStyle = "solid";
+		oPreviewDiv.style.borderWidth = "5pt";
+		oPreviewDiv.style.borderColor = "blue";
+
+		oPreviewDiv.style.width = "70%";
+		oPreviewDiv.style.height = "90%";
+		oPreviewDiv.style.left = "28%";
+		oPreviewDiv.style.top = "5%";
+		oPreviewDiv.style.zIndex = 100;
+
+		window.oIframe = document.createElement("iframe");
+		oPreviewDiv.appendChild(oIframe);
+		oIframe.style.width = "100%";
+		oIframe.style.height = "100%";
+		oIframe.style.overflow = "hidden";
+
+		if (bIsIE)
+		{
+			oPreviewDiv.style.position = "absolute";
+			oPreviewDiv.style.width = screen.width * 0.7;
+			oPreviewDiv.style.height = screen.height * 0.9;
+			oIframe.style.overflowY = "hidden";
+			oIframe.style.overflowX = "hidden";
+		}
+	}
+
+	oIframe.src = _oLink.href;
+	oPreviewDiv.style.visibility = "visible";
+	if (bIsIE)
+	{
+		oPreviewDiv.style.top = document.body.parentElement.scrollTop + screen.height * 0.05;
+	}
+}
+
+/**
+Reads the value of the (first) base url
+*/
+function readBaseUrl()
+{
+	return evaluateXPath("//a[@class='baseUrl']/@href");
+}
+
+/**
+Read the name and value of the session cookie of the WebTest (if any).
+This cookie need to have been read with <storeCookie property="wtCookie" .../>
+*/
+function readCookie()
+{
+	var cookieProperty = "wtSessionCookie";
+	var baseXpath = "//td[@class = 'parameterValue' and text() = '" + cookieProperty + "']/../../tr/td[@class = 'parameterName' and text() = '@myParam@']/following-sibling::td/text()";
+	var value = evaluateXPath(baseXpath.replace("@myParam@", "-> cookie value"));
+	if (!value)
+		return null;
+	var name = evaluateXPath(baseXpath.replace("@myParam@", "name"));
+	return {'name': name, 'value': value};
+}
+
+/**
+Evaluates the string value of the xpath expression
+*/
+function evaluateXPath(_strXPath)
+{
+	if (document.evaluate)
+		return document.evaluate(_strXPath, document, null, XPathResult.STRING_TYPE, null).stringValue;
+	// TODO: make it for IE too
+	return null;
+}
+
+/**
+Adds the base url for the test and the session cookie information (if any) to the link.
+These information may be read afterwards, for instance by the WebTestRecorder to allow to jump into the session
+*/
+function addReferenceParameters(_oLink, _baseUrl, _cookie)
+{
+	if (!_baseUrl)
+		return;
+
+	var newHref = _oLink.getAttribute("href") + "?baseUrl=" + escape(_baseUrl)
+	if (_cookie)
+	{
+		newHref += "&cookieName=" + escape(_cookie.name)
+		newHref += "&cookieValue=" + escape(_cookie.value)
+	}
+	_oLink.setAttribute("href", newHref)
+}
\ No newline at end of file

Added: lenya/contributions/2_0_X/modules/atom/test/canoo/results/resources/responseBrowserCommands.html
URL: http://svn.apache.org/viewvc/lenya/contributions/2_0_X/modules/atom/test/canoo/results/resources/responseBrowserCommands.html?rev=755981&view=auto
==============================================================================
--- lenya/contributions/2_0_X/modules/atom/test/canoo/results/resources/responseBrowserCommands.html (added)
+++ lenya/contributions/2_0_X/modules/atom/test/canoo/results/resources/responseBrowserCommands.html Thu Mar 19 13:05:10 2009
@@ -0,0 +1,29 @@
+<html>
+<head>
+<title>Webtest Result browser - commands</title>
+<script type="text/javascript">
+/**
+Called by the frameset when a result has been loaded
+*/
+function resultLoaded(_oResult)
+{
+	document.getElementById("resultFilename").innerHTML = _oResult.resultFilename.split("?")[0];
+	document.getElementById("resultFilename").href = _oResult.resultFilename;
+	document.getElementById("step").innerHTML = (_oResult.index+1) + "/" + _oResult.tabResultLinks.length;
+//	document.getElementById("description").innerHTML = oCurResult.description;
+}
+</script>
+</head>
+<body>
+<div style="text-align: center; white-space: nowrap;">
+	<span id="step" style="font-weight: bold"></span>
+	<span id="description"></span>
+	(<a href="about:blank" target="_top" id="resultFilename"></a>)
+	<br/>
+<button onclick="parent.showFirst()">|&lt;&lt; first</button>
+<button onclick="parent.showPrevious()">&lt;&lt; previous</button>
+<button onclick="parent.showNext()">next &gt;&gt;</button>
+<button onclick="parent.showLast()">last &gt;&gt;|</button>
+</div>
+</body>
+</html>

Added: lenya/contributions/2_0_X/modules/atom/test/canoo/results/resources/responseBrowserPreviews.html
URL: http://svn.apache.org/viewvc/lenya/contributions/2_0_X/modules/atom/test/canoo/results/resources/responseBrowserPreviews.html?rev=755981&view=auto
==============================================================================
--- lenya/contributions/2_0_X/modules/atom/test/canoo/results/resources/responseBrowserPreviews.html (added)
+++ lenya/contributions/2_0_X/modules/atom/test/canoo/results/resources/responseBrowserPreviews.html Thu Mar 19 13:05:10 2009
@@ -0,0 +1,32 @@
+<html>
+<head>
+<title>Webtest Result browser - previews</title>
+<style type="text/css">
+body, iframe
+{ margin: 0; padding: 0 }
+
+iframe
+{
+/*	zoom: 19%;*/
+	width: 100%; 
+	height: 20%;
+	overflow: hidden; 
+	border: 2px solid black;
+}
+
+.prePreviewCurrent
+{
+	border: 2px solid red;
+}
+
+</style>
+</head>
+<body>
+<iframe id="prePreviewFrame0" src="about:blank"></iframe>
+<iframe id="prePreviewFrame1" src="about:blank"></iframe>
+<iframe id="prePreviewFrame2" src="about:blank"></iframe>
+<iframe id="prePreviewFrame3" src="about:blank"></iframe>
+<iframe id="prePreviewFrame4" src="about:blank"></iframe>
+
+</body>
+</html>

Added: lenya/contributions/2_0_X/modules/atom/test/canoo/results/resources/showHide.js
URL: http://svn.apache.org/viewvc/lenya/contributions/2_0_X/modules/atom/test/canoo/results/resources/showHide.js?rev=755981&view=auto
==============================================================================
--- lenya/contributions/2_0_X/modules/atom/test/canoo/results/resources/showHide.js (added)
+++ lenya/contributions/2_0_X/modules/atom/test/canoo/results/resources/showHide.js Thu Mar 19 13:05:10 2009
@@ -0,0 +1,249 @@
+// -----------------------------------------------------------------------------------------------------------------
+// Documentation of showHide.js
+// -----------------------------------------------------------------------------------------------------------------
+
+/*
+This javascript is used to show or hide substeps of the Canoo Webtest 'group' steptype in a HTML Webtest Resultfile.
+
+The script provides functions to show or hide substeps for different levels in the hierarchically structured html tree:
+
+	1) For a single group step: 	showSubstepsOfGroup / hideSubstepsOfGroup / changeLevelOfDetailForGroup
+	2) For a testspec: 		showAllSubstepsOfTestspec / hideAllSubstepsOfTestspec
+	3) For the entire document: 	hideAllSubstepsOnPage
+
+The function's algorithm is as follows:
+
+ 1)   Functions for a single group step:
+
+      The functions for a single group step get as argument the node which represents
+      the image that has been clicked in the browser to show or hide the substeps of a group step.
+      These functions navigate in the DOM tree to the node which is the parent of all substeps of the group.
+      For each substep the attribute 'style.display' is assigned the appropriate value to show or hide the substep.
+
+ 2/3) Functions for a testspec or the entire document:
+
+      These functions get as argument the node which represents the image that has been clicked
+      in the browser to show or hide the substeps of the group steps within a tespec or within the entire
+      document. They determine each image in the scope of the testpec respectively in the document
+      that is used to show or hide the substeps of a single group step and use each of these images
+      to call the according function for a single group step to show or hide the substeps for each
+      of the group steps.
+
+The functions are based on the following structure of the HTML document:
+
+ 1)   showSubstepsOfGroup/hideSubstepsOfGroup:
+
+		<tr> <!-- tablerow for one step in a testspec -->
+			<td> 	<!-- (( 2 )) SKRIPT: td node = imageForGroup.parentNode -->
+				<!-- position of step in testspec -->
+					<b>1</b>
+					<br>
+					<img onclick="changeLevelOfDetailForGroup(this)" name="collapseButton" src="./images/expandall.png">
+					<!-- (( 1 )) SKRIPT: img node = imageForGroup -->
+			</td>
+			<td>	<!-- result of step execution (failed, successful, not executed) -->
+				<img src="./images/ok.gif">
+			</td>
+			<td>	<!-- stepType and stepID -->
+				<b>group</b>
+				<br>
+				stepID here and optional lastResult
+			</td>
+			<td> <!-- (( 3 )) SKRIPT: td node = tdContainingImage.nextSibling.nextSibling.nextSibling -->
+				<table>
+					<tr><th>No</th><th>Result</th><th>Name</th><th>Parameter</th><th>Duration</th></tr>
+					<tr> ... substeps of group step ... </tr>
+
+ 2)   showAllSubstepsOfTestspec/hideAllSubstepsOfTestspec:
+
+			<p>  <!-- (( 2 )) SKRIPT: p node: pContainingImage = imageForTestSpec.parentNode
+				<img alt="show all substeps of 'group' steps in testspec" src="./images/expandall.png" onclick="showAllSubstepsOfTestspec(this)">
+				<img alt="hide all substeps of 'group' steps in testspec" src="./images/collapseall.png" onclick="hideAllSubstepsOfTestspec(this)">
+				<!-- (( 1 )) SKRIPT: img node = imageForTestSpec -->
+			</p>
+
+			<table> <!-- (( 3 )) SKRIPT: table node =  pContainingImage.nextSibling -->
+				<tr><th>No</th><th>Result</th><th>Name</th><th>Parameter</th><th>Duration</th></tr>
+				<tr> ... steps of testspec ... <tr>
+*/
+
+var fExpandSource, fCollapseSource;
+
+/**
+ * Function must be called early, such as 'onLoad', to set the two global variables with the two parameters.
+ * @param expandSourceVar name of the icon file to show when the group is closed.
+ * @param collapseSourceVar name of the icon file to show when the group is open.
+ */
+function initExpandCollapse(expandSourceVar, collapseSourceVar) {
+	fExpandSource = expandSourceVar;
+	fCollapseSource = collapseSourceVar;
+}
+
+/**
+ * Hide all sub-steps of a test spec.
+ * The desired test spec is identified by the 'collapse' image displayed above the table.
+ */
+function hideAllSubstepsOfTestspec(imageForTestSpec) {
+	hideAllSubsteps(locateTestSpecTable(imageForTestSpec));
+}
+
+function hideAllSubsteps(nodeContainingStepsOfTestspec) {
+    var images = nodeContainingStepsOfTestspec.getElementsByTagName("img");
+	for (var i = 0; i < images.length; i++) {
+		if (images[i].getAttribute("name") == "collapseButton") {
+			hideSubstepsOfGroup(images[i]);
+		}
+	}
+}
+
+/**
+ * Show all sub-steps of a test spec.
+ * The desired test spec is identified by the 'expand' image displayed above the table.
+ */
+function showAllSubstepsOfTestspec(imageForTestSpec) {
+	showAllSubsteps(locateTestSpecTable(imageForTestSpec));
+}
+
+function showAllSubsteps(nodeContainingStepsOfTestspec) {
+    var images = nodeContainingStepsOfTestspec.getElementsByTagName("img");
+	for (var i = 0; i < images.length; i++) {
+		if (images[i].getAttribute("name") == "collapseButton") {
+			showSubstepsOfGroup(images[i]);
+		}
+	}
+}
+
+function changeLevelOfDetailForGroup(imageForGroup) {
+	if (imageForGroup.src.indexOf(fCollapseSource) > -1) {
+		hideSubstepsOfGroup(imageForGroup);
+	} 
+	else {
+		showSubstepsOfGroup(imageForGroup);
+	}
+}
+
+function hideSubstepsOfGroup(imageForGroup) {
+	changeSubstepsOfGroup(imageForGroup, "collapsed", fExpandSource);
+}
+
+function showSubstepsOfGroup(imageForGroup) {
+	changeSubstepsOfGroup(imageForGroup, "expanded", fCollapseSource);
+}
+
+function changeSubstepsOfGroup(imageForGroup, displayStyle, imageName) {
+	// how to locate table[@class="expanded"] or table[@class="collapsed]?
+
+	// moves two nodes up from the image to the row, then gets the 4th td
+	// this handle any possible child that aren't element
+	var tdContainingSubsteps = imageForGroup.parentNode.parentNode.getElementsByTagName('TD')[3];
+	var substeps = tdContainingSubsteps.childNodes;
+	for (var j = 1; j < substeps.length; j++) {
+		// Note: nodeType==1 denotes Element; see e.g. <http://www.zytrax.com/tech/dom/nodetype.html>
+		if (substeps[j].nodeType == 1) {
+			substeps[j].className = displayStyle;
+		}
+	}
+	imageForGroup.src = imageForGroup.src.substr(0, imageForGroup.src.lastIndexOf("/") + 1) + imageName;
+}
+
+/**
+ * Locate the table that belongs to a global 'collapse' or 'expand' button.
+ */
+function locateTestSpecTable(imageForTestSpec) {
+	var pContainingStepsOfTestspec = imageForTestSpec.parentNode;
+	do	{
+		pContainingStepsOfTestspec = pContainingStepsOfTestspec.nextSibling;
+		// Note: nodeType==1 denotes Elements; see e.g. <http://www.zytrax.com/tech/dom/nodetype.html>
+	}
+	while (pContainingStepsOfTestspec.nodeType != 1);
+	return pContainingStepsOfTestspec;
+}
+
+/**
+ * Make sure that the target of the link is visible.
+ * @param link An anchor to an error.
+ */
+function showTargetStep(link) {
+	if (link.href.indexOf("#") > -1) {
+		showStep(getNamedAnchor(link.href.substr(link.href.indexOf("#") + 1)));
+	}
+	// lets the browser follows the link
+	return false;
+}
+
+/**
+ * Locate the error on the page.
+ * @param name The name of the anchor
+ * @return node The anchor for the error. Is null if the anchor isn't on the page.
+ */
+function getNamedAnchor(name) {
+	var elements = document.getElementsByName(name);
+	for (var i = 0; i < elements.length; i++) {
+		if (elements[i].nodeName == "A") {
+			return elements[i];
+		}
+	}
+	return null;
+}
+
+/**
+ * Expand all levels from a failing node to the root of the webtest table.
+ * @param node The anchor for the error.
+ */
+function showStep(node) {
+	if (node == null) {
+		return;
+	}
+
+	do {
+		node = node.parentNode;
+	} while (node.nodeName != "TABLE");
+
+	if (node.className == "collapsed") {
+		showStep(node);
+		// moves two nodes up from the table to the row, then gets the 1st (and only) image in the 1st td
+		// this handle any possible child that aren't element
+		showSubstepsOfGroup(node.parentNode.parentNode.getElementsByTagName('TD')[0].getElementsByTagName('IMG')[0]);
+	}
+}
+
+/**
+ Toggle the display of the first nextSibling of _node with nodeName _type (if any)
+ */
+function toggleDisplayNext(_node, _type) {
+	var oNode = findNext(_node, _type);
+	if (oNode) {
+		var bDisplayed = (oNode.style.display != "none");
+		oNode.style.display = bDisplayed ? "none" : "inline";
+		var oImg = findToggleImage(_node);
+		if (oImg) {
+			var newFileName = bDisplayed ? "expandPlus.png" : "expandMinus.png";
+			oImg.src = oImg.src.replace(/[^/]*$/, newFileName);
+			oImg.alt = bDisplayed ? "Show " : "Hide ";
+		}
+	}
+}
+
+/**
+ Finds the first nextSibling of _node with the provided node name
+ */
+function findNext(_node, _nodeName) {
+	var nextNode = _node.nextSibling;
+	while (nextNode != null && nextNode.nodeName != _nodeName) {
+		nextNode = nextNode.nextSibling;
+	}
+	return nextNode;
+}
+
+/**
+ Find the toggle image for the node. This is the node itself (if it is an image) else the first image
+ child of the node.
+ */
+function findToggleImage(_oNode) {
+	if (_oNode.tagName == "IMG") {
+		return _oNode;
+	}
+
+	var imgs = _oNode.getElementsByTagName("img");
+	return (imgs.length > 0) ? imgs[0] : null;
+}

Added: lenya/contributions/2_0_X/modules/atom/test/canoo/results/resources/sorttable.js
URL: http://svn.apache.org/viewvc/lenya/contributions/2_0_X/modules/atom/test/canoo/results/resources/sorttable.js?rev=755981&view=auto
==============================================================================
--- lenya/contributions/2_0_X/modules/atom/test/canoo/results/resources/sorttable.js (added)
+++ lenya/contributions/2_0_X/modules/atom/test/canoo/results/resources/sorttable.js Thu Mar 19 13:05:10 2009
@@ -0,0 +1,231 @@
+/**
+Adapted from sorttable
+http://kryogenix.org/code/browser/sorttable/
+*/
+addEvent(window, "load", sortables_init);
+
+var SORT_COLUMN_INDEX;
+
+// IE doesn't know push
+if (!Array.prototype.push)
+{
+	Array.prototype.push = function(_obj)
+	{
+		this[this.length] = _obj;
+	}
+}
+
+function sortables_init() {
+    // Find all tables with class sortable and make them sortable
+    if (!document.getElementsByTagName) return;
+    var tbls = document.getElementsByTagName("table");
+    for (var ti=0; ti<tbls.length; ti++) {
+        var thisTbl = tbls[ti];
+        if (((' '+thisTbl.className).indexOf("sortable") != -1)) 
+        {
+            ts_makeSortable(thisTbl);
+        }
+    }
+}
+
+function ts_makeSortable(table) {
+    if (!table.rows || table.rows.length == 0) {
+    	return;
+    }
+    var firstRow = table.rows[0];
+    
+    table.sortable_spans = new Array();
+    
+    // We have a first row: assume it's the header, and make its contents clickable links
+    for (var i=0;i<firstRow.cells.length;i++) 
+    {
+        var cell = firstRow.cells[i];
+        var txt = ts_getInnerText(cell);
+        cell.onclick = ts_resortTable; 
+        cell.title = "Sort by: " + txt;
+
+        var oSpan = document.createElement("SPAN");
+        oSpan.className = "sortarrow"
+        oSpan.appendChild(document.createTextNode("   "));
+        cell.sortable_span = oSpan;
+        cell.sortable_colid = i;
+        cell.sortable_table = table;
+        cell.appendChild(oSpan);
+        cell.style.cursor = "pointer";
+        table.sortable_spans.push(oSpan);
+    }
+}
+
+function ts_getInnerText(el) {
+	if (typeof el == "string") return el;
+	if (typeof el == "undefined") return el;
+	if (el.innerText) return el.innerText;	//Not needed but it is faster
+	var str = "";
+	
+	var cs = el.childNodes;
+	var l = cs.length;
+	for (var i = 0; i < l; i++) {
+		switch (cs[i].nodeType) {
+			case 1: //ELEMENT_NODE
+				if (cs[i].tagName == "IMG")
+					str += cs[i].alt;
+				str += ts_getInnerText(cs[i]);
+				break;
+			case 3:	//TEXT_NODE
+				str += cs[i].nodeValue;
+				break;
+		}
+	}
+	return str;
+}
+
+function ts_resortTable() 
+{
+    // get the span
+    var span = this.sortable_span;
+    var td = this;
+    var column = this.sortable_colid;
+    var table = this.sortable_table;
+    
+    // Work out a type for the column
+    if (table.rows.length <= 1) return;
+    var itm = ts_getInnerText(table.tBodies[0].rows[0].cells[column]);
+    var sortfn = ts_sort_caseinsensitive;
+    if (itm.match(/^\d\d[\/-]\d\d[\/-]\d\d\d\d$/)) sortfn = ts_sort_date;
+    if (itm.match(/^\d\d[\/-]\d\d[\/-]\d\d$/)) sortfn = ts_sort_date;
+    if (itm.match(/^[?$]/)) sortfn = ts_sort_currency;
+    if (itm.match(/^[\d\.]+$/)) sortfn = ts_sort_numeric;
+    SORT_COLUMN_INDEX = column;
+   	var colRows = table.rows;
+   	var startIndex = 1;
+    if (table.tHead)
+    {
+    	colRows = table.tBodies[0].rows;
+    	var startIndex = 0;
+    }
+    var newRows = new Array();
+    for (var i=startIndex; i<colRows.length; ++i) 
+    { 
+    	var curRow = colRows[i];
+    	if (!curRow.sortable_originalPosition)
+    		curRow.sortable_originalPosition = i;
+    	newRows.push(curRow);
+    }
+
+    newRows.sort(sortfn);
+
+    if (span.getAttribute("sortdir") == 'down') {
+        ARROW = '&nbsp;&nbsp;&uarr;';
+        newRows.reverse();
+        span.setAttribute('sortdir', 'up');
+    } else {
+        ARROW = '&nbsp;&nbsp;&darr;';
+        span.setAttribute('sortdir', 'down');
+    }
+
+    // We appendChild rows that already exist to the tbody, so it moves them rather than creating new ones
+    // don't do sortbottom rows
+    for (var i=0;i<newRows.length;i++)
+    {
+    	var curRow = newRows[i];
+    	if (!curRow.className || (curRow.className && (curRow.className.indexOf('sortbottom') == -1))) 
+    		table.tBodies[0].appendChild(curRow);
+    }
+    // do sortbottom rows only
+    for (var i=0;i<newRows.length;i++) 
+    { 
+    	var curRow = newRows[i];
+    	if (curRow .className && (curRow .className.indexOf('sortbottom') != -1)) 
+    		table.tBodies[0].appendChild(curRow );
+    }
+    
+    // Delete any other arrows there may be showing
+    for (var i=0; i<table.sortable_spans.length; i++) 
+    {
+    	table.sortable_spans[i].innerHTML = '&nbsp;&nbsp;&nbsp;';
+    }
+        
+    span.innerHTML = ARROW;
+}
+
+function ts_sort_date(a,b) {
+    // y2k notes: two digit years less than 50 are treated as 20XX, greater than 50 are treated as 19XX
+    var aa = ts_getInnerText(a.cells[SORT_COLUMN_INDEX]);
+    var bb = ts_getInnerText(b.cells[SORT_COLUMN_INDEX]);
+    if (aa.length == 10) {
+        dt1 = aa.substr(6,4)+aa.substr(3,2)+aa.substr(0,2);
+    } else {
+        yr = aa.substr(6,2);
+        if (parseInt(yr) < 50) { yr = '20'+yr; } else { yr = '19'+yr; }
+        dt1 = yr+aa.substr(3,2)+aa.substr(0,2);
+    }
+    if (bb.length == 10) {
+        dt2 = bb.substr(6,4)+bb.substr(3,2)+bb.substr(0,2);
+    } else {
+        yr = bb.substr(6,2);
+        if (parseInt(yr) < 50) { yr = '20'+yr; } else { yr = '19'+yr; }
+        dt2 = yr+bb.substr(3,2)+bb.substr(0,2);
+    }
+    if (dt1==dt2) return ts_sort_originalPosition(a, b);
+    if (dt1<dt2) return -1;
+    return 1;
+}
+
+function ts_sort_currency(a,b) { 
+    var aa = ts_getInnerText(a.cells[SORT_COLUMN_INDEX]).replace(/[^0-9.]/g,'');
+    var bb = ts_getInnerText(b.cells[SORT_COLUMN_INDEX]).replace(/[^0-9.]/g,'');
+    return parseFloat(aa) - parseFloat(bb);
+    return ts_defaultPositionCompareIfNull(aa - bb, a, b)
+}
+
+function ts_sort_numeric(a,b) { 
+    var aa = parseFloat(ts_getInnerText(a.cells[SORT_COLUMN_INDEX]));
+    if (isNaN(aa)) aa = 0;
+    var bb = parseFloat(ts_getInnerText(b.cells[SORT_COLUMN_INDEX])); 
+    if (isNaN(bb))
+    	bb = 0;
+    return ts_defaultPositionCompareIfNull(aa - bb, a, b)
+}
+
+function ts_sort_caseinsensitive(a,b) {
+    var aa = ts_getInnerText(a.cells[SORT_COLUMN_INDEX]).toLowerCase();
+    var bb = ts_getInnerText(b.cells[SORT_COLUMN_INDEX]).toLowerCase();
+    if (aa == bb) return ts_sort_originalPosition(a, b);
+    if (aa<bb) return -1;
+    return 1;
+}
+
+function ts_sort_default(a,b) {
+    var aa = ts_getInnerText(a.cells[SORT_COLUMN_INDEX]);
+    var bb = ts_getInnerText(b.cells[SORT_COLUMN_INDEX]);
+    if (aa == bb) return ts_sort_originalPosition(a, b);
+    if (aa < bb) return -1;
+    return 1;
+}
+
+function ts_defaultPositionCompareIfNull(_result, _rowA, _rowB)
+{
+	return _result != 0 ? _result : ts_sort_originalPosition(_rowA, _rowB);
+}
+
+function ts_sort_originalPosition(a, b)
+{
+	return a.sortable_originalPosition - b.sortable_originalPosition;
+}
+
+
+function addEvent(elm, evType, fn, useCapture)
+// addEvent and removeEvent
+// cross-browser event handling for IE5+,  NS6 and Mozilla
+// By Scott Andrew
+{
+  if (elm.addEventListener) {
+    elm.addEventListener(evType, fn, useCapture);
+  }
+  else if (elm.attachEvent){
+    var r = elm.attachEvent("on"+evType, fn);
+  }
+  else {
+    alert("Handler could not be added");
+  }
+} 

Added: lenya/contributions/2_0_X/modules/atom/test/canoo/test.xml
URL: http://svn.apache.org/viewvc/lenya/contributions/2_0_X/modules/atom/test/canoo/test.xml?rev=755981&view=auto
==============================================================================
--- lenya/contributions/2_0_X/modules/atom/test/canoo/test.xml (added)
+++ lenya/contributions/2_0_X/modules/atom/test/canoo/test.xml Thu Mar 19 13:05:10 2009
@@ -0,0 +1,449 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one or more
+  contributor license agreements.  See the NOTICE file distributed with
+  this work for additional information regarding copyright ownership.
+  The ASF licenses this file to You under the Apache License, Version 2.0
+  (the "License"); you may not use this file except in compliance with
+  the License.  You may obtain a copy of the License at
+  
+  http://www.apache.org/licenses/LICENSE-2.0
+  
+  Unless required by applicable law or agreed to in writing, software
+  distributed under the License is distributed on an "AS IS" BASIS,
+  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  See the License for the specific language governing permissions and
+  limitations under the License.
+-->
+<!--
+<!DOCTYPE project SYSTEM "../../../../modules/development/test/canoo/lenya_webtest.dtd">
+-->
+<project name="administration" basedir="." default="wt.full">
+  
+  <import file="../../../../modules/development/test/canoo/macros.xml"/>
+  
+  <macrodef name="checkEmptyCollection">
+    <attribute name="url"/>
+    <sequential>
+      <invoke url="@{url}"/>
+      <verifyXPath xpath="/*[local-name() = 'collection']"/>
+      <not>
+        <verifyXPath xpath="/*[local-name() = 'collection']/*[local-name() = 'member']"/>
+      </not>
+    </sequential>
+  </macrodef>
+  
+  <macrodef name="verifyResponseCode">
+    <attribute name="code"/>
+    <sequential>
+      <storeResponseCode property="status"/>
+      <verifyProperty name="status" text="@{code}"/>
+    </sequential>
+  </macrodef>
+  
+  <property name="sessionId" value=""/>
+  
+  <property name="prefix" value="/default/authoring"/>
+  <property name="documentUrl" value="${prefix}/concepts.html"/>
+  
+  <property name="assetsUrl" value="${prefix}/concepts.html?lenya.usecase=atom.assets"/>
+  <property name="assetUrl" value="${prefix}/concepts/projectlogo.png"/>
+  <property name="assetEntryUrl" value="${prefix}/concepts/projectlogo.html?lenya.usecase=atom.entry"/>
+  <property name="assetFile" value="${moduleDir}/test/canoo/resources/project-logo.png"/>
+  <property name="assetSlug" value="project-logo.png"/>
+  <property name="assetMimeType" value="image/png"/>
+  
+  <property name="entryUrl" value="${prefix}/concepts.html?lenya.usecase=atom.entry"/>
+  <property name="entryFile" value="${moduleDir}/test/canoo/resources/entry.xml"/>
+  
+  <property name="lockUrl" value="${prefix}/concepts.html?lenya.usecase=atom.lock"/>
+  <property name="locksUrl" value="${prefix}/concepts.html?lenya.usecase=atom.locks"/>
+  <property name="lockEntry" value="%3C%3Fxml%20version%3D%221.0%22%20encoding%3D%22UTF-8%22%3F%3E%0A%3Centry%20xmlns%3D%22http%3A%2F%2Fpurl.org%2Fatom%2Fapp%23%22%2F%3E"/>
+  <property name="lockEntryFile" value="${moduleDir}/test/canoo/lock.xml"/>
+
+  <property name="contentUrl" value="${prefix}/concepts.html?lenya.usecase=atom.content"/>
+  <property name="contentFile" value="${moduleDir}/test/canoo/resources/concepts.html"/>
+  <property name="contentFileEdited" value="${moduleDir}/test/canoo/resources/conceptsEdited.html"/>
+  <property name="contentFileInvalid" value="${moduleDir}/test/canoo/resources/conceptsInvalid.html"/>
+  <property name="contentMimeType" value="application/xhtml+xml"/>
+  
+  <target name="wt.testInWork" depends="
+    atom.setup,
+    atom.entry,
+    atom.assetUpload,
+    atom.workspace,
+    atom.edit,
+    atom.editMetaData,
+    atom.lock,
+    atom.cleanup"/>
+  
+  
+  <target name="atom.setup">
+    <webtest name="atom.setup">
+      <steps>
+        <groovy>
+          def helper = step.context.xPathHelper;
+          helper.registerGlobalNamespace("app", "http://www.w3.org/2007/app");
+          helper.registerGlobalNamespace("atom", "http://www.w3.org/2005/Atom");
+          helper.registerGlobalNamespace("xhtml", "http://www.w3.org/1999/xhtml");
+          helper.registerGlobalNamespace("dc", "http://purl.org/dc/elements/1.1/");
+          helper.registerGlobalNamespace("edit", "http://apache.org/lenya/editing");
+          helper.registerGlobalNamespace("relaxng", "http://relaxng.org/ns/structure/1.0");
+        </groovy>
+      </steps>
+    </webtest>
+  </target>
+  
+  
+  <target name="atom.entry">
+    <webtest name="atom.entry">
+      <config host="${webtest.config.host}"
+        port="${webtest.config.port}"
+        protocol="http"
+        basepath="">
+        <header name="Accept-Language" value="en"/>
+        <option name="JavaScriptEnabled" value="false"/>
+        <option name="ThrowExceptionOnFailingStatusCode" value="false"/>
+      </config>
+      <steps>
+        <doLogin username="lenya" password="levi" url="${documentUrl}"/>
+        
+        <invoke url="${entryUrl}"/>
+        <verifyResponseCode code="200"/>
+        <storeXPath property="schemaUri" xpath="/atom:entry/edit:edit/edit:schema/@href"/>
+        <verifyProperty name="schemaUri" text="/default/modules/xhtml/schemas/xhtml.rng"/>
+        <storeXPath property="uuid2urlUri" xpath="/atom:entry/edit:edit/edit:uri-resolver[@protocol = 'lenya-document']/@href"/>
+        <storeXPath property="lenyaDocumentUri" xpath="/atom:entry/atom:content/@src"/>
+        
+        <invoke url="${schemaUri}"/>
+        <verifyResponseCode code="200"/>
+        <verifyXPath xpath="/relaxng:grammar"/>
+        
+        <invoke url="${uuid2urlUri}${lenyaDocumentUri}"/>
+        <verifyResponseCode code="200"/>
+        
+        <doLogout/>
+      </steps>
+    </webtest>
+  </target>
+  
+  
+  
+  <target name="atom.assetUpload">
+
+    <webtest name="atom.login">
+      <config host="${webtest.config.host}"
+        port="${webtest.config.port}"
+        protocol="http"
+        basepath="">
+        <header name="Accept-Language" value="en"/>
+        <option name="JavaScriptEnabled" value="false"/>
+        <option name="ThrowExceptionOnFailingStatusCode" value="false"/>
+      </config>
+      <steps>
+        <doLogin username="lenya" password="levi" url="${documentUrl}"/>
+        <storeCookie name="JSESSIONID" property="sessionId" propertyType="ant"/>
+      </steps>
+    </webtest>
+
+    <webtest name="atom.assetUpload">
+      <config host="${webtest.config.host}"
+        port="${webtest.config.port}"
+        protocol="http"
+        basepath="">
+        <header name="Accept-Language" value="en"/>
+        <header name="Slug" value="${assetSlug}"/>
+        <header name="Content-Type" value="${assetMimeType}"/>
+        <header name="Cookie" value="JSESSIONID=${sessionId}"/>
+        <option name="JavaScriptEnabled" value="false"/>
+        <option name="ThrowExceptionOnFailingStatusCode" value="false"/>
+      </config>
+      
+      <steps>
+        
+        <!-- ====================================================================== -->
+        <!-- clean up previous changes -->
+        <!-- ====================================================================== -->
+        
+        <invoke url="${assetUrl}"/>
+        <ifStep description="Delete existing asset">
+          <condition>
+            <verifyResponseCode code="200"/>
+          </condition>
+          <invoke url="${assetEntryUrl}" method="DELETE"/>
+          <verifyResponseCode code="200"/>
+        </ifStep>
+        
+        <!-- ====================================================================== -->
+        <!-- check asset collection -->
+        <!-- ====================================================================== -->
+        
+        <invoke url="${assetsUrl}"/>
+        <verifyXPath xpath="/app:collection/app:accept[. = 'image/png']"/>
+        
+        <!-- ====================================================================== -->
+        <!-- add asset -->
+        <!-- ====================================================================== -->
+        
+        <invoke url="${assetsUrl}" method="POST" contentFile="${assetFile}" contentType="${assetMimeType}"/>
+        <verifyResponseCode code="201"/>
+        <storeHeader name="Location" property="location"/>
+        <verifyProperty name="location" text="${assetEntryUrl}"/>
+        
+        <invoke url="${assetEntryUrl}"/>
+        <verifyXPath xpath="/atom:entry/atom:content/@type" text="${assetMimeType}"/>
+        <verifyXPath xpath="/atom:entry/atom:link[@rel = 'edit']/@href" text="${assetEntryUrl}"/>
+        
+        <invoke url="${assetUrl}"/>
+        <verifyResponseCode code="200"/>
+        <verifyContent referenceFile="${assetFile}"/>
+
+        <doLogout/>   
+      </steps>   
+    </webtest>
+    
+  </target>
+
+  <target name="atom.workspace">
+    <webtest name="atom.workspace">
+      <config host="${webtest.config.host}"
+        port="${webtest.config.port}"
+        protocol="http"
+        basepath="">
+        <header name="Accept-Language" value="en"/>
+        <option name="JavaScriptEnabled" value="false"/>
+        <option name="ThrowExceptionOnFailingStatusCode" value="false"/>
+      </config>
+      <steps>
+        <doLogin username="lenya" password="levi" url="${documentUrl}"/>
+
+        <!-- ====================================================================== -->
+        <!-- check workspace service document -->
+        <!-- ====================================================================== -->
+        
+        <invoke url="${documentUrl}"/>
+        <storeXPath xpath="/html/head/link[@rel = 'service']/@href" property="workspaceUrl"/>
+        <invoke url="/default/authoring/#{workspaceUrl}"/>
+        <verifyXPath xpath="/app:service"/>
+
+        <storeXPath property="topLevelDocsUrl" xpath="/app:service/app:workspace[atom:title = 'Documents']/app:collection/@href"/>
+        <storeXPath property="globalAssetsUrl" xpath="/app:service/app:workspace[atom:title = 'Assets']/app:collection/@href"/>
+        
+        <!-- ====================================================================== -->
+        <!-- verify: document contained in top-level documents -->
+        <!-- ====================================================================== -->
+        
+        <invoke url="#{topLevelDocsUrl}"/>
+        <verifyXPath xpath="/app:collection/app:member[@href = '${entryUrl}']"/>
+        
+        <!-- ====================================================================== -->
+        <!-- verify: asset contained in global assets -->
+        <!-- ====================================================================== -->
+
+        <invoke url="#{globalAssetsUrl}"/>
+        <verifyXPath xpath="/app:collection/app:member[@href = '${assetEntryUrl}']"/>
+        
+        <doLogout/>
+      </steps>
+    </webtest>
+  </target>
+  
+  <target name="atom.edit">
+    <webtest name="atom.edit">
+      <config host="${webtest.config.host}"
+        port="${webtest.config.port}"
+        protocol="http"
+        basepath="">
+        <header name="Accept-Language" value="en"/>
+        <option name="JavaScriptEnabled" value="false"/>
+        <option name="ThrowExceptionOnFailingStatusCode" value="false"/>
+      </config>
+      <steps>
+        <doLogin username="lenya" password="levi" url="${documentUrl}"/>
+        
+        <!-- ====================================================================== -->
+        <!-- clean up previous changes -->
+        <!-- ====================================================================== -->
+        
+        <invoke url="${contentUrl}"/>
+        <ifStep description="Formerly edited">
+          <condition>
+            <verifyXPath xpath="//xhtml:p[. = 'atomTest']"/>
+          </condition>
+          <invoke url="${contentUrl}" method="PUT" contentFile="${contentFile}" contentType="${contentMimeType}"/>
+        </ifStep>
+
+        <invoke url="${contentUrl}"/>
+        <not>
+          <verifyXPath xpath="//xhtml:p[. = 'atomTest']"/>
+        </not>
+
+        <!-- ====================================================================== -->
+        <!-- verify validation error -->
+        <!-- ====================================================================== -->
+        
+        <invoke url="${contentUrl}" method="PUT" contentFile="${contentFileInvalid}" contentType="${contentMimeType}"/>
+        <verifyResponseCode code="412"/>
+        
+        <!-- ====================================================================== -->
+        <!-- verify successful PUT -->
+        <!-- ====================================================================== -->
+        
+        <invoke url="${contentUrl}" method="PUT" contentFile="${contentFileEdited}" contentType="${contentMimeType}"/>
+        <verifyResponseCode code="200"/>
+        <invoke url="${contentUrl}"/>
+        <verifyXPath xpath="//xhtml:p[. = 'atomTest']"/>
+
+        <doLogout/>
+      </steps>
+    </webtest>
+  </target>
+  
+  <target name="atom.editMetaData">
+    <webtest name="atom.editMetaData">
+      <config host="${webtest.config.host}"
+        port="${webtest.config.port}"
+        protocol="http"
+        basepath="">
+        <header name="Accept-Language" value="en"/>
+        <option name="JavaScriptEnabled" value="false"/>
+        <option name="ThrowExceptionOnFailingStatusCode" value="false"/>
+      </config>
+      <steps>
+        <doLogin username="lenya" password="levi" url="${documentUrl}"/>
+        
+        <invoke url="${entryUrl}" method="PUT" contentFile="${entryFile}" contentType="application/atom+xml"/>
+        <verifyResponseCode code="200"/>
+        <invoke url="${entryUrl}"/>
+        <verifyXPath xpath="/*/dc:title" text="A Test Title"/>
+        <verifyXPath xpath="/*/dc:subject" text="A Test Subject"/>
+        
+        <doLogout/>
+      </steps>
+    </webtest>
+  </target>
+    
+  <target name="atom.lock">
+
+    <webtest name="atom.lock">
+      <config host="${webtest.config.host}"
+        port="${webtest.config.port}"
+        protocol="http"
+        basepath="">
+        <header name="Accept-Language" value="en"/>
+        <option name="JavaScriptEnabled" value="false"/>
+        <option name="ThrowExceptionOnFailingStatusCode" value="false"/>
+      </config>
+      
+      <steps>
+        <doLogin username="lenya" password="levi" url="${documentUrl}"/>
+
+        <!-- ====================================================================== -->
+        <!-- remove existing lock -->
+        <!-- ====================================================================== -->
+        
+        <invoke url="${lockUrl}"/>
+        <ifStep description="Delete existing lock">
+          <condition>
+            <verifyResponseCode code="200"/>
+          </condition>
+          <invoke url="${lockUrl}" method="DELETE"/>
+          <verifyResponseCode code="200"/>
+        </ifStep>
+        
+        <invoke url="${entryUrl}"/>
+        <verifyXPath xpath="/*[local-name() = 'entry']"/>
+        
+        <checkEmptyCollection url="${locksUrl}"/>
+        
+        <!-- ====================================================================== -->
+        <!-- create lock -->
+        <!-- ====================================================================== -->
+        
+        <invoke url="${locksUrl}" method="POST" content="${lockEntry}"/>
+        <verifyResponseCode code="201"/>
+        <storeHeader name="Location" property="location"/>
+        <verifyProperty name="location" text="${lockUrl}"/>
+        
+        <invoke url="${locksUrl}"/>
+        <verifyXPath xpath="/app:collection/app:member[@href='${lockUrl}']"/>
+        
+        <invoke url="${lockUrl}"/>
+        <verifyXPath xpath="/atom:entry/atom:author/atom:name" text="lenya"/>
+        <verifyXPath xpath="//atom:link[@rel='self']/@href" text="${lockUrl}"/>
+        
+        <!-- ====================================================================== -->
+        <!-- remove lock -->
+        <!-- ====================================================================== -->
+        
+        <invoke url="${lockUrl}" method="DELETE"/>
+        <verifyResponseCode code="200"/>
+        <checkEmptyCollection url="${locksUrl}"/>
+        
+        <!-- verify that the lock is removed -->
+        <invoke url="${lockUrl}"/>
+        <verifyResponseCode code="404"/>
+        
+        <!-- create lock again -->
+        <invoke url="${locksUrl}" method="POST" content="${lockEntry}"/>
+        <verifyResponseCode code="201"/>
+        
+        <doLogout/>
+        
+        <doLogin username="alice" password="levi" url="${documentUrl}"/>
+        
+        <!-- ====================================================================== -->
+        <!-- can't create lock if already locked by a different user -->
+        <!-- ====================================================================== -->
+        
+        <invoke url="${locksUrl}" method="POST" content="${lockEntry}"/>
+        <verifyResponseCode code="412"/>
+        
+        <!-- ====================================================================== -->
+        <!-- can't save resource which is locked by a different user -->
+        <!-- ====================================================================== -->
+        
+        <invoke url="${contentUrl}" method="PUT" contentFile="${contentFileEdited}" contentType="${contentMimeType}"/>
+        <verifyResponseCode code="412"/>
+        
+        <!-- ====================================================================== -->
+        <!-- can delete lock by a different user -->
+        <!-- ====================================================================== -->
+        
+        <invoke url="${lockUrl}" method="DELETE"/>
+        <verifyResponseCode code="200"/>
+        
+        <doLogout/>
+        
+      </steps>
+    </webtest>
+    
+  </target>
+  
+  <target name="atom.cleanup">
+    <webtest name="atom.workspace">
+      <config host="${webtest.config.host}"
+        port="${webtest.config.port}"
+        protocol="http"
+        basepath="">
+        <header name="Accept-Language" value="en"/>
+        <option name="JavaScriptEnabled" value="false"/>
+        <option name="ThrowExceptionOnFailingStatusCode" value="false"/>
+      </config>
+      <steps>
+        <doLogin username="lenya" password="levi" url="${documentUrl}"/>
+        
+        <!-- ====================================================================== -->
+        <!-- delete asset -->
+        <!-- ====================================================================== -->
+        
+        <invoke url="${assetEntryUrl}" method="DELETE"/>
+        <verifyResponseCode code="200"/>
+        <invoke url="${assetUrl}"/>
+        <verifyResponseCode code="404"/>
+        
+        <doLogout/>
+      </steps>
+    </webtest>
+  </target>
+</project>

Added: lenya/contributions/2_0_X/modules/atom/xslt/entryMetaData.xsl
URL: http://svn.apache.org/viewvc/lenya/contributions/2_0_X/modules/atom/xslt/entryMetaData.xsl?rev=755981&view=auto
==============================================================================
--- lenya/contributions/2_0_X/modules/atom/xslt/entryMetaData.xsl (added)
+++ lenya/contributions/2_0_X/modules/atom/xslt/entryMetaData.xsl Thu Mar 19 13:05:10 2009
@@ -0,0 +1,33 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one or more
+  contributor license agreements.  See the NOTICE file distributed with
+  this work for additional information regarding copyright ownership.
+  The ASF licenses this file to You under the Apache License, Version 2.0
+  (the "License"); you may not use this file except in compliance with
+  the License.  You may obtain a copy of the License at
+  
+  http://www.apache.org/licenses/LICENSE-2.0
+  
+  Unless required by applicable law or agreed to in writing, software
+  distributed under the License is distributed on an "AS IS" BASIS,
+  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  See the License for the specific language governing permissions and
+  limitations under the License.
+-->
+<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0"
+  xmlns:meta="http://apache.org/lenya/metadata/1.0">
+  
+  <xsl:template match="meta:element">
+    <xsl:element name="{@name}" namespace="{@namespace}">
+      <xsl:value-of select="."/>
+    </xsl:element>
+  </xsl:template>
+  
+  <xsl:template match="@*|node()" priority="-1">
+    <xsl:copy>
+      <xsl:apply-templates select="@*|node()"/>
+    </xsl:copy>
+  </xsl:template>
+
+</xsl:stylesheet>
\ No newline at end of file

Added: lenya/contributions/2_0_X/modules/atom/xslt/prettyPrintEntry.xsl
URL: http://svn.apache.org/viewvc/lenya/contributions/2_0_X/modules/atom/xslt/prettyPrintEntry.xsl?rev=755981&view=auto
==============================================================================
--- lenya/contributions/2_0_X/modules/atom/xslt/prettyPrintEntry.xsl (added)
+++ lenya/contributions/2_0_X/modules/atom/xslt/prettyPrintEntry.xsl Thu Mar 19 13:05:10 2009
@@ -0,0 +1,53 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one or more
+  contributor license agreements.  See the NOTICE file distributed with
+  this work for additional information regarding copyright ownership.
+  The ASF licenses this file to You under the Apache License, Version 2.0
+  (the "License"); you may not use this file except in compliance with
+  the License.  You may obtain a copy of the License at
+  
+  http://www.apache.org/licenses/LICENSE-2.0
+  
+  Unless required by applicable law or agreed to in writing, software
+  distributed under the License is distributed on an "AS IS" BASIS,
+  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  See the License for the specific language governing permissions and
+  limitations under the License.
+-->
+<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0"
+  xmlns:meta="http://apache.org/lenya/metadata/1.0">
+  
+  <xsl:template match="text()">
+    <xsl:value-of select="normalize-space(.)"/>
+  </xsl:template>
+  
+  <xsl:template match="*">
+    <xsl:call-template name="indent"/>
+    <xsl:copy>
+      <xsl:apply-templates select="@*"/>
+      <xsl:if test="*">
+        <xsl:call-template name="linebreak"/>
+      </xsl:if>
+      <xsl:apply-templates select="@*|node()"/>
+      <xsl:if test="*">
+        <xsl:call-template name="indent"/>
+      </xsl:if>
+    </xsl:copy>
+    <xsl:call-template name="linebreak"/>
+  </xsl:template>
+  
+  <xsl:template match="@*">
+    <xsl:copy/>
+  </xsl:template>
+  
+  <xsl:template name="linebreak">
+    <xsl:text>
+</xsl:text>
+  </xsl:template>
+  
+  <xsl:template name="indent">
+    <xsl:for-each select="ancestor::*"><xsl:text>  </xsl:text></xsl:for-each>
+  </xsl:template>
+
+</xsl:stylesheet>
\ No newline at end of file

Added: lenya/contributions/2_0_X/modules/rest/config/module.xml
URL: http://svn.apache.org/viewvc/lenya/contributions/2_0_X/modules/rest/config/module.xml?rev=755981&view=auto
==============================================================================
--- lenya/contributions/2_0_X/modules/rest/config/module.xml (added)
+++ lenya/contributions/2_0_X/modules/rest/config/module.xml Thu Mar 19 13:05:10 2009
@@ -0,0 +1,28 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one or more
+  contributor license agreements.  See the NOTICE file distributed with
+  this work for additional information regarding copyright ownership.
+  The ASF licenses this file to You under the Apache License, Version 2.0
+  (the "License"); you may not use this file except in compliance with
+  the License.  You may obtain a copy of the License at
+
+      http://www.apache.org/licenses/LICENSE-2.0
+
+  Unless required by applicable law or agreed to in writing, software
+  distributed under the License is distributed on an "AS IS" BASIS,
+  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  See the License for the specific language governing permissions and
+  limitations under the License.
+-->
+
+<module xmlns="http://apache.org/lenya/module/1.0">
+  <id>org.apache.lenya.modules.rest</id>
+  <export package="org.apache.lenya.modules.rest"/>
+  <depends module="org.apache.lenya.modules.usecase"/>
+  <package>org.apache.lenya.modules</package>
+  <version>0.1-dev</version>
+  <name>REST</name>
+  <lenya-version>2.0.2-dev</lenya-version>
+  <description>Support for Representational State Transfer</description>
+</module>



---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@lenya.apache.org
For additional commands, e-mail: commits-help@lenya.apache.org