/notify_user/pymodules/python2.7/lib/python/matplotlib-1.5.1-py2.7-linux-x86_64.egg/matplotlib/testing/__init__.py
Python | 107 lines | 83 code | 6 blank | 18 comment | 1 complexity | 9ab60a9f48eab369f0ab7472442b272a MD5 | raw file
- from __future__ import (absolute_import, division, print_function,
- unicode_literals)
- import warnings
- from contextlib import contextmanager
- from matplotlib.cbook import is_string_like, iterable
- from matplotlib import rcParams, rcdefaults, use
- def _is_list_like(obj):
- """Returns whether the obj is iterable and not a string"""
- return not is_string_like(obj) and iterable(obj)
- # stolen from pandas
- @contextmanager
- def assert_produces_warning(expected_warning=Warning, filter_level="always",
- clear=None):
- """
- Context manager for running code that expects to raise (or not raise)
- warnings. Checks that code raises the expected warning and only the
- expected warning. Pass ``False`` or ``None`` to check that it does *not*
- raise a warning. Defaults to ``exception.Warning``, baseclass of all
- Warnings. (basically a wrapper around ``warnings.catch_warnings``).
- >>> import warnings
- >>> with assert_produces_warning():
- ... warnings.warn(UserWarning())
- ...
- >>> with assert_produces_warning(False):
- ... warnings.warn(RuntimeWarning())
- ...
- Traceback (most recent call last):
- ...
- AssertionError: Caused unexpected warning(s): ['RuntimeWarning'].
- >>> with assert_produces_warning(UserWarning):
- ... warnings.warn(RuntimeWarning())
- Traceback (most recent call last):
- ...
- AssertionError: Did not see expected warning of class 'UserWarning'.
- ..warn:: This is *not* thread-safe.
- """
- with warnings.catch_warnings(record=True) as w:
- if clear is not None:
- # make sure that we are clearning these warnings
- # if they have happened before
- # to guarantee that we will catch them
- if not _is_list_like(clear):
- clear = [clear]
- for m in clear:
- try:
- m.__warningregistry__.clear()
- except:
- pass
- saw_warning = False
- warnings.simplefilter(filter_level)
- yield w
- extra_warnings = []
- for actual_warning in w:
- if (expected_warning and issubclass(actual_warning.category,
- expected_warning)):
- saw_warning = True
- else:
- extra_warnings.append(actual_warning.category.__name__)
- if expected_warning:
- assert saw_warning, ("Did not see expected warning of class %r."
- % expected_warning.__name__)
- assert not extra_warnings, ("Caused unexpected warning(s): %r."
- % extra_warnings)
- def setup():
- # The baseline images are created in this locale, so we should use
- # it during all of the tests.
- import locale
- import warnings
- from matplotlib.backends import backend_agg, backend_pdf, backend_svg
- try:
- locale.setlocale(locale.LC_ALL, str('en_US.UTF-8'))
- except locale.Error:
- try:
- locale.setlocale(locale.LC_ALL, str('English_United States.1252'))
- except locale.Error:
- warnings.warn(
- "Could not set locale to English/United States. "
- "Some date-related tests may fail")
- use('Agg', warn=False) # use Agg backend for these tests
- # These settings *must* be hardcoded for running the comparison
- # tests and are not necessarily the default values as specified in
- # rcsetup.py
- rcdefaults() # Start with all defaults
- rcParams['font.family'] = 'Bitstream Vera Sans'
- rcParams['text.hinting'] = False
- rcParams['text.hinting_factor'] = 8
- # Clear the font caches. Otherwise, the hinting mode can travel
- # from one test to another.
- backend_agg.RendererAgg._fontd.clear()
- backend_pdf.RendererPdf.truetype_font_cache.clear()
- backend_svg.RendererSVG.fontd.clear()