from scenarios import * scenario = ( scenarios.simple_channel_join.scenario, send_stanza(""), expect_stanza("/presence"), expect_stanza("/message[@from='#bar%{irc_server_one}'][@type='groupchat']/subject[not(text())]"), send_stanza(""), expect_stanza("/presence"), expect_stanza("/message[@from='#coucou%{irc_server_one}'][@type='groupchat']/subject[not(text())]"), # Ask for 0 item send_stanza("0"), # Get 0 item expect_stanza("/iq[@type='result']/disco_items:query"), # Ask for 2 (of 3) items We don’t have the count, # because biboumi doesn’t have the complete list when # it sends us the 2 items send_stanza("2"), expect_stanza("/iq[@type='result']/disco_items:query", "count(/iq/disco_items:query/disco_items:item[@jid])=2", "/iq/disco_items:query/rsm:set/rsm:first[@index='0']", "/iq/disco_items:query/rsm:set/rsm:last", "!/iq/disco_items:query/rsm:set/rsm:count"), # Ask for 12 (of 3) items. We get the whole list, and thus we have the count included. send_stanza("12"), expect_stanza("/iq[@type='result']/disco_items:query", "count(/iq/disco_items:query/disco_items:item[@jid])=3", "/iq/disco_items:query/rsm:set/rsm:first[@index='0']", "/iq/disco_items:query/rsm:set/rsm:last", "/iq/disco_items:query/rsm:set/rsm:count[text()='3']", after = save_value("first", lambda stanza: extract_text("/iq/disco_items:query/rsm:set/rsm:first", stanza))), # Ask for 1 item, AFTER the first item (so, # the second). Since we don’t invalidate the cache # with this request, we should have the count # included. send_stanza("{first}1"), expect_stanza("/iq[@type='result']/disco_items:query", "count(/iq/disco_items:query/disco_items:item)=1", "/iq/disco_items:query/rsm:set/rsm:first[@index='1']", "/iq/disco_items:query/rsm:set/rsm:last", "/iq/disco_items:query/rsm:set/rsm:count[text()='3']", after = save_value("second", lambda stanza: extract_text("/iq/disco_items:query/rsm:set/rsm:first", stanza))), # Ask for 1 item, AFTER the second item (so, # the third). send_stanza("{second}1"), expect_stanza("/iq[@type='result']/disco_items:query", "count(/iq/disco_items:query/disco_items:item)=1", "/iq/disco_items:query/rsm:set/rsm:first[@index='2']", "/iq/disco_items:query/rsm:set/rsm:last", "/iq/disco_items:query/rsm:set/rsm:count[text()='3']", after = save_value("third", lambda stanza: extract_text("/iq/disco_items:query/rsm:set/rsm:first", stanza))), # Ask for 1 item, AFTER the third item (so, # the fourth). Since it doesn't exist, we get 0 item send_stanza("{third}1"), expect_stanza("/iq[@type='result']/disco_items:query", "count(/iq/disco_items:query/disco_items:item)=0", "/iq/disco_items:query/rsm:set/rsm:count[text()='3']"), )