Fix variant initialization logic to allow proper handling of values="*" (#40406)

Co-authored-by: psakiev <psakiev@sandia.gov>
Co-authored-by: tjfulle <tjfulle@users.noreply.github.com>
This commit is contained in:
Tim Fuller 2023-12-22 08:10:43 -07:00 committed by GitHub
parent ec9d08e71e
commit 4540980337
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
2 changed files with 38 additions and 1 deletions

View file

@ -734,3 +734,40 @@ def test_conditional_value_comparable_to_bool(other):
value = spack.variant.Value("98", when="@1.0")
comparison = value == other
assert comparison is False
@pytest.mark.regression("40405")
def test_wild_card_valued_variants_equivalent_to_str():
"""
There was a bug prioro to PR 40406 in that variants with wildcard values "*"
were being overwritten in the variant constructor.
The expected/appropriate behavior is for it to behave like value=str and this
test demonstrates that the two are now equivalent
"""
str_var = spack.variant.Variant(
name="str_var",
default="none",
values=str,
description="str variant",
multi=True,
validator=None,
)
wild_var = spack.variant.Variant(
name="wild_var",
default="none",
values="*",
description="* variant",
multi=True,
validator=None,
)
several_arbitrary_values = ("doe", "re", "mi")
# "*" case
wild_output = wild_var.make_variant(several_arbitrary_values)
wild_var.validate_or_raise(wild_output)
# str case
str_output = str_var.make_variant(several_arbitrary_values)
str_var.validate_or_raise(str_output)
# equivalence each instance already validated
assert str_output.value == wild_output.value

View file

@ -75,7 +75,7 @@ def isa_type(v):
self.single_value_validator = isa_type
if callable(values):
elif callable(values):
# If 'values' is a callable, assume it is a single value
# validator and reset the values to be explicit during debug
self.single_value_validator = values