home · contact · privacy
Add CAPS negotiation test, refactor tests.
authorChristian Heller <c.heller@plomlompom.de>
Sun, 9 Nov 2025 19:19:10 +0000 (20:19 +0100)
committerChristian Heller <c.heller@plomlompom.de>
Sun, 9 Nov 2025 19:19:10 +0000 (20:19 +0100)
13 files changed:
src/tests/__attempting.lib [new file with mode: 0644]
src/tests/__connected.lib [new file with mode: 0644]
src/tests/__connected_w_pw_listing.lib [new file with mode: 0644]
src/tests/_timeout_retries.test
src/tests/caps.test [new file with mode: 0644]
src/tests/config.test
src/tests/config.toml
src/tests/connect_disconnect_legalities.test
src/tests/error_disconnects.test
src/tests/pingpong.test
src/tests/test.test
src/tests/tui_draw.test
src/tests/tui_line_formattings.test

diff --git a/src/tests/__attempting.lib b/src/tests/__attempting.lib
new file mode 100644 (file)
index 0000000..86cf235
--- /dev/null
@@ -0,0 +1,6 @@
+× 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
diff --git a/src/tests/__connected.lib b/src/tests/__connected.lib
new file mode 100644 (file)
index 0000000..53c5613
--- /dev/null
@@ -0,0 +1,4 @@
+× connected
+log 1 $ connection_state set to: [connected]
+log 2 $ CONNECTED
+log 1 > CAP LS :302
diff --git a/src/tests/__connected_w_pw_listing.lib b/src/tests/__connected_w_pw_listing.lib
new file mode 100644 (file)
index 0000000..769114d
--- /dev/null
@@ -0,0 +1,5 @@
+insert ./__connected.lib
+
+× connected_w_pw_listing
+log 2 $ - PW_LISTING
+insert connected : +1
index f45c193fa459607013fac5da3c364b4752030bf9..8cd00add1679cf868d8ae5487bf65bc32d34cb36 100644 (file)
@@ -1,3 +1,5 @@
+insert ./__attempting.lib
+insert ./__connected.lib
 insert ./__init_clear_hostname.lib
 
 × identifiers
@@ -6,21 +8,11 @@ log 2 $ - realname: baz
 log 2 $ - username: foobarbazquux
 log 2 $ - password: bar
 
-× connection_state
-log 1 $ connection_state set to: [?]
-
-× attempting
-insert connection_state : +1 ? connecting
-log 2 $ attempting connection to HOSTNAME:§§ identifying with …
-
-× attempting-foobarbaz
-insert attempting : +1 HOSTNAME foo.bar.baz
-
 × attempting-bazbarfoo
 insert attempting : +3 HOSTNAME baz.bar.foo
 
 × fake-testing-timeout
-insert connection_state : +1 ? failed to connect: FAKE TESTING TIMEOUT
+log 1 $ connection_state set to: [failed to connect: FAKE TESTING TIMEOUT]
 insert retry-in : +1 ? §§
 
 × port
@@ -42,9 +34,7 @@ log 1 $ password set to: [bar]
 
 × conn
 insert identifiers : +2
-insert connection_state : +1 ? connected
-log 2 $ CONNECTED
-log 1 > CAP LS :302
+insert connected
 log 1 > USER foobarbazquux 0 * :baz
 log 1 > NICK :foo
 
@@ -79,9 +69,9 @@ servermsg 0 timeout
 log 1 > PING :what's up?
 servermsg 0 timeout
 servermsg 0 no timely PONG from server
-insert connection_state : +1 ? broken: no timely PONG from server
+log 1 $ connection_state set to: [broken: no timely PONG from server]
 insert isupport-clear
-insert connection_state : +1 ? 
+log 1 $ connection_state set to: []
 log 2 $ DISCONNECTED
 insert retry-in : +1 ? 1
 
