2 new revisions:

Revision: cdffd2cac3cf
Author:   Pekka Klärck
Date:     Mon Nov 14 09:03:47 2011
Log: Criticality: 1) Renamed TestSuite.critical -> criticality. 2) Disallow...
http://code.google.com/p/robotframework/source/detail?r=cdffd2cac3cf

Revision: 268e08e14e1c
Author:   Pekka Klärck
Date:     Mon Nov 14 09:10:30 2011
Log:      TagStatistics: Pass criticality to __init__ instead of add_test
http://code.google.com/p/robotframework/source/detail?r=268e08e14e1c

==============================================================================
Revision: cdffd2cac3cf
Author:   Pekka Klärck
Date:     Mon Nov 14 09:03:47 2011
Log: Criticality: 1) Renamed TestSuite.critical -> criticality. 2) Disallowed setting criticality for child suites. 3) Still experimenting with relative imports.
http://code.google.com/p/robotframework/source/detail?r=cdffd2cac3cf

Added:
 /src/robot/model/criticality.py
Deleted:
 /src/robot/model/critical.py
Modified:
 /src/robot/model/__init__.py
 /src/robot/model/statistics.py
 /src/robot/model/testcase.py
 /src/robot/model/testsuite.py
 /utest/model/test_testsuite.py
 /utest/result/test_jsoning.py
 /utest/result/test_resultmodel.py

=======================================
--- /dev/null
+++ /src/robot/model/criticality.py     Mon Nov 14 09:03:47 2011
@@ -0,0 +1,42 @@
+#  Copyright 2008-2011 Nokia Siemens Networks Oyj
+#
+#  Licensed under the Apache License, Version 2.0 (the "License");
+#  you may not use this file except in compliance with the License.
+#  You may obtain a copy of the License at
+#
+#      http://www.apache.org/licenses/LICENSE-2.0
+#
+#  Unless required by applicable law or agreed to in writing, software
+#  distributed under the License is distributed on an "AS IS" BASIS,
+#  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+#  See the License for the specific language governing permissions and
+#  limitations under the License.
+
+from tags import TagPatterns
+
+
+class Criticality(object):
+
+    def __init__(self, critical_tags=None, non_critical_tags=None):
+        self.critical_tags = TagPatterns(critical_tags)
+        self.non_critical_tags = TagPatterns(non_critical_tags)
+
+    def tag_is_critical(self, tag):
+        return self.critical_tags.match(tag)
+
+    def tag_is_non_critical(self, tag):
+        return self.non_critical_tags.match(tag)
+
+    def test_is_critical(self, test):
+        if self.non_critical_tags.match(test.tags):
+            return False
+        if self.critical_tags.match(test.tags):
+            return True
+        return not self.critical_tags
+
+    def __nonzero__(self):
+        return bool(self.critical_tags or self.non_critical_tags)
+
+    # TODO: Remove below compatibility code when possible
+    is_critical = tag_is_critical
+    is_non_critical = tag_is_non_critical
=======================================
--- /src/robot/model/critical.py        Fri Nov  4 07:15:54 2011
+++ /dev/null
@@ -1,42 +0,0 @@
-#  Copyright 2008-2011 Nokia Siemens Networks Oyj
-#
-#  Licensed under the Apache License, Version 2.0 (the "License");
-#  you may not use this file except in compliance with the License.
-#  You may obtain a copy of the License at
-#
-#      http://www.apache.org/licenses/LICENSE-2.0
-#
-#  Unless required by applicable law or agreed to in writing, software
-#  distributed under the License is distributed on an "AS IS" BASIS,
-#  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-#  See the License for the specific language governing permissions and
-#  limitations under the License.
-
-from tags import TagPatterns
-
-
-class Critical(object):
-
-    def __init__(self, critical_tags=None, non_critical_tags=None):
-        self.critical_tags = TagPatterns(critical_tags)
-        self.non_critical_tags = TagPatterns(non_critical_tags)
-
-    def tag_is_critical(self, tag):
-        return self.critical_tags.match(tag)
-
-    def tag_is_non_critical(self, tag):
-        return self.non_critical_tags.match(tag)
-
-    def test_is_critical(self, test):
-        if self.non_critical_tags.match(test.tags):
-            return False
-        if self.critical_tags.match(test.tags):
-            return True
-        return not self.critical_tags
-
-    def __nonzero__(self):
-        return bool(self.critical_tags or self.non_critical_tags)
-
-    # TODO: Remove below compatibility code when possible
-    is_critical = tag_is_critical
-    is_non_critical = tag_is_non_critical
=======================================
--- /src/robot/model/__init__.py        Wed Nov  9 09:48:30 2011
+++ /src/robot/model/__init__.py        Mon Nov 14 09:03:47 2011
@@ -12,11 +12,11 @@
 #  See the License for the specific language governing permissions and
 #  limitations under the License.

