You cannot select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
	
	
		
			76 lines
		
	
	
		
			2.6 KiB
		
	
	
	
		
			Python
		
	
			
		
		
	
	
			76 lines
		
	
	
		
			2.6 KiB
		
	
	
	
		
			Python
		
	
import os
 | 
						|
from pathlib import Path
 | 
						|
import re
 | 
						|
import sys
 | 
						|
 | 
						|
import pytest
 | 
						|
 | 
						|
import matplotlib.pyplot as plt
 | 
						|
from matplotlib.testing import subprocess_run_for_testing
 | 
						|
from matplotlib.testing._markers import needs_usetex
 | 
						|
from matplotlib.texmanager import TexManager
 | 
						|
 | 
						|
 | 
						|
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_for_testing(
 | 
						|
        [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 == ""
 |