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())]