diff --git a/completions/postfix b/completions/postfix index 8d08f538976..f96055027fa 100644 --- a/completions/postfix +++ b/completions/postfix @@ -17,9 +17,11 @@ _postfix() esac if [[ $cur == -* ]]; then - # TODO: doesn't seem to work; the usage message doesn't get output - # if we try to grep it, it's only output on the console? - COMPREPLY=($(compgen -W '$(_parse_usage "$1")' -- "$cur")) + COMPREPLY=($( + compgen -W \ + '$(_bashcomp_try_faketty "$1" --help 2>&1 | _parse_usage -)' \ + -- "$cur" + )) return fi diff --git a/test/t/test_postfix.py b/test/t/test_postfix.py index 67a898d1217..10020b0b2b3 100644 --- a/test/t/test_postfix.py +++ b/test/t/test_postfix.py @@ -1,3 +1,5 @@ +import getpass + import pytest @@ -6,7 +8,15 @@ class TestPostfix: def test_1(self, completion): assert completion - @pytest.mark.xfail # see TODO in completion - @pytest.mark.complete("postfix -", require_cmd=True) - def test_2(self, completion): + @pytest.mark.xfail( + getpass.getuser() != "root", + reason="Likely outputs usage only for root", + ) + @pytest.mark.complete( + "postfix -", + require_cmd=True, + xfail="! type unbuffer &>/dev/null", + sleep_after_tab=2, # postfix is slow to output usage + ) + def test_options(self, completion): assert completion