aboutsummaryrefslogtreecommitdiffstats
path: root/feature-tests
diff options
context:
space:
mode:
authorTom Feist <shabble@metavore.org>2010-10-14 20:45:40 +0000
committerTom Feist <shabble@metavore.org>2010-10-14 20:45:40 +0000
commitb195e2e51b643a5004c2f7f276444ad93d8e28d3 (patch)
treeffeede956bda0c0e2e28eeac78fb91cdbbc5eff6 /feature-tests
parentMerge branch 'dev' of github.com:shabble/irssi-scripts into dev (diff)
parentvim_mode: Mention that :set only sets vim_mode settings. (diff)
downloadirssi-scripts-b195e2e51b643a5004c2f7f276444ad93d8e28d3.tar.gz
irssi-scripts-b195e2e51b643a5004c2f7f276444ad93d8e28d3.zip
merged config
Diffstat (limited to '')
-rw-r--r--feature-tests/subscript.pl98
-rw-r--r--feature-tests/test.sub7
2 files changed, 105 insertions, 0 deletions
diff --git a/feature-tests/subscript.pl b/feature-tests/subscript.pl
new file mode 100644
index 0000000..8550409
--- /dev/null
+++ b/feature-tests/subscript.pl
@@ -0,0 +1,98 @@
+use strict;
+use Irssi;
+use Irssi::TextUI; # for sbar_items_redraw
+
+use vars qw($VERSION %IRSSI);
+
+$VERSION = "0.1";
+
+%IRSSI = (
+ authors => "shabble",
+ contact => 'shabble+irssi@metavore.org, shabble@#irssi/Freenode',
+ name => "",
+ description => "",
+ license => "Public Domain",
+ changed => ""
+);
+
+my $functions = {};
+
+init();
+
+sub _input {
+ return int rand 1000;
+}
+
+sub load {
+ my $file = shift;
+ my $funcs;
+ if (-f $file) {
+ print "Loading from file: $file";
+ $funcs = do $file;
+ }
+ if (not defined $funcs) {
+ if ($@) {
+ print "failed to parse $file: $@";
+
+ } elsif ($!) {
+ print "failed to read $file: $!";
+
+ }
+ return;
+ }
+ my $ref = ref $funcs;
+ if ($ref ne 'HASH') {
+ print "$file didn't return a hashref: ", defined $ref ? $ref : 'undef';
+ return;
+ }
+
+ foreach my $name (keys %$funcs) {
+ my $func = $funcs->{$name};
+ if (exists $functions->{$name}) {
+ print "Redefining function $name";
+ } else {
+ print "adding function: $name";
+ }
+ $functions->{$name} = $func;
+ }
+
+ print "Loaded " . scalar(keys(%$funcs)) . " functions";
+}
+
+sub init {
+ Irssi::command_bind('subload', \&cmd_subload);
+ Irssi::command_bind('sublist', \&cmd_sublist);
+ Irssi::command_bind('subcall', \&cmd_subcall);
+}
+
+sub cmd_subload {
+ my $args = shift;
+ print "Going to load: $args";
+ load($args);
+}
+
+sub cmd_sublist {
+ foreach my $name (keys %$functions) {
+ my $func = $functions->{$name};
+ print "Function: $name => $func";
+ }
+}
+
+sub cmd_subcall {
+ my $args = shift;
+ my ($cmd, $cmdargs);
+ if ($args =~ m/^(\w+\b)(.*)$/) {
+ $cmd = $1; $cmdargs = $2;
+ } else {
+ print "Couldn't parse $args";
+ return;
+ }
+ my $fun = $functions->{$cmd};
+
+ if (ref $fun eq 'CODE') {
+ print "Calling $cmd with $cmdargs";
+ $fun->($cmdargs);
+ } else {
+ print "$cmd is not a coderef. cannot run";
+ }
+}
diff --git a/feature-tests/test.sub b/feature-tests/test.sub
new file mode 100644
index 0000000..350e89d
--- /dev/null
+++ b/feature-tests/test.sub
@@ -0,0 +1,7 @@
+{
+ 'moo' => sub { print "Moo" },
+ 'hello' => sub { print join(", ", @_) },
+ 'inp' => sub { print "input is : ", _input(); },
+};
+
+