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.


Reply via email to