[KSS-checkins] r50800 - in kukit/kss.core/branch/improve-demos/kss/core/plugins/core/demo: . selenium_tests

jone at codespeak.net jone at codespeak.net
Sun Jan 20 16:15:43 CET 2008


Author: jone
Date: Sun Jan 20 16:15:40 2008
New Revision: 50800

Added:
   kukit/kss.core/branch/improve-demos/kss/core/plugins/core/demo/dynamic_table.css
   kukit/kss.core/branch/improve-demos/kss/core/plugins/core/demo/selenium_tests/dynamic_table.html
Modified:
   kukit/kss.core/branch/improve-demos/kss/core/plugins/core/demo/dynamic_table.kss
   kukit/kss.core/branch/improve-demos/kss/core/plugins/core/demo/dynamic_table.pt
   kukit/kss.core/branch/improve-demos/kss/core/plugins/core/demo/dynamic_table.py
   kukit/kss.core/branch/improve-demos/kss/core/plugins/core/demo/dynamic_table.zcml
Log:
added css and selenium test for dynamic_table

Added: kukit/kss.core/branch/improve-demos/kss/core/plugins/core/demo/dynamic_table.css
==============================================================================
--- (empty file)
+++ kukit/kss.core/branch/improve-demos/kss/core/plugins/core/demo/dynamic_table.css	Sun Jan 20 16:15:40 2008
@@ -0,0 +1,20 @@
+table#personTable {
+    margin-left: auto;
+    margin-right: auto;
+    border: 1px solid #f2ae8c;
+}
+
+table#personTable th {
+    background-color: #f2ae8c;
+    padding-left: 5px;
+    padding-right: 5px;
+}
+
+div.centered {
+    text-align: center;
+}
+
+hr {
+    border: none;
+    border-top: 1px solid #FF4916;
+}

Modified: kukit/kss.core/branch/improve-demos/kss/core/plugins/core/demo/dynamic_table.kss
==============================================================================
--- kukit/kss.core/branch/improve-demos/kss/core/plugins/core/demo/dynamic_table.kss	(original)
+++ kukit/kss.core/branch/improve-demos/kss/core/plugins/core/demo/dynamic_table.kss	Sun Jan 20 16:15:40 2008
@@ -19,6 +19,18 @@
     moveUp-pid:                 kssAttr(pid);
 }
 
