Revision: 558bc76f24dd
Author:   Pekka Klärck
Date:     Sat May  7 06:50:11 2011
Log:      Update issue 808
Made Convert To Integer space-insensitive. Now e.g. 'FF 00 | 16' and '1000 1010 | 2' are valid inputs.
http://code.google.com/p/robotframework/source/detail?r=558bc76f24dd

Modified:
 /atest/testdata/standard_libraries/builtin/converter.txt
 /src/robot/libraries/BuiltIn.py

=======================================
--- /atest/testdata/standard_libraries/builtin/converter.txt Sat May 7 03:13:27 2011 +++ /atest/testdata/standard_libraries/builtin/converter.txt Sat May 7 06:50:11 2011
@@ -31,6 +31,8 @@
     10  8   ${8}
     10  2   2
     B   -   2
+    FF 00      65280  16
+    1010 1010  170    2

 Convert To Integer With Invalid Base
[Documentation] FAIL STARTS: '1' cannot be converted to an integer: 'invalid' cannot be converted to an integer: ValueError:
@@ -47,6 +49,8 @@
     0o101  65
     0O102  66
     0xXXX  -
+    0x FF 00      65280
+    0b 1010 1010  170

 Convert To Integer With Base And Java Objects
[Documentation] FAIL STARTS: 'F00' cannot be converted to an integer: ValueError:
=======================================
--- /src/robot/libraries/BuiltIn.py     Sat May  7 03:13:27 2011
+++ /src/robot/libraries/BuiltIn.py     Sat May  7 06:50:11 2011
@@ -34,9 +34,9 @@
     def convert_to_integer(self, item, base=None):
         """Converts the given item to an integer number.

-        If the item is a string, it is by default expected to be an
-        integer in base 10. Starting from Robot Framework 2.6 there
-        are two ways to convert from other bases:
+        If the given item is a string, it is by default expected to be an
+        integer in base 10. Starting from Robot Framework 2.6 there are two
+        ways to convert from other bases:

         1) Give base explicitly to the keyword as `base` argument.

@@ -44,12 +44,15 @@
         (binary), `0o` means base 8 (octal), and `0x` means base 16 (hex).
         The prefix is considered only when `base` argument is not given.

+        The syntax is case-insensitive and possible spaces are ignored.
+
         Examples:
-        | ${result} = | Convert To Integer | 100   |   | # Result is 100 |
-        | ${result} = | Convert To Integer | 100   | 8 | # Result is 64  |
-        | ${result} = | Convert To Integer | 100   | 2 | # Result is 4   |
-        | ${result} = | Convert To Integer | 0b100 |   | # Result is 4   |
-        | ${result} = | Convert To Integer | 0x100 |   | # Result is 256 |
+ | ${result} = | Convert To Integer | 100 | | # Result is 100 | + | ${result} = | Convert To Integer | FF AA | 16 | # Result is 65450 | + | ${result} = | Convert To Integer | 100 | 8 | # Result is 64 | + | ${result} = | Convert To Integer | 100 | 2 | # Result is 4 | + | ${result} = | Convert To Integer | 0b100 | | # Result is 4 | + | ${result} = | Convert To Integer | 0x100 | | # Result is 256 |
         """
         self._log_types(item)
         return self._convert_to_integer(item, base)
@@ -58,7 +61,7 @@
         try:
             if utils.is_jython:
                 item = self._handle_java_numbers(item)
-            item, base = self._get_base(item, base)
+            item, base = self._normalize_and_get_base(item, base)
             if base:
                 return int(item, self._convert_to_integer(base))
             return int(item)
@@ -73,12 +76,14 @@
             return item.doubleValue()
         return item

-    def _get_base(self, item, base):
+    def _normalize_and_get_base(self, item, base):
+        if not isinstance(item, basestring):
+            return item, base
+        item = item.replace(' ', '')
         bases = {'0b': 2, '0o': 8, '0x': 16}
-        if not base and isinstance(item, basestring) \
-                and item.lower().startswith(tuple(bases)):
-            return item[2:], bases[item.lower()[:2]]
-        return item, base
+        if base or not item.lower().startswith(tuple(bases)):
+            return item, base
+        return item[2:], bases[item.lower()[:2]]

     def convert_to_number(self, item):
         """Converts the given item to a floating point number."""

Reply via email to