Subject: text-property-search-forward does not behave as advertized

From: Nicolas Graner <[email-masked]>
Date: Fri, 02 Apr 2021 16:08:17 +0200

I found some discrepancies between the behavior of
text-property-search-forward and text-property-search-backward, and what
the doc says they should do. I am not sure whether they are bugs or
documentation errors, except for the last one below which is clearly a
bug.

Here is how to reproduce starting from an empty buffer, tested on
28.0.50. I have inserted comments with my observations.

(insert "12345678")
(put-text-property 3 6 'foo 'bar)
(goto-char 1)
(text-property-search-forward 'foo 'bar t)
;; moves point to 6 and returns range 3 to 6
;; Doc says it should move the point to start of range, but it
;; consistently moves to end of range.
(goto-char 1)
(text-property-search-forward 'foo 'bar nil)
;; moves point to 3 and returns range 1 to 3, whre property foo is nil.
;; Doc says: with PREDICATE nil, a value will match if it is
;; non-nil and is NOT ‘equal’ to VALUE.
;; In fact, the condition "it is non-nil" is apparently ignored.
(goto-char 9)
(text-property-search-backward 'foo 'bar t)
;; moves point to 3 and returns range 3 to 6
;; As above, consistently moves to beginning of range instead of end.
(goto-char 7)
(text-property-search-backward 'foo 'bar t)
;; returns nil. This one is really weird, considering it works OK from
;; position 6 or 8. As if there was something special when you start 1
;; after the end of a range.

Hope this helps,
Nicolas