[Checkins] SVN: zc.testbrowser/trunk/src/zc/testbrowser/real. More checkbox functionality.

Rocky Burt rocky at serverzen.com
Wed Sep 26 09:17:29 EDT 2007


Log message for revision 80101:
  More checkbox functionality.
  (Rocky, Justas)
  

Changed:
  U   zc.testbrowser/trunk/src/zc/testbrowser/real.js
  U   zc.testbrowser/trunk/src/zc/testbrowser/real.py

-=-
Modified: zc.testbrowser/trunk/src/zc/testbrowser/real.js
===================================================================
--- zc.testbrowser/trunk/src/zc/testbrowser/real.js	2007-09-26 11:47:33 UTC (rev 80100)
+++ zc.testbrowser/trunk/src/zc/testbrowser/real.js	2007-09-26 13:17:29 UTC (rev 80101)
@@ -283,6 +283,18 @@
         for (var c = 0; c < res.snapshotLength; c++) {
             options.push(res.snapshotItem(c).getAttribute('value'));
         }
+    } else if (tagName == 'INPUT') {
+        var elemName = elem.getAttribute('name');
+        var typeName = elem.getAttribute('type');
+        var res = tb_xpath("//input[@name='" + elemName +
+                           "'][@type='"+typeName+"']", elem);
+        for (var c = 0; c < res.snapshotLength; c++) {
+            var item = res.snapshotItem(c);
+            if (!item.hasAttribute('value'))
+                options.push(true);
+            else
+                options.push(item.getAttribute('value'));
+        }
     }
     return options.toSource();
 }
@@ -294,20 +306,36 @@
     if (tagName == 'SELECT') {
         var res = tb_xpath('child::option', elem)
         for (var c = 0; c < res.snapshotLength; c++) {
-            item = res.snapshotItem(c)
+            var item = res.snapshotItem(c)
             if (item.hasAttribute('label'))
                 options.push(item.getAttribute('label'))
             else
                 options.push(item.textContent);
         }
+    } else if (tagName == 'INPUT') {
+        var res = tb_xpath("//label[@for='" + elem.id + "']", elem);
+        for (var c = 0; c < res.snapshotLength; c++) {
+            var item = res.snapshotItem(c);
+            options.push(item.textContent);
+        }
     }
+
     return options.toSource();
 }
 
+function tb_listcontrol_has_multiple(token, name, typeName) {
+    var elem = tb_tokens[token];
+    var res = tb_xpath("//input[@name='" + name +
+                       "'][@type='"+typeName+"']", elem);
+    return res.snapshotLength > 0;
+}
+
 function tb_get_listcontrol_value(token) {
     var elem = tb_tokens[token];
     var tagName = elem.tagName;
+    var values
     var values = new Array();
+
     if (tagName == 'SELECT') {
         var res = tb_xpath('child::option', elem)
         for (var c = 0; c < res.snapshotLength; c++) {
@@ -317,13 +345,16 @@
         }
     } else if (tagName == 'INPUT') {
         var elemName = elem.getAttribute('name');
-        var res = tb_xpath('//input[@name="' +
-                           elemName +
-                           '"][@type="radio"]', elem);
+        var typeName = elem.getAttribute('type');
+        var res = tb_xpath("//input[@name='" + elemName +
+                           "'][@type='"+typeName+"']", elem);
         for (var c = 0; c < res.snapshotLength; c++) {
             var item = res.snapshotItem(c);
             if (item.checked) {
-                values.push(item.getAttribute('value'));
+                if (!item.hasAttribute('value'))
+                    values.push(true);
+                else
+                    values.push(item.getAttribute('value'));
             }
         }
     }

Modified: zc.testbrowser/trunk/src/zc/testbrowser/real.py
===================================================================
--- zc.testbrowser/trunk/src/zc/testbrowser/real.py	2007-09-26 11:47:33 UTC (rev 80100)
+++ zc.testbrowser/trunk/src/zc/testbrowser/real.py	2007-09-26 13:17:29 UTC (rev 80101)
@@ -444,6 +444,21 @@
             return super(ListControl, self).type
         return tagName
 
+    @property
+    def multiple(self):
+        return True
+
+    @property
+    def really_multiple(self):
+        tagName = self.browser.execute(
+            'tb_tokens[%s].tagName' % self.token)
+        typeName = self.browser.execute(
+            'tb_tokens[%s].getAttribute("type")' % self.token)
+        v = self.browser.execute( \
+            'tb_listcontrol_has_multiple(%s, %r, %r)'
+            % (self.token, tagName, typeName))
+        return simplejson.loads(v)
+
     @apply
     def displayValue():
         # not implemented for anything other than select;
@@ -467,8 +482,12 @@
         def fget(self):
             options = self.browser.execute(
                 'tb_get_listcontrol_value(%r)' % self.token)
-            return [str(option) for option in simplejson.loads(options)]
 
+            v = [option for option in simplejson.loads(options)]
+            if not self.really_multiple:
+                v = v[0]
+            return v
+
         def fset(self, value):
             if self._browser_counter != self.browser._counter:
                 raise zc.testbrowser.interfaces.ExpiredError
@@ -487,7 +506,7 @@
     def options(self):
         options = self.browser.execute(
             'tb_get_listcontrol_options(%r)' % self.token)
-        return [str(option) for option in simplejson.loads(options)]
+        return [option for option in simplejson.loads(options)]
 
     @property
     def controls(self):
@@ -590,9 +609,14 @@
 
     @property
     def optionValue(self):
-        return self.browser.execute(
+        v = self.browser.execute(
             'tb_tokens[%s].getAttribute("value")' % self.token)
 
+        if not v and self.selected:
+            v = 'on'
+
+        return v
+
     def click(self):
         if self._browser_counter != self.browser._counter:
             raise zc.testbrowser.interfaces.ExpiredError



More information about the Checkins mailing list