| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596 |
- import os
- import subprocess
- import sys
- from unittest.mock import patch
- import pytest
- import matplotlib
- from matplotlib.testing import subprocess_run_for_testing
- @pytest.mark.parametrize('version_str, version_tuple', [
- ('3.5.0', (3, 5, 0, 'final', 0)),
- ('3.5.0rc2', (3, 5, 0, 'candidate', 2)),
- ('3.5.0.dev820+g6768ef8c4c', (3, 5, 0, 'alpha', 820)),
- ('3.5.0.post820+g6768ef8c4c', (3, 5, 1, 'alpha', 820)),
- ])
- def test_parse_to_version_info(version_str, version_tuple):
- assert matplotlib._parse_to_version_info(version_str) == version_tuple
- @pytest.mark.skipif(sys.platform == "win32",
- reason="chmod() doesn't work as is on Windows")
- @pytest.mark.skipif(sys.platform != "win32" and os.geteuid() == 0,
- reason="chmod() doesn't work as root")
- def test_tmpconfigdir_warning(tmp_path):
- """Test that a warning is emitted if a temporary configdir must be used."""
- mode = os.stat(tmp_path).st_mode
- try:
- os.chmod(tmp_path, 0)
- proc = subprocess_run_for_testing(
- [sys.executable, "-c", "import matplotlib"],
- env={**os.environ, "MPLCONFIGDIR": str(tmp_path)},
- stderr=subprocess.PIPE, text=True, check=True)
- assert "set the MPLCONFIGDIR" in proc.stderr
- finally:
- os.chmod(tmp_path, mode)
- def test_importable_with_no_home(tmp_path):
- subprocess_run_for_testing(
- [sys.executable, "-c",
- "import pathlib; pathlib.Path.home = lambda *args: 1/0; "
- "import matplotlib.pyplot"],
- env={**os.environ, "MPLCONFIGDIR": str(tmp_path)}, check=True)
- def test_use_doc_standard_backends():
- """
- Test that the standard backends mentioned in the docstring of
- matplotlib.use() are the same as in matplotlib.rcsetup.
- """
- def parse(key):
- backends = []
- for line in matplotlib.use.__doc__.split(key)[1].split('\n'):
- if not line.strip():
- break
- backends += [e.strip().lower() for e in line.split(',') if e]
- return backends
- from matplotlib.backends import BackendFilter, backend_registry
- assert (set(parse('- interactive backends:\n')) ==
- set(backend_registry.list_builtin(BackendFilter.INTERACTIVE)))
- assert (set(parse('- non-interactive backends:\n')) ==
- set(backend_registry.list_builtin(BackendFilter.NON_INTERACTIVE)))
- def test_importable_with__OO():
- """
- When using -OO or export PYTHONOPTIMIZE=2, docstrings are discarded,
- this simple test may prevent something like issue #17970.
- """
- program = (
- "import matplotlib as mpl; "
- "import matplotlib.pyplot as plt; "
- "import matplotlib.cbook as cbook; "
- "import matplotlib.patches as mpatches"
- )
- subprocess_run_for_testing(
- [sys.executable, "-OO", "-c", program],
- env={**os.environ, "MPLBACKEND": ""}, check=True
- )
- @patch('matplotlib.subprocess.check_output')
- def test_get_executable_info_timeout(mock_check_output):
- """
- Test that _get_executable_info raises ExecutableNotFoundError if the
- command times out.
- """
- mock_check_output.side_effect = subprocess.TimeoutExpired(cmd=['mock'], timeout=30)
- with pytest.raises(matplotlib.ExecutableNotFoundError, match='Timed out'):
- matplotlib._get_executable_info.__wrapped__('inkscape')
|