UniEvent
view release on metacpan or search on metacpan
$fd = Fs::open($file, OPEN_RDWR);
Fs::truncate($fd, 5);
Fs::close($fd);
is Fs::stat($file)->[STAT_SIZE], 5;
Fs::truncate($file);
is Fs::stat($file)->[STAT_SIZE], 0;
};
subtest "chmod" => sub {
subtest "path" => sub {
Fs::touch($file, 0644);
Fs::chmod($file, 0666);
is Fs::stat($file)->[STAT_PERMS], 0666;
};
subtest "fd" => sub {
Fs::touch($file, 0644);
my $fd = Fs::open($file, OPEN_RDONLY);
Fs::chmod($fd, 0600);
is Fs::stat($fd)->[STAT_PERMS], 0600;
Fs::close($fd);
};
} unless win32();
subtest "touch" => sub {
subtest "non-existant" => sub {
ok Fs::touch($file);
ok Fs::isfile($file);
};
subtest "exists" => sub {
ok Fs::touch($file);
my $s = Fs::stat($file);
my $mtime = $s->[STAT_MTIME];
my $atime = $s->[STAT_ATIME];
select undef, undef, undef, 0.001;
ok Fs::touch($file);
ok Fs::isfile($file);
$s = Fs::stat($file);
cmp_ok $s->[STAT_MTIME], '>', $mtime;
cmp_ok $s->[STAT_ATIME], '>', $atime;
};
};
subtest "utime" => sub {
subtest "path" => sub {
Fs::touch($file);
ok Fs::utime($file, 1000, 1000);
is Fs::stat($file)->[STAT_ATIME], 1000;
is Fs::stat($file)->[STAT_MTIME], 1000;
};
subtest "fd" => sub {
Fs::touch($file);
my $fd = Fs::open($file, OPEN_RDONLY);
ok Fs::utime($fd, 2000, 2000);
Fs::close($fd);
is Fs::stat($file)->[STAT_ATIME], 2000;
is Fs::stat($file)->[STAT_MTIME], 2000;
} unless win32();
};
#no tests for chown
subtest "rename" => sub {
Fs::touch($file);
ok Fs::rename($file, $file2);
ok Fs::isfile($file2);
ok !Fs::exists($file);
};
subtest "mkdtemp" => sub {
my $dir = Fs::mkdtemp(var("tmpXXXXXX"));
ok $dir;
ok Fs::isdir($dir);
};
subtest "mkstemp" => sub {
my $ret = Fs::mkstemp(var("tmpXXXXXX"));
ok $ret;
ok $ret->[0];
ok $ret->[1];
ok Fs::isfile($ret->[0]);
Fs::write($ret->[1], "hello world");
Fs::close($ret->[1]);
is Fs::stat($ret->[0])->[STAT_SIZE], 11;
};
};
######################### ASYNC ###############################
subtest 'xs-async' => sub {
$async_mode = 1;
subtest "fs request" => sub {
my $req = Fs::mkdtemp(var("tmpXXXXXX"), sub { $happened++ });
isa_ok $req, 'UniEvent::Request::Fs';
isa_ok $req, 'UniEvent::Work';
ok $req->active;
$l->run();
};
subtest "mkdir" => sub {
subtest "ok" => sub {
Fs::mkdir($dir, 0755, $success, $l);
$l->run();
ok Fs::isdir($dir);
};
subtest "err" => sub {
Fs::mkdir($dir);
Fs::mkdir($dir, 0755, sub {
$happened++;
is $_[0], UniEvent::SystemError::file_exists;
});
};
};
subtest "rmdir" => sub {
Fs::mkdir($dir);
Fs::rmdir($dir, $success, $l);
$l->run();
ok !Fs::exists($dir);
};
is Fs::stat($file)->[STAT_SIZE], 5;
Fs::truncate($file, 0, $success);
$l->run();
is Fs::stat($file)->[STAT_SIZE], 0;
};
subtest "chmod" => sub {
subtest "path" => sub {
Fs::touch($file, 0644);
Fs::chmod($file, 0666, $success);
$l->run();
is Fs::stat($file)->[STAT_PERMS], 0666;
};
subtest "fd" => sub {
Fs::touch($file, 0644);
my $fd = Fs::open($file, OPEN_RDONLY);
Fs::chmod($fd, 0600, $success);
$l->run();
is Fs::stat($file)->[STAT_PERMS], 0600;
Fs::close($fd);
};
} unless win32();
subtest "touch" => sub {
$expected = 2;
Fs::touch($file, 0644, $success);
$l->run();
my $s = Fs::stat($file);
my $mtime = $s->[STAT_MTIME];
my $atime = $s->[STAT_ATIME];
select undef, undef, undef, 0.001;
Fs::touch($file, 0644, $success);
$l->run();
ok Fs::isfile($file);
$s = Fs::stat($file);
cmp_ok $s->[STAT_MTIME], '>', $mtime;
cmp_ok $s->[STAT_ATIME], '>', $atime;
};
subtest "utime" => sub {
subtest "path" => sub {
Fs::touch($file);
Fs::utime($file, 1000, 1100, $success);
$l->run();
is Fs::stat($file)->[STAT_ATIME], 1000;
is Fs::stat($file)->[STAT_MTIME], 1100;
};
subtest "fd" => sub {
Fs::touch($file);
my $fd = Fs::open($file, OPEN_RDONLY);
Fs::utime($fd, 2000, 2100, $success);
$l->run();
Fs::close($fd);
is Fs::stat($file)->[STAT_ATIME], 2000;
is Fs::stat($file)->[STAT_MTIME], 2100;
} unless win32();
};
# no tests for chown
subtest "rename" => sub {
Fs::touch($file);
Fs::rename($file, $file2, $success);
$l->run();
ok !Fs::exists($file);
ok Fs::isfile($file2);
};
subtest "mkdtemp" => sub {
my ($path, $err);
Fs::mkdtemp(var("tmpXXXXXX"), sub { ($path, $err) = @_; $happened++ });
$l->run();
ok !$err;
ok $path;
ok Fs::isdir($path);
};
subtest "mkstemp" => sub {
my ($path, $fd, $err);
Fs::mkstemp(var("tmpXXXXXX"), sub { ($path, $fd, $err) = @_; $happened++ });
$l->run();
ok !$err;
ok $path;
ok Fs::isfile($path);
Fs::write($fd, "hello world");
Fs::close($fd);
is Fs::stat($path)->[STAT_SIZE], 11;
};
};
done_testing();
( run in 0.553 second using v1.01-cache-2.11-cpan-5511b514fd6 )