aboutsummaryrefslogtreecommitdiff
path: root/Mock/IRC.pm
diff options
context:
space:
mode:
Diffstat (limited to 'Mock/IRC.pm')
-rw-r--r--Mock/IRC.pm62
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;