* test/lisp/erc/resources/erc-d/erc-d.el (erc-d-server-fqdn,
erc-d--initialize-client, erc-d--log, erc-d--send, erc-d--filter,
erc-d-run): Add new variable and use it. Also optionally accept
keyword arguments in `erc-d-run'.
* test/lisp/erc/resources/erc-d/erc-d-tests.el
(erc-d-run-direct-foreign-protocol): Add test demoing newline-only
line-wise protocol.
* test/lisp/erc/resources/erc-d/resources/foreign.eld: New file.
* lisp/erc/erc.el (erc-password): Deprecate variable only used by
`erc-select-read-args'. Server passwords are primarily used as
surrogates for other forms of authentication. Such use is common but
nonstandard and often discouraged in favor of the de facto standard,
SASL. Folks in the habit of invoking `erc(-tls)' interactively should
be encouraged to use auth-source instead.
(erc-select-read-args): Before this change, `erc-select-read-args'
offered to use the value of a non-nil `erc-password' as the :password
argument for `erc' and `erc-tls', referring to it as the "default"
password. And when `erc-prompt-for-password' was nil and
`erc-password' wasn't, the latter was passed along unconditionally.
This only further complicated an already confusing situation for new
users, who in most cases shouldn't be worried about sending a PASS
command at all. Until SASL arrives, they should provide server
passwords manually or learn to use auth-source.
(erc-auth-source-server-function, erc-auth-source-join-function): New
user options for retrieving a password externally, ostensibly by
calling `auth-source-search'.
(erc--auth-source-determine-params-defaults): New helper for
`erc--auth-source-search' with potential for exporting publicly in the
future. Favors :host and :port fields above others. Prioritizes
network IDs over announced servers and dialed endpoints.
(erc--auth-source-determine-params-merge): Add new function for
merging contextual and default parameters. This is another contender
for possible exporting.
(erc--auth-source-search): New function for consulting auth-source and
sorting the result as filtered and prioritized by the previously
mentioned helpers.
(erc-auth-source-search): New function to serve as default
value for auth-source query-function options.
(erc-server-join-channel): Use user option for consulting auth-source
facility. Also accept nil for first argument (instead of server).
(erc-cmd-JOIN): Use above-mentioned facilities when joining new
channel. Omit server when calling `erc-server-join-channel'. Don't
filter target buffers twice. Don't call `switch-to-buffer', which
would create phantom buffers with names like target/server that were
never used. IOW, only switch to existing target buffers.
(erc--compute-server-password): Add new helper function for
determining password.
(erc-open, erc-determine-parameters): Move password figuring from the
first to the latter.
* lisp/erc/erc-services.el
(erc-auth-source-services-function): Add new option for consulting
auth-source in a NickServ context.
(erc-nickserv-get-password): Pass network-context ID, when looking up
password in `erc-nickserv-passwords' and when formatting prompt for
user input.
(erc-nickserv-passwords): Add comment to custom option definition type
tag.
* test/lisp/erc/erc-services-tests.el: Add new test file for above
changes. For now, stash auth-source-related tests here until a
suitable home can be found.
* lisp/erc/erc-join.el (erc-autojoin--join): Don't pass session-like
entity from `erc-autojoin-channels-alist' match to
`erc-server-join-channel'. Allow that function to decide for itself
which host to look up if necessary.
* test/lisp/erc/resources/base/auth-source/foonet.eld: New file.
* test/lisp/erc/resources/base/auth-source/nopass.eld: New file.
* test/lisp/erc/resources/erc-scenarios-common.el: New file.
* test/lisp/erc/resources/services/auth-source/libera.eld: New file.
* test/lisp/erc/erc-scenarios-auth-source.el: New file.
* test/lisp/erc/erc-scenarios-base-reuse-buffers.el: New file.
* test/lisp/erc/erc-scenarios-join-auth-source.el: New file.
* test/lisp/erc/resources/base/reuse-buffers/channel/barnet.eld: New file.
* test/lisp/erc/resources/base/reuse-buffers/channel/foonet.eld: New file.
* test/lisp/erc/resources/join/auth-source/foonet.eld: New file.
(Bug#48598)
* lisp/erc/erc-join.el (erc-autojoin-server-match): Favor network
identities, falling back on old definition.
(erc-autojoin--join): Add new helper containing common code from
hookees `erc-autojoin-after-ident' and `erc-autojoin-channels'.
(erc-autojoin-after-ident, erc-autojoin-channels): No longer make a
point of returning nil because the hooks they're registered on,
`erc-nickserv-identified-hook' and `erc-after-connect', don't stop on
success.
(erc-autojoin--mutate): Add helper for `erc-autojoin-add' and
`erc-autojoin-remove'.
(erc-autojoin-add, erc-autojoin-remove): Favor given network
identities, over networks, when matching keys for
`erc-autojoin-channels-alist'.
* test/lisp/erc/erc-scenarios-base-reconnect.el: New file.
* test/lisp/erc/erc-scenarios-join-netid-newcmd-id.el: New file.
* test/lisp/erc/erc-scenarios-join-netid-newcmd.el: New file.
* test/lisp/erc/erc-scenarios-join-netid-recon-id.el: New file.
* test/lisp/erc/erc-scenarios-join-netid-recon.el: New file.
* test/lisp/erc/resources/erc-scenarios-common.el: New file.
* test/lisp/erc/resources/join/legacy/foonet.eld: New file.
* test/lisp/erc/resources/join/network-id/barnet.eld: New file.
* test/lisp/erc/resources/join/network-id/foonet-again.eld: New file.
* test/lisp/erc/resources/join/network-id/foonet.eld: New file.
* test/lisp/erc/resources/join/reconnect/foonet-again.eld: New file.
* test/lisp/erc/resources/join/reconnect/foonet.eld: New file.
* lisp/erc/erc-backend.el (erc-server-JOIN): Use `erc--open-target'
instead of `erc-join'.
(erc-server-PRIVMSG): Don't call `erc-auto-query' at all, and instead
borrow the portion of its logic that detects when a query buffer
should be created instead of a channel buffer.
* lisp/erc/erc.el (erc-cmd-QUERY): Update the mode line explicitly
after calling `erc-query' in case it's needed after `erc-setup-buffer'
runs. Simplify.
(erc-query, erc--open-target): Replace uses of `erc-query'
with `erc--open-target' and make the former obsolete. Don't call
`erc-update-mode-line' because `erc-open' already does that.
(erc-auto-query): Make this function obsolete. It was previously only
used in erc-backend.el and only sewed confusion.
(erc-query-on-unjoined-chan-privmsg): Add note questioning its role.
It was previously only used by the now deprecated `erc-auto-query'.
* test/lisp/erc/erc-scenarios-misc.el
(erc-scenarios-base-mask-target-routing): Add test for server masks.
* test/lisp/erc/resources/base/mask-target-routing/foonet.eld: New file.
* test/lisp/erc/erc-scenarios-base-association-nick.el: New file.
* test/lisp/erc/erc-scenarios-base-association-samenet.el: New file.
* test/lisp/erc/erc-scenarios-base-association.el: New file.
* test/lisp/erc/erc-scenarios-base-compat-rename-bouncer.el: New file.
* test/lisp/erc/erc-scenarios-base-misc-regressions.el: New file.
* test/lisp/erc/erc-scenarios-base-netid-bouncer-id.el: New file.
* test/lisp/erc/erc-scenarios-base-netid-bouncer-recon-base.el: New file.
* test/lisp/erc/erc-scenarios-base-netid-bouncer-recon-both.el: New file.
* test/lisp/erc/erc-scenarios-base-netid-bouncer-recon-id.el: New file.
* test/lisp/erc/erc-scenarios-base-netid-bouncer.el: New file.
* test/lisp/erc/erc-scenarios-base-netid-samenet.el: New file.
* test/lisp/erc/erc-scenarios-base-reconnect.el: New file.
* test/lisp/erc/erc-scenarios-base-renick.el: New file.
* test/lisp/erc/erc-scenarios-base-reuse-buffers.el: New file.
* test/lisp/erc/erc-scenarios-base-unstable.el: New file.
* test/lisp/erc/erc-scenarios-base-upstream-recon-soju.el: New file.
* test/lisp/erc/erc-scenarios-base-upstream-recon-znc.el: New file.
* test/lisp/erc/erc-scenarios-misc.el: New file.
* test/lisp/erc/erc-scenarios-services-misc.el: New file.
* test/lisp/erc/resources/base/assoc/bouncer-history/barnet.eld: New file.
* test/lisp/erc/resources/base/assoc/bouncer-history/foonet.eld: New file.
* test/lisp/erc/resources/base/assoc/bumped/again.eld: New file.
* test/lisp/erc/resources/base/assoc/bumped/foisted.eld: New file.
* test/lisp/erc/resources/base/assoc/bumped/refoisted.eld: New file.
* test/lisp/erc/resources/base/assoc/bumped/renicked.eld: New file.
* test/lisp/erc/resources/base/assoc/multi-net/barnet.eld: New file.
* test/lisp/erc/resources/base/assoc/multi-net/foonet.eld: New file.
* test/lisp/erc/resources/base/assoc/reconplay/again.eld: New file.
* test/lisp/erc/resources/base/assoc/reconplay/foonet.eld: New file.
* test/lisp/erc/resources/base/assoc/samenet/chester.eld: New file.
* test/lisp/erc/resources/base/assoc/samenet/tester.eld: New file.
* test/lisp/erc/resources/base/assoc/samenet/tester2.eld: New file.
* test/lisp/erc/resources/base/channel-buffer-revival/foonet.eld: New file.
* test/lisp/erc/resources/base/flood/soju.eld: New file.
* test/lisp/erc/resources/base/gapless-connect/barnet.eld: New file.
* test/lisp/erc/resources/base/gapless-connect/foonet.eld: New file.
* test/lisp/erc/resources/base/gapless-connect/pass-stub.eld: New file.
* test/lisp/erc/resources/base/netid/bouncer/barnet-again.eld: New file.
* test/lisp/erc/resources/base/netid/bouncer/barnet-drop.eld: New file.
* test/lisp/erc/resources/base/netid/bouncer/barnet.eld: New file.
* test/lisp/erc/resources/base/netid/bouncer/foonet-again.eld: New file.
* test/lisp/erc/resources/base/netid/bouncer/foonet-drop.eld: New file.
* test/lisp/erc/resources/base/netid/bouncer/foonet.eld: New file.
* test/lisp/erc/resources/base/netid/bouncer/stub-again.eld: New file.
* test/lisp/erc/resources/base/netid/samenet/chester.eld: New file.
* test/lisp/erc/resources/base/netid/samenet/tester.eld: New file.
* test/lisp/erc/resources/base/reconnect/aborted-dupe.eld: New file.
* test/lisp/erc/resources/base/reconnect/aborted.eld: New file.
* test/lisp/erc/resources/base/reconnect/options-again.eld: New file.
* test/lisp/erc/resources/base/reconnect/options.eld: New file.
* test/lisp/erc/resources/base/reconnect/timer-last.eld: New file.
* test/lisp/erc/resources/base/reconnect/timer.eld: New file.
* test/lisp/erc/resources/base/renick/queries/bouncer-barnet.eld: New file.
* test/lisp/erc/resources/base/renick/queries/bouncer-foonet.eld: New file.
* test/lisp/erc/resources/base/renick/queries/solo.eld: New file.
* test/lisp/erc/resources/base/renick/self/auto.eld: New file.
* test/lisp/erc/resources/base/renick/self/manual.eld: New file.
* test/lisp/erc/resources/base/renick/self/qual-chester.eld: New file.
* test/lisp/erc/resources/base/renick/self/qual-tester.eld: New file.
* test/lisp/erc/resources/base/reuse-buffers/server/barnet.eld: New file.
* test/lisp/erc/resources/base/reuse-buffers/server/foonet.eld: New file.
* test/lisp/erc/resources/base/upstream-reconnect/soju-barnet.eld: New file.
* test/lisp/erc/resources/base/upstream-reconnect/soju-foonet.eld: New file.
* test/lisp/erc/resources/base/upstream-reconnect/znc-barnet.eld: New file.
* test/lisp/erc/resources/base/upstream-reconnect/znc-foonet.eld: New file.
* test/lisp/erc/resources/erc-scenarios-common.el: New file.
* test/lisp/erc/resources/networks/announced-missing/foonet.eld: New file.
* test/lisp/erc/resources/services/password/libera.eld: New file.
Add test cases for locking down fundamental client behavior, much of
it involving the relationship between buffers and connections. Also
add accompanying resources subdir containing canned dialog scripts and
common code needed by various tests. For test cases demoing the
problematic behavior originally described in the initial report, see
update #4 on the bug tracker thread for bug#48598. Most reside in a
file named test/lisp/erc/erc-scenarios-48598.el introduced by the
patch "Add user-oriented test scenarios for ERC".
* test/lisp/erc/resources/erc-d/erc-d.el: New file.
* test/lisp/erc/resources/erc-d/erc-d-u.el: New file.
* test/lisp/erc/resources/erc-d/erc-d-i.el: New file.
* test/lisp/erc/resources/erc-d/erc-d-t.el: New file.
* test/lisp/erc/resources/erc-d/erc-d-tests.el: New file.
* test/lisp/erc/erc-scenarios-internal.el: New file to serve as
discoverable proxy for erc-d-tests.