[Checkins] SVN: zc.testbrowser/trunk/src/zc/testbrowser/real. More
checkbox-realted hacking:
Justas SadzeviÃÂius
justas at pov.lt
Wed Sep 26 16:15:11 EDT 2007
Log message for revision 80135:
More checkbox-realted hacking:
- handle the case where a single checkbox makes ListControl produce a single value
- traces of code to handle input controls for a ListControl
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 20:08:32 UTC (rev 80134)
+++ zc.testbrowser/trunk/src/zc/testbrowser/real.js 2007-09-26 20:15:10 UTC (rev 80135)
@@ -149,8 +149,6 @@
var changed = false;
if ((input.checked && !checked) || (!input.checked && checked))
changed = true;
- input.checked = checked;
-
if (changed) {
var evt = input.ownerDocument.createEvent('MouseEvents');
evt.initMouseEvent('click', true, true,
@@ -159,8 +157,22 @@
0, null);
input.dispatchEvent(evt);
}
+ type = input.getAttribute('type');
+ value = input.getAttribute('value')
+ if (type == 'checkbox' && value == null) {
+ input.setAttribute('value', 'on');
+ }
}
+function tb_get_checked(token) {
+ var input = tb_tokens[token];
+ var tagName = input.tagName;
+ if (tagName == 'OPTION') {
+ return input.selected;
+ }
+ return input.checked;
+}
+
function tb_get_link_text(token) {
return tb_normalize_whitespace(tb_tokens[token].textContent);
}
@@ -290,10 +302,12 @@
"'][@type='"+typeName+"']", elem);
for (var c = 0; c < res.snapshotLength; c++) {
var item = res.snapshotItem(c);
- if (!item.hasAttribute('value'))
+ if (item.hasAttribute('value') && (typeName != 'checkbox')) {
+ options.push(item.getAttribute('value'));
+ }
+ else {
options.push(true);
- else
- options.push(item.getAttribute('value'));
+ }
}
}
return options.toSource();
@@ -312,21 +326,24 @@
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) {
+function tb_act_as_single(token) {
+ elem = tb_tokens[token]
+ tagName = elem.tagName
+ if (tagName == 'INPUT') {
+ typeName = elem.getAttribute('type');
+ var elem = tb_tokens[token];
+ var res = tb_xpath("//input[@name='" + elem.getAttribute('name') +
+ "'][@type='"+typeName+"']", elem);
+ return res.snapshotLength < 2;
+ }
+ return false;
}
-
function tb_is_listcontrol_multiple(token) {
elem = tb_tokens[token]
tagName = elem.tagName
@@ -337,7 +354,7 @@
else if (tagName == 'INPUT') {
typeName = elem.getAttribute('type');
var elem = tb_tokens[token];
- var res = tb_xpath("//input[@name='" + name +
+ var res = tb_xpath("//input[@name='" + elem.getAttribute('name') +
"'][@type='"+typeName+"']", elem);
return res.snapshotLength > 0;
}
@@ -389,6 +406,17 @@
options.push(item.textContent);
}
}
+ } 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.checked) {
+ options.push()
+ }
+ }
}
return options.toSource();
}
@@ -396,7 +424,6 @@
function tb_set_listcontrol_displayValue(token, value) {
var elem = tb_tokens[token];
var tagName = elem.tagName;
- var options = new Array();
if (tagName == 'SELECT') {
var res = tb_xpath('child::option', elem)
for (var c = 0; c < res.snapshotLength; c++) {
@@ -408,13 +435,11 @@
item.selected = false;
}
}
- return options.toSource();
}
function tb_set_listcontrol_value(token, value) {
var elem = tb_tokens[token];
var tagName = elem.tagName;
- var options = new Array();
if (tagName == 'SELECT') {
var res = tb_xpath('child::option', elem)
for (var c = 0; c < res.snapshotLength; c++) {
@@ -425,7 +450,9 @@
item.selected = false;
}
}
- return options.toSource();
+ else if (tagName == 'INPUT'){
+ //alert(tagName);
+ }
}
function tb_get_listcontrol_item_tokens(token) {
Modified: zc.testbrowser/trunk/src/zc/testbrowser/real.py
===================================================================
--- zc.testbrowser/trunk/src/zc/testbrowser/real.py 2007-09-26 20:08:32 UTC (rev 80134)
+++ zc.testbrowser/trunk/src/zc/testbrowser/real.py 2007-09-26 20:15:10 UTC (rev 80135)
@@ -469,6 +469,11 @@
self.token, simplejson.dumps(value)) )
return property(fget, fset)
+ @property
+ def acts_as_single(self):
+ return simplejson.loads(self.browser.execute(
+ 'tb_act_as_single(%s)' % (self.token)))
+
@apply
def value():
def fget(self):
@@ -476,14 +481,27 @@
'tb_get_listcontrol_value(%r)' % self.token)
v = [option for option in simplejson.loads(options)]
+
+ if self.acts_as_single:
+ return v[0]
+
return v
def fset(self, value):
if self._browser_counter != self.browser._counter:
raise zc.testbrowser.interfaces.ExpiredError
- self.browser.execute(
- 'tb_set_listcontrol_value(%r, %s)' % (
- self.token, simplejson.dumps(value)) )
+
+ if self.acts_as_single:
+ # expects a single value
+ self.browser.execute('tb_set_checked(%s, %s)' %
+ (self.token, simplejson.dumps(bool(value))))
+ #raise NotImplementedError
+ else:
+ # expects a list of control ids
+ self.browser.execute(
+ 'tb_set_listcontrol_value(%r, %s)' % (
+ self.token, simplejson.dumps(value)) )
+
return property(fget, fset)
@property
@@ -576,22 +594,15 @@
def selected():
def fget(self):
- tagName = self.browser.execute(
- 'tb_tokens[%s].tagName' % self.token)
- if tagName == 'OPTION':
- return self.browser.execute(
- 'tb_tokens[%s].selected' % self.token) == 'true'
- return self.browser.execute(
- 'tb_tokens[%s].checked' % self.token) == 'true'
+ return simplejson.loads(self.browser.execute(
+ 'tb_get_checked(%s)' % self.token))
+ return False
def fset(self, value):
if self._browser_counter != self.browser._counter:
raise zc.testbrowser.interfaces.ExpiredError
- checked = 'false'
- if value:
- checked = 'true'
self.browser.execute('tb_set_checked(%s, %s)' %
- (self.token, checked))
+ (self.token, simplejson.dumps(bool(value))))
return property(fget, fset)
@@ -602,7 +613,6 @@
if not v and self.selected:
v = 'on'
-
return v
def click(self):
More information about the Checkins
mailing list