Revision: 2492
Author: janne.t.harkonen
Date: Fri Feb 19 03:48:37 2010
Log: Fix java argument coercion with Jython 2.5, issue 469
http://code.google.com/p/robotframework/source/detail?r=2492

Modified:
 /trunk/src/robot/running/javaargcoercer.py

=======================================
--- /trunk/src/robot/running/javaargcoercer.py  Sun Apr 19 13:26:54 2009
+++ /trunk/src/robot/running/javaargcoercer.py  Fri Feb 19 03:48:37 2010
@@ -13,6 +13,8 @@
 #  limitations under the License.


+import sys
+
 from java.lang import Byte, Short, Integer, Long, Boolean, Float, Double

 from robot.errors import DataError
@@ -32,7 +34,7 @@
         types = types.items()
         types.sort()
         return types
-
+
     def __call__(self, args):
return [ coercer(arg) for coercer, arg in zip(self._coercers, args) ]

@@ -40,18 +42,24 @@
 class _CoercionFunction:

     _bool_types = [Boolean]
-    _bool_primitives = ['boolean']
     _int_types = [Byte, Short, Integer, Long]
-    _int_primitives = ['byte', 'short', 'int', 'long']
     _float_types = [Float, Double]
+    _bool_primitives = ['boolean']
+    _int_primitives = ['byte', 'short', 'int', 'long']
     _float_primitives = ['float', 'double']
+    if sys.version_info[:2] > (2,2):
+        pattern = "<type '%s'>"
+        _bool_primitives =  [ pattern % 'boolean' ]
+        _int_primitives =   [ pattern % p for p in _int_primitives ]
+        _float_primitives = [ pattern % p for p in _float_primitives ]
+        del pattern

     def __init__(self, arg_types, position):
         self._position = position
         self.__coercer = None
         for arg in arg_types:
-            if not (self._set_bool(arg) or
-                    self._set_int(arg) or
+            if not (self._set_bool(arg) or
+                    self._set_int(arg) or
                     self._set_float(arg)):
                 self.__coercer = self._no_coercion

@@ -61,15 +69,15 @@
         return self.__coercer(arg)

     def _set_bool(self, arg):
-        return self._set_coercer(arg, self._bool_types,
+        return self._set_coercer(arg, self._bool_types,
                                  self._bool_primitives, self._to_bool)

     def _set_int(self, arg):
-        return self._set_coercer(arg, self._int_types,
+        return self._set_coercer(arg, self._int_types,
                                  self._int_primitives, self._to_int)

     def _set_float(self, arg):
-        return self._set_coercer(arg, self._float_types,
+        return self._set_coercer(arg, self._float_types,
                                  self._float_primitives, self._to_float)

     def _set_coercer(self, arg, type_list, primitive_list, coercer):

Reply via email to