diff --git a/src/tests/caps.test b/src/tests/caps.test
new file mode 100644 (file)
index 0000000..a451db2
--- /dev/null
@@ -0,0 +1,114 @@
+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
+
+× 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
+
+× later-disconnect-to-reconnect
+log 1 $ connection_state set to: []
+log 2 $ DISCONNECTED
+> /reconnect
+insert connecting
+
+× disconnect-to-reconnect-clear-caps
+insert disconnect-init
+log 1 $ caps cleared
+insert later-disconnect-to-reconnect
+
+× cap_msg
+insert servermsglogged : +0 MSG :*.?.net CAP ???
+
+× ×--------------------------
+
+> /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
+
+# check handling of empty caps list
+insert cap_msg : +0 ??? * LS :
+log 1 > CAP :LIST
+insert cap_msg : +0 ??? * LIST :
+log 1 > CAP :END
+
+> /window 2
+insert disconnect-init
+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
+log 1 $ caps:bar:data set to: []
+log 1 $ caps:baz:data set to: []
+log 1 $ caps:foo:data set to: []
+log 1 $ caps:ofo:data set to: []
+log 1 $ caps:oof:data set to: []
+log 1 $ caps:rab:data set to: []
+log 1 $ caps:rba: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
+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:rba:enabled set to: [True]
+log 1 $ caps:zab:enabled set to: [True]
+log 1 > CAP :END
+
+insert disconnect-to-reconnect-clear-caps
+
+# check REQ for "sasl" (even if no PLAIN), denied
+insert servermsglogged : +0 MSG :*.?.net CAP * LS :foo bar sasl
+log 1 $ caps:bar:data set to: []
+log 1 $ caps:foo:data set to: []
+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 :
+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
+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
+log 1 $ caps:sasl:enabled set to: [True]
+log 1 > CAP :END
+
+# check NEW, DEL working after CAP :END
+insert cap_msg : +0 ??? foo NEW :foo bar=baz
+log 1 $ users:me:nick set to: [?]
+log 1 $ users:me:nick set to: [foo]
+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
+log 1 $ caps:foo cleared
+log 1 $ caps:sasl cleared
index 97805905a74e185cb85a68ccb1d62872ad4777bb..0f0ca1052763c4e5fad7a4081d188cfff69f9d32 100644 (file)
@@ -1,23 +1,21 @@
+insert ./__attempting.lib
+insert ./__connected_w_pw_listing.lib
 insert ./__init_clear_hostname.lib
 
 × ×---------------------------------------------------
 
 log 0 # Found config at tests/config.toml, reading …
-log 0 # Connecting: {'hostname': 'irc.test0.net', 'nickname': 'foo', 'password': 'bar', 'username': 'baz', 'realname': 'quux', 'port': 1234, 'channels': ['#test', '##testtest']}
-insert init-clear-hostname : +1 HOSTNAME irc.test0.net
+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: [quux]
-log 1 $ password set to: [bar]
-log 1 $ connection_state set to: [connecting]
-log 2 $ attempting connection to irc.test0.net:1234 identifying with …
+log 1 $ realname set to: [bar]
+log 1 $ password set to: [supersecret]
+insert attempting-foobarbaz : +1 §§ 1234
 log 2 $ - nickname: foo
-log 2 $ - realname: quux
+log 2 $ - realname: bar
 log 2 $ - username: baz
-log 2 $ - password: bar
-log 1 $ connection_state set to: [connected]
-log 2 $ CONNECTED
-log 1 > CAP LS :302
-log 1 > USER baz 0 * :quux
+insert connected_w_pw_listing : +1 PW_LISTING password: supersecret
+log 1 > USER baz 0 * :bar
 log 1 > NICK :foo
index 6dff7f2a50311c5ef6391879d16f385c8daae1a6..362c1a3a04f61624bd895ad5a58b3295e288e06c 100644 (file)
@@ -1,11 +1,11 @@
 to_highlight = ['quux']
 
 [[server]]
-hostname = 'irc.test0.net'
+hostname = 'foo.bar.baz'
 nickname = 'foo'
-password = 'bar'
+password = 'supersecret'
 username = 'baz'
