package Mock::IRC; use strict; use warnings; use Switch; use fields qw/_joined_channels _nick_name/; sub new { my Mock::IRC $self = shift; unless ($self) { $self = fields::new($self); $self->{_nick_name} = ""; $self->{_joined_channels} = []; } bless {}, $self; } ############################################################################### # Methods used by code/plugins under test sub yield { my ($self, $event, @data) = @_; switch($event) { case "join" { my $channel = $data[0]; unless (grep {$_ eq $channel} @{$self->{_joined_channels}}) { push @{$self->{_joined_channels}}, $channel; } } case "part" { # FIXME supports multi args? my $channel = $data[0]; @{$self->{_joined_channels}} = grep {$_ ne $channel} @{$self->{_joined_channels}}; } case "nick" { ($self->{_nick_name}) = @data; } else { die "Unsupported event type: $event\n"; } } } sub nick_name { my ($self) = @_; return $self->{_nick_name}; } ############################################################################### # Methods used test-side follow sub idalius_get_channels { my ($self) = @_; return @{$self->{_joined_channels}}; } sub idalius_is_joined_to { my ($self, $channel) = @_; return grep {$_ eq $channel} @{$self->{_joined_channels}}; } 1;