NAME
    Test::Virtual::Filesystem - Validate a filesystem

SYNOPSIS
        use Test::Virtual::Filesystem;
        Test::Virtual::Filesystem->new('/path/to/test')->runtests;

    or with more customization:

        use Test::Virtual::Filesystem;
        my $test = Test::Virtual::Filesystem->new('/path/to/test');
        $test->test_xattr(1);
        $test->test_chown(1);
        $test->test_atime(1);
        $test->runtests;

LICENSE
    Copyright 2007 Chris Dolan, *cdolan@cpan.org*

    This library is free software; you can redistribute it and/or modify it
    under the same terms as Perl itself.

DESCRIPTION
    If you are creating a filesystem, say via Fuse or Filesys::Virtual, you
    need a fairly mundane set of tests to try out lots of typical filesystem
    operations. This package attempts to accumulate a bunch of those tests
    to make it easier for you to test your filesystem.

CAVEATS AND LIMITATIONS
    This test class needs a more complete suite of test cases. In
    particular, tests are needed for the following filesystem features:

        extended attributes (xattr)
        symlinks
        hardlinks
        a/u/ctime
        nlink
        chown
        deep directories
        very full directories
        large files
        binary files
        files with awkward characters: EOF, NUL
        non-ASCII filenames (maybe constructor should specify the encoding)
        permissions
        special file types (fifos, sockets, character and block devices, etc)
        file locking
        threading and re-entrancy
        truncate
        binmode
        eof
        fileno
        seek/rewinddir, tell/telldir
        read, sysread, syswrite
        async I/O?

COMPATIBILITY
    Until this package reaches v1.0, we will add arbitrary new tests which
    may break compatibility. After 1.0, we will tag every test with a
    version number. If client code specifies an expected version number
    (say, 1.10) and it's running against a newer version (say, 1.20) then
    any newer test that fails will be marked as a TODO test.

    This policy will allow us to continue adding new filesystem tests
    without worrying about breaking existing CPAN modules.

METHODS
    This is a subclass of Test::Class. All methods from that class are
    available, particularly `runtests()'.

    $pkg->new({mountdir => $mountdir, ...})
        Create a new test which will operate on files contained within the
        specified mount directory. WARNING: any and all files and folders in
        that mount directory will be deleted!

        The supported options are:

        `mountdir'
            This required property indicates where tests should run.

        `compatible'
            Specify a Test::Virtual::Filesystem version number that is known
            to work. If the actual Test::Virtual::Filesystem version number
            is greater, then any test cases added after the compatible
            version are considered `TODO' tests. See Test::More for details
            about `TODO' tests.

    $self->init()
        Invoked just before then end of `new()'. This exists solely for
        subclassing convenience. This implementation does nothing.

PROPERTIES
    The following accessor/mutator methods exist to turn on/off various
    features. they all behave in usual Perl fashion: with no argument, they
    return the current value. With one argument, they set the current value
    and return void.

    $self->test_xattr()
        Default false.

    $self->test_time()
        Default true. If set false, it also sets `atime', `ctime' and
        `utime' false.

    $self->test_atime()
        Default false.

    $self->test_utime()
        Default true.

    $self->test_ctime()
        Default true.

    $self->test_permissions()
        Default false.

    $self->test_special()
        Default true. If set false, it also sets `fifo' false.

    $self->test_fifo()
        Default false. AKA named pipes.

    $self->test_symlink()
        Default true, except `$^O eq 'MSWin32'' where it defaults to false.

    $self->test_hardlink()
        Default true.

    $self->test_nlink()
        Default true.

    $self->test_chown()
        Default false.

TEST CASES
    stat_dir(), introduced in v0.01
    read_dir(), introduced in v0.01
    read_dir_fail(), introduced in v0.01
    read_file_fail(), introduced in v0.01
    write_empty_file(), introduced in v0.01
    write_file(), introduced in v0.01
    write_file_subdir_fail(), introduced in v0.01
    write_append_file(), introduced in v0.01
    write_read_file(), introduced in v0.01
    write_unlink_file(), introduced in v0.01
    write_mkdir(), introduced in v0.01
    write_mkdir_fail(), introduced in v0.01
    write_rmdir(), introduced in v0.01
    write_subdir(), introduced in v0.01
SEE ALSO
    Test::Class

    Fuse::PDF

AUTHOR
    Chris Dolan, *cdolan@cpan.org*

