[Checkins] SVN: zc.testbrowser/trunk/src/zc/testbrowser/real. Convert more code to use proxy JS function caller.

Justas Sadzevičius justas at pov.lt
Thu Sep 27 11:39:50 EDT 2007


Log message for revision 80235:
  Convert more code to use proxy JS function caller.
  Add a hack to deserialize values returned by JS function.
  

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-27 15:25:25 UTC (rev 80234)
+++ zc.testbrowser/trunk/src/zc/testbrowser/real.js	2007-09-27 15:39:49 UTC (rev 80235)
@@ -33,7 +33,7 @@
     for (var i in tokens) {
         attrs.push(tb_tokens[tokens[i]].getAttribute(attr));
     }
-    return attrs.toSource()
+    return attrs
 }
 
 function tb_get_link_by_predicate(predicate, index) {

Modified: zc.testbrowser/trunk/src/zc/testbrowser/real.py
===================================================================
--- zc.testbrowser/trunk/src/zc/testbrowser/real.py	2007-09-27 15:25:25 UTC (rev 80234)
+++ zc.testbrowser/trunk/src/zc/testbrowser/real.py	2007-09-27 15:39:49 UTC (rev 80235)
@@ -65,12 +65,14 @@
 
     def __call__(self, *args):
         js_args = [simplejson.dumps(a) for a in args]
-        js = '%s(%s)' % (self.js_name, ', '.join(js_args))
-        try:
-            res = simplejson.loads(self.executor(js))
-        except:
-            raise Exception(js)
-        return res
+        js = '[%s(%s)].toSource()' % (
+            self.js_name, ', '.join(js_args))
+        res = self.executor(js)
+        # JS has 'null' and 'undefined', python only has 'None'.
+        # This hack is sufficient for now.
+        if res == '[undefined]':
+            return None
+        return simplejson.loads(res)[0]
 
 
 class JSProxy(object):
@@ -124,6 +126,7 @@
         self.telnet.write(js)
         i, match, text = self.expect()
         if '!!!' in text: import pdb;pdb.set_trace() # XXX debug only, remove
+        #if '!!!' in text: raise Exception('FAILED: ' + js)
         result = text.rsplit('\n', 1)
         if len(result) == 1:
             return None
@@ -262,7 +265,7 @@
         return Link(token, self)
 
     def _follow_link(self, token):
-        self.execute('tb_follow_link(%s)' % token)
+        self.js.tb_follow_link(token)
 
     def getControlToken(self, label=None, name=None, index=None,
                         context_token=None, xpath=None):
@@ -270,20 +273,16 @@
         token = None
         if label is not None:
             msg = 'label %r' % label
-            token = self.execute('tb_get_control_by_label(%s, %s, %s, %s)'
-                 % (simplejson.dumps(label), js_index,
-                    simplejson.dumps(context_token),
-                    simplejson.dumps(xpath)))
+            token = self.js.tb_get_control_by_label(
+                label, index, context_token, xpath)
         elif name is not None:
             msg = 'name %r' % name
-            token = self.execute('tb_get_control_by_name(%s, %s, %s, %s)'
-                 % (simplejson.dumps(name), js_index,
-                    simplejson.dumps(context_token),
-                    simplejson.dumps(xpath)))
+            token = self.js.tb_get_control_by_name(
+                name, index, context_token, xpath)
         else:
             raise NotImplementedError
 
-        if token == 'false':
+        if token is False:
             raise LookupError(msg)
         elif token == 'ambiguity error':
             raise AmbiguityError(msg)



More information about the Checkins mailing list