diff --git a/petsctools/options.py b/petsctools/options.py index 413c2bd..1c6b078 100644 --- a/petsctools/options.py +++ b/petsctools/options.py @@ -133,8 +133,10 @@ def _warn_unused_options(all_options: Iterable, used_options: Iterable, def _validate_prefix(prefix): """Valid prefixes are strings ending with an underscore. """ + if prefix is None: + raise ValueError("Cannot validate None as a prefix") prefix = str(prefix) - if not prefix.endswith("_"): + if prefix and not prefix.endswith("_"): prefix += "_" return prefix diff --git a/tests/test_options.py b/tests/test_options.py index 67527fc..a4d5130 100644 --- a/tests/test_options.py +++ b/tests/test_options.py @@ -84,18 +84,22 @@ def test_options_prefix(): options = petsctools.OptionsManager({}) assert options.options_prefix.startswith("petsctools_") + # User defined empty prefix + options = petsctools.OptionsManager({}, options_prefix='') + assert options.options_prefix == "" + # User defined default prefix options = petsctools.OptionsManager({}, default_prefix="firedrake") assert options.options_prefix.startswith("firedrake_") # Explicit prefix overrides default prefix options = petsctools.OptionsManager({}, options_prefix="myobj") - assert options.options_prefix.startswith("myobj_") + assert options.options_prefix == "myobj_" # Explicit prefix overrides default prefix options = petsctools.OptionsManager({}, options_prefix="myobj", default_prefix="firedrake") - assert options.options_prefix.startswith("myobj_") + assert options.options_prefix == "myobj_" @pytest.mark.skipnopetsc4py