#!perl -w
use strict;
use Test::More tests => 44;
BEGIN { use_ok('Text::Glob', qw( glob_to_regex match_glob ) ) }
my $regex = glob_to_regex( 'foo' );
is( ref $regex, 'Regexp', "glob_to_regex hands back a regex" );
ok( 'foo' =~ $regex, "matched foo" );
ok( 'foobar' !~ $regex, "didn't match foobar" );
ok( match_glob( 'foo', 'foo' ), "absolute string" );
ok( !match_glob( 'foo', 'foobar' ) );
ok( match_glob( 'foo.*', 'foo.' ), "* wildcard" );
ok( match_glob( 'foo.*', 'foo.bar' ) );
ok( !match_glob( 'foo.*', 'gfoo.bar' ) );
ok( match_glob( 'foo.?p', 'foo.cp' ), "? wildcard" );
ok( !match_glob( 'foo.?p', 'foo.cd' ) );
ok( match_glob( 'foo.{c,h}', 'foo.h' ), ".{alternation,or,something}" );
ok( match_glob( 'foo.{c,h}', 'foo.c' ) );
ok( !match_glob( 'foo.{c,h}', 'foo.o' ) );
ok( match_glob( 'foo.\\{c,h}\\*', 'foo.{c,h}*' ), '\escaping' );
ok( !match_glob( 'foo.\\{c,h}\\*', 'foo.\\c' ) );
ok( match_glob( 'foo.(bar)', 'foo.(bar)'), "escape ()" );
ok( !match_glob( '*.foo', '.file.foo' ), "strict . rule fail" );
ok( match_glob( '.*.foo', '.file.foo' ), "strict . rule match" );
{
local $Text::Glob::strict_leading_dot;
ok( match_glob( '*.foo', '.file.foo' ), "relaxed . rule" );
}
ok( !match_glob( '*.fo?', 'foo/file.fob' ), "strict wildcard / fail" );
ok( match_glob( '*/*.fo?', 'foo/file.fob' ), "strict wildcard / match" );
{
local $Text::Glob::strict_wildcard_slash;
ok( match_glob( '*.fo?', 'foo/file.fob' ), "relaxed wildcard /" );
}
ok( !match_glob( 'foo/*.foo', 'foo/.foo' ), "more strict wildcard / fail" );
ok( match_glob( 'foo/.f*', 'foo/.foo' ), "more strict wildcard / match" );
{
local $Text::Glob::strict_wildcard_slash;
ok( match_glob( '*.foo', 'foo/.foo' ), "relaxed wildcard /" );
}
ok( match_glob( 'f+.foo', 'f+.foo' ), "properly escape +" );
ok( !match_glob( 'f+.foo', 'ffff.foo' ) );
ok( match_glob( "foo\nbar", "foo\nbar" ), "handle embedded \\n" );
ok( !match_glob( "foo\nbar", "foobar" ) );
ok( match_glob( 'test[abc]', 'testa' ), "[abc]" );
ok( match_glob( 'test[abc]', 'testb' ) );
ok( match_glob( 'test[abc]', 'testc' ) );
ok( !match_glob( 'test[abc]', 'testd' ) );
ok( match_glob( 'foo$bar.*', 'foo$bar.c'), "escaping \$" );
ok( match_glob( 'foo^bar.*', 'foo^bar.c'), "escaping ^" );
ok( match_glob( 'foo|bar.*', 'foo|bar.c'), "escaping |" );
ok( match_glob( '{foo,{bar,baz}}', 'foo'), "{foo,{bar,baz}}" );
ok( match_glob( '{foo,{bar,baz}}', 'bar') );
ok( match_glob( '{foo,{bar,baz}}', 'baz') );
ok( !match_glob( '{foo,{bar,baz}}', 'foz') );
ok( match_glob( 'foo@bar', 'foo@bar'), '@ character');
ok( match_glob( 'foo$bar', 'foo$bar'), '$ character');
ok( match_glob( 'foo%bar', 'foo%bar'), '% character');