1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374 |
- import os
- from pathlib import Path
- import re
- import subprocess
- import sys
- import matplotlib.pyplot as plt
- from matplotlib.texmanager import TexManager
- from matplotlib.testing._markers import needs_usetex
- import pytest
- def test_fontconfig_preamble():
- """Test that the preamble is included in the source."""
- plt.rcParams['text.usetex'] = True
- src1 = TexManager()._get_tex_source("", fontsize=12)
- plt.rcParams['text.latex.preamble'] = '\\usepackage{txfonts}'
- src2 = TexManager()._get_tex_source("", fontsize=12)
- assert src1 != src2
- @pytest.mark.parametrize(
- "rc, preamble, family", [
- ({"font.family": "sans-serif", "font.sans-serif": "helvetica"},
- r"\usepackage{helvet}", r"\sffamily"),
- ({"font.family": "serif", "font.serif": "palatino"},
- r"\usepackage{mathpazo}", r"\rmfamily"),
- ({"font.family": "cursive", "font.cursive": "zapf chancery"},
- r"\usepackage{chancery}", r"\rmfamily"),
- ({"font.family": "monospace", "font.monospace": "courier"},
- r"\usepackage{courier}", r"\ttfamily"),
- ({"font.family": "helvetica"}, r"\usepackage{helvet}", r"\sffamily"),
- ({"font.family": "palatino"}, r"\usepackage{mathpazo}", r"\rmfamily"),
- ({"font.family": "zapf chancery"},
- r"\usepackage{chancery}", r"\rmfamily"),
- ({"font.family": "courier"}, r"\usepackage{courier}", r"\ttfamily")
- ])
- def test_font_selection(rc, preamble, family):
- plt.rcParams.update(rc)
- tm = TexManager()
- src = Path(tm.make_tex("hello, world", fontsize=12)).read_text()
- assert preamble in src
- assert [*re.findall(r"\\\w+family", src)] == [family]
- @needs_usetex
- def test_unicode_characters():
- # Smoke test to see that Unicode characters does not cause issues
- # See #23019
- plt.rcParams['text.usetex'] = True
- fig, ax = plt.subplots()
- ax.set_ylabel('\\textit{Velocity (\N{DEGREE SIGN}/sec)}')
- ax.set_xlabel('\N{VULGAR FRACTION ONE QUARTER}Öøæ')
- fig.canvas.draw()
- # But not all characters.
- # Should raise RuntimeError, not UnicodeDecodeError
- with pytest.raises(RuntimeError):
- ax.set_title('\N{SNOWMAN}')
- fig.canvas.draw()
- @needs_usetex
- def test_openin_any_paranoid():
- completed = subprocess.run(
- [sys.executable, "-c",
- 'import matplotlib.pyplot as plt;'
- 'plt.rcParams.update({"text.usetex": True});'
- 'plt.title("paranoid");'
- 'plt.show(block=False);'],
- env={**os.environ, 'openin_any': 'p'}, check=True, capture_output=True)
- assert completed.stderr == b""
|