From 8dc0e263dac8bf4074e48fcca593a00cadec03e0 Mon Sep 17 00:00:00 2001 From: Jason Gerard DeRose Date: Fri, 29 Aug 2008 03:48:33 +0000 Subject: [PATCH] 221: Added errors.IPATypeError exception; added new test_errors.py module with corresponding unit tests --- ipalib/errors.py | 20 ++++++++++++++++ ipalib/tests/test_errors.py | 46 +++++++++++++++++++++++++++++++++++++ 2 files changed, 66 insertions(+) create mode 100644 ipalib/tests/test_errors.py diff --git a/ipalib/errors.py b/ipalib/errors.py index a25df091a..70128f7ca 100644 --- a/ipalib/errors.py +++ b/ipalib/errors.py @@ -21,6 +21,26 @@ All custom errors raised by `ipalib` package. """ + +class IPATypeError(TypeError): + """ + TypeError subclass with standard message for easier debugging. + + Also has two custom attributes: + + ``type`` - The type being tested against. + ``value`` - The offending value that caused the exception. + """ + + format = 'need a %r; got %r' + + def __init__(self, type_, value): + assert type(value) is not type, 'no error: %r, %r' % (type_, value) + self.type = type_ + self.value = value + TypeError.__init__(self, self.format % (self.type, self.value)) + + class IPAError(Exception): """ Use this base class for your custom IPA errors unless there is a diff --git a/ipalib/tests/test_errors.py b/ipalib/tests/test_errors.py new file mode 100644 index 000000000..bca8d3a8b --- /dev/null +++ b/ipalib/tests/test_errors.py @@ -0,0 +1,46 @@ +# Authors: +# Jason Gerard DeRose +# +# Copyright (C) 2008 Red Hat +# see file 'COPYING' for use and warranty information +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License as +# published by the Free Software Foundation; version 2 only +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + +""" +Unit tests for `ipalib.errors` module. +""" + +from tstutil import raises, getitem, no_set, no_del, read_only, ClassChecker +from ipalib import errors + + +class test_IPATypeError(ClassChecker): + """ + Tests the `errors.IPATypeError` exception. + """ + _cls = errors.IPATypeError + + def test_class(self): + assert self.cls.__bases__ == (TypeError,) + + def test_init(self): + """ + Tests the `errors.IPATypeError.__init__` method. + """ + t = unicode + v = 'hello' + e = self.cls(t, v) + assert e.type is t + assert e.value is v + assert str(e) == 'need a %r; got %r' % (t, v)