+input.toBottom:click {
+    evt-click-preventdefault:   true;
+    action-server:              toBottom;
+    toBottom-pid:               kssAttr(pid);
+}
+
+input.toTop:click {
+    evt-click-preventdefault:   true;
+    action-server:              toTop;
+    toTop-pid:                  kssAttr(pid);
+}
+
 input.moveDown:click {
     evt-click-preventdefault:   true;
     action-server:              moveDown;

Modified: kukit/kss.core/branch/improve-demos/kss/core/plugins/core/demo/dynamic_table.pt
==============================================================================
--- kukit/kss.core/branch/improve-demos/kss/core/plugins/core/demo/dynamic_table.pt	(original)
+++ kukit/kss.core/branch/improve-demos/kss/core/plugins/core/demo/dynamic_table.pt	Sun Jan 20 16:15:40 2008
@@ -3,6 +3,9 @@
   <head>
   
     <metal:header use-macro="context/@@header_macros/header_resources" />
+    <link rel="stylesheet" type="text/css"
+          tal:attributes="href
+          string:${context/@@absolute_url}/++resource++${viewname}.css"/>
   
   </head>
 
@@ -10,7 +13,7 @@
     
     <p metal:use-macro="context/@@body_macros/header">header</p>
 
-    <h2>Dynamic Tables</h2>
+    <h2>Addressbook</h2>
 
     <form id="addPerson">
 
@@ -33,7 +36,7 @@
               <option></option>
               <option>Norway</option>
               <option>USA</option>
-              <option>Other/<option>
+              <option>Other</option>
             </select>
         </div>
         <div>
@@ -48,31 +51,31 @@
     </form>
 
 
-    <hr />
-
-    <input type="button" id="clean" value="clean" />
+    <div class="centered">
 
+        <input type="button" id="clean" value="Clean table" />
 
-    <hr />
+        <table id="personTable">
+            <thead>
+                <tr>
+                    <th>Name</th>
+                    <th>Address</th>
+                    <th>City</th>
+                    <th>Country</th>
+                    <th>Telephone</th>
+                    <th> </th>
+                </tr>
+            </thead>
+            <tbody>
+                <tal:repeat repeat="person context/getPersons">
+                    <tal:replace replace="structure python:view.renderPersonAsTr(person)" />
+                </tal:repeat>
+            </tbody>
+        </table>
 
-    <table border="1" id="personTable">
-        <thead>
-            <tr>
-                <th>Name</th>
-                <th>Address</th>
-                <th>City</th>
-                <th>Country</th>
-                <th>Telephone</th>
-                <th> </th>
-            </tr>
-        </thead>
-        <tbody>
-            <tal:repeat repeat="person context/getPersons">
-                <tal:replace replace="structure python:view.renderPersonAsTr(person)" />
-            </tal:repeat>
-        </tbody>
-    </table>
+    </div>
 
+    <hr />
 
   </body>
 </html>

Modified: kukit/kss.core/branch/improve-demos/kss/core/plugins/core/demo/dynamic_table.py
==============================================================================
--- kukit/kss.core/branch/improve-demos/kss/core/plugins/core/demo/dynamic_table.py	(original)
+++ kukit/kss.core/branch/improve-demos/kss/core/plugins/core/demo/dynamic_table.py	Sun Jan 20 16:15:40 2008
@@ -51,7 +51,7 @@
         for p in persons:
             if p['pid'] == pid:
                 persons.remove(p)
-        self.getCommandSet('core').deleteNode('tr.pid%s' % pid)
+        self.getCommandSet('core').deleteNode('tr#pid%s' % pid)
         return self.render()
 
 
@@ -75,6 +75,33 @@
                 break
         return self.render()
 
+    def toTop(self, pid):
+        persons = self.getPersons()
+        firstPid = persons[0]['pid']
+        if firstPid == pid:
+            return self.render()
+        self.getCommandSet('core').moveNodeBefore('tr#pid%s' % pid, 'pid%s' % firstPid)
+        for p in persons:
+            if p['pid'] == pid:
+                persons.remove(p)
+                persons.insert(0, p)
+                break
+        return self.render()
+
+    def toBottom(self, pid):
+        persons = self.getPersons()
+        lastPid = persons[-1]['pid']
+        if lastPid == pid:
+            return self.render()
+        self.getCommandSet('core').moveNodeAfter('tr#pid%s' % pid, 'pid%s' % lastPid)
+        for p in persons:
+            if p['pid'] == pid:
+                persons.remove(p)
+                persons.append(p)
+                break
+        return self.render()
+
+
     def switchPersons(self, pid1, pid2):
         persons = self.getPersons()
         p1 = None
@@ -89,8 +116,8 @@
                 p2 = persons[i]
                 i2 = i
         if p1 and p2:
-            self.getCommandSet('core').replaceHTML('tr.pid%s' % p2['pid'], '<tr class="placeholder"></tr>')
-            self.getCommandSet('core').replaceHTML('tr.pid%s' % p1['pid'], self.renderPersonAsTr(p2))
+            self.getCommandSet('core').replaceHTML('tr#pid%s' % p2['pid'], '<tr class="placeholder"></tr>')
+            self.getCommandSet('core').replaceHTML('tr#pid%s' % p1['pid'], self.renderPersonAsTr(p2))
             self.getCommandSet('core').replaceHTML('tr.placeholder', self.renderPersonAsTr(p1))
             persons[i1] = p2
             persons[i2] = p1
@@ -100,11 +127,13 @@
     def renderPersonAsTr(self, person):
         pid = person['pid']
         buttons = '''
+                    <input type="button" class="remove kssattr-pid-%(pid)s" value="remove">
                     <input type="button" class="moveUp kssattr-pid-%(pid)s" value="up">
                     <input type="button" class="moveDown kssattr-pid-%(pid)s" value="down">
-                    <input type="button" class="remove kssattr-pid-%(pid)s" value="remove">
+                    <input type="button" class="toTop kssattr-pid-%(pid)s" value="top">
+                    <input type="button" class="toBottom kssattr-pid-%(pid)s" value="bottom">
                 ''' % {'pid' : pid}
-        html = """<tr class="pid%(pid)s"><td>%(name)s</td><td>%(address)s</td><td>%(city)s</td><td>%(country)s</td><td>%(telephone)s</td><td>%(buttons)s</tr>""" % {
+        html = """<tr id="pid%(pid)s"><td>%(name)s</td><td>%(address)s</td><td>%(city)s</td><td>%(country)s</td><td>%(telephone)s</td><td>%(buttons)s</td></tr>""" % {
                 'pid' : person['pid'],
                 'name' : person['name'],
                 'address' : person['address'],

Modified: kukit/kss.core/branch/improve-demos/kss/core/plugins/core/demo/dynamic_table.zcml
==============================================================================
--- kukit/kss.core/branch/improve-demos/kss/core/plugins/core/demo/dynamic_table.zcml	(original)
+++ kukit/kss.core/branch/improve-demos/kss/core/plugins/core/demo/dynamic_table.zcml	Sun Jan 20 16:15:40 2008
@@ -41,6 +41,22 @@
   <browser:page
     for="kss.demo.interfaces.ISimpleContent"
     class=".dynamic_table.KSSDynamicTableDemo"
+    attribute="toTop"
+    name="toTop"
+    permission="zope.View"
+    />
+
+  <browser:page
+    for="kss.demo.interfaces.ISimpleContent"
+    class=".dynamic_table.KSSDynamicTableDemo"
+    attribute="toBottom"
+    name="toBottom"
+    permission="zope.View"
+    />
+
+  <browser:page
+    for="kss.demo.interfaces.ISimpleContent"
+    class=".dynamic_table.KSSDynamicTableDemo"
     attribute="moveUp"
     name="moveUp"
     permission="zope.View"
@@ -76,6 +92,10 @@
     name="dynamic_table.kss"
   />
 
+  <browser:resource
+    file="dynamic_table.css"
+    name="dynamic_table.css"
+    />
 
 </configure>
 

Added: kukit/kss.core/branch/improve-demos/kss/core/plugins/core/demo/selenium_tests/dynamic_table.html
==============================================================================
--- (empty file)
+++ kukit/kss.core/branch/improve-demos/kss/core/plugins/core/demo/selenium_tests/dynamic_table.html	Sun Jan 20 16:15:40 2008
@@ -0,0 +1,224 @@
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>dynamic_table</title>
+</head>
+<body>
+<table cellpadding="1" cellspacing="1" border="1">
+<thead>
+<tr><td rowspan="1" colspan="3">dynamic_table</td></tr>
+</thead><tbody>
+<tr>
+	<td>open</td>
+	<td>/demo/dynamic_table.html</td>
+	<td></td>
+</tr>
+<tr>
+	<td>assertTextPresent</td>
+	<td>Addressbook</td>
+	<td></td>
+</tr>
+<tr>
+	<td>click</td>
+	<td>clean</td>
+	<td></td>
+</tr>
+<tr>
+	<td>waitForElementNotPresent</td>
+	<td>//tr[2]</td>
+	<td></td>
+</tr>
+<tr>
+	<td>assertElementNotPresent</td>
+	<td>//tr[2]</td>
+	<td></td>
+</tr>
+<tr>
+	<td>type</td>
+	<td>name</td>
+	<td>Carsten</td>
+</tr>
+<tr>
+	<td>type</td>
+	<td>city</td>
+	<td>Aachen</td>
+</tr>
+<tr>
+	<td>click</td>
+	<td>submit</td>
+	<td></td>
+</tr>
+<tr>
+	<td>waitForText</td>
+	<td>//td[1]</td>
+	<td>Carsten</td>
+</tr>
+<tr>
+	<td>assertText</td>
+	<td>//td[1]</td>
+	<td>Carsten</td>
+</tr>
+<tr>
+	<td>assertText</td>
+	<td>//td[3]</td>
+	<td>Aachen</td>
+</tr>
+<tr>
+	<td>type</td>
+	<td>name</td>
+	<td>Jonas</td>
+</tr>
+<tr>
+	<td>type</td>
+	<td>city</td>
+	<td>Bern</td>
+</tr>
+<tr>
+	<td>click</td>
+	<td>submit</td>
+	<td></td>
+</tr>
+<tr>
+	<td>waitForText</td>
+	<td>//tr[2]/td[1]</td>
+	<td>Jonas</td>
+</tr>
+<tr>
+	<td>assertText</td>
+	<td>//tr[2]/td[1]</td>
+	<td>Jonas</td>
+</tr>
+<tr>
+	<td>assertText</td>
+	<td>//tr[2]/td[3]</td>
+	<td>Bern</td>
+</tr>
+<tr>
+	<td>type</td>
+	<td>name</td>
+	<td>Godefroid</td>
+</tr>
+<tr>
+	<td>type</td>
+	<td>city</td>
+	<td>Louvain-la-neuve</td>
+</tr>
+<tr>
+	<td>click</td>
+	<td>submit</td>
+	<td></td>
+</tr>
+<tr>
+	<td>waitForText</td>
+	<td>//tr[3]/td[1]</td>
+	<td>Godefroid</td>
+</tr>
+<tr>
+	<td>assertText</td>
+	<td>//tr[3]/td[1]</td>
+	<td>Godefroid</td>
+</tr>
+<tr>
+	<td>assertText</td>
+	<td>//tr[3]/td[3]</td>
+	<td>Louvain-la-neuve</td>
+</tr>
+<tr>
+	<td>click</td>
+	<td>//tr[3]/td[6]/input[@value='up']</td>
+	<td></td>
+</tr>
+<tr>
+	<td>waitForText</td>
+	<td>//tr[2]/td[1]</td>
+	<td>Godefroid</td>
+</tr>
+<tr>
+	<td>assertText</td>
+	<td>//tr[2]/td[1]</td>
+	<td>Godefroid</td>
+</tr>
+<tr>
+	<td>assertText</td>
+	<td>//tr[2]/td[3]</td>
+	<td>Louvain-la-neuve</td>
+</tr>
+<tr>
+	<td>assertText</td>
+	<td>//tr[3]/td[1]</td>
+	<td>Jonas</td>
+</tr>
+<tr>
+	<td>assertText</td>
+	<td>//tr[3]/td[3]</td>
+	<td>Bern</td>
+</tr>
+<tr>
+	<td>click</td>
+	<td>//input[@value='down']</td>
+	<td></td>
+</tr>
+<tr>
+	<td>waitForText</td>
+	<td>//td[1]</td>
+	<td>Godefroid</td>
+</tr>
+<tr>
+	<td>assertText</td>
+	<td>//td[1]</td>
+	<td>Godefroid</td>
+</tr>
+<tr>
+	<td>assertText</td>
+	<td>//td[3]</td>
+	<td>Louvain-la-neuve</td>
+</tr>
+<tr>
+	<td>assertText</td>
+	<td>//tr[2]/td[1]</td>
+	<td>Carsten</td>
+</tr>
+<tr>
+	<td>assertText</td>
+	<td>//tr[2]/td[3]</td>
+	<td>Aachen</td>
+</tr>
+<tr>
+	<td>click</td>
+	<td>//tr[2]/td[6]/input[@value='remove']</td>
+	<td></td>
+</tr>
+<tr>
+	<td>waitForText</td>
+	<td>//tr[2]/td[1]</td>
+	<td>Jonas</td>
+</tr>
+<tr>
+	<td>assertText</td>
+	<td>//tr[2]/td[1]</td>
+	<td>Jonas</td>
+</tr>
+<tr>
+	<td>assertTextNotPresent</td>
+	<td>Carsten</td>
+	<td></td>
+</tr>
+<tr>
+	<td>click</td>
+	<td>clean</td>
+	<td></td>
+</tr>
+<tr>
+	<td>waitForElementNotPresent</td>
+	<td>//tr[2]</td>
+	<td></td>
+</tr>
+<tr>
+	<td>assertElementNotPresent</td>
+	<td>//tr[2]</td>
+	<td></td>
+</tr>
+
+</tbody></table>
+</body>
+</html>


More information about the Kukit-checkins mailing list