Source code for sherpa.plot.testing

#
#  Copyright (C) 2023, 2024
#  MIT
#
#
#  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; either version 3 of the License, or
#  (at your option) any later version.
#
#  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.,
#  51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
#
'''Helper functions for testing the plots

'''
import numpy as np

from sherpa import plot
# This not the most elegant solution, but it makes sense to
# have an independent check here and not rely on what is
# done in the sherpa.plot.__init__ module, so that the tests
# stay independent of that particular implementation.
try:
    from sherpa.plot.pylab_backend import PylabBackend
    HAS_PYLAB = True
except ModuleNotFoundError:
    HAS_PYLAB = False

try:
    from sherpa.plot.bokeh_backend import BokehBackend
    HAS_BOKEH = True
except ModuleNotFoundError:
    HAS_BOKEH = False


__all__ = ('check_empty', 'check_full')


[docs] def check_empty(r, summary, nsummary=0): """Is this an 'empty' response? Parameters ---------- r : str The HTML response. summary : str The summary string to look for. nsummary : int, optional The number of lines in the detailed table. """ if (HAS_PYLAB and isinstance(plot.backend, PylabBackend)) or \ (HAS_BOKEH and isinstance(plot.backend, BokehBackend)): assert r is None return assert r is not None assert f"<summary>{summary} ({nsummary})</summary>" in r
[docs] def check_full(r, summary, label='', title='', nsummary=0, test_other=None): """Is this a 'full' response? This test runs different checks for functional (pylab and bokeh) backends and dummy backends that do no produce graphics. Parameters ---------- r : str The HTML response. summary : str The summary string to look for. label : str The label string to look for. title : str The title string to look for. nsummary : int, optional The number of lines in the detailed table. test_other : list of str, optional Usually dummy backends get tested for a list of strings including the label and title. However, in some cases, that is not appropriate and a list of strings can be passed to check one the existence of all those literal strings in the HTML response. """ assert r is not None if (HAS_PYLAB and isinstance(plot.backend, PylabBackend)) or \ (HAS_BOKEH and isinstance(plot.backend, BokehBackend)): assert f"<summary>{summary}</summary>" in r if (HAS_PYLAB and isinstance(plot.backend, PylabBackend)): assert "<svg " in r elif (HAS_BOKEH and isinstance(plot.backend, BokehBackend)): assert "BokehJS library" in r return assert '<svg ' not in r assert "BokehJS library" not in r if test_other is None: assert f"<summary>{summary} ({nsummary})</summary>" in r assert f'<div class="dataval">{label}</div>' in r assert f'<div class="dataval">{title}</div>' in r else: for line in test_other: assert line in r