The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
#!/usr/bin/perl

use perl5i::latest;

use lib 't/lib';
use Test::More;
use Test::perl5i;


note "Test some simple symetrical conversions"; {
    my %mod2path = (
        CGI                 => "CGI.pm",
        "File::Spec"        => "File/Spec.pm",
        "A::B::C"           => "A/B/C.pm",
        "å::1::2"           => "å/1/2.pm",
    );

    for my $mod (keys %mod2path) {
        my $path = $mod2path{$mod};

        is $mod->module2path, $path;
        is $path->path2module, $mod;
    }
}


note "Invalid module paths"; {
    my @bad_paths = (
        "/foo/bar/baz.pm",
        "Not/A/Module",
        "Foo/Bar/Baz.pm/",
    );

    for my $path (@bad_paths) {
        throws_ok { $path->path2module } qr/^'$path' does not look like a Perl module path/;
    }
}


note "Invalid module names"; {
    my @bad_modules = (
        "::tmp::owned",
        "f/../../owned",
        "/tmp::LOL::PWNED",
    );

    for my $module (@bad_modules) {
        throws_ok { $module->module2path } qr/^'\Q$module\E' is not a valid module name/;
    }
}

done_testing();