1#!perl 2 3use strict; 4no warnings; 5use Test::More; 6use Net::XMPP2::TestClient; 7use Net::XMPP2::IM::Message; 8use Net::XMPP2::Util qw/prep_bare_jid bare_jid cmp_bare_jid/; 9 10my $cl = 11 Net::XMPP2::TestClient->new_or_exit (tests => 1, two_accounts => 1, finish_count => 2); 12my $C = $cl->client; 13 14my ($src, $dest, $src_full, $dest_full); 15my $message_conv = ""; 16 17my @seq = ( 18 sub { 19 my ($srcacc, $destacc, $msg, $msg_from_src) = @_; 20 21 if ($msg_from_src) { 22 my $repl = $msg->make_reply; 23 $repl->add_body ($msg->any_body () . $msg->to . "\n"); 24 $destacc->send_tracked_message ($repl); 25 } 26 }, 27 sub { 28 my ($srcacc, $destacc, $msg, $msg_from_src) = @_; 29 30 if (!$msg_from_src) { 31 my $repl = $msg->make_reply; 32 $repl->add_body ($msg->any_body () . $msg->to . "\n"); 33 $srcacc->send_tracked_message ($repl); 34 } 35 }, 36 sub { 37 my ($srcacc, $destacc, $msg, $msg_from_src) = @_; 38 39 if ($msg_from_src) { 40 my $repl = $msg->make_reply; 41 $repl->add_body ($msg->any_body () . $msg->to . "\nend\n"); 42 $destacc->send_tracked_message ($repl); 43 } 44 }, 45 sub { 46 my ($srcacc, $destacc, $msg, $msg_from_src) = @_; 47 48 if (!$msg_from_src) { 49 $message_conv = $msg->any_body; 50 $cl->finish; 51 } 52 }, 53); 54 55$C->reg_cb ( 56 two_accounts_ready => sub { 57 my ($C, $acc, $jid1, $jid2) = @_; 58 my $srcacc = $C->get_account ($jid1); 59 60 $src = prep_bare_jid $jid1; 61 $dest = prep_bare_jid $jid2; 62 $src_full = $jid1; 63 $dest_full = $jid2; 64 65 my $msg = Net::XMPP2::IM::Message->new ( 66 body => "start\n", 67 to => $dest, 68 type => 'chat', 69 ); 70 71 $srcacc->send_tracked_message ($msg); 72 $cl->finish; 73 }, 74 message => sub { 75 my ($C, $acc, $msg) = @_; 76 my $sacc = $C->get_account ($src); 77 my $dacc = $C->get_account ($dest); 78 79 if (my $seq = shift @seq) { 80 $seq->($sacc, $dacc, $msg, cmp_bare_jid ($msg->from, $src)); 81 } else { 82 $cl->finish; 83 } 84 } 85); 86 87$cl->wait; 88 89is ($message_conv, 90 "start\n" 91 .$dest."\n" 92 .$src_full."\n" 93 .$dest_full."\n" 94 ."end\n", 95 "conversation had expected results" 96); 97