-from testsuite import TestSuite
-from testcase import TestCase
-from keyword import Keyword
-from message import Message
-from tags import Tags, TagPatterns
-from critical import Critical
-from namepatterns import SuiteNamePatterns, TestNamePatterns
-from visitor import SuiteVisitor, SkipAllVisitor
+from .testsuite import TestSuite
+from .testcase import TestCase
+from .keyword import Keyword
+from .message import Message
+from .tags import Tags, TagPatterns
+from .criticality import Criticality
+from .namepatterns import SuiteNamePatterns, TestNamePatterns
+from .visitor import SuiteVisitor, SkipAllVisitor
=======================================
--- /src/robot/model/statistics.py      Mon Nov 14 05:16:01 2011
+++ /src/robot/model/statistics.py      Mon Nov 14 09:03:47 2011
@@ -61,4 +61,4 @@

     def visit_test(self, test):
         self._current_suite_stat.add_test(test)
-        self._tag_stats.add_test(test, self._current_suite.critical)
+        self._tag_stats.add_test(test, self._current_suite.criticality)
=======================================
--- /src/robot/model/testcase.py        Wed Nov  9 13:21:18 2011
+++ /src/robot/model/testcase.py        Mon Nov 14 09:03:47 2011
@@ -53,7 +53,7 @@

     @property
     def critical(self):
- return 'yes' if self.parent.critical.test_is_critical(self) else 'no' + return 'yes' if self.parent.criticality.test_is_critical(self) else 'no'

     def visit(self, visitor):
         visitor.visit_test(self)
=======================================
--- /src/robot/model/testsuite.py       Wed Nov  9 13:21:18 2011
+++ /src/robot/model/testsuite.py       Mon Nov 14 09:03:47 2011
@@ -14,14 +14,14 @@

 from robot import utils

-from metadata import Metadata
-from testcase import TestCase
-from keyword import Keyword, Keywords
-from itemlist import ItemList
-from critical import Critical
-from tagsetter import TagSetter
-from filter import Filter
-from modelobject import ModelObject
+from .metadata import Metadata
+from .testcase import TestCase
+from .keyword import Keyword, Keywords
+from .itemlist import ItemList
+from .criticality import Criticality
+from .tagsetter import TagSetter
+from .filter import Filter
+from .modelobject import ModelObject


 class TestSuite(ModelObject):
@@ -38,7 +38,7 @@
         self.suites = []
         self.tests = []
         self.keywords = []
-        self._critical = None
+        self._criticality = None

     def _get_name(self):
         return self._name or ' & '.join(s.name for s in self.suites)
@@ -47,18 +47,17 @@
     name = property(_get_name, _set_name)

     def set_criticality(self, critical_tags=None, non_critical_tags=None):
-        # TODO: should settings criticality be prevented for sub suites?
-        self._critical = Critical(critical_tags, non_critical_tags)
+        if self.parent:
+ raise TypeError('Criticality can only be set to top level suite')
+        self._criticality = Criticality(critical_tags, non_critical_tags)

     @property
-    def critical(self):
-        if self._critical:
-            return self._critical
+    def criticality(self):
         if self.parent:
-            return self.parent.critical
-        if self._critical is None:
-            self._critical = Critical()
-        return self._critical
+            return self.parent.criticality
+        if self._criticality is None:
+            self.set_criticality()
+        return self._criticality

     @utils.setter
     def metadata(self, metadata):
=======================================
--- /utest/model/test_testsuite.py      Wed Nov  9 12:25:21 2011
+++ /utest/model/test_testsuite.py      Mon Nov 14 09:03:47 2011
@@ -1,5 +1,5 @@
 import unittest
-from robot.utils.asserts import assert_equal, assert_true
+from robot.utils.asserts import assert_equal, assert_true, assert_raises

 from robot.model import TestSuite

@@ -54,6 +54,38 @@
         assert_equal(list(sub1.suites), [sub2])


