On Thu, Feb 18, 2010 at 9:12 AM, Lars Dɪᴇᴄᴋᴏᴡ 迪拉斯 <da...@cpan.org> 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

Reply via email to