#!/usr/bin/perl -w
use strict;
use Gnome2::VFS;
use Cwd qw(cwd);
use Test::More;
# $Header: /cvsroot/gtk2-perl/gtk2-perl-xs/Gnome2-VFS/t/GnomeVFSAsync,v 1.10 2004/08/15 21:03:08 kaffeetisch Exp $
plan -d "$ENV{ HOME }/.gnome" ?
(tests => 135) :
(skip_all => "You have no ~/.gnome");
Gnome2::VFS -> init();
###############################################################################
my $loop = Glib::MainLoop -> new();
###############################################################################
my $callback_close = sub {
my ($handle, $result) = @_;
isa_ok($handle, "Gnome2::VFS::Async::Handle");
is($result, "ok");
$loop -> quit();
};
my $callback_read = sub {
my ($handle, $result, $buffer, $bytes_requested, $bytes_read) = @_;
isa_ok($handle, "Gnome2::VFS::Async::Handle");
is($result, "ok");
is($buffer, "#!");
is($bytes_requested, 2);
is($bytes_read, 2);
$handle -> close($callback_close);
};
my $callback_seek = sub {
my ($handle, $result) = @_;
isa_ok($handle, "Gnome2::VFS::Async::Handle");
is($result, "ok");
$handle -> read(2, $callback_read);
};
my $callback_open = sub {
my ($handle, $result) = @_;
isa_ok($handle, "Gnome2::VFS::Async::Handle");
is($result, "ok");
if (Gnome2::VFS -> CHECK_VERSION(2, 6, 0)) {
$handle -> seek("start", 0, $callback_seek);
}
else {
$handle -> read(2, $callback_read);
ok(1);
ok(1);
}
};
my $callback_write = sub {
my ($handle, $result, $buffer, $bytes_requested, $bytes_written) = @_;
isa_ok($handle, "Gnome2::VFS::Async::Handle");
is($result, "ok");
is($buffer, "urgs\n");
is($bytes_requested, 5);
is($bytes_written, 5);
$handle -> close($callback_close);
};
my $callback_create = sub {
my ($handle, $result) = @_;
isa_ok($handle, "Gnome2::VFS::Async::Handle");
is($result, "ok");
$handle -> write("urgs\n", 5, $callback_write);
};
my $callback_directory_open = sub {
my ($handle, $result, $infos, $entries_read) = @_;
isa_ok($handle, "Gnome2::VFS::Async::Handle");
is($result, "ok");
is($entries_read, 2);
isa_ok($infos -> [0], "Gnome2::VFS::FileInfo");
isa_ok($infos -> [1], "Gnome2::VFS::FileInfo");
$handle -> cancel();
$loop -> quit();
};
my $callback_get_file_info = sub {
my ($handle, $infos) = @_;
foreach (@{$infos}) {
is($_ -> { result }, "ok");
isa_ok($_ -> { file_info }, "Gnome2::VFS::FileInfo");
isa_ok($_ -> { uri }, "Gnome2::VFS::URI");
}
$loop -> quit();
};
my $callback_set_file_info = sub {
my ($handle, $result, $info) = @_;
isa_ok($handle, "Gnome2::VFS::Async::Handle");
is($result, "ok");
is($info -> { name }, "bla");
is_deeply($info -> { permissions }, [qw(user-read user-write)]);
$loop -> quit();
};
my $callback_find_directory = sub {
my ($handle, $results) = @_;
foreach (@{$results}) {
is($_ -> { result }, "ok");
isa_ok($_ -> { uri }, "Gnome2::VFS::URI");
}
$loop -> quit();
};
my $callback_progress_sync = sub {
my ($info) = @_;
isa_ok($info, "HASH");
if ($info -> { status } eq "ok") {
return 1;
}
elsif ($info -> { status } eq "vfserror") {
return "abort";
}
elsif ($info -> { status } eq "overwrite") {
return "replace";
}
return 0;
};
my $callback_progress_update = sub {
my ($handle, $info) = @_;
isa_ok($handle, "Gnome2::VFS::Async::Handle");
isa_ok($info, "HASH");
if ($info -> { phase } eq "phase-completed") {
$loop -> quit();
}
};
###############################################################################
my ($handle, $result);
###############################################################################
$handle = Gnome2::VFS::Async -> open(cwd() . "/$0",
qw(read),
0,
$callback_open);
isa_ok($handle, "Gnome2::VFS::Async::Handle");
$loop -> run();
###############################################################################
$handle = Gnome2::VFS::Async -> open_uri(Gnome2::VFS::URI -> new(cwd() . "/$0"),
qw(read),
0,
$callback_open);
isa_ok($handle, "Gnome2::VFS::Async::Handle");
$loop -> run();
###############################################################################
$handle = Gnome2::VFS::Async -> create("/tmp/bla",
[qw(read write)],
1,
0666,
0,
$callback_create);
isa_ok($handle, "Gnome2::VFS::Async::Handle");
$loop -> run();
###############################################################################
$handle = Gnome2::VFS::Async -> create_uri(Gnome2::VFS::URI -> new("/tmp/ble"),
[qw(read write)],
1,
0666,
0,
$callback_create);
isa_ok($handle, "Gnome2::VFS::Async::Handle");
$loop -> run();
###############################################################################
# FIXME: this seems to block. should we cancel the handle somewhere?
# $handle = Gnome2::VFS::Async -> create_symbolic_link(Gnome2::VFS::URI -> new("/tmp/bli"),
# "/usr/bin/perl",
# 0,
# $callback_close);
# isa_ok($handle, "Gnome2::VFS::Async::Handle");
# $loop -> run();
$handle = Gnome2::VFS::Async -> create("/tmp/bli",
[qw(read write)],
1,
0666,
0,
$callback_create);
isa_ok($handle, "Gnome2::VFS::Async::Handle");
$loop -> run();
###############################################################################
$handle = Gnome2::VFS::Async -> load_directory("/tmp",
qw(default),
2,
0,
$callback_directory_open);
isa_ok($handle, "Gnome2::VFS::Async::Handle");
$loop -> run();
###############################################################################
$handle = Gnome2::VFS::Async -> load_directory_uri(Gnome2::VFS::URI -> new("/tmp"),
qw(default),
2,
0,
$callback_directory_open);
isa_ok($handle, "Gnome2::VFS::Async::Handle");
$loop -> run();
###############################################################################
my $files = [Gnome2::VFS::URI -> new("/tmp/bla"),
Gnome2::VFS::URI -> new("/tmp/ble"),
Gnome2::VFS::URI -> new("/tmp/bli")];
$handle = Gnome2::VFS::Async -> get_file_info($files,
qw(default),
0,
$callback_get_file_info);
isa_ok($handle, "Gnome2::VFS::Async::Handle");
$loop -> run();
###############################################################################
$handle = Gnome2::VFS::Async -> set_file_info(Gnome2::VFS::URI -> new("/tmp/bla"),
{ permissions => [qw(user-read user-write)] },
[qw(permissions)],
qw(default),
0,
$callback_set_file_info);
isa_ok($handle, "Gnome2::VFS::Async::Handle");
$loop -> run();
###############################################################################
$handle = Gnome2::VFS::Async -> find_directory($files,
"desktop",
0,
1,
0777,
0,
$callback_find_directory);
isa_ok($handle, "Gnome2::VFS::Async::Handle");
$loop -> run();
###############################################################################
my @source = (Gnome2::VFS::URI -> new("/tmp/bla"),
Gnome2::VFS::URI -> new("/tmp/ble"),
Gnome2::VFS::URI -> new("/tmp/bli"));
my @destination = (Gnome2::VFS::URI -> new("/tmp/blaa"),
Gnome2::VFS::URI -> new("/tmp/blee"),
Gnome2::VFS::URI -> new("/tmp/blii"));
($result, $handle) = Gnome2::VFS::Async -> xfer(\@source,
\@destination,
qw(default),
qw(query),
qw(query),
0,
$callback_progress_update,
undef,
$callback_progress_sync,
undef);
is($result, "ok");
isa_ok($handle, "Gnome2::VFS::Async::Handle");
$loop -> run();
###############################################################################
Gnome2::VFS -> unlink("/tmp/bla");
Gnome2::VFS -> unlink("/tmp/ble");
Gnome2::VFS -> unlink("/tmp/bli");
Gnome2::VFS -> unlink("/tmp/blaa");
Gnome2::VFS -> unlink("/tmp/blee");
Gnome2::VFS -> unlink("/tmp/blii");
###############################################################################
Gnome2::VFS::Async -> set_job_limit(2);
is(Gnome2::VFS::Async -> get_job_limit(), 2);
###############################################################################
Gnome2::VFS -> shutdown();