diff options
Diffstat (limited to 'tests/test_string_component_transform_factory.py')
-rw-r--r-- | tests/test_string_component_transform_factory.py | 17 |
1 files changed, 16 insertions, 1 deletions
diff --git a/tests/test_string_component_transform_factory.py b/tests/test_string_component_transform_factory.py index bc48d5b..40b4d34 100644 --- a/tests/test_string_component_transform_factory.py +++ b/tests/test_string_component_transform_factory.py @@ -5,7 +5,7 @@ from functools import partial from typing import Any, Callable, FrozenSet, Union import pytest -from hypothesis import example, given +from hypothesis import assume, example, given from hypothesis.strategies import floats, integers, text from natsort.compat.fastnumbers import try_float, try_int from natsort.compat.locale import get_strxfrm @@ -32,6 +32,20 @@ def no_null(x: str) -> bool: return "\0" not in x +def input_is_ok_with_locale(x: str) -> bool: + """Ensure this input won't cause locale.strxfrm to barf""" + # On FreeBSD, locale.strxfrm raises an OSError on input like 'Å'. + # You read that right - an *OSError* for invalid input. + # We cannot really fix that, so we just filter out any value + # that could cause locale.strxfrm to barf with this function. + try: + get_strxfrm()(x) + except OSError: + return False + else: + return True + + @pytest.mark.parametrize( "alg, example_func", [ @@ -77,6 +91,7 @@ def test_string_component_transform_factory( ) -> None: string_component_transform_func = string_component_transform_factory(alg) x = str(x) + assume(input_is_ok_with_locale(x)) # handle broken locale lib on BSD. try: assert list(string_component_transform_func(x)) == list(example_func(x)) except ValueError as e: # handle broken locale lib on BSD. |