-realname = 'quux'
+realname = 'bar'
 port = 1234
 channels = [
   '#test',
index 7d7cc7d2c01d99946a86f4fb21c552da3cec03b9..520fc899b295b2c5aeb584c543729aa2e1f91bd5 100644 (file)
@@ -1,3 +1,5 @@
+insert ./__attempting.lib
+insert ./__connected_w_pw_listing.lib
 insert ./__init_clear_hostname.lib
 insert ./__servermsglogged.lib
 
@@ -9,15 +11,11 @@ log 1 $ connection_state set to: []
 log 2 $ DISCONNECTED
 
 × connecting
-log 1 $ connection_state set to: [connecting]
-log 2 $ attempting connection to foo.bar.baz:6697 identifying with …
+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 2 $ CONNECTED
-log 1 > CAP LS :302
+insert connected_w_pw_listing : +1 PW_LISTING no password
 log 1 > USER baz 0 * :bar
 log 1 > NICK :foo
 
index f24cb79c0c1f525d5ef01738791a325ab83599f4..3f028efa317c7a7bc28460012c7ee2317ef42354 100644 (file)
@@ -1,16 +1,14 @@
+insert ./__attempting.lib
+insert ./__connected_w_pw_listing.lib
 insert ./__init_clear_hostname.lib
 insert ./__servermsglogged.lib
 
 × connecting
-log 1 $ connection_state set to: [connecting]
-log 2 $ attempting connection to foo.bar.baz:6697 identifying with …
+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 2 $ CONNECTED
-log 1 > CAP LS :302
+insert connected_w_pw_listing : +1 PW_LISTING no password
 log 1 > USER baz 0 * :bar
 log 1 > NICK :foo
 
index 5cabfa7081c15d676e16534f8b4ff71ad3f12396..90934ee49beed7045798256b06056933bcdfcf53 100644 (file)
@@ -1,16 +1,14 @@
+insert ./__attempting.lib
+insert ./__connected_w_pw_listing.lib
 insert ./__init_clear_hostname.lib
 insert ./__servermsglogged.lib
 
 × conn
-log 1 $ connection_state set to: [connecting]
-log 2 $ attempting connection to foo.bar.baz:6697 identifying with …
+insert attempting-foobarbaz : +1 §§ 6697
 log 2 $ - nickname: foo
 log 2 $ - realname: baz
 log 2 $ - username: foobarbazquux
-log 2 $ - password: bar
-log 1 $ connection_state set to: [connected]
-log 2 $ CONNECTED
-log 1 > CAP LS :302
+insert connected_w_pw_listing : +1 PW_LISTING password: bar
 log 1 > USER foobarbazquux 0 * :baz
 log 1 > NICK :foo
 
index 78b1ca739915cd9a245f033da5f2464e9610c90b..a33beb1d43c0e3a6a01feb47854ec097b6db3fc4 100644 (file)
@@ -1,26 +1,26 @@
+insert ./__attempting.lib
+insert ./__connected_w_pw_listing.lib
 insert ./__init_clear_hostname.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
-log 1 $ port set to: [6697]
-log 1 $ connection_state set to: [connecting]
-log 2 $ attempting connection to foo.bar.baz:6697 identifying with …
+insert attempting-foobarbaz : +1 §§ 6697
 log 2 $ - nickname: foo
 log 2 $ - realname: baz
 log 2 $ - username: foobarbazquux
-log 2 $ - password: bar
-log 1 $ connection_state set to: [connected]
-log 2 $ CONNECTED
-log 1 > CAP LS :302
+
+× conn_init_1
 log 1 > USER foobarbazquux 0 * :baz
 log 1 > NICK :foo
 
-× conn_init_1
 # expect some NOTICE and PING to process/reply during initiation
 insert servernotice : +0 XXX *** Looking up your ident...
 insert servernotice : +0 XXX *** Looking up your hostname...
@@ -272,7 +272,9 @@ 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_init_0
+insert connected_w_pw_listing : +1 PW_LISTING password: bar
 
 insert conn_init_1
 insert conn_init_2
@@ -320,13 +322,12 @@ 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]
-insert conn_init_0 :2 +8
-log 9 $ attempting connection to baz.bar.foo:6697 identifying with …
+log 8 $ port set to: [6697]
+insert attempting-6697 : +8 HOSTNAME baz.bar.foo
 log 9 $ - nickname: ?foo
 log 9 $ - realname: foo
 log 9 $ - username: foo
-log 9 $ - no password
-insert conn_init_0 7:10 +8
+insert connected_w_pw_listing : +8 PW_LISTING no password
 log 8 > USER foo 0 * :foo
 log 8 > NICK :?foo
 servermsg 1 :*.?.net 432 * ?foo :Erroneous nickname
@@ -353,13 +354,12 @@ 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]
-insert conn_init_0 :2 +10
-log 11 $ attempting connection to baz.baz.baz:6697 identifying with …
+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
-log 11 $ - no password
-insert conn_init_0 7:10 +10
+insert connected_w_pw_listing : +10 PW_LISTING no password
 log 10 > USER baz 0 * :baz
 log 10 > NICK :baz
 servermsg 2 FAKE_IRC_CONN_ABORT_EXCEPTION
@@ -386,9 +386,11 @@ log 10 $ already disconnected, stopped connecting attempts
 
 # 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 1:8
+insert conn_init_0
+log 2 $ - password: bar
+log 1 $ connection_state set to: [connected]
 log 2,3,4,5,6,7 $ CONNECTED
-insert conn_init_0 9:
+log 1 > CAP LS :302
 insert conn_init_1
 insert conn_init_2 :2
 log 1 > JOIN :#testtest
index 1dcb21d3da37f7273f6c46d26379cf6a5aba098a..e62cd90907a15b8f9227050db5d910538fa90fad 100644 (file)
@@ -1,3 +1,5 @@
+insert ./__attempting.lib
+insert ./__connected_w_pw_listing.lib
 insert ./__init_clear_hostname.lib
 insert ./__servermsglogged.lib
 insert ./__tui.lib
@@ -356,15 +358,11 @@ 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]
-log 1 $ connection_state set to: [connecting]
-log 2 $ attempting connection to foo.bar.baz:6697 identifying with …
+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 2 $ CONNECTED
-log 1 > CAP LS :302
+insert connected_w_pw_listing : +1 PW_LISTING no password
 log 1 > USER baz 0 * :bar
 log 1 > NICK :foo
 insert lines-empty :20
index 69217a532fa2cb9bc4173a0644c4c41114365189..3b032801e7232e6c0be23062c01774906adac450 100644 (file)
@@ -1,3 +1,5 @@
+insert ./__attempting.lib
+insert ./__connected_w_pw_listing.lib
 insert ./__servermsglogged.lib
 insert ./__init_clear_hostname.lib
 
@@ -14,15 +16,11 @@ 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]
-log 1 $ connection_state set to: [connecting]
-log 2 $ attempting connection to foo.bar.baz:6697 identifying with …
+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 2 $ CONNECTED
-log 1 > CAP LS :302
+insert connected_w_pw_listing : +1 PW_LISTING no password
 log 1 > USER baz 0 * :bar
 log 1 > NICK :foo
 > /window 1