diff --git a/src/formbridge/forms/declared_fields.py b/src/formbridge/forms/declared_fields.py index 0f86a2e..720e881 100644 --- a/src/formbridge/forms/declared_fields.py +++ b/src/formbridge/forms/declared_fields.py @@ -118,6 +118,12 @@ def _(item: DeclaredMetadata) -> Iterator[object]: return item.declares() +@metadata_declarations.register +def documentation_declarations(item: str) -> Iterator[object]: + """Annotation help text describes a field; it does not declare a text value.""" + return iter(()) + + def declarations(annotation: object) -> Iterator[object]: """What an annotation declares, most specific first. diff --git a/tests/test_declared_views.py b/tests/test_declared_views.py index f22947f..280b741 100644 --- a/tests/test_declared_views.py +++ b/tests/test_declared_views.py @@ -63,6 +63,14 @@ def test_metadata_that_declares_more_is_read_through_its_own_declaration(): assert next(iter(declarations(Annotated[str, Number()]))) is Number +@pytest.mark.parametrize("value_type", (str, int, bool)) +def test_documentation_does_not_replace_the_value_or_prepared_declaration(value_type): + assert tuple(declarations(Annotated[value_type, "Field help"])) == tuple(declarations(value_type)) + annotation = Annotated[value_type, "Field help", Prepared(Count)] + assert next(declarations(annotation)) is Count + assert FieldWidget.showing(declarations(annotation)) is CountWidget + + def test_a_family_asked_below_its_root_answers_from_its_own_tree(): assert NumberWidget.showing(Count.__mro__) is CountWidget with pytest.raises(LookupError):