--- /dev/null
+insert ./__conn.lib
+# for: attempting, connected
+
+× attempting-to-connected
+insert attempting
+insert connected : +1 WIN_IDS 2
+
+++ /dev/null
-× attempting
-log 1 $ connection_state set to: [connecting]
-log 2 $ attempting connection to HOSTNAME:§§ identifying with …
-
-× attempting-foobarbaz
-insert attempting : +1 HOSTNAME foo.bar.baz
--- /dev/null
+insert ./__conn.lib
+# for: attempting, connect
+
+× connect-bazbarfoo
+insert connect : +3 foo.bar.baz baz.bar.foo
+
+× attempting-bazbarfoo
+insert attempting : +3 foo.bar.baz baz.bar.foo
--- /dev/null
+insert ./__servermsglogged.lib
+
+× cap-msg
+insert servermsglogged : +0 MSG :*.?.net CAP ???
+
+× caps-neg-empty
+insert cap-msg : +0 ??? * LS :
+log 1 > CAP :LIST
+insert cap-msg : +0 ??? * LIST :
+log 1 > CAP :END
+++ /dev/null
-insert ./__servermsglogged.lib
-
-× cap_msg
-insert servermsglogged : +0 MSG :*.?.net CAP ???
-
-× caps-neg-empty
-insert cap_msg : +0 ??? * LS :
-log 1 > CAP :LIST
-insert cap_msg : +0 ??? * LIST :
-log 1 > CAP :END
-
--- /dev/null
+× cmd-disconnect
+> /disconnect
+log 1 > QUIT :ircplom says bye
--- /dev/null
+insert ./__disconnect.lib
+# for: disconnect1
+insert ./__error-to-disconnect.lib
+
+× conn-error
+insert error-to-disconnect :-1 +0 ? §§§
+insert disconnect1 1:-1 +1 WIN_IDS 2
+
--- /dev/null
+insert ./__isupport-clear.lib
+
+× attempting
+log 1 $ connection_state set to: [connecting]
+log 2 $ attempting connection to foo.bar.baz:6697 identifying with …
+log 2 $ - nickname: foo
+log 2 $ - realname: bar
+log 2 $ - username: baz
+log 2 $ - no password
+
+× connect
+> /connect foo.bar.baz:6697 foo bar:baz
+insert isupport-clear : +1
+log 1 $ caps cleared
+log 1 $ users cleared
+log 1 $ channels cleared
+log , $ DISCONNECTED
+log 1 $ hostname set to: [foo.bar.baz]
+log 1 $ port set to: [6697]
+log 1 $ nick_wanted set to: [foo]
+log 1 $ user_wanted set to: [baz]
+log 1 $ realname set to: [bar]
+
+× connected
+log 1 $ connection_state set to: [connected]
+log WIN_IDS $ CONNECTED
+log 1 > CAP LS :302
+log 1 > USER baz 0 * :bar
+log 1 > NICK :foo
--- /dev/null
+insert ./__attempting-to-connected.lib
+# for: attempting-to-connected
+insert ./__conn.lib
+# for: connect
+
+× connect-to-connected
+insert connect : +1
+insert attempting-to-connected : +1
+
+++ /dev/null
-× connected
-log 1 $ connection_state set to: [connected]
-log 2 $ CONNECTED
-log 1 > CAP LS :302
+++ /dev/null
-insert ./__connected.lib
-
-× connected_w_pw_listing
-log 2 $ - PW_LISTING
-insert connected : +1
--- /dev/null
+insert ./__isupport-clear.lib
+
+× disconnect0
+log 1 $ connection_state set to: [EXIT_MSG]
+insert isupport-clear : +1
+log 1 $ caps cleared
+
+× disconnect1
+log 1 $ channels cleared
+log 1 $ connection_state set to: []
+log WIN_IDS $ DISCONNECTED
+log 1 $ users cleared
--- /dev/null
+× enter-list-start
+> /list
+log 0 # windows available via /window:
+log 0 # 0) :start
+++ /dev/null
-× enter-list-start
-> /list
-log 0 # windows available via /window:
-log 0 # 0) :start
--- /dev/null
+× enter-help-win0
+> /help
+log 0 # commands available in this window:
+log 0 # /connect HOST_PORT [NICKNAME_PW] [REALNAME_USERNAME]
+log 0 # /help
+log 0 # /list
+log 0 # /prompt_enter
+log 0 # /quit
+log 0 # /window TOWARDS
+log 0 # /window.history.scroll DIRECTION
+log 0 # /window.paste
+log 0 # /window.prompt.backspace
+log 0 # /window.prompt.move_cursor DIRECTION
+log 0 # /window.prompt.scroll DIRECTION
+
+× enter-unknown
+> /?
+log 0 # invalid prompt command: /? unknown
+
+× enter-unprefixed
+> ?
+log 0 # invalid prompt command: not prefixed by /
--- /dev/null
+insert ./__disconnect.lib
+# for: disconnect0
+insert ./__servermsglogged.lib
+
+× error-to-disconnect
+insert servermsglogged : +0 MSG ERROR :?
+insert disconnect0 : +1 EXIT_MSG ?
+
+++ /dev/null
-× isupport-clear
-log 1 $ isupport cleared
-log 1 $ isupport:CHANTYPES set to: [#&]
-log 1 $ isupport:PREFIX set to: [(ov)@+]
-log 1 $ isupport:USERLEN set to: [10]
-
-× init-clear-hostname
-insert isupport-clear : +1
-log 1 $ caps cleared
-log 1 $ users cleared
-log 1 $ channels cleared
-log , $ DISCONNECTED
-log 1 $ hostname set to: [HOSTNAME]
--- /dev/null
+× isupport-clear
+log 1 $ isupport cleared
+log 1 $ isupport:CHANTYPES set to: [#&]
+log 1 $ isupport:PREFIX set to: [(ov)@+]
+log 1 $ isupport:USERLEN set to: [10]
--- /dev/null
+insert ./__disconnect.lib
+# for: disconnect0, disconnect1
+insert ./__retry-in.lib
+
+× no-timely-pong
+servermsg 0 timeout
+servermsg 0 no timely PONG from server
+insert disconnect0 :-1 +1 EXIT_MSG broken: no timely PONG from server
+insert disconnect1 1:-1 +1 WIN_IDS 2
+insert retry-in : +1 ? 1
--- /dev/null
+× retry-in
+log 1 $ will retry connecting in ? seconds
+++ /dev/null
-× enter-unprefixed
-> ?
-log 0 # invalid prompt command: not prefixed by /
-
-× enter-unknown
-> /?
-log 0 # invalid prompt command: /? unknown
-
-× enter-help-win0
-> /help
-log 0 # commands available in this window:
-log 0 # /connect HOST_PORT [NICKNAME_PW] [REALNAME_USERNAME]
-log 0 # /help
-log 0 # /list
-log 0 # /prompt_enter
-log 0 # /quit
-log 0 # /window TOWARDS
-log 0 # /window.history.scroll DIRECTION
-log 0 # /window.paste
-log 0 # /window.prompt.backspace
-log 0 # /window.prompt.move_cursor DIRECTION
-log 0 # /window.prompt.scroll DIRECTION
-insert ./__attempting.lib
-insert ./__connected.lib
-insert ./__init_clear_hostname.lib
-
-× identifiers
-log 2 $ - nickname: foo
-log 2 $ - realname: baz
-log 2 $ - username: foobarbazquux
-log 2 $ - password: bar
-
-× attempting-bazbarfoo
-insert attempting : +3 HOSTNAME baz.bar.foo
+insert ./__attempting-to-connected.lib
+insert ./__bazbarfoo.lib
+# for: attempting-bazbarfoo, connect-bazbarfoo
+insert ./__conn.lib
+# for: attempting, connect, connected
+insert ./__cmd-disconnect.lib
+insert ./__enter-list-start.lib
+insert ./__no-timely-pong.lib
+insert ./__retry-in.lib
× fake-testing-timeout
log 1 $ connection_state set to: [failed to connect: FAKE TESTING TIMEOUT]
insert retry-in : +1 ? §§
-× port
-log 1 $ port set to: [§]
-
-× conn-config
-insert identifiers : +2
-insert port : +1 § ?
-
-× retry-in
-log 1 $ will retry connecting in ? seconds
-
-× conns-init
-insert port : +1 § §§
-log 1 $ nick_wanted set to: [foo]
-log 1 $ user_wanted set to: [foobarbazquux]
-log 1 $ realname set to: [baz]
-log 1 $ password set to: [bar]
-
-× conn
-insert identifiers : +2
-insert connected
-log 1 > USER foobarbazquux 0 * :baz
-log 1 > NICK :foo
-
× ×××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××
# NB: FakeIrcConnection on any port > 10000 will fail connecting with a timeout
# the TestingClient meanwhile will decrement any port of that range by 1 after
# each started connection attempt
-> /connect foo.bar.baz:10003 foo:bar baz:foobarbazquux
-insert init-clear-hostname : +1 HOSTNAME foo.bar.baz
-insert conns-init : +1 §§ 10003
+insert connect : +1 6697 10003
# check increase of retry waits
-insert attempting-foobarbaz : +1 §§ 10003
-insert conn-config : +1 ? 10002
+insert attempting : +1 6697 10003
+log 1 $ port set to: [10002]
insert fake-testing-timeout : +1 §§ 1
#
-insert attempting-foobarbaz : +1 §§ 10002
-insert conn-config : +1 ? 10001
+insert attempting : +1 6697 10002
+log 1 $ port set to: [10001]
insert fake-testing-timeout : +1 §§ 2
#
-insert attempting-foobarbaz : +1 §§ 10001
-insert conn-config : +1 ? 10000
+insert attempting : +1 6697 10001
+log 1 $ port set to: [10000]
insert fake-testing-timeout : +1 §§ 4
# check connecting works with TestingClient port finally reduced to 10000
-insert attempting-foobarbaz : +1 §§ 10000
-insert conn
+insert attempting-to-connected : +1 6697 10000
# check retry chain also started by in-connection timeout
servermsg 0 timeout
log 1 > PING :what's up?
-servermsg 0 timeout
-servermsg 0 no timely PONG from server
-log 1 $ connection_state set to: [broken: no timely PONG from server]
-insert isupport-clear
-log 1 $ connection_state set to: []
-log 2 $ DISCONNECTED
-insert retry-in : +1 ? 1
+insert no-timely-pong
# check /disconnect aborts retry chain
> /window 1
wait 1
# connect to second server to check timed auto-retries don't activate after manual intervention
-> /connect baz.bar.foo:10001 foo:bar baz:foobarbazquux
-insert init-clear-hostname : +3 HOSTNAME baz.bar.foo
-insert conns-init : +3 §§ 10001
-insert attempting-bazbarfoo : +3 §§ 10001
-insert conn-config : +3 ? 10000
+insert connect-bazbarfoo : +3 6697 10001
+insert attempting-bazbarfoo : +3 6697 10001
+log 3 $ port set to: [10000]
insert fake-testing-timeout : +3 §§ 1
# during retry-wait /reconnect, then wait announced duration to check nothing else happens
> /window 3
> /reconnect
-insert attempting-bazbarfoo : +3 §§ 10000
-insert conn : +3
+insert attempting-bazbarfoo : +3 6697 10000
+insert connected : +3 WIN_IDS 2
wait 1
# same way ensure retry chain wasn't solely blocked by being connected
-> /disconnect
-log 3 > QUIT :ircplom says bye
+insert cmd-disconnect : +3
wait 1
-insert ./__attempting.lib
-insert ./__caps_neg_empty.lib
-insert ./__connected_w_pw_listing.lib
-insert ./__init_clear_hostname.lib
+insert ./__attempting-to-connected.lib
+insert ./__connect-to-connected.lib
+insert ./__caps.lib
+# for: cap-msg, caps-neg-empty
+insert ./__cmd-disconnect.lib
+insert ./__disconnect.lib
+# for: disconnect1
+insert ./__error-to-disconnect.lib
insert ./__servermsglogged.lib
-× connecting
-insert attempting-foobarbaz : +1 §§ 6697
-log 2 $ - nickname: foo
-log 2 $ - realname: bar
-log 2 $ - username: baz
-insert connected_w_pw_listing : +1 PW_LISTING no password
-log 1 > USER baz 0 * :bar
-log 1 > NICK :foo
-
× disconnect-init
-> /disconnect
-log 1 > QUIT :ircplom says bye
-insert servermsglogged : +0 MSG ERROR :Closing link: ircplom says bye
-log 1 $ connection_state set to: [Closing link: ircplom says bye]
-insert isupport-clear
+insert cmd-disconnect : +1
+insert error-to-disconnect : +0 ? Closing link: ircplom says bye
× later-disconnect-to-reconnect
-log 1 $ connection_state set to: []
-log 2 $ DISCONNECTED
+insert disconnect1 1:-1 +1 WIN_IDS 2
> /reconnect
-insert connecting
+insert attempting-to-connected : +1
× disconnect-to-reconnect-clear-caps
insert disconnect-init
-log 1 $ caps cleared
insert later-disconnect-to-reconnect
× ×--------------------------
-> /connect foo.bar.baz:6697 foo bar:baz
-insert init-clear-hostname : +1 HOSTNAME foo.bar.baz
-log 1 $ port set to: [6697]
-log 1 $ nick_wanted set to: [foo]
-log 1 $ user_wanted set to: [baz]
-log 1 $ realname set to: [bar]
-insert connecting
+insert connect-to-connected
# check handling of empty caps list
insert caps-neg-empty
> /window 2
-insert disconnect-init
+insert disconnect-init :-1
insert later-disconnect-to-reconnect
# check full, alphabetical processing of multi-line responses
-insert cap_msg : +0 ??? * LS * :foo bar baz
-insert cap_msg : +0 ??? * LS * :oof rab zab
-insert cap_msg : +0 ??? * LS :ofo rba zba
+insert cap-msg : +0 ??? * LS * :foo bar baz
+insert cap-msg : +0 ??? * LS * :oof rab zab
+insert cap-msg : +0 ??? * LS :ofo rba zba
log 1 $ caps:bar:data set to: []
log 1 $ caps:baz:data set to: []
log 1 $ caps:foo:data set to: []
log 1 $ caps:zab:data set to: []
log 1 $ caps:zba:data set to: []
log 1 > CAP :LIST
-insert cap_msg : +0 ??? * LIST * :foo rab oof
-insert cap_msg : +0 ??? * LIST :zab rba
+insert cap-msg : +0 ??? * LIST * :foo rab oof
+insert cap-msg : +0 ??? * LIST :zab rba
log 1 $ caps:foo:enabled set to: [True]
log 1 $ caps:oof:enabled set to: [True]
log 1 $ caps:rab:enabled set to: [True]
log 1 $ caps:sasl:data set to: []
log 1 > CAP REQ :sasl
log 1 > CAP :LIST
-insert cap_msg : +0 ??? * NAK :sasl
-insert cap_msg : +0 ??? * LIST :
+insert cap-msg : +0 ??? * NAK :sasl
+insert cap-msg : +0 ??? * LIST :
log 1 > CAP :END
insert disconnect-to-reconnect-clear-caps
# check REQ for "sasl" with PLAIN successful (but for lack of password, negotiation still ending instantly)
-insert cap_msg : +0 ??? * LS :sasl=PLAIN
+insert cap-msg : +0 ??? * LS :sasl=PLAIN
log 1 $ caps:sasl:data set to: []
log 1 $ caps:sasl:data set to: [PLAIN]
log 1 > CAP REQ :sasl
log 1 > CAP :LIST
-insert cap_msg : +0 ??? * ACK :sasl
-insert cap_msg : +0 ??? * LIST :sasl
+insert cap-msg : +0 ??? * ACK :sasl
+insert cap-msg : +0 ??? * LIST :sasl
log 1 $ caps:sasl:enabled set to: [True]
log 1 > CAP :END
log 1 $ users:me:nick set to: [foo]
# check NEW, DEL working after CAP :END
-insert cap_msg : +0 ??? foo NEW :foo bar=baz
+insert cap-msg : +0 ??? foo NEW :foo bar=baz
log 1 $ caps:bar:data set to: []
log 1 $ caps:bar:data set to: [baz]
log 1 $ caps:foo:data set to: []
-insert cap_msg : +0 ??? foo DEL :sasl foo
+insert cap-msg : +0 ??? foo DEL :sasl foo
log 1 $ caps:foo cleared
log 1 $ caps:sasl cleared
-insert ./__attempting.lib
-insert ./__caps_neg_empty.lib
-insert ./__init_clear_hostname.lib
+insert ./__caps.lib
+# for: caps-neg-empty
+insert ./__cmd-disconnect.lib
+insert ./__conn.lib
+# for: attempting, connected
+insert ./__connect-to-connected.lib
+insert ./__disconnect.lib
+# for: disconnect0, disconnect1
+insert ./__error-to-disconnect.lib
insert ./__servermsglogged.lib
× JOIN0
insert part1 : +1 CHANNEL #ch_test1
× conn-init
-insert attempting-foobarbaz : +1 §§ 6697
-log 2 $ - nickname: foo
-log 2 $ - realname: bar
-log 2 $ - username: baz
-log 2 $ - no password
-log 1 $ connection_state set to: [connected]
-log WIN_IDS $ CONNECTED
-log 1 > CAP LS :302
-log 1 > USER baz 0 * :bar
-log 1 > NICK :foo
insert caps-neg-empty
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 > PRIVMSG #ch_test0 :TXT
log 3 > [foo] TXT
-× disconnect
-log 1 $ connection_state set to: [EXIT_MSG]
-insert isupport-clear
-log 1 $ channels cleared
-log 1 $ connection_state set to: []
-log 2,3,4 $ DISCONNECTED
-log 1 $ users cleared
-
× reconnect
> /reconnect
-insert conn-init : +0 WIN_IDS 2,3,4
+insert attempting : +1
+insert connected : +1 WIN_IDS 2,3,4
+insert conn-init
insert identifying-join-ch_test0
insert join-empty : +0 CHANNEL #ch_test0
log 3 $ residents: foo
× ×--------------------------
-> /connect foo.bar.baz:6697 foo bar:baz
-insert init-clear-hostname : +1 HOSTNAME foo.bar.baz
-log 1 $ port set to: [6697]
-log 1 $ nick_wanted set to: [foo]
-log 1 $ user_wanted set to: [baz]
-log 1 $ realname set to: [bar]
-insert conn-init : +0 WIN_IDS 2
+insert connect-to-connected
+insert conn-init
# check inability to privmsg into channel not yet joined
> /window 2
# check effects of own QUIT while present in one channel
insert part-ch_test1
-> /disconnect
-log 1 > QUIT :ircplom says bye
+insert cmd-disconnect
insert servermsglogged : +0 MSG :foo!~foobarbaz@baz.bar.foo QUIT :Client Quit
log 1 $ users:me:exit_msg set to: [QClient Quit]
log , $ foo!~foobarbaz@baz.bar.foo quits: Client Quit
log 1 $ channels:#ch_test0:user_ids set to: [2], [4], [6]
log 3 $ foo!~foobarbaz@baz.bar.foo quits: Client Quit
log 1 $ channels:#ch_test0:exits:me cleared
-insert servermsglogged : +0 MSG ERROR :Closing link: (~foobarbaz@baz.bar.foo) [Quit: ircplom says bye]
-insert disconnect : +1 EXIT_MSG Closing link: (~foobarbaz@baz.bar.foo) [Quit: ircplom says bye]
+insert error-to-disconnect :-1 +0 ? Closing link: Closing link: (~foobarbaz@baz.bar.foo) [Quit: ircplom says bye]
+insert disconnect1 : +1 WIN_IDS 2,3,4
# check /reconnect calling auto-rejoin on the one channel inhabited on previous leaving
insert reconnect
# check same mechanism holding on externally triggered disconnect
servermsg 0 FAKE_IRC_CONN_ABORT_EXCEPTION
-insert disconnect : +1 EXIT_MSG broken: FAKE_IRC_CONN_ABORT_EXCEPTION
+insert disconnect0 :-1 +1 EXIT_MSG broken: FAKE_IRC_CONN_ABORT_EXCEPTION
+insert disconnect1 : +1 WIN_IDS 2,3,4
log 1 $ will retry connecting in 1 seconds
insert reconnect
-insert ./__attempting.lib
-insert ./__connected_w_pw_listing.lib
-insert ./__init_clear_hostname.lib
+insert ./__conn.lib
+# for: attempting, connect, connected
× ×---------------------------------------------------
log 0 # Found config at tests/config.toml, reading …
log 0 # Connecting: {'hostname': 'foo.bar.baz', 'nickname': 'foo', 'password': 'supersecret', 'username': 'baz', 'realname': 'bar', 'port': 1234, 'channels': ['#test', '##testtest']}
-insert init-clear-hostname : +1 HOSTNAME foo.bar.baz
-log 1 $ port set to: [1234]
-log 1 $ nick_wanted set to: [foo]
-log 1 $ user_wanted set to: [baz]
-log 1 $ realname set to: [bar]
+
+insert connect 1: +1 6697 1234
log 1 $ password set to: [supersecret]
-insert attempting-foobarbaz : +1 §§ 1234
-log 2 $ - nickname: foo
-log 2 $ - realname: bar
-log 2 $ - username: baz
-insert connected_w_pw_listing : +1 PW_LISTING password: supersecret
-log 1 > USER baz 0 * :bar
-log 1 > NICK :foo
+insert attempting :-1 +1 6697 1234
+log 2 $ - password: supersecret
+insert connected : +1 WIN_IDS 2
-insert ./__attempting.lib
-insert ./__connected_w_pw_listing.lib
-insert ./__init_clear_hostname.lib
-insert ./__servermsglogged.lib
-
-× conn-error
-insert servermsglogged : +0 MSG ERROR :Closing link: ???
-log 1 $ connection_state set to: [Closing link: ???]
-insert isupport-clear
-log 1 $ connection_state set to: []
-log 2 $ DISCONNECTED
-
-× connecting
-insert attempting-foobarbaz : +1 §§ 6697
-log 2 $ - nickname: foo
-log 2 $ - realname: bar
-log 2 $ - username: baz
-insert connected_w_pw_listing : +1 PW_LISTING no password
-log 1 > USER baz 0 * :bar
-log 1 > NICK :foo
+insert ./__attempting-to-connected.lib
+insert ./__cmd-disconnect.lib
+insert ./__conn.lib
+# for: connect
+insert ./__conn-error.lib
+insert ./__disconnect.lib
+# for: disconnect1
+insert ./__error-to-disconnect.lib
+insert ./__retry-in.lib
× ×××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××
# to prepare, initiate connection
-> /connect foo.bar.baz foo bar:baz
-insert init-clear-hostname : +1 HOSTNAME foo.bar.baz
-log 1 $ port set to: [-1]
-log 1 $ nick_wanted set to: [foo]
-log 1 $ user_wanted set to: [baz]
-log 1 $ realname set to: [bar]
-log 1 $ port set to: [6697]
-insert connecting
+insert connect
+insert attempting-to-connected
# fail to reconnect while connected
> /window 1
log 1 $ not re-connecting since already connected
# handle /disconnect on being connected
-> /disconnect
-log 1 > QUIT :ircplom says bye
-insert conn-error : +0 ??? (whatever@whatever.com) [Quit: ircplom says bye]
+insert cmd-disconnect
+insert conn-error : +0 §§§ Closing link: (whatever@whatever.com) [Quit: ircplom says bye]
# fail to disconnect when already disconnected
> /disconnect
# succeed to re-connect after disconnect
> /reconnect
-insert connecting
+insert attempting-to-connected
# allow /disconnect outside connection for auto-connect stops
-insert conn-error : +0 ??? (Connection timed out)
-log 1 $ will retry connecting in 1 seconds
+insert conn-error : +0 §§§ Closing link: (Connection timed out)
+insert retry-in : +1 ? 1
> /disconnect
log 1 $ already disconnected, stopped connecting attempts
-insert ./__attempting.lib
-insert ./__connected_w_pw_listing.lib
-insert ./__init_clear_hostname.lib
-insert ./__servermsglogged.lib
-
-× connecting
-insert attempting-foobarbaz : +1 §§ 6697
-log 2 $ - nickname: foo
-log 2 $ - realname: bar
-log 2 $ - username: baz
-insert connected_w_pw_listing : +1 PW_LISTING no password
-log 1 > USER baz 0 * :bar
-log 1 > NICK :foo
-
-× disconnecting
-insert isupport-clear
-log 1 $ connection_state set to: []
-log 2 $ DISCONNECTED
-
-× retry
-log 1 $ will retry connecting in 1 seconds
-
-× conn-error
-insert servermsglogged : +0 MSG ERROR :?
-log 1 $ connection_state set to: [?]
-insert disconnecting
+insert ./__attempting-to-connected.lib
+insert ./__conn-error.lib
+insert ./__connect-to-connected.lib
+insert ./__disconnect.lib
+# for: disconnect1
+insert ./__error-to-disconnect.lib
+insert ./__retry-in.lib
× reconnect-error-logged
> /reconnect
-insert connecting
-insert conn-error : +0 ? XXX
+insert attempting-to-connected
+insert conn-error : +0 §§§ XXX
× ×××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××
# to prepare first test, initiate connected state
-> /connect foo.bar.baz foo bar:baz
-insert init-clear-hostname : +1 HOSTNAME foo.bar.baz
-log 1 $ port set to: [-1]
-log 1 $ nick_wanted set to: [foo]
-log 1 $ user_wanted set to: [baz]
-log 1 $ realname set to: [bar]
-log 1 $ port set to: [6697]
-insert connecting
+insert connect-to-connected
# test default ERROR handling
-insert conn-error : +0 ? abc def ghi
+insert conn-error : +0 §§§ abc def ghi
# test ERROR regex (non-)matches
> /window 1
insert reconnect-error-logged : +0 XXX Closing link: (this should not match)
insert reconnect-error-logged : +0 XXX Closing link: (Connection timed out)
-insert retry
+insert retry-in : +1 ? 1
insert reconnect-error-logged : +0 XXX closing Link: (connection timed out)
-insert retry
+insert retry-in : +1 ? 1
insert reconnect-error-logged : +0 XXX Closing link: (Ping timeout: 240 seconds)
-insert retry
+insert retry-in : +1 ? 1
-insert ./__attempting.lib
-insert ./__connected_w_pw_listing.lib
-insert ./__init_clear_hostname.lib
+insert ./__conn.lib
+# for: attempting, connected
+insert ./__connect-to-connected.lib
+insert ./__no-timely-pong.lib
insert ./__servermsglogged.lib
-× conn
-insert attempting-foobarbaz : +1 §§ 6697
-log 2 $ - nickname: foo
-log 2 $ - realname: baz
-log 2 $ - username: foobarbazquux
-insert connected_w_pw_listing : +1 PW_LISTING password: bar
-log 1 > USER foobarbazquux 0 * :baz
-log 1 > NICK :foo
-
× trigger-ping
servermsg 0 timeout
log 1 > PING :what's up?
log 2 < (server) *** Looking up your ident...
# another timeout instead of pong? disconnect
insert trigger-ping
-servermsg 0 timeout
-servermsg 0 no timely PONG from server
-log 1 $ connection_state set to: [broken: no timely PONG from server]
-insert isupport-clear
-log 1 $ connection_state set to: []
-log 2 $ DISCONNECTED
-log 1 $ will retry connecting in 1 seconds
+insert no-timely-pong
× ×××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××
-> /connect foo.bar.baz foo:bar baz:foobarbazquux
-insert init-clear-hostname : +1 HOSTNAME foo.bar.baz
-log 1 $ port set to: [-1]
-log 1 $ nick_wanted set to: [foo]
-log 1 $ user_wanted set to: [foobarbazquux]
-log 1 $ realname set to: [baz]
-log 1 $ password set to: [bar]
-log 1 $ port set to: [6697]
-insert conn
+insert connect-to-connected
# ensure we PONG properly
insert servermsglogged : +0 MSG PING :?
# on re-connect, ensure timer cleared, i.e. only 2nd time-out will disconnect
> /window 1
> /reconnect
-insert conn
+insert attempting
+insert connected : +1 WIN_IDS 2
insert full-timeout
-insert ./__attempting.lib
-insert ./__connected_w_pw_listing.lib
-insert ./__init_clear_hostname.lib
+insert ./__bazbarfoo.lib
+# for: attempting-bazbarfoo, connect-bazbarfoo
+insert ./__cmd-disconnect.lib
+insert ./__conn.lib
+# for: attempting, connect, connected
+insert ./__disconnect.lib
+# for: disconnect0, disconnect1
+insert ./__enter-list-start.lib
+insert ./__error-to-disconnect.lib
+insert ./__isupport-clear.lib
+insert ./__retry-in.lib
insert ./__servermsglogged.lib
-insert ./__enter_list.lib
-× attempting-6697
-insert attempting : +1 §§ 6697
-× servernotice
-insert servermsglogged : +0 MSG :*.?.net NOTICE * :XXX
-log 2 < (server) XXX
-
-× conn_init_0
-insert attempting-foobarbaz : +1 §§ 6697
-log 2 $ - nickname: foo
-log 2 $ - realname: baz
-log 2 $ - username: foobarbazquux
× conn_init_1
-log 1 > USER foobarbazquux 0 * :baz
-log 1 > NICK :foo
# expect some NOTICE and PING to process/reply during initiation
insert servernotice : +0 XXX *** Looking up your ident...
insert servernotice : +0 XXX *** Found your hostname (baz.bar.foo)
insert servermsglogged : +0 MSG PING :?
log 1 > PONG :?
+
# handle 433
insert servermsglogged : +0 MSG :*.?.net 433 * foo :Nickname already in use
log 1 $ nickname already in use, trying increment
insert servermsglogged : +0 MSG :*.?.net 433 * foo0 :Nickname already in use
log 1 $ nickname already in use, trying increment
log 1 > NICK :foo1
+
# collect server capabilities
insert servermsglogged : +0 MSG :*.?.net CAP * LS : foo bar sasl=PLAIN,EXTERNAL baz cap-notify
log 1 $ caps:bar:data set to: []
insert servermsglogged : +0 MSG :*.?.net CAP * LIST :cap-notify sasl
log 1 $ caps:cap-notify:enabled set to: [True]
log 1 $ caps:sasl:enabled set to: [True]
+
# authenticate via SASL, collect items of user identity
log 1 $ sasl_auth_state set to: [attempting]
log 1 > AUTHENTICATE :PLAIN
log 1 $ sasl_account set to: [foo]
insert servermsglogged : +0 MSG :foo.bar.baz 903 foo1 :SASL authentication successful
log 1 $ sasl_auth_state set to: [SASL authentication successful]
+
# finish CAP negotation, thus login procedure
log 1 > CAP :END
+
+
× conn_init_2
+
# of all pre-MOTD greeting messages, only process isupports
insert servermsglogged : +0 MSG :foo.bar.baz 001 foo1 :Welcome to the foo.bar.baz network
insert servermsglogged : +0 MSG :foo.bar.baz 002 foo1 :Your host is foo.bar.baz
insert servermsglogged : +0 MSG :foo.bar.baz 265 foo1 100 150 :Current local users 100, max 150
insert servermsglogged : +0 MSG :foo.bar.baz 266 foo1 1010 1050 :Current global users 1010, max 1050
insert servermsglogged : +0 MSG :foo.bar.baz 250 foo1 :Highest connection count: 151 (150 clients) (1080 connections received)
+
# collect MOTD into a single output (rather than line-by-line)
insert servermsglogged : +0 MSG :foo.bar.baz 375 foo1 :- foo.bar.baz Message of the Day -
insert servermsglogged : +0 MSG :foo.bar.baz 372 foo1 :- Howdy! -
log 2 $ - Howdy! -
log 2 $ - Welcome! -
log 2 $ - (to this server) -
+
# collect user mode
insert servermsglogged : +0 MSG :foo1 MODE foo1 :+Ziw
log 1 $ users:me:modes set to: [+Ziw]
insert servermsglogged : +0 MSG :SaslServ!SaslServ@services.bar.baz NOTICE foo1 :Last login from ~foobarbaz@foo.bar.baz on Jan 1 22:00:00 2021 +0000.
log 3 < (SaslServ) Last login from ~foobarbaz@foo.bar.baz on Jan 1 22:00:00 2021 +0000.
+
+
× during_conn
+
# test recoverable 432
> /nick @foo
log 1 > NICK :@foo
insert servermsglogged : +0 MSG :*.?.net 432 foo1 @foo :Erroneous nickname
log 1 $ nickname refused for bad format, keeping current one
+
# join channel, collect topic, residents; update me:user from JOIN message; ensure topic.who not affecting users DB
> /join #test
log 1 > JOIN :#test
insert servermsglogged : +0 MSG :foo.bar.baz 366 foo1 #test :End of /NAMES list.
log 1 $ channels:#test:user_ids set to: [1], [me]
log 4 $ residents: bar, foo1
+
# deliver PRIVMSG to channel window, update sender's user+host from metadata
insert servermsglogged : +0 MSG :bar!~bar@bar.bar PRIVMSG #test :hi there
log 1 $ users:1:user set to: [~bar]
log 1 $ users:1:host set to: [bar.bar]
log 4 < [bar] hi there
+
# check _changing_ TOPIC message is communicated to channel window, as long as either content or who change
insert servermsglogged : +0 MSG :bar!~bar@bar.bar TOPIC #test :foo bar baz
log 1 $ channels:#test:topic set to: [Topic(what='foo bar baz', who=NickUserHost(nick='bar', user='~bar', host='bar.bar'))]
insert servermsglogged : +0 MSG :bar!~bar@bar.bar TOPIC #test :abc def ghi
log 1 $ channels:#test:topic set to: [Topic(what='abc def ghi', who=NickUserHost(nick='bar', user='~bar', host='bar.bar'))]
log 4 $ bar!~bar@bar.bar set topic: abc def ghi
+
# process non-self channel JOIN
insert servermsglogged : +0 MSG :baz!~baz@baz.baz JOIN :#test
log 1 $ users:2:nick set to: [?]
log 1 $ users:2:host set to: [baz.baz]
log 1 $ channels:#test:user_ids set to: [1], [2], [me]
log 4 $ baz!~baz@baz.baz joins
+
# join second channel with partial residents identity to compare distribution of resident-specific messages
> /join #testtest
log 1 > JOIN :#testtest
insert servermsglogged : +0 MSG :foo.bar.baz 366 foo1 #testtest :End of /NAMES list.
log 1 $ channels:#testtest:user_ids set to: [2], [me]
log 5 $ residents: baz, foo1
+
# handle query window with known user
insert servermsglogged : +0 MSG :baz!~baz@baz.baz PRIVMSG foo1 :hi there
log 6 < [baz] hi there
log 6 > [foo1] hello, how is it going
insert servermsglogged : +0 MSG :baz!~baz@baz.baz PRIVMSG foo1 :fine!
log 6 < [baz] fine!
+
# handle failure to query absent user
> /privmsg barbar hello!
log 1 > PRIVMSG barbar :hello!
log 7 > [foo1] hello!
insert servermsglogged : +0 MSG :*.?.net 401 foo1 barbar :No such nick/channel
log 7 $ barbar not online
+
# handle non-self renaming
insert servermsglogged : +0 MSG :baz!~baz@baz.baz NICK :bazbaz
log 1 $ users:2:nick set to: [bazbaz]
log 4,5,6 $ baz!~baz@baz.baz renames bazbaz
+
# handle non-self PART in one of two inhabited channels, preserve identity into re-JOIN
insert servermsglogged : +0 MSG :bazbaz!~baz@baz.baz PART :#test
log 1 $ channels:#test:exits:2 set to: [P]
insert servermsglogged : +0 MSG :bazbaz!~baz@baz.baz JOIN :#test
log 1 $ channels:#test:user_ids set to: [1], [2], [me]
log 4 $ bazbaz!~baz@baz.baz joins
+
# handle non-self PART in only inhabited channel, lose identity, re-join as new identity
insert servermsglogged : +0 MSG :bar!~bar@bar.bar PART :#test
log 1 $ channels:#test:exits:1 set to: [P]
log 1 $ users:3:host set to: [bar.bar]
log 1 $ channels:#test:user_ids set to: [2], [3], [me]
log 4 $ bar!~bar@bar.bar joins
+
# handle non-self QUIT
insert servermsglogged : +0 MSG :bazbaz!~baz@baz.baz QUIT :Client Quit
log 1 $ users:2:exit_msg set to: [QClient Quit]
log 5 $ bazbaz!~baz@baz.baz quits: Client Quit
log 1 $ channels:#testtest:exits:2 cleared
log 1 $ users:2 cleared
+
# handle self-PART: clear channel, and its squatters
insert servermsglogged : +0 MSG :foo1!~foobarbaz@baz.bar.foo PART :#test
log 1 $ channels:#test:exits:me set to: [P]
log 1 $ channels:#test:exits:me cleared
log 1 $ channels:#test cleared
log 1 $ users:3 cleared
+
# handle lack of implementation
insert servermsglogged : +0 MSG foo bar baz
log 1 $ No handler implemented for: foo bar baz
log 2,3,4,5,6,7 $ No handler implemented for: foo bar baz
+
# handle /disconnect, clear all
-> /disconnect
-log 1 > QUIT :ircplom says bye
+insert cmd-disconnect : +1
insert servermsglogged : +0 MSG :foo1!~foobarbaz@baz.bar.foo QUIT :Client Quit
log 1 $ users:me:exit_msg set to: [QClient Quit]
log 3,6,7 $ foo1!~foobarbaz@baz.bar.foo quits: Client Quit
log 1 $ channels:#testtest:user_ids cleared
log 5 $ foo1!~foobarbaz@baz.bar.foo quits: Client Quit
log 1 $ channels:#testtest:exits:me cleared
-insert servermsglogged : +0 MSG ERROR :Closing link: (~foobarbaz@baz.bar.foo) [Quit: ircplom says bye]
-log 1 $ connection_state set to: [Closing link: (~foobarbaz@baz.bar.foo) [Quit: ircplom says bye]]
-insert isupport-clear
-log 1 $ caps cleared
-log 1 $ channels cleared
-log 1 $ connection_state set to: []
-log 2,3,4,5,6,7 $ DISCONNECTED
+insert error-to-disconnect : +0 ? Closing link: (~foobarbaz@baz.bar.foo) [Quit: ircplom says bye]
+insert disconnect1 :-1 +1 WIN_IDS 2,3,4,5,6,7
log 1 $ motd cleared
log 1 $ sasl_account set to: []
log 1 $ sasl_auth_state set to: []
log 1 $ users cleared
+
# fail to send in disconnect, check alert window is command prompt window
> /window 6
> /privmsg barbar test
> /privmsg #test test
log 1 $ not sending, since not in channel
-× disconnect
-insert isupport-clear : +8
-log 8 $ connection_state set to: []
-log , $ DISCONNECTED
-× ×××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××
-# on /connect init databases, log in new windows
-> /connect foo.bar.baz foo:bar baz:foobarbazquux
-insert init-clear-hostname : +1 HOSTNAME foo.bar.baz
+× servernotice
+insert servermsglogged : +0 MSG :*.?.net NOTICE * :XXX
+log 2 < (server) XXX
+
+× ×××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××
-# connect with values set by /connect, init CAP negotation
-log 1 $ port set to: [-1]
-log 1 $ nick_wanted set to: [foo]
-log 1 $ user_wanted set to: [foobarbazquux]
-log 1 $ realname set to: [baz]
+# on /connect init databases, log in new windows, connect with values set by /connect, init CAP negotiation
+> /connect foo.bar.baz:6697 foo:bar bar:baz
+insert connect 1:
log 1 $ password set to: [bar]
-log 1 $ port set to: [6697]
-insert conn_init_0
-insert connected_w_pw_listing : +1 PW_LISTING password: bar
+insert attempting :-1
+log 2 $ - password: bar
+insert connected : +1 WIN_IDS 2
insert conn_init_1
insert conn_init_2
insert during_conn
# test setting up second client, but 432 irrecoverably
-> /connect baz.bar.foo ?foo foo:foo
-insert init-clear-hostname : +8 HOSTNAME baz.bar.foo
-log 8 $ port set to: [-1]
-log 8 $ nick_wanted set to: [?foo]
-log 8 $ user_wanted set to: [foo]
-log 8 $ realname set to: [foo]
-log 8 $ port set to: [6697]
-insert attempting-6697 : +8 HOSTNAME baz.bar.foo
+> /connect baz.bar.foo:6697 ?foo bar:baz
+insert connect-bazbarfoo 1: +8 [foo] [?foo]
+insert attempting-bazbarfoo :2 +8
log 9 $ - nickname: ?foo
-log 9 $ - realname: foo
-log 9 $ - username: foo
-insert connected_w_pw_listing : +8 PW_LISTING no password
-log 8 > USER foo 0 * :foo
+insert attempting-bazbarfoo 3: +9
+insert connected :-1 +8 WIN_IDS 2
log 8 > NICK :?foo
servermsg 1 :*.?.net 432 * ?foo :Erroneous nickname
log 8 < :*.?.net 432 * ?foo :Erroneous nickname
-insert disconnect :-1 +8
-log 9 $ DISCONNECTED
+insert isupport-clear : +8
+insert disconnect1 1:-1 +8 WIN_IDS 2
log 8 $ nickname refused for bad format, giving up
# zero unread-lines counts in status line so it won't explode simulated screen
> /window 1
# test failing third connection
-> /connect baz.baz.baz baz baz:baz
-insert init-clear-hostname : +10 HOSTNAME baz.baz.baz
-log 10 $ port set to: [-1]
-log 10 $ nick_wanted set to: [baz]
-log 10 $ user_wanted set to: [baz]
-log 10 $ realname set to: [baz]
-log 10 $ port set to: [6697]
-insert attempting-6697 : +10 HOSTNAME baz.baz.baz
-log 11 $ - nickname: baz
-log 11 $ - realname: baz
-log 11 $ - username: baz
-insert connected_w_pw_listing : +10 PW_LISTING no password
-log 10 > USER baz 0 * :baz
-log 10 > NICK :baz
+insert connect : +10 foo.bar.baz baz.baz.baz
+insert attempting : +10 foo.bar.baz baz.baz.baz
+insert connected : +10 WIN_IDS 2
servermsg 2 FAKE_IRC_CONN_ABORT_EXCEPTION
-log 10 $ connection_state set to: [broken: FAKE_IRC_CONN_ABORT_EXCEPTION]
-insert disconnect :-1 +10
-log 11 $ DISCONNECTED
+insert disconnect0 :-1 +10 EXIT_MSG broken: FAKE_IRC_CONN_ABORT_EXCEPTION
+insert disconnect1 1:-1 +10 WIN_IDS 2
log 10 $ will retry connecting in 1 seconds
> /window 10
> /disconnect
# check that (save TUI tests assuming start on window 0, and no 4 yet) on reconnect, all the same effects can be expected
> /reconnect
-insert conn_init_0
+insert attempting :-1
log 2 $ - password: bar
-log 1 $ connection_state set to: [connected]
-log 2,3,4,5,6,7 $ CONNECTED
-log 1 > CAP LS :302
+insert connected : +1 WIN_IDS 2,3,4,5,6,7
insert conn_init_1
insert conn_init_2 :2
log 1 > JOIN :#testtest
insert conn_init_2 2:
-insert during_conn : +0
+insert during_conn
-insert ./__attempting.lib
-insert ./__connected_w_pw_listing.lib
-insert ./__init_clear_hostname.lib
+insert ./__connect-to-connected.lib
+insert ./__enter-list-start.lib
+insert ./__enter_misc.lib
+# for: enter-help-win0, enter-unknown, enter-unprefixed
insert ./__servermsglogged.lib
-insert ./__tui.lib
-insert ./__enter_list.lib
× lines-empty-1
line 0 on_black,bright_white §§
insert line-server-log : +6 ? users cleared
insert line-server-log : +7 ? channels cleared
insert line-server-log : +8 ? hostname set to: [foo.bar.baz]
-insert line-server-log : +9 ? port set to: [-1]
+insert line-server-log : +9 ? port set to: [6697]
insert line-server-log : +10 ? nick_wanted set to: [foo]
insert line-server-log : +11 ? user_wanted set to: [baz]
insert line-server-log : +12 ? realname set to: [bar]
-insert line-server-log : +13 ? port set to: [6697]
-insert line-server-log : +14 ? connection_state set to: [connecting]
-insert line-server-log : +15 ? connection_state set to: [connected]
-insert line-client-msg : +16 ? CAP LS :302
-insert line-client-msg : +17 ? USER baz 0 * :bar
-insert line-client-msg : +18 ? NICK :foo
-insert lines-ping-pong : +19 ?? ?
-insert line-ping : +21 ? 9 123456789 123456789 123456789 123456789 123456789 123456789§§
-insert line-bright-white : +22 ? 123456789 123456789
-insert line-pong : +23 ? 9 123456789 123456789 123456789 123456789 123456789 123456789§§
-insert line-bright-green : +24 ? 123456789 123456789
-insert lines-ping-pong : +25 ?? foo
-insert lines-ping-pong : +27 ?? bar
-insert lines-ping-pong : +29 ?? baz
-insert lines-ping-pong : +31 ?? 0
-insert lines-ping-pong : +33 ?? 1
-insert lines-ping-pong : +35 ?? 2
-insert lines-ping-pong : +37 ?? 3
-insert lines-ping-pong : +39 ?? 4
-insert lines-ping-pong : +41 ?? 5
-insert lines-ping-pong : +43 ?? 6
-insert lines-ping-pong : +45 ?? 7
-insert lines-ping-pong : +47 ?? 8
-insert lines-ping-pong : +49 ?? 9
-insert lines-ping-pong : +51 ?? 10
-insert lines-ping-pong : +53 ?? 11
-insert lines-ping-pong : +55 ?? 12
-insert lines-ping-pong : +57 ?? 13
-insert lines-ping-pong : +59 ?? 14
-insert lines-ping-pong : +61 ?? 15
-insert lines-ping-pong : +63 ?? 16
-insert lines-ping-pong : +65 ?? 17
-insert lines-ping-pong : +67 ?? 18
-insert lines-ping-pong : +69 ?? 19
-insert lines-ping-pong : +71 ?? 20
-insert lines-ping-pong : +73 ?? 21
-insert lines-ping-pong : +75 ?? 22
-insert lines-ping-pong : +77 ?? 23
+insert line-server-log : +13 ? connection_state set to: [connecting]
+insert line-server-log : +14 ? connection_state set to: [connected]
+insert line-client-msg : +15 ? CAP LS :302
+insert line-client-msg : +16 ? USER baz 0 * :bar
+insert line-client-msg : +17 ? NICK :foo
+insert lines-ping-pong : +18 ?? ?
+insert line-ping : +20 ? 9 123456789 123456789 123456789 123456789 123456789 123456789§§
+insert line-bright-white : +21 ? 123456789 123456789
+insert line-pong : +22 ? 9 123456789 123456789 123456789 123456789 123456789 123456789§§
+insert line-bright-green : +23 ? 123456789 123456789
+insert lines-ping-pong : +24 ?? foo
+insert lines-ping-pong : +26 ?? bar
+insert lines-ping-pong : +28 ?? baz
+insert lines-ping-pong : +30 ?? 0
+insert lines-ping-pong : +32 ?? 1
+insert lines-ping-pong : +34 ?? 2
+insert lines-ping-pong : +36 ?? 3
+insert lines-ping-pong : +38 ?? 4
+insert lines-ping-pong : +40 ?? 5
+insert lines-ping-pong : +42 ?? 6
+insert lines-ping-pong : +44 ?? 7
+insert lines-ping-pong : +46 ?? 8
+insert lines-ping-pong : +48 ?? 9
+insert lines-ping-pong : +50 ?? 10
+insert lines-ping-pong : +52 ?? 11
+insert lines-ping-pong : +54 ?? 12
+insert lines-ping-pong : +56 ?? 13
+insert lines-ping-pong : +58 ?? 14
+insert lines-ping-pong : +60 ?? 15
+insert lines-ping-pong : +62 ?? 16
+insert lines-ping-pong : +64 ?? 17
+insert lines-ping-pong : +66 ?? 18
+insert lines-ping-pong : +68 ?? 19
+insert lines-ping-pong : +70 ?? 20
+insert lines-ping-pong : +72 ?? 21
+insert lines-ping-pong : +74 ?? 22
+insert lines-ping-pong : +76 ?? 23
× ×××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××
insert lines-status-prompt-start : +22 X123456789X123456789X =============([(0:1)]
# check that triggering creation of new window with new lines adds it to status, with unread-lines count
-> /connect foo.bar.baz foo bar:baz
-insert init-clear-hostname : +1 HOSTNAME foo.bar.baz
-log 1 $ port set to: [-1]
-log 1 $ nick_wanted set to: [foo]
-log 1 $ user_wanted set to: [baz]
-log 1 $ realname set to: [bar]
-log 1 $ port set to: [6697]
-insert attempting-foobarbaz : +1 §§ 6697
-log 2 $ - nickname: foo
-log 2 $ - realname: bar
-log 2 $ - username: baz
-insert connected_w_pw_listing : +1 PW_LISTING no password
-log 1 > USER baz 0 * :bar
-log 1 > NICK :foo
+insert connect-to-connected
insert lines-empty :20
insert history_0 :1 +20
insert line-scrolldown : +21 XXXXXX [25] v
-insert lines-status-prompt-start : +22 X123456789X123456789X ([(0:1)] (1:19) (2:7)
+insert lines-status-prompt-start : +22 X123456789X123456789X ([(0:1)] (1:18) (2:7)
# check switch to other window, updates to status line (movement of brackets, clearing of own unread-lines count)
> /window 1
-insert lines-empty :3
-insert history_1 :19 +3
+insert lines-empty :4
+insert history_1 :18 +4
insert lines-status-prompt-foobarbaz : +22 X123456789X123456789X =====((0:1) [1] (2:7)
# check switch-back to window 0, retaining clearing of window 1's unread-lines count
# check that second switch to new window, previously left on bottom of history, establishes bookmark at bottom of log
> /window 1
-insert lines-empty :2
-insert history_1 :19 +2
+insert lines-empty :3
+insert history_1 :18 +3
insert line-bookmark : +21
insert lines-status-prompt-foobarbaz : +22 X123456789X123456789X =========(0 [1] (2:7)
# check that switching to window with new lines, but left scroll-to-bottom, keeps the scroll-to-bottom, keeps bookmark after last line previously seen there
> /window 1
-insert history_1 4:19 +0
+insert history_1 3:18 +0
insert line-bookmark : +15
-insert history_1 19:25 +16
+insert history_1 18:24 +16
insert lines-status-prompt-foobarbaz : +22 X123456789X123456789X =========(0 [1] (2:7)
# check that growth below scroll does not by itself re-position bookmark in history
> /window.history.scroll up
insert ping-pong : +0 ? foo
-insert lines-empty :6
-insert history_1 0:15 +6
+insert lines-empty :7
+insert history_1 0:14 +7
insert line-scrolldown : +21 XXXXXX [10] v
insert lines-status-prompt-foobarbaz : +22 X123456789X123456789X =====(0 [(1:2)] (2:7)
> /window.history.scroll down
-insert history_1 5:19 +0
+insert history_1 4:18 +0
insert line-bookmark : +14
-insert history_1 19:25 +15
+insert history_1 18:24 +15
insert line-scrolldown : +21 XXXXXX [2] vv
insert lines-status-prompt-foobarbaz : +22 X123456789X123456789X =====(0 [(1:2)] (2:7)
insert line-bookmark : +21
insert lines-status-prompt-start : +22 X123456789X123456789X =====([0] (1:2) (2:7)
> /window 1
-insert history_1 5:25 +0
+insert history_1 4:24 +0
insert line-bookmark : +20
insert line-scrolldown : +21 XXXXXX [2] vv
insert lines-status-prompt-foobarbaz : +22 X123456789X123456789X =====(0 [(1:2)] (2:7)
insert line-bookmark : +21
insert lines-status-prompt-start : +22 X123456789X123456789X =====([0] (1:4) (2:7)
> /window 1
-insert history_1 5:25 +0
+insert history_1 4:24 +0
insert line-bookmark : +20
insert line-scrolldown : +21 XXXXXX [4] vv
insert lines-status-prompt-foobarbaz : +22 X123456789X123456789X =====(0 [(1:4)] (2:7)
# check same applies when leaving affected window with bookmark out-of-sight
> /window.history.scroll up
-insert lines-empty :6
-insert history_1 :15 +6
+insert lines-empty :7
+insert history_1 :14 +7
insert line-scrolldown : +21 XXXXXX [12] v
insert lines-status-prompt-foobarbaz : +22 X123456789X123456789X =====(0 [(1:4)] (2:7)
> /window 0
insert line-bookmark : +21
insert lines-status-prompt-start : +22 X123456789X123456789X =====([0] (1:6) (2:7)
> /window 1
-insert lines-empty :6
-insert history_1 :15 +6
+insert lines-empty :7
+insert history_1 :14 +7
insert line-scrolldown : +21 XXXXXX [14] v
insert lines-status-prompt-foobarbaz : +22 X123456789X123456789X =====(0 [(1:6)] (2:7)
> /window.history.scroll down
-insert history_1 5:25 +0
+insert history_1 4:24 +0
insert line-bookmark : +20
insert line-scrolldown : +21 XXXXXX [6] vv
insert lines-status-prompt-foobarbaz : +22 X123456789X123456789X =====(0 [(1:6)] (2:7)
> /window.history.scroll down
-insert history_1 10:25 +0
+insert history_1 9:24 +0
insert line-bookmark : +15
-insert history_1 25:31 +16
+insert history_1 24:30 +16
insert lines-status-prompt-foobarbaz : +22 X123456789X123456789X =========(0 [1] (2:7)
# check log growth beyond max depth only remarkable after scrolling up to limit
insert ping-pong : +0 ? 0
-insert history_1 12:25 +0
+insert history_1 11:24 +0
insert line-bookmark : +13
-insert history_1 25:33 +14
+insert history_1 24:32 +14
insert lines-status-prompt-foobarbaz : +22 X123456789X123456789X =========(0 [1] (2:7)
> /window.history.scroll up
-insert history_1 2:23 +0
+insert history_1 1:22 +0
insert line-scrolldown : +21 XXXXXX [9] vv
insert lines-status-prompt-foobarbaz : +22 X123456789X123456789X =========(0 [1] (2:7)
> /window.history.scroll up
insert lines-empty :10
-insert history_1 1:12 +10
+insert history_1 :11 +10
insert line-scrolldown : +21 XXXXXX [19] v
insert lines-status-prompt-foobarbaz : +22 X123456789X123456789X =========(0 [1] (2:7)
> /window.history.scroll up
insert lines-empty :20
-insert history_1 1:2 +20
+insert history_1 :1 +20
insert line-scrolldown : +21 XXXXXX [29] v
insert lines-status-prompt-foobarbaz : +22 X123456789X123456789X =========(0 [1] (2:7)
# check cut-off log growth seen from topmost scroll not affecting scrolldown count, but unread-lines status
insert ping-pong : +0 ? 0
insert lines-empty :20
-insert history_1 3:4 +20
+insert history_1 2:3 +20
insert line-scrolldown : +21 XXXXXX [29] v
insert lines-status-prompt-foobarbaz : +22 X123456789X123456789X =====(0 [(1:2)] (2:7)
# check switching into window scrolled-top with more unread lines than max log depth shrinks former to latter, and scrolling down no bookmark is to be found
> /window 1
insert lines-empty :20
-insert history_1 33:34 +20
+insert history_1 32:33 +20
insert line-scrolldown : +21 XXXXXX [29] v
insert lines-status-prompt-foobarbaz : +22 X123456789X123456789X ====(0 [(1:29)] (2:7)
> /window.history.scroll down
insert lines-empty :9
-insert history_1 33:45 +9
+insert history_1 32:44 +9
insert line-scrolldown : +21 XXXXXX [18] v
insert lines-status-prompt-foobarbaz : +22 X123456789X123456789X ====(0 [(1:18)] (2:7)
> /window.history.scroll down
-insert history_1 35:56 +0
+insert history_1 34:55 +0
insert line-scrolldown : +21 XXXXXX [7] vv
insert lines-status-prompt-foobarbaz : +22 X123456789X123456789X =====(0 [(1:7)] (2:7)
> /window.history.scroll down
-insert history_1 41:61 +0
+insert history_1 40:60 +0
insert lines-status-prompt-foobarbaz : +22 X123456789X123456789X =========(0 [1] (2:7)
# check bookmark remains absent with log growing while scrolled to bottom, …
insert ping-pong : +0 ? 16
-insert history_1 43:63 +0
+insert history_1 42:62 +0
insert lines-status-prompt-foobarbaz : +22 X123456789X123456789X =========(0 [1] (2:7)
# … as well as if further growth happens below scroll
> /window.history.scroll up
insert lines-empty :2
-insert history_1 35:54 +2
+insert history_1 34:53 +2
insert line-scrolldown : +21 XXXXXX [11] v
insert lines-status-prompt-foobarbaz : +22 X123456789X123456789X =========(0 [1] (2:7)
insert ping-pong : +0 ? 17
insert lines-empty :4
-insert history_1 37:54 +4
+insert history_1 36:53 +4
insert line-scrolldown : +21 XXXXXX [13] v
insert lines-status-prompt-foobarbaz : +22 X123456789X123456789X =====(0 [(1:2)] (2:7)
> /window.history.scroll down
-insert history_1 44:65 +0
+insert history_1 43:64 +0
insert line-scrolldown : +21 XXXXXX [2] vv
insert lines-status-prompt-foobarbaz : +22 X123456789X123456789X =====(0 [(1:2)] (2:7)
> /window.history.scroll down
-insert history_1 45:67 +0
+insert history_1 44:66 +0
insert lines-status-prompt-foobarbaz : +22 X123456789X123456789X =========(0 [1] (2:7)
# check unread-lines status not growing beyond max log if within active window, and …
> /window.history.scroll up
insert lines-empty :2
-insert history_1 37:54 +2
+insert history_1 36:53 +2
insert line-scrolldown : +21 XXXXXX [11] v
insert lines-status-prompt-foobarbaz : +22 X123456789X123456789X =========(0 [1] (2:7)
insert ping-pong : +0 ? 18
insert ping-pong : +0 ? 31
insert ping-pong : +0 ? 32
insert lines-empty :20
-insert history_1 67:68 +20
+insert history_1 66:67 +20
insert line-scrolldown : +21 XXXXXX [29] v
insert lines-status-prompt-foobarbaz : +22 X123456789X123456789X ====(0 [(1:29)] (2:7)
insert lines-status-prompt-start : +22 X123456789X123456789X ====([0] (1:29) (2:7)
> /window 1
insert lines-empty :19
-insert history_1 67:68 +19
+insert history_1 66:67 +19
insert line-bookmark : +20
insert line-scrolldown : +21 XXXXXX [29] v
insert lines-status-prompt-foobarbaz : +22 X123456789X123456789X ====(0 [(1:29)] (2:7)
> /window.history.scroll down
insert lines-empty :8
-insert history_1 67:68 +8
+insert history_1 66:67 +8
insert line-bookmark : +9
-insert history_1 68:79 +10
+insert history_1 67:78 +10
insert line-scrolldown : +21 XXXXXX [18] v
insert lines-status-prompt-foobarbaz : +22 X123456789X123456789X ====(0 [(1:18)] (2:7)
-insert ./__attempting.lib
-insert ./__connected_w_pw_listing.lib
+insert ./__connect-to-connected.lib
insert ./__servermsglogged.lib
-insert ./__init_clear_hostname.lib
× servermsglogged-and-line-unwrapped
insert servermsglogged : +0 MSG XXX
× ×××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××
-> /connect foo.bar.baz foo bar:baz
-insert init-clear-hostname : +1 HOSTNAME foo.bar.baz
-log 1 $ port set to: [-1]
-log 1 $ nick_wanted set to: [foo]
-log 1 $ user_wanted set to: [baz]
-log 1 $ realname set to: [bar]
-log 1 $ port set to: [6697]
-insert attempting-foobarbaz : +1 §§ 6697
-log 2 $ - nickname: foo
-log 2 $ - realname: bar
-log 2 $ - username: baz
-insert connected_w_pw_listing : +1 PW_LISTING no password
-log 1 > USER baz 0 * :bar
-log 1 > NICK :foo
+insert connect-to-connected
> /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: [?]
-# BASIC TUI PROMPT TESTS
-insert ./__tui.lib
-insert ./__enter_list.lib
+insert ./__enter-list-start.lib
+insert ./__enter_misc.lib
+# for: enter-help-win0, enter-unknown, enter-unprefixed
+
× ×---------------------------
# nothing should happen on empty command input