2008-06-02 00:33:54 -04:00
|
|
|
USING: kernel tools.test accessors arrays sequences qualified
|
2008-08-07 13:00:54 -04:00
|
|
|
io io.streams.duplex namespaces threads
|
2008-07-10 19:11:08 -04:00
|
|
|
calendar irc.client.private irc.client irc.messages.private
|
2008-07-26 14:32:16 -04:00
|
|
|
concurrency.mailboxes classes assocs combinators ;
|
2008-07-10 19:11:08 -04:00
|
|
|
EXCLUDE: irc.messages => join ;
|
|
|
|
RENAME: join irc.messages => join_
|
2008-06-01 19:58:53 -04:00
|
|
|
IN: irc.client.tests
|
|
|
|
|
2008-08-07 13:00:54 -04:00
|
|
|
! Streams for testing
|
|
|
|
TUPLE: mb-writer lines last-line disposed ;
|
|
|
|
TUPLE: mb-reader lines disposed ;
|
|
|
|
: <mb-writer> ( -- mb-writer ) V{ } clone V{ } clone f mb-writer boa ;
|
|
|
|
: <mb-reader> ( -- mb-reader ) <mailbox> f mb-reader boa ;
|
|
|
|
: push-line ( line test-reader-stream -- ) lines>> mailbox-put ;
|
|
|
|
: <test-stream> ( -- stream ) <mb-reader> <mb-writer> <duplex-stream> ;
|
|
|
|
M: mb-writer stream-write ( line mb-writer -- ) last-line>> push ;
|
|
|
|
M: mb-writer stream-flush ( mb-writer -- ) drop ;
|
|
|
|
M: mb-reader stream-readln ( mb-reader -- str/f ) lines>> mailbox-get ;
|
|
|
|
M: mb-writer stream-nl ( mb-writer -- )
|
|
|
|
[ [ last-line>> concat ] [ lines>> ] bi push ] keep
|
|
|
|
V{ } clone >>last-line drop ;
|
2008-06-02 00:33:54 -04:00
|
|
|
|
2008-09-21 19:38:01 -04:00
|
|
|
: spawn-client ( -- irc-client )
|
2008-08-07 13:00:54 -04:00
|
|
|
"someserver" irc-port "factorbot" f <irc-profile>
|
|
|
|
<irc-client>
|
|
|
|
t >>is-running
|
|
|
|
<test-stream> >>stream
|
|
|
|
dup [ spawn-irc yield ] with-irc-client ;
|
2008-06-02 00:33:54 -04:00
|
|
|
|
2008-08-07 13:00:54 -04:00
|
|
|
! to be used inside with-irc-client quotations
|
|
|
|
: %add-named-listener ( listener -- ) [ name>> ] keep set+run-listener ;
|
|
|
|
: %join ( channel -- ) <irc-channel-listener> irc> add-listener ;
|
2008-08-07 22:02:29 -04:00
|
|
|
: %push-line ( line -- ) irc> stream>> in>> push-line yield ;
|
2008-06-03 18:53:27 -04:00
|
|
|
|
2008-08-07 13:00:54 -04:00
|
|
|
: read-matching-message ( listener quot: ( msg -- ? ) -- irc-message )
|
|
|
|
[ in-messages>> 0.1 seconds ] dip mailbox-get-timeout? ;
|
2008-06-02 00:33:54 -04:00
|
|
|
|
2008-08-07 13:00:54 -04:00
|
|
|
: with-irc ( quot: ( -- ) -- )
|
|
|
|
[ spawn-client ] dip [ f %push-line ] compose with-irc-client ; inline
|
2008-06-02 00:33:54 -04:00
|
|
|
|
2008-08-07 13:00:54 -04:00
|
|
|
! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
|
|
|
|
! TESTS
|
|
|
|
! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
|
2008-06-02 00:33:54 -04:00
|
|
|
|
2008-09-23 23:02:36 -04:00
|
|
|
[ { t } [ irc> nick>> me? ] unit-test
|
2008-06-02 00:33:54 -04:00
|
|
|
|
2008-09-23 23:02:36 -04:00
|
|
|
{ "factorbot" } [ irc> nick>> ] unit-test
|
2008-06-01 19:58:53 -04:00
|
|
|
|
2008-08-07 13:00:54 -04:00
|
|
|
{ "someuser" } [ "someuser!n=user@some.where" parse-name ] unit-test
|
|
|
|
|
|
|
|
{ "#factortest" } [ ":someuser!n=user@some.where PRIVMSG #factortest :hi"
|
2008-08-12 01:58:12 -04:00
|
|
|
parse-irc-line forward-name ] unit-test
|
2008-08-07 13:00:54 -04:00
|
|
|
|
|
|
|
{ "someuser" } [ ":someuser!n=user@some.where PRIVMSG factorbot :hi"
|
2008-08-12 01:58:12 -04:00
|
|
|
parse-irc-line forward-name ] unit-test
|
2008-08-07 13:00:54 -04:00
|
|
|
] with-irc
|
2008-06-01 19:58:53 -04:00
|
|
|
|
2008-06-03 18:53:27 -04:00
|
|
|
! Test login and nickname set
|
2008-08-07 13:00:54 -04:00
|
|
|
[ { "factorbot2" } [
|
|
|
|
":some.where 001 factorbot2 :Welcome factorbot2" %push-line
|
2008-09-23 23:02:36 -04:00
|
|
|
irc> nick>>
|
2008-08-07 13:00:54 -04:00
|
|
|
] unit-test
|
|
|
|
] with-irc
|
|
|
|
|
|
|
|
[ { join_ "#factortest" } [
|
|
|
|
{ ":factorbot!n=factorbo@some.where JOIN :#factortest"
|
|
|
|
":ircserver.net 353 factorbot @ #factortest :@factorbot "
|
|
|
|
":ircserver.net 366 factorbot #factortest :End of /NAMES list."
|
|
|
|
":ircserver.net 477 factorbot #factortest :[ircserver-info] blah blah"
|
|
|
|
} [ %push-line ] each
|
|
|
|
irc> join-messages>> 0.1 seconds mailbox-get-timeout
|
|
|
|
[ class ] [ trailing>> ] bi
|
|
|
|
] unit-test
|
|
|
|
] with-irc
|
|
|
|
|
|
|
|
[ { T{ participant-changed f "somebody" +join+ } } [
|
|
|
|
"#factortest" <irc-channel-listener> [ %add-named-listener ] keep
|
|
|
|
":somebody!n=somebody@some.where JOIN :#factortest" %push-line
|
|
|
|
[ participant-changed? ] read-matching-message
|
|
|
|
] unit-test
|
|
|
|
] with-irc
|
|
|
|
|
|
|
|
[ { privmsg "#factortest" "hello" } [
|
|
|
|
"#factortest" <irc-channel-listener> [ %add-named-listener ] keep
|
|
|
|
":somebody!n=somebody@some.where PRIVMSG #factortest :hello" %push-line
|
|
|
|
[ privmsg? ] read-matching-message
|
|
|
|
[ class ] [ name>> ] [ trailing>> ] tri
|
|
|
|
] unit-test
|
|
|
|
] with-irc
|
|
|
|
|
|
|
|
[ { privmsg "factorbot" "hello" } [
|
|
|
|
"somedude" <irc-nick-listener> [ %add-named-listener ] keep
|
|
|
|
":somedude!n=user@isp.net PRIVMSG factorbot :hello" %push-line
|
|
|
|
[ privmsg? ] read-matching-message
|
|
|
|
[ class ] [ name>> ] [ trailing>> ] tri
|
|
|
|
] unit-test
|
|
|
|
] with-irc
|
2008-07-28 23:48:25 -04:00
|
|
|
|
2008-08-07 22:02:29 -04:00
|
|
|
[ { mode } [
|
|
|
|
"#factortest" <irc-channel-listener> [ %add-named-listener ] keep
|
|
|
|
":ircserver.net MODE #factortest +ns" %push-line
|
|
|
|
[ mode? ] read-matching-message class
|
|
|
|
] unit-test
|
|
|
|
] with-irc
|
|
|
|
|
|
|
|
! Participant lists tests
|
2008-08-07 13:00:54 -04:00
|
|
|
[ { H{ { "somedude" +normal+ } } } [
|
|
|
|
"#factortest" <irc-channel-listener> [ %add-named-listener ] keep
|
|
|
|
":somedude!n=user@isp.net JOIN :#factortest" %push-line
|
|
|
|
participants>>
|
|
|
|
] unit-test
|
|
|
|
] with-irc
|
|
|
|
|
|
|
|
[ { H{ { "somedude2" +normal+ } } } [
|
|
|
|
"#factortest" <irc-channel-listener>
|
|
|
|
H{ { "somedude2" +normal+ }
|
|
|
|
{ "somedude" +normal+ } } clone >>participants
|
|
|
|
[ %add-named-listener ] keep
|
|
|
|
":somedude!n=user@isp.net PART #factortest" %push-line
|
|
|
|
participants>>
|
|
|
|
] unit-test
|
|
|
|
] with-irc
|
|
|
|
|
|
|
|
[ { H{ { "somedude2" +normal+ } } } [
|
|
|
|
"#factortest" <irc-channel-listener>
|
|
|
|
H{ { "somedude2" +normal+ }
|
|
|
|
{ "somedude" +normal+ } } clone >>participants
|
|
|
|
[ %add-named-listener ] keep
|
|
|
|
":somedude!n=user@isp.net QUIT" %push-line
|
|
|
|
participants>>
|
|
|
|
] unit-test
|
|
|
|
] with-irc
|
|
|
|
|
|
|
|
[ { H{ { "somedude2" +normal+ } } } [
|
|
|
|
"#factortest" <irc-channel-listener>
|
|
|
|
H{ { "somedude2" +normal+ }
|
|
|
|
{ "somedude" +normal+ } } clone >>participants
|
|
|
|
[ %add-named-listener ] keep
|
|
|
|
":somedude2!n=user2@isp.net KICK #factortest somedude" %push-line
|
|
|
|
participants>>
|
|
|
|
] unit-test
|
|
|
|
] with-irc
|
2008-07-31 20:35:09 -04:00
|
|
|
|
2008-08-07 22:02:29 -04:00
|
|
|
[ { H{ { "somedude2" +normal+ } } } [
|
|
|
|
"#factortest" <irc-channel-listener>
|
|
|
|
H{ { "somedude" +normal+ } } clone >>participants
|
|
|
|
[ %add-named-listener ] keep
|
|
|
|
":somedude!n=user2@isp.net NICK :somedude2" %push-line
|
|
|
|
participants>>
|
|
|
|
] unit-test
|
|
|
|
] with-irc
|
|
|
|
|
2008-08-01 18:59:18 -04:00
|
|
|
! Namelist change notification
|
2008-08-07 22:02:29 -04:00
|
|
|
[ { T{ participant-changed f f f f } } [
|
2008-08-07 13:00:54 -04:00
|
|
|
"#factortest" <irc-channel-listener> [ %add-named-listener ] keep
|
|
|
|
":ircserver.net 353 factorbot @ #factortest :@factorbot " %push-line
|
|
|
|
":ircserver.net 366 factorbot #factortest :End of /NAMES list." %push-line
|
|
|
|
[ participant-changed? ] read-matching-message
|
|
|
|
] unit-test
|
|
|
|
] with-irc
|
|
|
|
|
2008-08-07 22:02:29 -04:00
|
|
|
[ { T{ participant-changed f "somedude" +part+ f } } [
|
2008-08-07 13:00:54 -04:00
|
|
|
"#factortest" <irc-channel-listener>
|
2008-08-07 22:02:29 -04:00
|
|
|
H{ { "somedude" +normal+ } } clone >>participants
|
2008-08-07 13:00:54 -04:00
|
|
|
[ %add-named-listener ] keep
|
|
|
|
":somedude!n=user@isp.net QUIT" %push-line
|
|
|
|
[ participant-changed? ] read-matching-message
|
|
|
|
] unit-test
|
2008-08-07 22:02:29 -04:00
|
|
|
] with-irc
|
|
|
|
|
|
|
|
[ { T{ participant-changed f "somedude" +nick+ "somedude2" } } [
|
|
|
|
"#factortest" <irc-channel-listener>
|
|
|
|
H{ { "somedude" +normal+ } } clone >>participants
|
|
|
|
[ %add-named-listener ] keep
|
|
|
|
":somedude!n=user2@isp.net NICK :somedude2" %push-line
|
|
|
|
[ participant-changed? ] read-matching-message
|
|
|
|
] unit-test
|
|
|
|
] with-irc
|