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."""