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...

[email protected]
Newsgroups gmane.comp.cms.lenya.cvs
Message-ID <[email protected]>
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>
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.