--- a +++ b/tests/enums/test_codecs.py @@ -0,0 +1,71 @@ +import copy +import warnings + +import pytest + +import wsic + + +@pytest.fixture() +def _register_codecs(): + """Register codecs for the duration of the test function.""" + # Register codecs + import numcodecs + + from wsic.codecs import register_codecs + + codec_registry_backup = copy.deepcopy(numcodecs.registry.codec_registry) + register_codecs() + + # Yield to the test function + yield + + # Teardown + numcodecs.registry.codec_registry = codec_registry_backup + + +def test_condensed(): + """Test that the condensed string contains not spaces.""" + for value in wsic.enums.Codec: + condensed = value.condensed() + assert " " not in condensed + + +def test_from_string_fail(): + with pytest.raises(ValueError, match="Unknown codec"): + wsic.enums.Codec.from_string("unknown") + + +def test_from_tiff_fail(): + with pytest.raises(ValueError, match="Unknown TIFF compression"): + wsic.enums.Codec.from_tiff(1234) + + +@pytest.mark.usefixtures("_register_codecs") +@pytest.mark.parametrize("codec", wsic.enums.Codec) +def test_to_numcodecs_config(codec): + import numcodecs + + # Skip unsupported codecs + if codec in (wsic.enums.Codec.LZ77,): + return + try: + config = codec.to_numcodecs_config() + except ValueError: + warnings.warn(f"{codec} is not supported.", stacklevel=2) + return + + # Skip if NONE + if codec is wsic.enums.Codec.NONE: + return + assert "id" in config + + # JPEG200 special cases + if codec in (wsic.enums.Codec.JPEG2000, wsic.enums.Codec.J2K): + assert "codecformat" in config + numcodecs.get_codec(config) + + +def test_to_numcodecs_config_fail(): + with pytest.raises(ValueError, match="not a supported codec"): + wsic.enums.Codec.LZ77.to_numcodecs_config()