[Piglit] [PATCH 3/3] framework/options: Handle '/' in -t and -x options

Glenn Kennard glenn.kennard at gmail.com
Fri Nov 20 17:55:32 PST 2015


On Sat, 21 Nov 2015 02:10:03 +0100, <baker.dylan.c at gmail.com> wrote:

> From: Dylan Baker <baker.dylan.c at gmail.com>
>
> 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 <dylanx.c.baker at intel.com>
> ---
>  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 <glenn.kennard at gmail.com>


More information about the Piglit mailing list