The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
use Test::More;
use strict; use warnings FATAL => 'all';

use POEx::IRC::Backend::Connect;

{ package
    POE::Wheel; use strict; use warnings;
  sub new { bless [], shift }
  sub ID  { 1234 }
}

my $conn = POEx::IRC::Backend::Connect->new(
  args      => +{ tag => 'foo' },
  wheel     => POE::Wheel->new,
  protocol  => 4,
  peeraddr  => 'foo',
  peerport  => '123',
  sockaddr  => 'bar',
  sockport  => '456',
);

ok $conn->does('POEx::IRC::Backend::Role::HasWheel'),
  'consumes POEx::IRC::Backend::Role::HasWheel';

# (ro) args
ok $conn->has_args, 'has_args ok';
is_deeply $conn->args, +{ tag => 'foo' }, 'args ok';

# (rw) alarm_id
ok !$conn->has_alarm_id, 'has_alarm_id ok';
cmp_ok $conn->alarm_id, '==', 0, 'default alarm_id ok';
$conn->alarm_id(1);
cmp_ok $conn->alarm_id, '==', 1, 'rw alarm_id ok';

# (rw) is_client [Bool]
ok !$conn->is_client, 'default is_client ok';
$conn->is_client(1);
ok $conn->is_client, 'rw is_client ok';
eval {; $conn->is_client([]) };
ok $@, 'bad type is_client dies ok';

# (rw) is_peer [Bool]
ok !$conn->is_peer, 'default is_peer ok';
$conn->is_peer(1);
ok $conn->is_peer, 'rw is_peer ok';
eval {; $conn->is_peer([]) };
ok $@, 'bad type is_peer dies ok';

# (rw) is_disconnecting
ok !$conn->is_disconnecting, 'default is_disconnecting ok';
$conn->is_disconnecting(1);
ok $conn->is_disconnecting, 'rw is_disconnecting ok';
$conn->is_disconnecting('foo');
cmp_ok $conn->is_disconnecting, 'eq', 'foo', 'str is_disconnecting ok';

# (rw) is_pending_compress
ok !$conn->is_pending_compress, 'default is_pending_compress ok';
$conn->is_pending_compress(1);
ok $conn->is_pending_compress, 'rw is_pending_compress ok';
eval {; $conn->is_pending_compress([]) };
ok $@, 'bad type is_pending_compress dies ok';

# idle
cmp_ok $conn->idle, '==', 180, 'default idle ok';

# compressed / set_compressed
ok !$conn->compressed, 'default compressed ok';
$conn->set_compressed(1);
ok $conn->compressed, 'set_compressed ok';

# (rw) ping_pending
# FIXME

# protocol
cmp_ok $conn->protocol, '==', 4, 'protocol ok';
# FIXME type check tests

# (rw) seen
cmp_ok $conn->seen, '==', 0, 'default seen ok';
$conn->seen(123);
cmp_ok $conn->seen, '==', 123, 'rw seen ok';

# peeraddr / set_peeraddr
# FIXME

# peerport / set_peerport
# FIXME

# sockaddr / set_sockaddr
# FIXME

# sockport / set_sockport
# FIXME

# peeraddr required
# FIXME

# peerport required
# FIXME

# protocol required
# FIXME

# sockaddr required
# FIXME

# sockport required
# FIXME

done_testing