use lib "t/lib";
use Test::More tests=>75;
BEGIN{ use_ok( "Net::XMPP" ); }
require "t/mytestlib.pl";
my $debug = Net::XMPP::Debug->new(setdefault=>1,
level=>-1,
file=>"stdout",
header=>"test",
);
#------------------------------------------------------------------------------
# Client
#------------------------------------------------------------------------------
my $Client = Net::XMPP::Client->new();
ok( defined($Client), "new()");
isa_ok($Client,"Net::XMPP::Client");
isa_ok($Client,"Net::XMPP::Connection");
#------------------------------------------------------------------------------
# Roster
#------------------------------------------------------------------------------
my $Roster = Net::XMPP::Roster->new(connection=>$Client);
ok( defined($Roster), "new()");
isa_ok($Roster,"Net::XMPP::Roster");
my $jid1 = '1test1@example.com';
my $res1 = "Work";
my $res2 = "Home";
my $jid2 = 'test2@example.com';
my $group1 = 'Test1';
my $group2 = 'Test2';
#------------------------------------------------------------------------------
# Add JIDs to Roster
#------------------------------------------------------------------------------
ok( !$Roster->exists($jid1), "jid1 does not exist");
ok( !$Roster->exists($jid2), "jid2 does not exist");
$Roster->add($jid1);
ok( $Roster->exists($jid1), "jid1 exists");
ok( !$Roster->exists($jid2), "jid2 does not exist");
ok( !$Roster->groupExists($group1), "group1 does not exist");
ok( !$Roster->groupExists($group2), "group2 does not exist");
$Roster->add($jid2,
ask => "no",
groups => [ $group1, $group2 ],
name => "Test",
subscription => "both",
);
ok( $Roster->exists($jid1), "jid1 exists");
ok( $Roster->exists($jid2), "jid2 exists");
ok( $Roster->groupExists($group1), "group1 exists");
ok( $Roster->groupExists($group2), "group2 exists");
my @jids = $Roster->jids("all");
is($#jids, 1, "all - two jids");
ok(($jids[0]->GetJID() eq $jid1) || ($jids[1]->GetJID() eq $jid1), "all - jid1 matched");
ok(($jids[0]->GetJID() eq $jid2) || ($jids[1]->GetJID() eq $jid2), "all - jid2 matched");
@jids = $Roster->jids("group",$group1);
is($#jids, 0, "group - $group1 - one jid");
is($jids[0]->GetJID(), $jid2, "group - $group1 - jid2 matched");
@jids = $Roster->jids("group",$group2);
is($#jids, 0, "group - $group2 - one jid");
is($jids[0]->GetJID(), $jid2, "group - $group2 - jid2 matched");
@jids = $Roster->jids("nogroup");
is($#jids, 0, "nogroup - one jid");
is($jids[0]->GetJID(), $jid1, "nogroup - jid1 matched");
my %query = $Roster->query($jid1);
is_deeply( \%query, { }, "jid1 - query");
%query = $Roster->query($jid2);
is_deeply( \%query, { ask=>"no",groups=>[$group1,$group2],name=>"Test",subscription=>"both"}, "jid2 - query");
is( $Roster->query($jid2,"name"), "Test", "jid1 - name == Test");
is( $Roster->query($jid2,"foo"), undef, "jid1 - foo does not exist");
$Roster->store($jid2,"foo","bar");
is( $Roster->query($jid2,"name"), "Test", "jid1 - name == Test");
is( $Roster->query($jid2,"foo"), "bar", "jid1 - foo == bar");
#------------------------------------------------------------------------------
# Simulate presence
#------------------------------------------------------------------------------
ok( !$Roster->online($jid1), "jid1 not online");
ok( !$Roster->online($jid2), "jid2 not online");
$Roster->addResource($jid1, $res1);
ok( $Roster->online($jid1), "jid1 online");
ok( !$Roster->online($jid2), "jid2 not online");
is( $Roster->resource($jid1), $res1, "jid1 resource matches");
$Roster->addResource($jid1, $res2,
priority => 100,
show => "xa",
status => "test",
);
ok( $Roster->online($jid1), "jid1 online");
ok( !$Roster->online($jid2), "jid2 not online");
is( $Roster->resource($jid1), $res2, "jid1 resource matches");
my @resources = $Roster->resources($jid1);
is( $#resources, 1, "two resources");
is( $resources[0], $res2, "res2 is highest");
is( $resources[1], $res1, "res1 is lowest");
@resources = $Roster->resources($jid2);
is( $#resources, -1, "no resources");
my %resQuery = $Roster->resourceQuery($jid1,$res1);
is_deeply( \%resQuery, { priority => 0 }, "jid1/res1 - query");
%resQuery = $Roster->resourceQuery($jid1,$res2);
is_deeply( \%resQuery, { priority=>100, show=>"xa", status=>"test"}, "jid1/res2 - query");
is( $Roster->resourceQuery($jid1,$res2,"show"), "xa", "jid2/res2 - show == xa");
is( $Roster->resourceQuery($jid1,$res2,"foo"), undef, "jid2/res2 - foo does not exist");
$Roster->resourceStore($jid1,$res2,"foo","bar");
%resQuery = $Roster->resourceQuery($jid1,$res2);
is_deeply( \%resQuery, { foo=>"bar",priority=>100, show=>"xa", status=>"test"}, "jid1/res2 - query");
is( $Roster->resourceQuery($jid1,$res2,"show"), "xa", "jid2/res2 - show == xa");
is( $Roster->resourceQuery($jid1,$res2,"foo"), "bar", "jid2/res2 - foo == bar");
ok( $Roster->online($jid1), "jid1 online");
ok( !$Roster->online($jid2), "jid2 not online");
$Roster->removeResource($jid1, $res2);
is( $Roster->resource($jid1), $res1, "jid1 resource matches");
@resources = $Roster->resources($jid1);
is( $#resources, 0, "one resource");
is( $resources[0], $res1, "res1 is highest");
ok( $Roster->online($jid1), "jid1 online");
ok( !$Roster->online($jid2), "jid2 not online");
$Roster->removeResource($jid1, $res1);
is( $Roster->resource($jid1), undef, "jid1 no resources");
@resources = $Roster->resources($jid1);
is( $#resources, -1, "no resources");
ok( !$Roster->online($jid1), "jid1 not online");
ok( !$Roster->online($jid2), "jid2 not online");
#-----------------------------------------------------------------------------
# Remove JIDs
#-----------------------------------------------------------------------------
ok( $Roster->exists($jid1), "jid1 exists");
ok( $Roster->exists($jid2), "jid2 exists");
@jids = $Roster->jids("all");
is($#jids, 1, "all - two jids");
ok(($jids[0]->GetJID() eq $jid1) || ($jids[1]->GetJID() eq $jid1), "all - jid1 matched");
ok(($jids[0]->GetJID() eq $jid2) || ($jids[1]->GetJID() eq $jid2), "all - jid2 matched");
$Roster->remove($jid2);
ok( !$Roster->groupExists($group1), "group1 does not exist");
ok( !$Roster->groupExists($group2), "group2 does not exist");
ok( $Roster->exists($jid1), "jid1 exists");
ok( !$Roster->exists($jid2), "jid2 does not exist");
@jids = $Roster->jids("all");
is($#jids, 0, "all - one jid");
is($jids[0]->GetJID(), $jid1, "all - jid1 matched");
$Roster->clear();
ok( !$Roster->exists($jid1), "jid1 does not exist");
ok( !$Roster->exists($jid2), "jid2 does not exist");
@jids = $Roster->jids("all");
is($#jids, -1, "all - no jids");