import difflib import subprocess import sys from pathlib import Path import pytest import matplotlib as mpl from matplotlib import pyplot as plt from matplotlib.cbook import MatplotlibDeprecationWarning def test_pyplot_up_to_date(tmpdir): gen_script = Path(mpl.__file__).parents[2] / "tools/boilerplate.py" if not gen_script.exists(): pytest.skip("boilerplate.py not found") orig_contents = Path(plt.__file__).read_text() plt_file = tmpdir.join('pyplot.py') plt_file.write_text(orig_contents, 'utf-8') subprocess.run([sys.executable, str(gen_script), str(plt_file)], check=True) new_contents = plt_file.read_text('utf-8') if orig_contents != new_contents: diff_msg = '\n'.join( difflib.unified_diff( orig_contents.split('\n'), new_contents.split('\n'), fromfile='found pyplot.py', tofile='expected pyplot.py', n=0, lineterm='')) pytest.fail( "pyplot.py is not up-to-date. Please run " "'python tools/boilerplate.py' to update pyplot.py. " "This needs to be done from an environment where your " "current working copy is installed (e.g. 'pip install -e'd). " "Here is a diff of unexpected differences:\n%s" % diff_msg ) def test_copy_docstring_and_deprecators(recwarn): @mpl.cbook._rename_parameter("(version)", "old", "new") @mpl.cbook._make_keyword_only("(version)", "kwo") def func(new, kwo=None): pass @plt._copy_docstring_and_deprecators(func) def wrapper_func(new, kwo=None): pass wrapper_func(None) wrapper_func(new=None) wrapper_func(None, kwo=None) wrapper_func(new=None, kwo=None) assert not recwarn with pytest.warns(MatplotlibDeprecationWarning): wrapper_func(old=None) with pytest.warns(MatplotlibDeprecationWarning): wrapper_func(None, None) def test_pyplot_box(): fig, ax = plt.subplots() plt.box(False) assert not ax.get_frame_on() plt.box(True) assert ax.get_frame_on() plt.box() assert not ax.get_frame_on() plt.box() assert ax.get_frame_on() def test_stackplot_smoke(): # Small smoke test for stackplot (see #12405) plt.stackplot([1, 2, 3], [1, 2, 3]) def test_nrows_error(): with pytest.raises(TypeError): plt.subplot(nrows=1) with pytest.raises(TypeError): plt.subplot(ncols=1)