[KSS-checkins] r49506 - kukit/kss.demo/trunk/kss/demo/browser

reebalazs at codespeak.net reebalazs at codespeak.net
Fri Dec 7 13:35:28 CET 2007


Author: reebalazs
Date: Fri Dec  7 13:35:27 2007
New Revision: 49506

Added:
   kukit/kss.demo/trunk/kss/demo/browser/kss_demo_suite.pt
   kukit/kss.demo/trunk/kss/demo/browser/setDevMode.html
   kukit/kss.demo/trunk/kss/demo/browser/setProdMode.html
Modified:
   kukit/kss.demo/trunk/kss/demo/browser/configure.zcml
   kukit/kss.demo/trunk/kss/demo/browser/kss_demo_index.pt
   kukit/kss.demo/trunk/kss/demo/browser/registry.py
Log:
Hook upzelenium to the registry AND: make it accessable from demo index.

Modified: kukit/kss.demo/trunk/kss/demo/browser/configure.zcml
==============================================================================
--- kukit/kss.demo/trunk/kss/demo/browser/configure.zcml	(original)
+++ kukit/kss.demo/trunk/kss/demo/browser/configure.zcml	Fri Dec  7 13:35:27 2007
@@ -60,10 +60,24 @@
 
   <!-- View for accessing the utility -->
   <page
-    for="*"
+    for="kss.demo.interfaces.ISimpleContent"
     name="kss_demo_registry"
     class=".registry.KSSDemoRegistryView"
-    allowed_attributes="getSortedDemos getDemoGroups"
+    allowed_attributes="getSortedDemos getDemoGroups getSeleniumTests"
+    permission="zope.View"
+    />
+  <page
+    for="kss.demo.interfaces.ISimpleContent"
+    name="resource"
+    class=".registry.KSSDemoRegistryView"
+    attribute="getSeleniumTestResource"
+    permission="zope.View"
+    />
+  <page
+    for="kss.demo.interfaces.ISimpleContent"
+    name="zuite.html"
+    class=".registry.KSSDemoRegistryView"
+    attribute="getZuiteHomePage"
     permission="zope.View"
     />
 
@@ -81,5 +95,29 @@
     permission="demo.Manager"
     />
 
+  <!-- Resources for automated selenium tests -->
+  
+  <page
+      for="kss.demo.interfaces.ISimpleContent"
+      template="kss_demo_suite.pt"
+      name="suite.html"
+      permission="zope.View"
+      />
+
+  <page
+      for="kss.demo.interfaces.ISimpleContent"
+      template="setDevMode.html"
+      name="setDevMode.html"
+      permission="zope.View"
+      />
+
+  <page
+      for="kss.demo.interfaces.ISimpleContent"
+      template="setProdMode.html"
+      name="setProdMode.html"
+      permission="zope.View"
+      />
+
+
 </configure>
 

Modified: kukit/kss.demo/trunk/kss/demo/browser/kss_demo_index.pt
==============================================================================
--- kukit/kss.demo/trunk/kss/demo/browser/kss_demo_index.pt	(original)
+++ kukit/kss.demo/trunk/kss/demo/browser/kss_demo_index.pt	Fri Dec  7 13:35:27 2007
@@ -8,10 +8,20 @@
   <body>
     <h1>KSS demos</h1>
     <p metal:use-macro="context/@@body_macros/kss_mode">Kss mode</p>
-    <h2>Unit tests</h2>
+    <h2>Tests</h2>
     <ul style="background-color:#E0E0C0;">
-     <li><a href="@@kukittestsuite">Run all tests</a></li>
+     <li><a href="@@kukittestsuite">Run all ECMA unittests</a></li>
+     <li>Link to Zelenium object:
+       <form tal:attributes="action string:${context/absolute_url}/zuite.html">
+          <input type="text" name="path" value="zuite" />
+          <input type="submit" name="submit" value="Run all Selenium tests" />
+       </form>
+      </li>
     </ul>
+    <p class="help">
+      Zelenium object link must be an absolute path from the domain root, 
+      or a relative path from the demo SimpleContent's parent.
+    </p>
       <tal:groups repeat="demo_group context/@@kss_demo_registry/getDemoGroups">
         <tal:plugin condition="python:demo_group['is_first_plugin_namespace'] and demo_group['plugin_namespace']==''">
              <h2>Core plugin</h2>

Added: kukit/kss.demo/trunk/kss/demo/browser/kss_demo_suite.pt
==============================================================================
--- (empty file)
+++ kukit/kss.demo/trunk/kss/demo/browser/kss_demo_suite.pt	Fri Dec  7 13:35:27 2007
@@ -0,0 +1,44 @@
+<html>
+  <body>
+    <table id="suiteTable"
+           cellpadding="1"
+           cellspacing="1"
+           border="1"
+           class="selenium">
+      <tbody tal:define="selenium_tests context/@@kss_demo_registry/getSeleniumTests">
+        <tr><td><b>Test Suite</b></td></tr>
+        <tr>
+          <td>
+            <h4>
+              <a href="setDevMode.html">Development mode</a>
+            </h4>
+          </td>
+        </tr>
+        <tal:groups repeat="selenium_test selenium_tests">
+          <tr>
+            <td><a href="test.html"
+                   tal:content="selenium_test/title"
+                   tal:attributes="href selenium_test/href"
+                   >Title</a></td>
+          </tr>
+        </tal:groups>
+        <!--> </-->
+        <tr>
+          <td>
+            <h4>
+              <a href="setProdMode.html">Production mode</a>
+            </h4>
+          </td>
+        </tr>
+        <tal:groups repeat="selenium_test selenium_tests">
+          <tr>
+            <td><a href="test.html"
+                   tal:content="selenium_test/title"
+                   tal:attributes="href selenium_test/href"
+                   >Title</a></td>
+          </tr>
+        </tal:groups>
+      </tbody>
+    </table>
+  </body>
+</html>

