diff options
Diffstat (limited to 'Mock/IRC.pm')
-rw-r--r-- | Mock/IRC.pm | 62 |
1 files changed, 62 insertions, 0 deletions
diff --git a/Mock/IRC.pm b/Mock/IRC.pm new file mode 100644 index 0000000..5c62754 --- /dev/null +++ b/Mock/IRC.pm @@ -0,0 +1,62 @@ +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; |