1 USING: kernel tools.test accessors arrays sequences qualified
2 io.streams.string io.streams.duplex namespaces threads
3 calendar irc.client.private irc.client irc.messages.private
4 concurrency.mailboxes classes assocs combinators ;
5 EXCLUDE: irc.messages => join ;
6 RENAME: join irc.messages => join_
10 : <test-stream> ( lines -- stream )
11 "\n" join <string-reader> <string-writer> <duplex-stream> ;
13 : make-client ( lines -- irc-client )
14 "someserver" irc-port "factorbot" f <irc-profile> <irc-client>
15 swap [ 2nip <test-stream> f ] curry >>connect ;
17 : set-nick ( irc-client nickname -- )
18 swap profile>> (>>nickname) ;
20 : with-dummy-client ( irc-client quot -- )
21 [ current-irc-client ] dip with-variable ; inline
23 { "" } make-client dup "factorbot" set-nick [
24 { t } [ irc> profile>> nickname>> me? ] unit-test
26 { "factorbot" } [ irc> profile>> nickname>> ] unit-test
28 { "someuser" } [ "someuser!n=user@some.where" parse-name ] unit-test
30 { "#factortest" } [ ":someuser!n=user@some.where PRIVMSG #factortest :hi"
31 parse-irc-line irc-message-origin ] unit-test
33 { "someuser" } [ ":someuser!n=user@some.where PRIVMSG factorbot :hi"
34 parse-irc-line irc-message-origin ] unit-test
37 ! Test login and nickname set
39 { "NOTICE AUTH :*** Looking up your hostname..."
40 "NOTICE AUTH :*** Checking ident"
41 "NOTICE AUTH :*** Found your hostname"
42 "NOTICE AUTH :*** No identd (auth) response"
43 ":some.where 001 factorbot :Welcome factorbot"
46 [ drop 1 seconds sleep ]
47 [ profile>> nickname>> ]
51 { join_ "#factortest" } [
52 { ":factorbot!n=factorbo@some.where JOIN :#factortest"
53 ":ircserver.net MODE #factortest +ns"
54 ":ircserver.net 353 factorbot @ #factortest :@factorbot "
55 ":ircserver.net 366 factorbot #factortest :End of /NAMES list."
56 ":ircserver.net 477 factorbot #factortest :[ircserver-info] blah blah"
58 { [ "factorbot" set-nick ]
60 [ drop 1 seconds sleep ]
61 [ join-messages>> 1 seconds mailbox-get-timeout ]
64 [ class ] [ trailing>> ] bi ] unit-test
66 { +join+ "somebody" } [
67 { ":somebody!n=somebody@some.where JOIN :#factortest" } make-client
68 { [ "factorbot" set-nick ]
70 [ "#factortest" [ <irc-channel-listener> ] keep ] dip set-at ]
72 [ listeners>> [ "#factortest" ] dip at
73 [ read-message drop ] [ read-message drop ] [ read-message ] tri ]
76 [ action>> ] [ nick>> ] bi
79 { privmsg "#factortest" "hello" } [
80 { ":somebody!n=somebody@some.where PRIVMSG #factortest :hello" } make-client
81 { [ "factorbot" set-nick ]
83 [ "#factortest" [ <irc-channel-listener> ] keep ] dip set-at ]
85 [ listeners>> [ "#factortest" ] dip at
86 [ read-message drop ] [ read-message ] bi ]
89 [ class ] [ name>> ] [ trailing>> ] tri
92 { privmsg "factorbot" "hello" } [
93 { ":somedude!n=user@isp.net PRIVMSG factorbot :hello" } make-client
94 { [ "factorbot" set-nick ]
96 [ "somedude" [ <irc-nick-listener> ] keep ] dip set-at ]
98 [ listeners>> [ "somedude" ] dip at
99 [ read-message drop ] [ read-message ] bi ]
102 [ class ] [ name>> ] [ trailing>> ] tri