+insert ./lib/001-setting-nick
insert ./lib/attempting-to-connected
insert ./lib/bazbarfoo
# for: attempting-bazbarfoo, connect-bazbarfoo
wait 2
# same way ensure retry chain wasn't solely blocked by being connected
+insert 001-setting-nick
insert usermode
insert cmd-disconnect-0
insert cmd-disconnect-1 :-1
+insert ./lib/001-setting-nick
insert ./lib/attempting-to-connected
insert ./lib/connect-to-connected
insert ./lib/caps
insert ./lib/usermode
× disconnect-to-reconnect-0
+insert 001-setting-nick : +0
insert usermode : +0
insert cmd-disconnect-0 : +0
insert cmd-disconnect-1 : +0
log 1 $ caps:sasl:enabled set to: [True]
log 1 > CAP :END
-insert servermsglogged : +0 MSG :foo.bar.baz 001 foo :Welcome to the foo.bar.baz network
-log 1 $ users:me:nick set to: [?]
-log 1 $ users:me:nick set to: [foo]
+# for later references, have nickname known
+insert 001-setting-nick
# check NEW, DEL working after CAP :END
insert cap-msg : +0 ??? foo NEW :foo bar=baz
+insert ./lib/001-setting-nick
insert ./lib/caps
# for: caps-neg-empty
insert ./lib/channels
insert ./lib/connect-to-connected
insert ./lib/disconnect
# for: disconnect0, disconnect1
+insert ./lib/join-empty
insert ./lib/retry-in
insert ./lib/servermsglogged
insert ./lib/usermode
-× join-empty
-insert servermsglogged : +0 MSG :foo.bar.baz 353 foo @ CHANNEL :foo
-log 1 $ channels:CHANNEL:exits cleared
-insert servermsglogged : +0 MSG :foo.bar.baz 366 foo CHANNEL :End of /NAMES list.
-log 1 $ channels:CHANNEL:user_ids set to: [me]
-
× part-ch_test0
insert part0 : +0 CHANNEL #ch_test0
log 3 $ foo!~foobarbaz@baz.bar.foo parts
× conn-init
insert caps-neg-empty : +0
-insert usermode : +0 ~baz ~foobarbaz
+insert 001-setting-nick : +0
× privmsg_ch_test0
> /privmsg #ch_test0 TXT
insert attempting : +1
insert connected : +1 WIN_IDS 2,3,4
insert conn-init : +0
-# 001 actually triggers the auto-joins
-insert servermsglogged : +0 MSG :foo.bar.baz 001 foo :Welcome to the foo.bar.baz network
-insert JOIN0 : +0 CHANNEL #ch_test0
+log 1 > JOIN :#ch_test0
+insert usermode : +0 ~baz ~foobarbaz
+insert servermsglogged : +0 MSG :foo!~foobarbaz@baz.bar.foo JOIN #ch_test0
insert join-empty : +0 CHANNEL #ch_test0
-log 3 $ residents: foo
× ×--------------------------
insert connect-to-connected
insert conn-init
+insert usermode : +0 ~baz ~foobarbaz
# check inability to privmsg into channel not yet joined
> /window 2
> /join #ch_test0
insert JOIN0 : +0 CHANNEL #ch_test0
insert join-empty : +0 CHANNEL #ch_test0
-log 3 $ residents: foo
# check privmsg into channel from other window only works by direct addressing
> /window 2
> /join
insert JOIN0 : +0 CHANNEL #ch_test0
insert join-empty : +0 CHANNEL #ch_test0
-log 3 $ residents: foo
# check cannot /join channel already joined, neither from its window nor from elsewhere
> /join
insert part-ch_test0
> /join #ch_test1
insert JOIN0 : +0 CHANNEL #ch_test1
-insert join-empty : +0 CHANNEL #ch_test1
+insert join-empty :-1 +0 CHANNEL #ch_test1
log 4 $ residents: foo
# check /join into channel with other users, with multi-line 353, and @ rather than =
+insert ./lib/001-setting-nick
insert ./lib/attempting-to-connected
insert ./lib/cmd-disconnect
insert ./lib/conn
# to prepare, initiate connection
insert connect
insert attempting-to-connected
+insert 001-setting-nick
insert usermode
# fail to reconnect while connected
--- /dev/null
+insert ./lib/001-setting-nick
+insert ./lib/caps
+# for: caps-neg-empty
+insert ./lib/cmd-disconnect
+insert ./lib/attempting-to-connected
+insert ./lib/connect-to-connected
+insert ./lib/disconnect
+insert ./lib/isupport-clear
+insert ./lib/join-empty
+insert ./lib/servermsglogged
+insert ./lib/usermode
+
+× un-default
+# CHANTYPES (with parameter parsing test: will = confuse it?):
+insert servermsglogged : +0 MSG :foo.bar.baz 005 foo CHANTYPES=123=456 :
+log 1 $ isupport:CHANTYPES set to: [123=456]
+# PREFIX (with parameter parsing test: will = confuse it?):
+insert servermsglogged : +0 MSG :foo.bar.baz 005 foo PREFIX=(ovE)@+= :
+log 1 $ isupport:PREFIX set to: [(ovE)@+=]
+# USERLEN:
+insert servermsglogged : +0 MSG :foo.bar.baz 005 foo USERLEN=8 :
+log 1 $ isupport:USERLEN set to: [8]
+
+× no-handler
+log 1 $ No handler implemented for: :?
+log 2,3,4,5 $ No handler implemented for: :?
+
+× ×-----------------------
+
+# 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 nickname known
+# (referenced by later 005s)
+insert 001-setting-nick
+
+# check setting of ISUPPORTs both with and without parameters, and last arg ignored
+insert servermsglogged : +0 MSG :foo.bar.baz 005 foo ABC=DEF GHI :are supported by this server
+log 1 $ isupport:ABC set to: [DEF]
+log 1 $ isupport:GHI set to: []
+
+# check further 005 not re-setting whole dict, and last arg possibly empty
+insert servermsglogged : +0 MSG :foo.bar.baz 005 foo MNO=PQR STU=VWX,YZ :
+log 1 $ isupport:MNO set to: [PQR]
+log 1 $ isupport:STU set to: [VWX,YZ]
+
+# check minus args clearing non-defaulty ISUPPORTs, and intermingling with positive args
+insert servermsglogged : +0 MSG :foo.bar.baz 005 foo -GHI DEF=MNO -STU :ignore me
+log 1 $ isupport:GHI cleared
+log 1 $ isupport:DEF set to: [MNO]
+log 1 $ isupport:STU cleared
+
+# check setting and un-setting of defaulty ISUPPORTs
+insert un-default
+insert servermsglogged : +0 MSG :foo.bar.baz 005 foo -CHANTYPES -PREFIX -USERLEN :
+insert isupport-clear 1:
+
+# check disconnect on defaulty ISUPPORTs re-instates the respective defaults
+insert un-default
+insert usermode
+> /window 1
+insert cmd-disconnect-0
+insert cmd-disconnect-1 :-1
+insert disconnect1 1: +1 WIN_IDS 2
+
+# test effect of USERLEN
+
+> /reconnect
+insert attempting-to-connected
+insert caps-neg-empty : +0
+insert 001-setting-nick : +0
+insert usermode
+> /join #ch_test0
+log 1 > JOIN :#ch_test0
+insert servermsglogged : +0 MSG :foo!~baz@baz.bar.foo JOIN #ch_test0
+insert join-empty : +0 CHANNEL #ch_test0
+
+insert servermsglogged : +0 MSG :bar!foobarbazq@bar.bar JOIN :#ch_test0
+log 1 $ users:1:nick set to: [?]
+log 1 $ users:1:nick set to: [bar]
+log 1 $ users:1:user set to: [foobarbazq]
+log 1 $ users:1:host set to: [bar.bar]
+log 1 $ channels:#ch_test0:user_ids set to: [1], [me]
+log 3 $ bar!foobarbazq@bar.bar joins
+insert servermsglogged : +0 MSG :bar!~foobarbaz@bar.bar PRIVMSG #ch_test0 :hi
+log 1 $ users:1:user set to: [~foobarbaz]
+log 3 < [bar] hi
+
+insert servermsglogged : +0 MSG :foo.bar.baz 005 foo USERLEN=8 :
+log 1 $ isupport:USERLEN set to: [8]
+
+insert servermsglogged : +0 MSG :baz!foobarba@baz.baz JOIN :#ch_test0
+log 1 $ users:2:nick set to: [?]
+log 1 $ users:2:nick set to: [baz]
+log 1 $ users:2:user set to: [foobarba]
+log 1 $ users:2:host set to: [baz.baz]
+log 1 $ channels:#ch_test0:user_ids set to: [1], [2], [me]
+log 3 $ baz!foobarba@baz.baz joins
+insert servermsglogged : +0 MSG :baz!~foobarb@baz.baz PRIVMSG #ch_test0 :hi
+log 1 $ users:2:user set to: [~foobarb]
+log 3 < [baz] hi
+
+# test effect of PREFIX
+
+> /join #ch_test1
+log 1 > JOIN :#ch_test1
+insert servermsglogged : +0 MSG :foo!~baz@baz.bar.foo JOIN #ch_test1
+insert servermsglogged : +0 MSG :foo.bar.baz 353 foo @ #ch_test1 :foo @bar +baz =quux
+log 1 $ channels:#ch_test1:exits cleared
+log 1 $ users:3:nick set to: [?]
+log 1 $ users:3:nick set to: [=quux]
+insert servermsglogged : +0 MSG :foo.bar.baz 366 foo #ch_test1 :End of /NAMES list.
+log 1 $ channels:#ch_test1:user_ids set to: [1], [2], [3], [me]
+log 4 $ residents: bar, baz, =quux, foo
+
+insert servermsglogged : +0 MSG :foo.bar.baz 005 foo PREFIX=(vE)+= :
+log 1 $ isupport:PREFIX set to: [(vE)+=]
+
+> /join #ch_test2
+log 1 > JOIN :#ch_test2
+insert servermsglogged : +0 MSG :foo!~baz@baz.bar.foo JOIN #ch_test2
+insert servermsglogged : +0 MSG :foo.bar.baz 353 foo @ #ch_test2 :foo @bar +baz =quux
+log 1 $ channels:#ch_test2:exits cleared
+log 1 $ users:4:nick set to: [?]
+log 1 $ users:4:nick set to: [@bar]
+log 1 $ users:5:nick set to: [?]
+log 1 $ users:5:nick set to: [quux]
+insert servermsglogged : +0 MSG :foo.bar.baz 366 foo #ch_test2 :End of /NAMES list.
+log 1 $ channels:#ch_test2:user_ids set to: [2], [4], [5], [me]
+log 5 $ residents: baz, @bar, quux, foo
+
+# check effect of CHANTYPES
+insert servermsglogged : +0 MSG :foo!~baz@baz.bar.foo JOIN #ch_test3
+insert servermsglogged : +0 MSG :foo!~baz@baz.bar.foo JOIN &ch_test4
+insert servermsglogged : +0 MSG :foo!~baz@baz.bar.foo JOIN $ch_test5
+insert no-handler : +1 ? foo!~baz@baz.bar.foo JOIN $ch_test5
+insert servermsglogged : +0 MSG :foo.bar.baz 005 foo CHANTYPES=&$% :
+log 1 $ isupport:CHANTYPES set to: [&$%]
+insert servermsglogged : +0 MSG :foo!~baz@baz.bar.foo JOIN #ch_test6
+insert no-handler : +1 ? foo!~baz@baz.bar.foo JOIN #ch_test6
+insert servermsglogged : +0 MSG :foo!~baz@baz.bar.foo JOIN &ch_test7
+insert servermsglogged : +0 MSG :foo!~baz@baz.bar.foo JOIN $ch_test8
+insert servermsglogged : +0 MSG :foo!~baz@baz.bar.foo JOIN %ch_test8
--- /dev/null
+insert ./lib/servermsglogged
+
+× 001-setting-nick
+insert servermsglogged : +0 MSG :foo.bar.baz 001 foo :Welcome to the foo.bar.baz network
+log 1 $ users:me:nick set to: [?]
+log 1 $ users:me:nick set to: [foo]
--- /dev/null
+insert ./lib/servermsglogged
+
+× join-empty
+insert servermsglogged : +0 MSG :foo.bar.baz 353 foo @ CHANNEL :foo
+log 1 $ channels:CHANNEL:exits cleared
+insert servermsglogged : +0 MSG :foo.bar.baz 366 foo CHANNEL :End of /NAMES list.
+log 1 $ channels:CHANNEL:user_ids set to: [me]
+log 3 $ residents: foo
× usermode
insert servermsglogged : +0 MSG :foo!~baz@baz.bar.foo MODE foo ABC
-log 1 $ users:me:nick set to: [?]
-log 1 $ users:me:nick set to: [foo]
log 1 $ users:me:user set to: [~baz]
log 1 $ users:me:host set to: [baz.bar.foo]
log 1 $ users:me:modes set to: [ABC]
insert servermsglogged : +0 MSG :foo.bar.baz 002 foo1 :Your host is foo.bar.baz
insert servermsglogged : +0 MSG :foo.bar.baz 003 foo1 :This server was created Jan 1 2020
insert servermsglogged : +0 MSG :foo.bar.baz 004 foo1 foo.bar.baz ircserver-1.0 abc def ghi
-insert servermsglogged : +0 MSG :foo.bar.baz 005 foo1 ABC=DEF GHI=JKL :are supported by this server
+insert servermsglogged : +0 MSG :foo.bar.baz 005 foo1 ABC=DEF GHI :are supported by this server
log 1 $ isupport:ABC set to: [DEF]
-log 1 $ isupport:GHI set to: [JKL]
-insert servermsglogged : +0 MSG :foo.bar.baz 005 foo1 MNO=PQR STU=VWX Y=Z :are supported by this server
-log 1 $ isupport:MNO set to: [PQR]
-log 1 $ isupport:STU set to: [VWX]
-log 1 $ isupport:Y set to: [Z]
+log 1 $ isupport:GHI set to: []
insert servermsglogged : +0 MSG :foo.bar.baz 251 foo1 :There are 10 users and 1000 invisible on 5 servers
insert servermsglogged : +0 MSG :foo.bar.baz 252 foo1 7 :IRC Operators online
insert servermsglogged : +0 MSG :foo.bar.baz 253 foo1 4 :unknown connection(s)
+insert ./lib/001-setting-nick
insert ./lib/connect-to-connected
insert ./lib/servermsglogged
insert ./lib/servernotice
× ×××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××
insert connect-to-connected
+insert 001-setting-nick
> /window 1
-insert servermsglogged : +0 MSG :foo.bar.baz 001 foo :Welcome to the foo.bar.baz network
-log 1 $ users:me:nick set to: [?]
-log 1 $ users:me:nick set to: [foo]
# check full line not wrapped
insert servermsglogged-and-line-unwrapped : +0 XXX :foo.bar.baz 001 foo :6789 123456789 123456789 123456789 12345678 0
# check wrap if last space-separated item one char too long
-insert servermsglogged : +0 MSG :foo.bar.baz 001 foo :456789 123456789 123456789 123456789 12345678 01
-line 20 on_black,bright_white < §§:§§:§§ :foo.bar.baz 001 foo :456789 123456789 123456789 123456789 12345678§§
+insert servermsglogged : +0 MSG :foo.bar.baz 002 foo :456789 123456789 123456789 123456789 12345678 01
+line 20 on_black,bright_white < §§:§§:§§ :foo.bar.baz 002 foo :456789 123456789 123456789 123456789 12345678§§
line 21 on_black,bright_white 01§§
# check wrap if item starts right after width-final space
-insert servermsglogged : +0 MSG :foo.bar.baz 001 foo :456789 123456789 123456789 123456789 123456789 1
-line 20 on_black,bright_white < §§:§§:§§ :foo.bar.baz 001 foo :456789 123456789 123456789 123456789 123456789§§
+insert servermsglogged : +0 MSG :foo.bar.baz 002 foo :456789 123456789 123456789 123456789 123456789 1
+line 20 on_black,bright_white < §§:§§:§§ :foo.bar.baz 002 foo :456789 123456789 123456789 123456789 123456789§§
line 21 on_black,bright_white 1§§
# check wrap if item starts right after space after item extending to end of width
-insert servermsglogged : +0 MSG :foo.bar.baz 001 foo :456789 123456789 123456789 123456789 1234567890 2
-line 20 on_black,bright_white < §§:§§:§§ :foo.bar.baz 001 foo :456789 123456789 123456789 123456789 1234567890§§
+insert servermsglogged : +0 MSG :foo.bar.baz 002 foo :456789 123456789 123456789 123456789 1234567890 2
+line 20 on_black,bright_white < §§:§§:§§ :foo.bar.baz 002 foo :456789 123456789 123456789 123456789 1234567890§§
line 21 on_black,bright_white 2§§
# check wrap if item starts right after double-space after item extending to end of width
-insert servermsglogged : +0 MSG :foo.bar.baz 001 foo :456789 123456789 123456789 123456789 1234567890 3
-line 20 on_black,bright_white < §§:§§:§§ :foo.bar.baz 001 foo :456789 123456789 123456789 123456789 1234567890§§
+insert servermsglogged : +0 MSG :foo.bar.baz 002 foo :456789 123456789 123456789 123456789 1234567890 3
+line 20 on_black,bright_white < §§:§§:§§ :foo.bar.baz 002 foo :456789 123456789 123456789 123456789 1234567890§§
line 21 on_black,bright_white 3§§
# check wrap on item too large to fit into screen width minus indent
-insert servermsglogged : +0 MSG :foo.bar.baz 001 foo :2345678_1_2345678_2_2345678_3_2345678_4_2345678_5_2345678_6_2345678_7_2345678
-line 19 on_black,bright_white < §§:§§:§§ :foo.bar.baz 001 foo§§
+insert servermsglogged : +0 MSG :foo.bar.baz 002 foo :2345678_1_2345678_2_2345678_3_2345678_4_2345678_5_2345678_6_2345678_7_2345678
+line 19 on_black,bright_white < §§:§§:§§ :foo.bar.baz 002 foo§§
line 20 on_black,bright_white :2345678_1_2345678_2_2345678_3_2345678_4_2345678_5_2345678_6_2345678_7_234567§§
line 21 on_black,bright_white 8
# check wrapping calculation on double-width character (tbh not much of a test since the tester itself counts specifically this char as two, so it's pretty much the same as above testing with a sequence of two ASCII chars; mostly just ensures that the wrapping code relies on Terminal.length_to_term)
-insert servermsglogged-and-line-unwrapped : +0 XXX :foo.bar.baz 001 foo :456789 123456789 123456789 123456789 1234567 💓
-insert servermsglogged : +0 MSG :foo.bar.baz 001 foo :456789 123456789 123456789 123456789 12345678 💓
-line 20 on_black,bright_white < §§:§§:§§ :foo.bar.baz 001 foo :456789 123456789 123456789 123456789 12345678§§
+insert servermsglogged-and-line-unwrapped : +0 XXX :foo.bar.baz 002 foo :456789 123456789 123456789 123456789 1234567 💓
+insert servermsglogged : +0 MSG :foo.bar.baz 002 foo :456789 123456789 123456789 123456789 12345678 💓
+line 20 on_black,bright_white < §§:§§:§§ :foo.bar.baz 002 foo :456789 123456789 123456789 123456789 12345678§§
line 21 on_black,bright_white 💓§§
-insert servermsglogged : +0 MSG :foo.bar.baz 001 foo :2345678_1_2345678_2_2345678_3_2345678_4_2345678_5_2345678_6_2345678_7_23456💓
-line 19 on_black,bright_white < §§:§§:§§ :foo.bar.baz 001 foo§§
+insert servermsglogged : +0 MSG :foo.bar.baz 002 foo :2345678_1_2345678_2_2345678_3_2345678_4_2345678_5_2345678_6_2345678_7_23456💓
+line 19 on_black,bright_white < §§:§§:§§ :foo.bar.baz 002 foo§§
line 20 on_black,bright_white :2345678_1_2345678_2_2345678_3_2345678_4_2345678_5_2345678_6_2345678_7_23456§§
line 21 on_black,bright_white 💓§§