+class TestCriticality(unittest.TestCase):
+
+    def setUp(self):
+        self.suite = TestSuite()
+        self.sub = self.suite.suites.create()
+
+    def test_default_criticality(self):
+        self._verify_criticality(self.suite, [], [])
+        self._verify_criticality(self.sub, [], [])
+
+    def test_set_criticality(self):
+        self.suite.set_criticality(['c1', 'c2'], 'non')
+        self._verify_criticality(self.suite, ['c1', 'c2'], ['non'])
+        self._verify_criticality(self.sub, ['c1', 'c2'], ['non'])
+
+    def test_cannot_set_criticality_for_child_suites(self):
+        assert_raises(TypeError, self.sub.set_criticality)
+
+    def test_criticality_set_for_child_suites_earlier_is_ignored(self):
+        self.suite.set_criticality('use', 'us')
+        sub2 = TestSuite()
+        sub2.set_criticality('ignore', 'these')
+        self.suite.suites.append(sub2)
+        self._verify_criticality(self.suite, ['use'], ['us'])
+        self._verify_criticality(self.sub, ['use'], ['us'])
+        self._verify_criticality(sub2, ['use'], ['us'])
+
+    def _verify_criticality(self, suite, crit, non_crit):
+ assert_equal([unicode(t) for t in suite.criticality.critical_tags], crit) + assert_equal([unicode(t) for t in suite.criticality.non_critical_tags], non_crit)
+
+
 class TestSuiteId(unittest.TestCase):

     def test_one_suite(self):
=======================================
--- /utest/result/test_jsoning.py       Mon Nov 14 03:22:03 2011
+++ /utest/result/test_jsoning.py       Mon Nov 14 09:03:47 2011
@@ -99,7 +99,7 @@
                         starttime='20000101 01:00:00.000',
                         endtime='20350101 01:00:00.001')
         parent = lambda:0
-        parent.critical = parent
+        parent.criticality = parent
         parent.test_is_critical = lambda *args: True
         test.parent = parent
         test.keywords.create(name=':FOR ${i} IN RANGE 123', type='for',
=======================================
--- /utest/result/test_resultmodel.py   Thu Nov 10 06:42:09 2011
+++ /utest/result/test_resultmodel.py   Mon Nov 14 09:03:47 2011
@@ -32,6 +32,7 @@

     def _create_nested_suite_with_tests(self):
         suite = TestSuite()
+        suite.set_criticality([], ['nc'])
         suite.suites = [self._create_suite_with_tests(),
                         self._create_suite_with_tests()]
         return suite

==============================================================================
Revision: 268e08e14e1c
Author:   Pekka Klärck
Date:     Mon Nov 14 09:10:30 2011
Log:      TagStatistics: Pass criticality to __init__ instead of add_test
http://code.google.com/p/robotframework/source/detail?r=268e08e14e1c

Modified:
 /src/robot/model/statistics.py
 /src/robot/model/tagstatistics.py
 /utest/model/test_statistics.py

=======================================
--- /src/robot/model/statistics.py      Mon Nov 14 09:03:47 2011
+++ /src/robot/model/statistics.py      Mon Nov 14 09:10:30 2011
@@ -23,8 +23,9 @@
     def __init__(self, suite, suite_stat_level=-1, tag_stat_include=None,
tag_stat_exclude=None, tag_stat_combine=None, tag_doc=None,
                  tag_stat_link=None):
-        self.tags = TagStatistics(tag_stat_include, tag_stat_exclude,
-                                  tag_stat_combine, tag_doc, tag_stat_link)
+        self.tags = TagStatistics(suite.criticality, tag_stat_include,
+                                  tag_stat_exclude, tag_stat_combine,
+                                  tag_doc, tag_stat_link)
self.suite = StatisticsBuilder(self.tags, suite_stat_level).build(suite)
         self.tags.sort()
         self.total = TotalStatistics(self.suite)
@@ -61,4 +62,4 @@

     def visit_test(self, test):
         self._current_suite_stat.add_test(test)
-        self._tag_stats.add_test(test, self._current_suite.criticality)
+        self._tag_stats.add_test(test)
=======================================
--- /src/robot/model/tagstatistics.py   Mon Nov 14 04:41:32 2011
+++ /src/robot/model/tagstatistics.py   Mon Nov 14 09:10:30 2011
@@ -21,8 +21,9 @@

 class TagStatistics(object):

-    def __init__(self, include=None, exclude=None, combine=None, docs=None,
-                 links=None):
+ def __init__(self, criticality, include=None, exclude=None, combine=None,
+                 docs=None, links=None):
+        self._criticality = criticality
         self.stats = utils.NormalizedDict(ignore=['_'])
         self._include = TagPatterns(include)
         self._exclude = TagPatterns(exclude)
@@ -38,11 +39,11 @@
                                             combined=comb.pattern)
         return combines

