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