Files
wehub-resource-sync 3454a55636
cffconvert / validate (push) Has been cancelled
ci-workflow / pre-commit (push) Has been cancelled
ci-workflow / Minimal NLTK Download Test (macos-latest) (push) Has been cancelled
ci-workflow / Minimal NLTK Download Test (ubuntu-latest) (push) Has been cancelled
ci-workflow / Minimal NLTK Download Test (windows-latest) (push) Has been cancelled
ci-workflow / Python 3.10 on macos-latest (push) Has been cancelled
ci-workflow / Python 3.11 on macos-latest (push) Has been cancelled
ci-workflow / Python 3.12 on macos-latest (push) Has been cancelled
ci-workflow / Python 3.13 on macos-latest (push) Has been cancelled
ci-workflow / Python 3.14 on macos-latest (push) Has been cancelled
ci-workflow / Python 3.14t on macos-latest (push) Has been cancelled
ci-workflow / Python 3.10 on ubuntu-latest (push) Has been cancelled
ci-workflow / Python 3.11 on ubuntu-latest (push) Has been cancelled
ci-workflow / Python 3.12 on ubuntu-latest (push) Has been cancelled
ci-workflow / Python 3.13 on ubuntu-latest (push) Has been cancelled
ci-workflow / Python 3.14 on ubuntu-latest (push) Has been cancelled
ci-workflow / Python 3.14t on ubuntu-latest (push) Has been cancelled
ci-workflow / Python 3.10 on windows-latest (push) Has been cancelled
ci-workflow / Python 3.11 on windows-latest (push) Has been cancelled
ci-workflow / Python 3.12 on windows-latest (push) Has been cancelled
ci-workflow / Python 3.13 on windows-latest (push) Has been cancelled
ci-workflow / Python 3.14 on windows-latest (push) Has been cancelled
chore: import upstream snapshot with attribution
2026-07-13 12:46:15 +08:00

61 lines
2.1 KiB
Python

"""
Unit tests for nltk.cli — the `nltk` command-line entry point.
Regression test for https://github.com/nltk/nltk/issues/3342:
``-l`` was declared as the short option name for both ``--language``
and ``--preserve-line`` on the ``nltk tokenize`` command, which made
click emit a ``"The parameter -l is used more than once"`` UserWarning
and produced an inconsistent help message. The fix renames the short
flag for ``--preserve-line`` to ``-p``.
"""
import warnings
from click.testing import CliRunner
from nltk.cli import cli
def _invoke_help():
runner = CliRunner()
return runner.invoke(cli, ["tokenize", "--help"])
def test_tokenize_help_has_no_duplicate_short_options():
"""Each short option in `nltk tokenize --help` must be declared once.
Regression for #3342: `-l` was used both for `--language` and for
`--preserve-line`. We assert that every `-x,` short flag appearing in
the help output is unique.
"""
# Promote the click UserWarning that flags duplicate short options
# into a hard failure for this test, so a future regression
# (re-introducing the same short flag for two options) is caught here
# rather than silently shipped.
with warnings.catch_warnings():
warnings.simplefilter("error", UserWarning)
result = _invoke_help()
assert result.exit_code == 0, result.output
# Extract every `-x,` short-option marker from the help text. Click
# always renders short options before long ones in the form `-x, --long`.
import re
short_opts = re.findall(r"\s(-[a-zA-Z]),\s+--", result.output)
duplicates = {opt for opt in short_opts if short_opts.count(opt) > 1}
assert not duplicates, (
f"duplicated short options in `nltk tokenize --help`: {duplicates}\n"
f"full help output:\n{result.output}"
)
def test_tokenize_preserve_line_short_flag_is_p():
"""`--preserve-line` is documented under its renamed short flag `-p`.
Pinning the new short flag prevents an accidental rename back to `-l`.
"""
result = _invoke_help()
assert result.exit_code == 0, result.output
assert "-p, --preserve-line" in result.output, result.output