-    def add_test(self, test, critical):
-        self._add_tags_statistics(test, critical)
+    def add_test(self, test):
+        self._add_tags_statistics(test)
         self._add_combined_statistics(test)

-    def _add_tags_statistics(self, test, critical):
+    def _add_tags_statistics(self, test):
         for tag in test.tags:
             if not self._is_included(tag):
                 continue
@@ -50,8 +51,8 @@
                 self.stats[tag] = TagStat(tag,
                                           self._info.get_doc(tag),
                                           self._info.get_links(tag),
-                                          critical.is_critical(tag),
-                                          critical.is_non_critical(tag))
+ self._criticality.tag_is_critical(tag), + self._criticality.tag_is_non_critical(tag))
             self.stats[tag].add_test(test)

     def _is_included(self, tag):
=======================================
--- /utest/model/test_statistics.py     Mon Nov 14 04:41:32 2011
+++ /utest/model/test_statistics.py     Mon Nov 14 09:10:30 2011
@@ -1,6 +1,6 @@
 import unittest

-from robot.model.critical import Critical
+from robot.model import Criticality
 from robot.utils.asserts import assert_equals, assert_none, fail
 from robot.model.statistics import Statistics
from robot.model.tagstatistics import TagStatistics, TagStatLink, TagStatInfo
@@ -130,8 +130,8 @@

     def test_include(self):
         for incl, tags in _incl_excl_data:
-            tagstats = TagStatistics(incl, [])
- tagstats.add_test(TestCase(status='PASS', tags=tags), Critical())
+            tagstats = TagStatistics(Criticality(), incl, [])
+            tagstats.add_test(TestCase(status='PASS', tags=tags))
             exp_keys = [tag for tag in sorted(tags)
                         if incl == [] or utils.matches_any(tag, incl)]
             assert_equals(sorted(tagstats.stats.keys()),
@@ -139,8 +139,8 @@

     def test_exclude(self):
         for excl, tags in _incl_excl_data:
-            tagstats = TagStatistics([], excl)
- tagstats.add_test(TestCase(status='PASS', tags=tags), Critical())
+            tagstats = TagStatistics(Criticality(), [], excl)
+            tagstats.add_test(TestCase(status='PASS', tags=tags))
             exp_keys = [tag for tag in sorted(tags)
                         if not utils.matches_any(tag, excl)]
             assert_equals(sorted(tagstats.stats.keys()),
@@ -156,8 +156,8 @@
                (['t1','t2','t3','not'], ['t2','t0'],
                 ['t0','t1','t2','t3','x'], ['t1','t3'] )
               ]:
-            tagstats = TagStatistics(incl, excl)
- tagstats.add_test(TestCase(status='PASS', tags=tags), Critical())
+            tagstats = TagStatistics(Criticality(), incl, excl)
+            tagstats.add_test(TestCase(status='PASS', tags=tags))
             assert_equals(sorted(tagstats.stats.keys()),
                          exp, "Incls: %s, Excls: %s" % (incl, excl))

@@ -170,7 +170,7 @@
                 ([('3*', '')], '3*' ),
                 ([('4NOT5', 'Some new name')], 'Some new name')
                ]:
-            stats = TagStatistics(combine=comb_tags)
+            stats = TagStatistics(Criticality(), combine=comb_tags)
             test = TestCase()
             stats._add_combined_statistics(test)
             assert_equals(len(stats.stats), expected_name != '')
@@ -192,7 +192,7 @@
self._test_combined_statistics(comb_tags, test_tags, expected_count)

def _test_combined_statistics(self, comb_tags, test_tags, expected_count):
-            stats = TagStatistics(combine=[(comb_tags, 'name')])
+ stats = TagStatistics(Criticality(), combine=[(comb_tags, 'name')])
             test = TestCase(tags=test_tags)
             stats._add_combined_statistics(test)
             assert_equals(len(stats.stats['Name'].tests), expected_count,
@@ -236,11 +236,11 @@
                 (['nonex'], [0], [['t1'],['t1,t2'],[]], [])
                ]:
             # 1) Create tag stats
-            tagstats = TagStatistics(combine=[(t, '') for t in comb_tags])
+            tagstats = TagStatistics(Criticality(crit_tags),
+                                     combine=[(t, '') for t in comb_tags])
             all_tags = []
             for tags in tests_tags:
-                tagstats.add_test(TestCase(status='PASS', tags=tags),
-                                  Critical(crit_tags))
+                tagstats.add_test(TestCase(status='PASS', tags=tags),)
                 all_tags.extend(tags)
             # 2) Actual values
             names = [stat.name for stat in sorted(tagstats.stats.values())]

Reply via email to