[Piglit] [PATCH 4/7] status.py: Adds a new status class and subclasses

Dylan Baker baker.dylan.c at gmail.com
Mon Oct 14 16:10:29 CEST 2013


On Sunday, October 13, 2013 11:13:48 PM Kenneth Graunke wrote:
> On 09/27/2013 02:39 PM, Dylan Baker wrote:
> > These status classes are intended to replace the string statuses
> > currently used by piglit summary.
> > 
> > They give a couple of very nice advantages, first, they can be directly
> > compared to each other to determine whether a status is worse than
> > another status. These statuses can also be compared to any object
> > implementing the __int__ magic method.
> > 
> > This will allow us to remove a number of special functions for sorting
> > representations of statuses.
> > 
> > v2: - Use larger numbers for the statuses, this should make adding
> > 
> >       addtional statuses easier, since there is room between the
> >       statuses.
> >     
> >     - Add a class for the "Not Run" status
> >     - Adds classes for dmesg-warn and dmesg-fail
> >     - Change statuses to match the standard set in the framework test
> > 
> > Signed-off-by: Dylan Baker <baker.dylan.c at gmail.com>
> > ---
> > 
> >  framework/status.py | 118
> >  ++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 118
> >  insertions(+)
> >  create mode 100644 framework/status.py
> > 
> > diff --git a/framework/status.py b/framework/status.py
> > new file mode 100644
> > index 0000000..43b807b
> > --- /dev/null
> > +++ b/framework/status.py
> > @@ -0,0 +1,118 @@
> > +# Copyright (c) 2013 Intel Corporation
> > +#
> > +# Permission is hereby granted, free of charge, to any person obtaining a
> > +# copy of this software and associated documentation files (the
> > "Software"), +# to deal in the Software without restriction, including
> > without limitation +# the rights to use, copy, modify, merge, publish,
> > distribute, sublicense, +# and/or sell copies of the Software, and to
> > permit persons to whom the +# Software is furnished to do so, subject to
> > the following conditions: +#
> > +# The above copyright notice and this permission notice (including the
> > next +# paragraph) shall be included in all copies or substantial
> > portions of the +# Software.
> > +#
> > +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
> > OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
> > MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
> >  IN NO EVENT SHALL +# THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
> > CLAIM, DAMAGES OR OTHER +# LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
> > TORT OR OTHERWISE, ARISING +# FROM, OUT OF OR IN CONNECTION WITH THE
> > SOFTWARE OR THE USE OR OTHER DEALINGS +# IN THE SOFTWARE.
> > +
> > +
> > +class Status(object):
> > +    """
> > +    A simple class for representing the output values of tests.
> > +
> > +    This is a base class, and should not be directly called. Instead a
> > child +    class should be created and called. This module provides 5 of
> > them: Skip, +    Pass, Warn, Fail, and Crash.
> 
> There are actually 8 with the dmesg ones :)

fixed

> 
> > +    """
> > +
> > +    # Using __slots__ allows us to implement the flyweight method,
> > limiting the +    # memory consumed for creating tens of thousands of
> > these objects. +    __slots__ = ['name', 'value']
> > +
> > +    def __init__(self):
> > +        raise NotImplementedError
> > +
> > +    def split(self, spliton):
> > +        return (self.name.split(spliton))
> > +
> > +    def __repr__(self):
> > +        return self.name
> > +
> > +    def __str__(self):
> > +        return str(self.name)
> > +
> > +    def __unicode__(self):
> > +        return unicode(self.name)
> > +
> > +    def __lt__(self, other):
> > +        return int(self) < int(other)
> > +
> > +    def __le__(self, other):
> > +        return int(self) <= int(other)
> > +
> > +    def __eq__(self, other):
> > +        return int(self) == int(other)
> > +
> > +    def __ne__(self, other):
> > +        return int(self) != int(other)
> > +
> > +    def __ge__(self, other):
> > +        return int(self) >= int(other)
> > +
> > +    def __gt__(self, other):
> > +        return int(self) > int(other)
> > +
> > +    def __int__(self):
> > +        return self.value
> 
> Since these somewhat arbitrary looking numbers determine the ordering
> from best to worst, you might want to import your comment from patch 1,
> which lists them in order.

done

> 
> With the trivial comment fix, this is
> Reviewed-by: Kenneth Graunke <kenneth at whitecape.org>
> 
> > +
> > +class NotRun(Status):
> > +    def __init__(self):
> > +        self.name = 'Not Run'
> > +        self.value = 0
> > +
> > +
> > +class Pass(Status):
> > +    def __init__(self):
> > +        self.name = 'pass'
> > +        self.value = 10
> > +
> > +
> > +class DmesgWarn(Status):
> > +    def __init__(self):
> > +        self.name = 'dmesg-warn'
> > +        self.value = 20
> > +
> > +
> > +class Warn(Status):
> > +    def __init__(self):
> > +        self.name = 'warn'
> > +        self.value = 25
> > +
> > +
> > +class DmesgFail(Status):
> > +    def __init__(self):
> > +        self.name = 'dmesg-fail'
> > +        self.value = 30
> > +
> > +
> > +class Fail(Status):
> > +    def __init__(self):
> > +        self.name = 'fail'
> > +        self.value = 35
> > +
> > +
> > +class Crash(Status):
> > +    def __init__(self):
> > +        self.name = 'crash'
> > +        self.value = 40
> > +
> > +
> > +class Skip(Status):
> > +    def __init__(self):
> > +        self.name = 'skip'
> > +        self.value = 50
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 490 bytes
Desc: This is a digitally signed message part.
URL: <http://lists.freedesktop.org/archives/piglit/attachments/20131014/f93c2904/attachment.pgp>


More information about the Piglit mailing list