Glib
view release on metacpan or search on metacpan
#!/usr/bin/perl
use strict;
use warnings;
=comment
test some GSignal stuff - marshaling, exception trapping, order of operations.
based on the Glib::Object::Subclass, since it already worked, but not
in that test because it would confound too many issues.
we do not use Test::More or even Test::Simple because we need to test
order of execution... the ok() funcs from those modules assume you
are doing all your tests in order, but our stuff will jump around.
my apologies for the extreme density and ugliness of this code.
=cut
use Test::More import => ['diag'];
print "1..36\n";
sub ok($$;$) {
my($test, $num, $name) = @_;
my $out = $test ? "ok" : "not ok";
$out .= " $num" if $num;
$out .= " - $name" if defined $name;
print "$out\n";
return $test;
}
sub pass($;$) {
my($num, $name) = @_;
return ok(1, $num, $name);
}
sub fail(;$) {
my($name) = @_;
return ok(0, 0, $name);
}
use Glib;
pass(1, 'Glib compiled');
package MyClass;
use Glib::Object::Subclass
Glib::Object::,
signals =>
{
# a simple void-void signal
something_changed => {
class_closure => undef, # disable the class closure
flags => [qw/run-last action/],
return_type => undef,
param_types => [],
},
# test the marshaling of parameters
test_marshaler => {
flags => 'run-last',
param_types => [qw/Glib::String Glib::Boolean Glib::Uint Glib::Object/],
},
# one that returns a value
returner => {
flags => 'run-last',
return_type => 'Glib::Double',
# using the default accumulator, which just returns the last
# value
},
# more complicated/sophisticated value returner
list_returner => {
class_closure => sub {
::pass(32, "hello from the class closure");
-1
},
flags => 'run-last',
return_type => 'Glib::Scalar',
accumulator => sub {
( run in 1.153 second using v1.01-cache-2.11-cpan-b16cb0d3907 )