File: C:/Users/fred/anaconda3/Lib/site-packages/astropy/cosmology/_io/tests/test_latex.py
# Licensed under a 3-clause BSD style license - see LICENSE.rst
import pytest
from astropy.cosmology._io.latex import _FORMAT_TABLE, write_latex
from astropy.io.registry.base import IORegistryError
from astropy.table import QTable, Table
from .base import ReadWriteDirectTestBase, ReadWriteTestMixinBase
class WriteLATEXTestMixin(ReadWriteTestMixinBase):
"""
Tests for a Cosmology[Write] with ``format="latex"``.
This class will not be directly called by :mod:`pytest` since its name does
not begin with ``Test``. To activate the contained tests this class must
be inherited in a subclass. Subclasses must define a :func:`pytest.fixture`
``cosmo`` that returns/yields an instance of a |Cosmology|.
See ``TestCosmology`` for an example.
"""
def test_to_latex_failed_cls(self, write, tmp_path):
"""Test failed table type."""
fp = tmp_path / "test_to_latex_failed_cls.tex"
with pytest.raises(TypeError, match="'cls' must be"):
write(fp, cls=list)
@pytest.mark.parametrize("tbl_cls", [QTable, Table])
def test_to_latex_cls(self, write, tbl_cls, tmp_path):
fp = tmp_path / "test_to_latex_cls.tex"
write(fp, cls=tbl_cls)
def test_latex_columns(self, write, tmp_path):
fp = tmp_path / "test_rename_latex_columns.tex"
write(fp, latex_names=True)
tbl = QTable.read(fp)
# asserts each column name has not been reverted yet
# For now, Cosmology class and name are stored in first 2 slots
for column_name in tbl.colnames[2:]:
assert column_name in _FORMAT_TABLE.values()
def test_write_latex_invalid_path(self, write):
"""Test passing an invalid path"""
invalid_fp = ""
with pytest.raises(FileNotFoundError, match="No such file or directory"):
write(invalid_fp, format="ascii.latex")
def test_write_latex_false_overwrite(self, write, tmp_path):
"""Test to write a LaTeX file without overwriting an existing file"""
# Test that passing an invalid path to write_latex() raises a IOError
fp = tmp_path / "test_write_latex_false_overwrite.tex"
write(fp)
with pytest.raises(OSError, match="overwrite=True"):
write(fp, overwrite=False)
def test_write_latex_unsupported_format(self, write, tmp_path):
"""Test for unsupported format"""
fp = tmp_path / "test_write_latex_unsupported_format.tex"
invalid_format = "unsupported"
with pytest.raises((ValueError, IORegistryError)) as exc_info:
pytest.raises(ValueError, match="format must be 'ascii.latex'")
pytest.raises(IORegistryError, match="No writer defined for format")
write(fp, format=invalid_format)
class TestReadWriteLaTex(ReadWriteDirectTestBase, WriteLATEXTestMixin):
"""
Directly test ``write_latex``.
These are not public API and are discouraged from use, in favor of
``Cosmology.write(..., format="latex")``, but should be
tested regardless b/c they are used internally.
"""
def setup_class(self):
self.functions = {"write": write_latex}
def test_rename_direct_latex_columns(self, write, tmp_path):
"""Tests renaming columns"""
fp = tmp_path / "test_rename_latex_columns.tex"
write(fp, latex_names=True)
tbl = QTable.read(fp)
# asserts each column name has not been reverted yet
for column_name in tbl.colnames[2:]:
# for now, Cosmology as metadata and name is stored in first 2 slots
assert column_name in _FORMAT_TABLE.values()