Author: jprantan
Date: Tue Nov 25 07:58:58 2008
New Revision: 1108

Modified:
   trunk/src/robot/common/model.py

Log:
Removed duplicate data from --suite filter data structure.

Modified: trunk/src/robot/common/model.py
==============================================================================
--- trunk/src/robot/common/model.py     (original)
+++ trunk/src/robot/common/model.py     Tue Nov 25 07:58:58 2008
@@ -197,15 +197,13 @@
         self.filter_by_tags(includes, excludes)

     def filter_by_names(self, suites=None, tests=None):
-        suites = [ (name, name) for name in utils.to_list(suites) ]
+ suites = [ ([], name.split('.')) for name in utils.to_list(suites) ]
         tests = utils.to_list(tests)
-        if suites == [] and tests == []:
-            return
-        if not self._filter_by_names(suites, tests):
+        if (suites or tests) and not self._filter_by_names(suites, tests):
             self._raise_no_tests_filtered_by_names(suites, tests)
-
+
     def _filter_by_names(self, suites, tests):
-        self.filtered.add_suites( [ long for long, short in suites ] )
+        self.filtered.add_suites(self._suite_filters_to_str(suites))
         self.filtered.add_tests(tests)
         suites = self._filter_suite_names(suites)
         self.suites = [ suite for suite in self.suites
@@ -217,23 +215,22 @@
             self.tests = []
         return self.suites or self.tests

-    def _filter_suite_names(self, names):
+    def _filter_suite_names(self, suites):
        try:
- return [ self._filter_suite_name(long, short) for long, short in names ]
+               return [ self._filter_suite_name(p, s) for p, s in suites ]
         except StopIteration:
             return []

-    def _filter_suite_name(self, long, short):
-        tokens = short.split('.')
-        if utils.matches(self.name, tokens[0], ignore=['_']):
-            if len(tokens) == 1:
+    def _filter_suite_name(self, parent, suite):
+        if utils.matches(self.name, suite[0], ignore=['_']):
+            if len(suite) == 1:
                 raise StopIteration('Match found')
-            return (long, '.'.join(tokens[1:]))
-        return (long, long)
+            return (parent + [suite[0]], suite[1:])
+        return ([], parent + suite)

     def _raise_no_tests_filtered_by_names(self, suites, tests):
         tests = utils.seq2str(tests, lastsep=' or ')
- suites = utils.seq2str([long for long, short in suites ], lastsep=' or ') + suites = utils.seq2str(self._suite_filters_to_str(suites), lastsep=' or ')
         if not suites:
             msg = 'test cases named %s.' % tests
         elif not tests:
@@ -241,6 +238,9 @@
         else:
             msg = 'test cases %s in suites %s.' % (tests, suites)
         raise DataError("Suite '%s' contains no %s" % (self.name, msg))
+
+    def _suite_filters_to_str(self, suites):
+        return [ '.'.join(p + s) for p, s in suites ]

     def filter_by_tags(self, includes=None, excludes=None):
         if includes is None: includes = []

Reply via email to