Modified: kukit/kss.demo/trunk/kss/demo/browser/registry.py
==============================================================================
--- kukit/kss.demo/trunk/kss/demo/browser/registry.py	(original)
+++ kukit/kss.demo/trunk/kss/demo/browser/registry.py	Fri Dec  7 13:35:27 2007
@@ -5,6 +5,7 @@
 from zope.component import getUtility
 from zope.interface import implements
 from kss.demo.selenium_utils.builder import cookSeleniumTests
+import os.path
 try:
     from Products.Five import BrowserView
     BrowserView         # make pyflakes happy
@@ -55,6 +56,57 @@
             group.append(demo)
         return demo_groups
 
+    @staticmethod
+    def _filename_to_title(filename):
+        """Automatic conversion of filename to readable title"""
+        if filename.lower().endswith('.html'):
+            filename = filename[:-5]
+        elif filename.lower().endswith('.htm'):
+            filename = filename[:-4]
+        words = os.path.basename(filename).split('_')
+        result = ' '.join([word.capitalize() for word in words])
+        return result
+
+    @staticmethod
+    def _filename_to_href(filename):
+        """Automatic conversion of filename to publication href"""
+        return "@@resource?filename=%s" % (filename, )
+
+    def getSeleniumTests(self):
+        """Get selenium tests annotated with title and href."""
+        return [dict(
+                    href = self._filename_to_href(filename),
+                    title=self._filename_to_title(filename),
+                    )
+                    for filename in self.selenium_test_filenames]
+
+    @property
+    def selenium_test_filenames(self):
+        """A cached representation of all filenames."""
+        try:
+            return self._cooked_selenium_test_filenames
+        except AttributeError:
+            registry = getUtility(IKSSDemoRegistry)
+            self._cooked_selenium_test_filenames =  filenames = \
+                    registry.selenium_tests
+            return filenames
+
+    def getSeleniumTestResource(self, filename):
+        """Return the html resource, whose absolute filename is given,"""
+        # First of all, let's check if this is one of our file.
+        # (Refuse otherwise - we don't want access to all files on the server.)
+        if filename not in self.selenium_test_filenames:
+            raise Exception, "Nonexistent resource"
+        # Return the file's content.
+        self.request.response.setHeader('Content-type', 'text/html;charset=utf-8')
+        return file(filename).read()
+
+    def getZuiteHomePage(self, path):
+        """Redirects to the Zuite home page, Zuite object is found from path."""
+        zuite = self.context.aq_inner.aq_parent.restrictedTraverse(path)
+        html = "%s?test=%s/suite.html" % (zuite.absolute_url(), self.context.absolute_url())
+        return self.request.response.redirect(html)
+
 class KSSDemoRegistryAdminView(BrowserView):
     """Things that only admin should do"""
     implements(IBrowserPublisher)

Added: kukit/kss.demo/trunk/kss/demo/browser/setDevMode.html
==============================================================================
--- (empty file)
+++ kukit/kss.demo/trunk/kss/demo/browser/setDevMode.html	Fri Dec  7 13:35:27 2007
@@ -0,0 +1,33 @@
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>basic_commands</title>
+</head>
+<body>
+<table cellpadding="1" cellspacing="1" border="1">
+<thead>
+<tr><td rowspan="1" colspan="3">basic_commands</td></tr>
+</thead><tbody>
+<tr>
+	<td>open</td>
+	<td>demo/@@kss_devel_mode/ui</td>
+	<td></td>
+</tr>
+<tr>
+	<td>assertTextPresent</td>
+	<td>KSS mode setup</td>
+	<td></td>
+</tr>
+<tr>
+	<td>clickAndWait</td>
+	<td>button_devel</td>
+	<td></td>
+</tr>
+<tr>
+	<td>assertTextPresent</td>
+	<td>development</td>
+	<td></td>
+</tr>
+</tbody></table>
+</body>
+</html>

Added: kukit/kss.demo/trunk/kss/demo/browser/setProdMode.html
==============================================================================
--- (empty file)
+++ kukit/kss.demo/trunk/kss/demo/browser/setProdMode.html	Fri Dec  7 13:35:27 2007
@@ -0,0 +1,33 @@
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>basic_commands</title>
+</head>
+<body>
+<table cellpadding="1" cellspacing="1" border="1">
+<thead>
+<tr><td rowspan="1" colspan="3">basic_commands</td></tr>
+</thead><tbody>
+<tr>
+	<td>open</td>
+	<td>/demo/@@kss_devel_mode/ui</td>
+	<td></td>
+</tr>
+<tr>
+	<td>assertTextPresent</td>
+	<td>KSS mode setup</td>
+	<td></td>
+</tr>
+<tr>
+	<td>clickAndWait</td>
+	<td>button_prod</td>
+	<td></td>
+</tr>
+<tr>
+	<td>assertTextPresent</td>
+	<td>production</td>
+	<td></td>
+</tr>
+</tbody></table>
+</body>
+</html>


More information about the Kukit-checkins mailing list