diff options
Diffstat (limited to 'feature-tests')
| -rw-r--r-- | feature-tests/subscript.pl | 98 | ||||
| -rw-r--r-- | feature-tests/test.sub | 7 | 
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(); }, +}; + +  | 
