Test::File::ShareDir - Create a Fake ShareDir for your modules for testing.
version 1.000002
use Test::More; # use FindBin; optional use Test::File::ShareDir # -root => "$FindBin::Bin/../" # optional, -share => { -module => { 'My::Module' => 'share/MyModule' } -dist => { 'My-Dist' => 'share/somefolder' } }; use My::Module; use File::ShareDir qw( module_dir dist_dir ); module_dir( 'My::Module' ) # dir with files from $dist/share/MyModule dist_dir( 'My-Dist' ) # dir with files from $dist/share/somefolder
This module only has support for creating 'new' style share dirs and are NOT compatible with old File::ShareDirs.
For this reason, unless you have File::ShareDir 1.00 or later installed, this module will not be usable by you.
Starting with version 0.4.0, there are a few extra interfaces you can use.
0.4.0
These will probably be more useful, and easier to grok, because they don't have a layer of indirection in order to simultaneously support both Module and Dist ShareDir's.
Module
Dist
ShareDir
Test::File::ShareDir::Dist
Test::File::ShareDir::Dist provides a simple export interface for making TempDir ShareDir's from a given path:
TempDir
use Test::File::ShareDir::Dist { "Dist-Name" => "share/" };
This will automatically create a ShareDir for Dist-Name in a TempDir based on the contents of CWD/share/
Dist-Name
CWD/share/
See Test::File::ShareDir::Dist for details.
Test::File::ShareDir::Module
Test::File::ShareDir::Module provides a simple export interface for making TempDir ShareDir's from a given path:
use Test::File::ShareDir::Module { "Module::Name" => "share/" };
This will automatically create a ShareDir for Module::Name in a TempDir based on the contents of CWD/share/
Module::Name
See Test::File::ShareDir::Module for details.
Test::File::ShareDir::Object::Dist
Test::File::ShareDir::Object::Dist provides a simple object oriented interface for making TempDir ShareDir's from a given path:
use Test::File::ShareDir::Object::Dist; my $obj = Test::File::ShareDir::Object::Dist->new( dists => { "Dist-Name" => "share/" } ); $obj->install_all_dists; $obj->add_to_inc;
See Test::File::ShareDir::Object::Dist for details.
Test::File::ShareDir::Object::Module
Test::File::ShareDir::Object::Module provides a simple object oriented interface for making TempDir ShareDir's from a given path:
use Test::File::ShareDir::Object::Module; my $obj = Test::File::ShareDir::Object::Module->new( modules => { "Module::Name" => "share/" } ); $obj->install_all_modules; $obj->add_to_inc;
See Test::File::ShareDir::Object::Module for details.
This parameter is the prefix the other paths are relative to.
If this parameter is not specified, it defaults to the Current Working Directory ( CWD ).
CWD
In versions prior to 0.3.0, this value was mandatory.
0.3.0
The rationale behind using CWD as the default value is as follows.
Most users of this module are likely to be using it to test distributions
Most users of this module will be using it in $project/t/ to load files from $project/share/
$project/t/
$project/share/
Most CPAN tools run tests with CWD = $project
CPAN
Therefor, defaulting to CWD is a reasonably sane default for most people, but where it is not it can still be overridden.
-root => "$FindBin::Bin/../" # resolves to project root from t/ regardless of Cwd.
This parameter is mandatory, and contains a hashref containing the data that explains what directories you want shared.
hashref
-share => { ..... }
-module contains a hashref mapping Module names to path names for module_dir style share dirs.
-module
-share => { -module => { 'My::Module' => 'share/mymodule/', } } ... module_dir('My::Module')
Notedly, it is a hashref, which means there is a limitation of one share dir per module. This is simply because having more than one share dir per module makes no sense at all.
-dist contains a hashref mapping Distribution names to path names for dist_dir style share dirs. The same limitation applied to -module applies here.
-dist
-share => { -dist => { 'My-Dist' => 'share/mydist' } } ... dist_dir('My-Dist')
Kent Fredric <kentnl@cpan.org>
This software is copyright (c) 2014 by Kent Fredric <kentnl@cpan.org>.
This is free software; you can redistribute it and/or modify it under the same terms as the Perl 5 programming language system itself.
To install Test::File::ShareDir, copy and paste the appropriate command in to your terminal.
cpanm
cpanm Test::File::ShareDir
CPAN shell
perl -MCPAN -e shell install Test::File::ShareDir
For more information on module installation, please visit the detailed CPAN module installation guide.