On Sat, 21 Nov 2015 02:10:03 +0100, <[email protected]> wrote:
From: Dylan Baker <[email protected]>
This patch allows passing '/' separated tests into the
-t/--include-tests -x/--exclude-tests options. This becomes
particularly important to fix since the verbose logger now prints '/'
separated names, as does the console logger.
Signed-off-by: Dylan Baker <[email protected]>
---
framework/options.py | 27 ++++++++++++++++++++++-----
framework/tests/options_tests.py | 14 ++++++++++++++
2 files changed, 36 insertions(+), 5 deletions(-)
diff --git a/framework/options.py b/framework/options.py
index 4a39ae9..07e1434 100644
--- a/framework/options.py
+++ b/framework/options.py
@@ -106,6 +106,22 @@ class _ReList(collections.MutableSequence):
return [l.pattern for l in self]
+class _FilterReList(_ReList):
+ """A version of ReList that handles group maddness.
madness
+
+ Groups are printed with '/' as a separator, but internall something
internally
else
+ may be used. This version replaces '/' with '.'.
+
+ """
+ def __setitem__(self, index, value):
+ # Replace '/' with '.', this solves the problem of '/' not
matching
+ # grouptools.SEPARATOR, but without needing to import grouptools
+ super(_FilterReList, self).__setitem__(index,
value.replace('/', '.'))
+
+ def insert(self, index, value):
+ super(_FilterReList, self).insert(index, value.replace('/',
'.'))
+
+
class _ReListDescriptor(object):
"""A Descriptor than ensures reassignment of _{in,ex}clude_filter
is an
_ReList
@@ -115,8 +131,9 @@ class _ReListDescriptor(object):
point.
"""
- def __init__(self, name):
+ def __init__(self, name, type_=_ReList):
self.__name = name
+ self.__type = type_
def __get__(self, instance, cls):
try:
@@ -131,10 +148,10 @@ class _ReListDescriptor(object):
def __set__(self, instance, value):
assert isinstance(value, (collections.Sequence,
collections.Set))
- if isinstance(value, _ReList):
+ if isinstance(value, self.__type):
setattr(instance, self.__name, value)
else:
- setattr(instance, self.__name, _ReList(value))
+ setattr(instance, self.__name, self.__type(value))
def __delete__(self, instance):
raise NotImplementedError('Cannot delete {} from {}'.format(
@@ -160,8 +177,8 @@ class _Options(object): # pylint:
disable=too-many-instance-attributes
env -- environment variables set for each test before run
"""
- include_filter = _ReListDescriptor('_include_filter')
- exclude_filter = _ReListDescriptor('_exclude_filter')
+ include_filter = _ReListDescriptor('_include_filter',
type_=_FilterReList)
+ exclude_filter = _ReListDescriptor('_exclude_filter',
type_=_FilterReList)
def __init__(self):
self.concurrent = True
diff --git a/framework/tests/options_tests.py
b/framework/tests/options_tests.py
index ec6318d..695935d 100644
--- a/framework/tests/options_tests.py
+++ b/framework/tests/options_tests.py
@@ -185,3 +185,17 @@ def test_options_clear():
test.clear()
nt.eq_(list(iter(baseline)), list(iter(test)))
+
+
+def test_filterrelist_set():
+ """options._FilterReList.__setitem__: replaces '/' with '.'"""
+ test = options._FilterReList(['foo'])
+ test[0] = 'foo/bar'
+ nt.eq_(test[0].pattern, 'foo.bar')
+
+
+def test_filterrelist_insert():
+ """options._FilterReList.insert: replaces '/' with '.'"""
+ test = options._FilterReList()
+ test.insert(0, 'foo/bar')
+ nt.eq_(test[0].pattern, 'foo.bar')
Reviewed-by: Glenn Kennard <[email protected]>
_______________________________________________
Piglit mailing list
[email protected]
http://lists.freedesktop.org/mailman/listinfo/piglit