insert attempting-to-connected-plus-timeout
# check /disconnect aborts retry chain
-> /window 1
+> /window 2
insert disconnect-to-stop-auto-reconnect
wait 2
--- /dev/null
+insert ./lib/connect-to-usermode
+insert ./lib/join-channel
+# for: join-channel-0-cmd-to-list-residents, join-channel-1-end-of-names
+insert ./lib/no-handler
+insert ./lib/part-no-msg-other
+insert ./lib/privmsg-win
+insert ./lib/servermsglogged
+insert ./lib/user-set-to
+
+× set-prefix
+insert servermsglogged [% (MSG)=:foo.bar.baz%MODE%#ch_win3%(MODESET)%(NICK)]
+log 1 $ channels:#ch_win3:prefixes:(PREFIX) (NEW_IDS)
+log 3 $ (NICK) (VERB) (PREFIX)
+
+× prefix+
+insert set-prefix [(MODESET)=+(CHAR) (VERB)=gains]
+
+× prefix-
+insert set-prefix [(MODESET)=-(CHAR) (VERB)=loses]
+
+× msg-prefixed-long
+insert servermsglogged [% (MSG)=:(NICK)!~(NICK)(NICK)@(NICK).(NICK)%PRIVMSG%#ch_win3%:(NICK)%(NICK)%(NICK)]
+insert user-set-to range=1: [(USER_USER)=~(NICK)(NICK) (USER_HOST)=(NICK).(NICK)]
+log 3 < [(PREFIX)(NICK)] (NICK) (NICK) (NICK)
+
+× msg-prefixed-short
+insert msg-prefixed-long range=:2
+insert msg-prefixed-long range=-1:
+
+× ×-------------------------
+
+insert connect-to-usermode
+
+# check /join into channel with many other users, with multi-line 353, and membership prefixes
+insert join-channel-0-cmd-to-list-residents [% (WIN_ID)=3 (RESIDENT_NAMES)=foo%@baz%+oof]
+insert user-set-to range=:1 [(USER_ID)=1 (USER_NICK)=baz]
+log 1 $ channels:#ch_win3:prefixes:@ set to: [1]
+insert user-set-to range=:1 [(USER_ID)=2 (USER_NICK)=oof]
+log 1 $ channels:#ch_win3:prefixes:+ set to: [2]
+insert servermsglogged [% (MSG)=:foo.bar.baz%353%foo%=%#ch_win3%:+rab%zab]
+insert user-set-to range=:1 [(USER_ID)=3 (USER_NICK)=rab]
+log 1 $ channels:#ch_win3:prefixes:+ set to: [2], [3]
+insert user-set-to range=:1 [(USER_ID)=4 (USER_NICK)=zab]
+insert join-channel-1-end-of-names [% (WIN_ID)=3 (RESIDENT_IDS)=[1],%[2],%[3],%[4],%[me] (RESIDENT_NICKS)=@baz,%+oof,%+rab,%zab,%foo]
+
+# check (presence/absence of) membership prefixes mirrored in message display
+insert privmsg-win [% (WIN_ID)=3 (TXT)=foo%foo%foo]
+insert msg-prefixed-long [(USER_ID)=1 (NICK)=baz (PREFIX)=@]
+insert msg-prefixed-long [(USER_ID)=2 (NICK)=oof (PREFIX)=+]
+insert msg-prefixed-long [(USER_ID)=3 (NICK)=rab (PREFIX)=+ PRIVMSG=NOTICE [+rab]=(+rab)]
+insert msg-prefixed-long [(USER_ID)=4 (NICK)=zab (PREFIX)=]
+
+# check server giving and taking membership prefixes
+insert prefix- [% (CHAR)=o (PREFIX)=@ (NICK)=baz (NEW_IDS)=emptied]
+insert prefix- [% (CHAR)=v (PREFIX)=+ (NICK)=rab (NEW_IDS)=set%to:%[2]]
+insert prefix- [% (CHAR)=v (PREFIX)=+ (NICK)=oof (NEW_IDS)=emptied]
+insert prefix+ [% (CHAR)=v (PREFIX)=+ (NICK)=oof (NEW_IDS)=set%to:%[2]]
+insert prefix+ [% (CHAR)=o (PREFIX)=@ (NICK)=zab (NEW_IDS)=set%to:%[4]]
+insert prefix+ [% (CHAR)=o (PREFIX)=@ (NICK)=baz (NEW_IDS)=set%to:%[1],%[4]]
+insert prefix+ [% (CHAR)=o (PREFIX)=@ (NICK)=foo (NEW_IDS)=set%to:%[1],%[4],%[me]]
+
+# re-check membership prefix mirorring in message display after re-distribution
+insert privmsg-win [% (WIN_ID)=3 (TXT)=foo%foo%foo [foo]=[@foo]]
+insert msg-prefixed-short [(USER_ID)=1 (NICK)=baz (PREFIX)=@]
+insert msg-prefixed-short [(USER_ID)=2 (NICK)=oof (PREFIX)=+]
+insert msg-prefixed-short [(USER_ID)=3 (NICK)=rab (PREFIX)= PRIVMSG=NOTICE [rab]=(rab)]
+insert msg-prefixed-short [(USER_ID)=4 (NICK)=zab (PREFIX)=@]
+
+# check user parting loses them prefix even if kept identified by other window
+insert join-channel-0-cmd-to-list-residents [% (WIN_ID)=4 (RESIDENT_NAMES)=foo%baz]
+insert join-channel-1-end-of-names [% (WIN_ID)=4 (RESIDENT_IDS)=[1],%[me] (RESIDENT_NICKS)=baz,%foo]
+insert part-no-msg-other [% (USER_ID)=1 (NICK)=baz (REMAINING_IDS)=[2],%[3],%[4],%[me]]
+log 1 $ channels:#ch_win3:prefixes:@ set to: [4], [me]
+insert servermsglogged [% (MSG)=:baz!~bazbaz@baz.baz%JOIN%:#ch_win3]
+log 1 $ channels:#ch_win3:user_ids set to: [1], [2], [3], [4], [me]
+log 3 $ baz!~bazbaz@baz.baz joins
+insert msg-prefixed-short [(USER_ID)=1 (NICK)=baz (PREFIX)=]
+
+# check server setting unknown modes towards users
+insert servermsglogged [% (MSG)=:foo.bar.baz_MODE%#ch_win3%+a%zab]
+insert no-handler range=-2: [% (ALERT_WIN_IDS)=2,3,4 (MSG)=:foo.bar.baz_MODE%#ch_win3%+a%zab]
+insert servermsglogged [% (MSG)=:foo.bar.baz%MODE%#ch_win3%-b%rab]
+insert no-handler range=-2: [% (ALERT_WIN_IDS)=2,3,4 (MSG)=for%nickname%setting%channel%mode:%-b]
# for: cmd-disconnect-0, cmd-disconnect-1
insert ./lib/cmd-nick
# for: cmd-nick, rename
-insert ./lib/connect-to-connected
+insert ./lib/connect-to-usermode
insert ./lib/disconnect
# for: disconnect0, disconnect1
+insert ./lib/join-channel
+# for: join-channel-0-cmd-to-list-residents, join-channel-0-0-cmd-to-ack, join-channel-0-1-list-residents, join-channel-1-end-of-names
insert ./lib/join-empty
-# for: join-channel-0-cmd-to-list-residents, join-channel-0-0-cmd-to-ack, join-channel-0-1-list-residents join-channel-1-end-of-names, join-empty
-insert ./lib/no-handler
insert ./lib/part
-# for: part, part-core, parts-no-msg-me, quit
-insert ./lib/privmsg
+# for: part, part-core, part-no-msg, part-no-msg-me, quit
+insert ./lib/part-no-msg-other
+# for: part-no-msg-other
+insert ./lib/privmsg-win
insert ./lib/retry-in
insert ./lib/servermsglogged
insert ./lib/user-set-to
× part-empty
insert part-no-msg-me [(USERIDS_CLEAR)=emptied]
-× privmsg-win
-insert privmsg [(TARGET_WIN_ID)=(WIN_ID) (TARGET)=#ch_win(WIN_ID)]
-
× topic-set-to
log 1 $ channels:#ch_win(WIN_ID):topic set to: [Topic(what='(TOPIC)', who=NickUserHost(nick='baz', user='~bazbaz', host='baz.baz'))]
log 4 $ baz!~bazbaz@baz.baz set topic: (TOPIC)
> /join (TARGET)
log (WIN_ID) $ already in that channel
-× part-no-msg-other
-insert part-no-msg range=2:-1 [% (WIN_ID)=3 (USERIDS_CLEAR)=set%to:%(REMAINING_IDS)]
-
-× set-prefix
-insert servermsglogged [% (MSG)=:foo.bar.baz%MODE%#ch_win3%(MODESET)%(NICK)]
-log 1 $ channels:#ch_win3:prefixes:(PREFIX) (NEW_IDS)
-log 3 $ (NICK) (VERB) (PREFIX)
-
× ×--------------------------
-insert connect-to-connected
-insert caps-neg-empty
-insert 001-to-usermode
+insert connect-to-usermode
# check inability to privmsg into channel not yet joined
-> /window 2
> /privmsg #test msg_test0
log 2 $ not sending, since not in channel
insert part-no-msg-me [% (WIN_ID)=3 (USERIDS_CLEAR)=set%to:%[1]]
log 1 $ users:1 deleted
-# check /join into channel with many other users, with multi-line 353, and membership prefixes
-insert join-channel-0-cmd-to-list-residents [% (WIN_ID)=3 (RESIDENT_NAMES)=foo%@baz%+oof]
+# check /join into channel with many other users, with multi-line 353
+insert join-channel-0-cmd-to-list-residents [% (WIN_ID)=3 (RESIDENT_NAMES)=foo%baz%oof]
insert user-set-to range=:1 [(USER_ID)=2 (USER_NICK)=baz]
-log 1 $ channels:#ch_win3:prefixes:@ set to: [2]
insert user-set-to range=:1 [(USER_ID)=3 (USER_NICK)=oof]
-log 1 $ channels:#ch_win3:prefixes:+ set to: [3]
-insert servermsglogged [% (MSG)=:foo.bar.baz%353%foo%=%#ch_win3%:+rab%zab]
+insert servermsglogged [% (MSG)=:foo.bar.baz%353%foo%=%#ch_win3%:rab%zab]
insert user-set-to range=:1 [(USER_ID)=4 (USER_NICK)=rab]
-log 1 $ channels:#ch_win3:prefixes:+ set to: [3], [4]
insert user-set-to range=:1 [(USER_ID)=5 (USER_NICK)=zab]
-insert join-channel-1-end-of-names [% (WIN_ID)=3 (RESIDENT_IDS)=[2],%[3],%[4],%[5],%[me] (RESIDENT_NICKS)=@baz,%+oof,%+rab,%zab,%foo]
-
-# check server giving and taking membership prefixes
-insert set-prefix [(MODESET)=-o (PREFIX)=@ (VERB)=loses (NICK)=baz (NEW_IDS)=emptied]
-insert set-prefix [% (MODESET)=-v (PREFIX)=+ (VERB)=loses (NICK)=rab (NEW_IDS)=set%to:%[3]]
-insert set-prefix [(MODESET)=-v (PREFIX)=+ (VERB)=loses (NICK)=oof (NEW_IDS)=emptied]
-insert set-prefix [% (MODESET)=+v (PREFIX)=+ (VERB)=gains (NICK)=oof (NEW_IDS)=set%to:%[3]]
-insert set-prefix [% (MODESET)=+o (PREFIX)=@ (VERB)=gains (NICK)=zab (NEW_IDS)=set%to:%[5]]
-insert set-prefix [% (MODESET)=+o (PREFIX)=@ (VERB)=gains (NICK)=baz (NEW_IDS)=set%to:%[2],%[5]]
-insert set-prefix [% (MODESET)=+o (PREFIX)=@ (VERB)=gains (NICK)=foo (NEW_IDS)=set%to:%[2],%[5],%[me]]
-
-# check server setting unknown modes towards users
-insert servermsglogged [% (MSG)=:foo.bar.baz_MODE%#ch_win3%+a%zab]
-insert no-handler range=-2: [% (ALERT_WIN_IDS)=2,3,4 (MSG)=:foo.bar.baz_MODE%#ch_win3%+a%zab]
-insert servermsglogged [% (MSG)=:foo.bar.baz%MODE%#ch_win3%-b%rab]
-insert no-handler range=-2: [% (ALERT_WIN_IDS)=2,3,4 (MSG)=for%nickname%setting%channel%mode:%-b]
+insert join-channel-1-end-of-names [% (WIN_ID)=3 (RESIDENT_IDS)=[2],%[3],%[4],%[5],%[me] (RESIDENT_NICKS)=baz,%oof,%rab,%zab,%foo]
# check /join into channel with topic set
> /window 4
# check effects of other users' messages (PRIVMSG and NOTICE)
insert servermsglogged [% (MSG)=:baz!~bazbaz@baz.baz%PRIVMSG%#ch_win3%:msg_test3%msg_test4]
-log 3 < [@baz] msg_test3 msg_test4
+log 3 < [baz] msg_test3 msg_test4
insert servermsglogged [% (MSG)=:oof!~oofoof@oof.oof%NOTICE%#ch_win3%:msg_test5%msg_test6]
insert user-set-to range=1: [(USER_ID)=3 (USER_USER)=~oofoof (USER_HOST)=oof.oof]
-log 3 < (+oof) msg_test5 msg_test6
-
-# check effect own PRIVMSG into channel, now that we got @
-insert privmsg-win [(WIN_ID)=3 foo=@foo (TXT)=msg_test7]
+log 3 < (oof) msg_test5 msg_test6
# check effect of server NOTICE to channel
insert servermsglogged [% (MSG)=:*.?.net%NOTICE%#ch_win3%:msg_test8%msg_test9]
# check part of user visible, and of user NOT visible in other channel
insert part-no-msg-other [% (USER_ID)=2 (NICK)=baz (REMAINING_IDS)=[3],%[4],%[5],%[me]]
-log 1 $ channels:#ch_win3:prefixes:@ set to: [5], [me]
insert part-no-msg-other [% (USER_ID)=3 (NICK)=oof (REMAINING_IDS)=[4],%[5],%[me]]
-log 1 $ channels:#ch_win3:prefixes:+ emptied
log 1 $ users:3 deleted
# check other-user part with exit message
insert part range=2:4 [% (NICK)=zab (ARGS)=#ch_win3%:goodbye]
insert user-set-to range=1: [(USER_ID)=5 (USER_USER)=~zabzab (USER_HOST)=zab.zab]
insert part-core [% (USER_ID)=5 (NICK)=zab (WIN_ID)=3 (USERIDS_CLEAR)=set%to:%[4],%[me] (EXIT_MSG)=goodbye]
-log 1 $ channels:#ch_win3:prefixes:@ set to: [me]
log 1 $ users:5 deleted
# check re-join of user kept visible in other channel
insert part-empty [(WIN_ID)=4]
insert cmd-disconnect-0
insert quits [% (USER_ID)=me (NICK)=foo (WIN_ID)=3 (USERIDS_CLEAR)=set%to:%[4],%[6]]
-log 1 $ channels:#ch_win3:prefixes:@ emptied
insert cmd-disconnect-1 range=:-1
insert disconnect1 [% log%2%=log%2,3,4%]
-insert ./lib/001-to-usermode
+insert ./lib/connect-to-usermode
insert ./lib/cmd-disconnect
# for: cmd-disconnect
-insert ./lib/connect-to-connected
insert ./lib/disconnect
# for: disconnect1
insert ./lib/disconnect-to-stop-auto-reconnect
× ×××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××
-# to prepare, initiate connection
-insert connect-to-connected
-insert 001-to-usermode
-
# fail to reconnect while connected
-> /window 1
+insert connect-to-usermode
> /reconnect
-log 1 $ not re-connecting since already connected
+log 2 $ not re-connecting since already connected
# handle /disconnect on being connected
insert cmd-disconnect range=:-1
# fail to disconnect when already disconnected
> /disconnect
-log 1 $ already disconnected and not attempting connect
+log 2 $ already disconnected and not attempting connect
# succeed to re-connect after disconnect
> /reconnect
# allow /disconnect outside connection for auto-connect stops
insert error-to-disconnected [% (EXIT_MSG)=Closing%link:%(Connection%timed%out)]
insert retry-in [(SECONDS)=1]
+### insert disconnect-to-stop-auto-reconnect [% log%1%=log%2%]
insert disconnect-to-stop-auto-reconnect
insert ./lib/cmd-disconnect
# for: cmd-disconnect
insert ./lib/attempting-to-connected
-insert ./lib/connect-to-connected
+insert ./lib/connect-to-usermode
insert ./lib/disconnect
insert ./lib/isupport-clear
+insert ./lib/join-channel
+# for: join-channel-0-cmd-to-list-residents, join-channel-1
insert ./lib/join-empty
-# for: join-channel-0-cmd-to-list-residents, join-channel-1, join-empty
insert ./lib/no-handler
insert ./lib/servermsglogged
insert ./lib/user-set-to
× ×-----------------------
# ensure new connection opens with ISUPPORTs defaults
-# (via connect-to-connected:connect:isupport-clear)
-insert connect-to-connected
-insert caps-neg-empty
-#
-# prepare minimal further connection setup with user identity known
-insert 001-to-usermode
+# (via connect-to-usermode:connect-to-connected:connect:isupport-clear)
+insert connect-to-usermode
# check setting of ISUPPORTs both with and without parameters, and last arg ignored
insert servermsglogged [% (MSG)=:foo.bar.baz%005%foo%ABC=DEF%GHI%:are%supported%by%this%server]
--- /dev/null
+insert ./lib/connect-to-connected
+insert ./lib/caps-neg-empty
+insert ./lib/001-to-usermode
+
+× connect-to-usermode
+insert connect-to-connected
+insert caps-neg-empty
+insert 001-to-usermode
+> /window 2
× disconnect-to-stop-auto-reconnect
> /disconnect
-log 1 $ already disconnected, stopped connecting attempts
+log 2 $ already disconnected, stopped connecting attempts
--- /dev/null
+insert ./lib/servermsglogged
+
+× join-channel-0-0-cmd-to-ack
+> /join #ch_win(WIN_ID)
+log 1 > JOIN :#ch_win(WIN_ID)
+insert servermsglogged [% (MSG)=:foo!~foofoo@foo.foo%JOIN%:#ch_win(WIN_ID)]
+
+× join-channel-0-1-list-residents
+insert servermsglogged [% (MSG)=:foo.bar.baz%353%foo%=%#ch_win(WIN_ID)%:(RESIDENT_NAMES)]
+
+× join-channel-0-cmd-to-list-residents
+insert join-channel-0-0-cmd-to-ack
+insert join-channel-0-1-list-residents
+
+× join-channel-1-end-of-names
+insert servermsglogged [% (MSG)=:foo.bar.baz%366%foo%#ch_win(WIN_ID)%:End%of%/NAMES%list.]
+log 1 $ channels:#ch_win(WIN_ID):user_ids set to: (RESIDENT_IDS)
+log (WIN_ID) $ residents: (RESIDENT_NICKS)
-insert ./lib/servermsglogged
-
-× join-channel-0-0-cmd-to-ack
-> /join #ch_win(WIN_ID)
-log 1 > JOIN :#ch_win(WIN_ID)
-insert servermsglogged [% (MSG)=:foo!~foofoo@foo.foo%JOIN%:#ch_win(WIN_ID)]
-
-× join-channel-0-1-list-residents
-insert servermsglogged [% (MSG)=:foo.bar.baz%353%foo%=%#ch_win(WIN_ID)%:(RESIDENT_NAMES)]
-
-× join-channel-0-cmd-to-list-residents
-insert join-channel-0-0-cmd-to-ack
-insert join-channel-0-1-list-residents
-
-× join-channel-1-end-of-names
-insert servermsglogged [% (MSG)=:foo.bar.baz%366%foo%#ch_win(WIN_ID)%:End%of%/NAMES%list.]
-log 1 $ channels:#ch_win(WIN_ID):user_ids set to: (RESIDENT_IDS)
-log (WIN_ID) $ residents: (RESIDENT_NICKS)
+insert ./lib/join-channel
+# for join-channel-0-cmd-to-list-residents, join-channel-1-end-of-names
× join-empty
insert join-channel-0-cmd-to-list-residents [(RESIDENT_NAMES)=foo]
--- /dev/null
+insert ./lib/part
+# for: part-no-msg
+
+× part-no-msg-other
+insert part-no-msg range=2:-1 [% (WIN_ID)=3 (USERIDS_CLEAR)=set%to:%(REMAINING_IDS)]
+
--- /dev/null
+insert ./lib/privmsg
+
+× privmsg-win
+insert privmsg [(TARGET_WIN_ID)=(WIN_ID) (TARGET)=#ch_win(WIN_ID)]
insert ./lib/enter_misc
# for: enter-help-win0
insert ./lib/isupport-clear
-insert ./lib/join-empty
+insert ./lib/join-channel
# for: join-channel-0-cmd-to-list-residents, join-channel-1-end-of-names
insert ./lib/part
# for: part-no-msg-me, quits
× conn_init_1
# expect some NOTICE and PING to process/reply during initiation
-insert servernotice [% (NOTICE)=***%Looking%up%your%ident...]
-insert servernotice [% (NOTICE)=***%Looking%up%your%hostname...]
+insert servernotice [% (NOTICE)=***%Looking%up%your%ident,%hostname...]
insert servernotice [% (NOTICE)=***%Found%your%hostname%(foo.foo)]
insert ping-pong
insert disconnect1 range=1:-1 [% log%1%=log%10% log%2%=log%11%]
log 10 $ will retry connecting in 1 seconds
> /window 10
-insert disconnect-to-stop-auto-reconnect [% log%1%=log%10%]
+insert disconnect-to-stop-auto-reconnect [% log%2%=log%10%]
# check that (save TUI tests assuming start on window 0, and no 4 yet) on reconnect, all the same effects can be expected
> /window 1