UniEvent

 view release on metacpan or  search on metacpan

t/fs.t  view on Meta::CPAN

        $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);
    };

t/fs.t  view on Meta::CPAN

        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 )