On Thu, Feb 18, 2010 at 9:12 AM, Lars Dɪᴇᴄᴋᴏᴡ 迪拉斯 <[email protected]> wrote:
> I of course ran `perl Makefile.PL ; make ; make testdistro ; make test` on the
> source directory before committing and encountered no problems. Tests pass, my
> configuration below `$HOME/.config` was not overwritten, and also no
> `$HOME/.cpan` directory appeared again once I earlier had deleted it for good.
> So, »works on my machine«.
>
> Are you referring to the tests of the CPAN distro or something else?
Anything *else* on CPAN that does this:
(a) uses File::HomeDir->my_data
(b) Overrides $ENV{HOME} to a temp directory for testing creation of
config files (instead of, say, mocking File::HomeDir->my_data)
This presumes that they don't care or don't realize that $ENV{HOME}
doesn't affect my_data on Windows.
Adam's suggestion is only a so-so answer because users might
legitimately have reasons to set HOME and XDG_DATA_HOME differently.
The handful of modules I spot check seem to either just use my_home()
directly instead of my_data() or if they use my_data(), they mock it
or have some other override that avoids File::HomeDir entirely.
Here's my revised suggestion: add something to the File::HomeDir
module (or distribution) that is the "official" way to mock/override
File::HomeDir for testing and then advertise the hell out of it. (And
possibly email every author that uses File::HomeDir on CPAN)
That could be any of these:
(a) Some global variable that takes precedence over HOME, HOMEDIR,
XDG_*, whatever
(b) A File::HomeDir::Mock module that creates a temporary directory
and points every other call to a subdirectory of it. E.g.
/tmp/File-HomeDir-tmp498723487/
my_home/
my_data/
my_documents/
...
I think (b) is a safer bet. Ideally, tests would just need to load it
early, and then it would ensure that all subsequent use of
File::HomeDir in that process is safely segregated from real user
data.
-- David
P.S. Alias++ for the pun