Revision: 745d6b08b33d
Branch: default
Author: Mikko Korpela <[email protected]>
Date: Thu Mar 14 03:49:04 2013
Log: Lazy variable resolve while importing - only resolve variables
just before test execution
http://code.google.com/p/robotframework/source/detail?r=745d6b08b33d
Modified:
/atest/robot/variables/variables_from_resource_files.txt
/atest/testdata/variables/variables_from_resource_files.txt
/src/robot/running/model.py
/src/robot/variables/variables.py
=======================================
--- /atest/robot/variables/variables_from_resource_files.txt Fri Aug 31
03:43:31 2012
+++ /atest/robot/variables/variables_from_resource_files.txt Thu Mar 14
03:49:04 2013
@@ -12,6 +12,9 @@
Scalar String With Escapes
Check Test Case ${TEST NAME}
+
+Resolving Local Variable Defined From Resource File
+ Check Test Case ${TEST NAME}
Empty Scalar String
Check Test Case ${TEST NAME}
=======================================
--- /atest/testdata/variables/variables_from_resource_files.txt Thu Sep 13
12:42:10 2012
+++ /atest/testdata/variables/variables_from_resource_files.txt Thu Mar 14
03:49:04 2013
@@ -2,6 +2,7 @@
Resource resvarfiles/resource.txt
*** Variable ***
+${DEFINITION IN RESOURCE FILE} ${STRING}
*** Test Case ***
Scalar String
@@ -16,6 +17,9 @@
Scalar String With Escapes
Should Be Equal ${ESCAPES} one \\ two \\\\ \${non_existing}
+
+Resolving Local Variable Defined From Resource File
+ Should Be Equal ${DEFINITION IN RESOURCE FILE} Hello world!
Empty Scalar String
Should Be Equal ${NO VALUE} ${EMPTY}
=======================================
--- /src/robot/running/model.py Wed Feb 20 03:27:11 2013
+++ /src/robot/running/model.py Thu Mar 14 03:49:04 2013
@@ -145,6 +145,7 @@
context = EXECUTION_CONTEXTS.start_suite(ns, output,
self._dry_run_mode)
if not errors.exit:
ns.handle_imports()
+ self.variables.force_value_resolve()
self._set_variable_dependent_metadata(context, errors)
output.start_suite(self)
return context
=======================================
--- /src/robot/variables/variables.py Wed Mar 13 02:13:34 2013
+++ /src/robot/variables/variables.py Thu Mar 14 03:49:04 2013
@@ -67,7 +67,7 @@
def __getitem__(self, name):
self._validate_var_name(name)
- try: return utils.NormalizedDict.__getitem__(self, name)
+ try: return self._solve_delayed(name,
utils.NormalizedDict.__getitem__(self, name))
except KeyError:
try: return self._get_number_var(name)
except ValueError:
@@ -79,6 +79,17 @@
except ValueError:
raise DataError("Non-existing
variable '%s'." % name)
+ def _solve_delayed(self, name, value):
+ if value is not None:
+ if hasattr(value, 'delayed_var_value'):
+ v = value()
+ self[name] = v
+ return v
+ return value
+
+ def force_value_resolve(self):
+ self.values()
+
def _validate_var_name(self, name):
if not is_var(name):
raise DataError("Invalid variable name '%s'." % name)
@@ -290,10 +301,16 @@
def _get_var_table_name_and_value(self, name, value, path=None):
self._validate_var_name(name)
- value = [self._unescape_leading_trailing_spaces(cell) for cell in
value]
- if name[0] == '@':
- return name, self.replace_list(value)
- return name, self._get_var_table_scalar_value(name, value, path)
+ return name, self._delayed_var_value(name, value, path)
+
+ def _delayed_var_value(self, name, value, path):
+ def _delayed():
+ val = [self._unescape_leading_trailing_spaces(cell) for cell
in value]
+ if name[0] == '@':
+ return self.replace_list(val)
+ return self._get_var_table_scalar_value(name, val, path)
+ _delayed.delayed_var_value = True
+ return _delayed
def _unescape_leading_trailing_spaces(self, item):
if item.endswith(' \\'):
--
---
You received this message because you are subscribed to the Google Groups "robotframework-commit" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
For more options, visit https://groups.google.com/groups/opt_out.