From 2794d7ef5abc4fa8fc2eb42d5c85ada197df0767 Mon Sep 17 00:00:00 2001 From: joey Date: Wed, 2 Aug 2006 00:14:31 +0000 Subject: * Renamed GlobLists to PageSpecs. * PageSpecs can now include nested parens, "and", and "or". This remains backwards compatible to the old GlobList format. It's implemented by treating the GlobList as a very limited microlanguage that is transformed to perl code that does the matching. * The old GlobList format is deprecated, and I encourage users to switch to using the new PageSpec format. Compatability with the old format will be removed at some point, possibly by 2.0. * Wiki rebuild needed on upgrade to this version due to PageSpec change. * Add support for creation_month and creation_year to PageSpec. Closes: #380680 * Changes to index file encoding. --- t/globlist_match.t | 18 ------------------ t/globlist_merge.t | 44 -------------------------------------------- t/pagespec_match.t | 28 ++++++++++++++++++++++++++++ t/pagespec_merge.t | 44 ++++++++++++++++++++++++++++++++++++++++++++ 4 files changed, 72 insertions(+), 62 deletions(-) delete mode 100755 t/globlist_match.t delete mode 100755 t/globlist_merge.t create mode 100755 t/pagespec_match.t create mode 100755 t/pagespec_merge.t (limited to 't') diff --git a/t/globlist_match.t b/t/globlist_match.t deleted file mode 100755 index b60d83a2a..000000000 --- a/t/globlist_match.t +++ /dev/null @@ -1,18 +0,0 @@ -#!/usr/bin/perl -use warnings; -use strict; -use Test::More tests => 13; - -BEGIN { use_ok("IkiWiki"); } -ok(IkiWiki::globlist_match("foo", "foo bar"), "simple list"); -ok(IkiWiki::globlist_match("bar", "foo bar"), "simple list 2"); -ok(IkiWiki::globlist_match("foo", "*")); -ok(IkiWiki::globlist_match("foo", "f?? !foz")); -ok(! IkiWiki::globlist_match("foo", "f?? !foo")); -ok(! IkiWiki::globlist_match("foo", "* !foo")); -ok(! IkiWiki::globlist_match("foo", "foo !foo")); -ok(IkiWiki::globlist_match("page", "?ag?")); -ok(! IkiWiki::globlist_match("page", "?a?g?")); -ok(! IkiWiki::globlist_match("foo.png", "* !*.*")); -ok(IkiWiki::globlist_match("foo.png", "*.*")); -ok(! IkiWiki::globlist_match("foo", "*.*")); diff --git a/t/globlist_merge.t b/t/globlist_merge.t deleted file mode 100755 index db76f1cd4..000000000 --- a/t/globlist_merge.t +++ /dev/null @@ -1,44 +0,0 @@ -#!/usr/bin/perl -use warnings; -use strict; -use Test::More tests => 25; - -sub same { - my $a=shift; - my $b=shift; - my $match=shift; - - my $imatch=(IkiWiki::globlist_match($match, $a) || - IkiWiki::globlist_match($match, $b)); - my $cmatch=IkiWiki::globlist_match($match, IkiWiki::globlist_merge($a, $b)); - - return $imatch == $cmatch; -} - -BEGIN { use_ok("IkiWiki::Render"); } - -ok(same("foo", "bar", "foo"), "basic match 1"); -ok(same("foo", "bar", "bar"), "basic match 2"); -ok(same("foo", "bar", "foobar"), "basic failed match"); -ok(same("foo", "!bar", "foo"), "basic match with inversion"); -ok(same("foo", "!bar", "bar"), "basic failed match with inversion"); -ok(same("!foo", "bar", "foo"), "basic failed match with inversion 2"); -ok(same("!foo", "bar", "bar"), "basic match with inversion 2"); -ok(same("!foo", "!bar", "foo"), "double inversion failed match"); -ok(same("!foo", "!bar", "bar"), "double inversion failed match 2"); -ok(same("*", "!bar", "foo"), "glob+inversion match"); -ok(same("*", "!bar", "bar"), "matching glob and matching inversion"); -ok(same("* !foo", "!bar", "bar"), "matching glob and matching inversion"); -ok(same("* !foo", "!bar", "foo"), "matching glob with matching inversion and non-matching inversion"); -ok(same("* !foo", "!foo", "foo"), "matching glob with matching inversion and matching inversion"); -ok(same("b??", "!b??", "bar"), "matching glob and matching inverted glob"); -ok(same("f?? !f??", "!bar", "bar"), "matching glob and matching inverted glob"); -ok(same("b??", "!b?z", "bar"), "matching glob and non-matching inverted glob"); -ok(same("f?? !f?z", "!bar", "bar"), "matching glob and non-matching inverted glob"); -ok(same("!foo bar baz", "!bar", "bar"), "matching list and matching inversion"); -ok(IkiWiki::globlist_match("foo/Discussion", - IkiWiki::globlist_merge("* !*/Discussion", "*/Discussion")), "should match"); -ok(same("* !*/Discussion", "*/Discussion", "foo/Discussion"), "Discussion merge 1"); -ok(same("*/Discussion", "* !*/Discussion", "foo/Discussion"), "Discussion merge 2"); -ok(same("*/Discussion !*/bar", "*/bar !*/Discussion", "foo/Discussion"), "bidirectional merge 1"); -ok(same("*/Discussion !*/bar", "*/bar !*/Discussion", "foo/bar"), "bidirectional merge 2"); diff --git a/t/pagespec_match.t b/t/pagespec_match.t new file mode 100755 index 000000000..35d420f10 --- /dev/null +++ b/t/pagespec_match.t @@ -0,0 +1,28 @@ +#!/usr/bin/perl +use warnings; +use strict; +use Test::More tests => 20; + +BEGIN { use_ok("IkiWiki"); } + +ok(IkiWiki::pagespec_match("foo", "*")); +ok(IkiWiki::pagespec_match("page", "?ag?")); +ok(! IkiWiki::pagespec_match("page", "?a?g?")); +ok(IkiWiki::pagespec_match("foo.png", "*.*")); +ok(! IkiWiki::pagespec_match("foo", "*.*")); +ok(IkiWiki::pagespec_match("foo", "foo or bar"), "simple list"); +ok(IkiWiki::pagespec_match("bar", "foo or bar"), "simple list 2"); +ok(IkiWiki::pagespec_match("foo", "f?? and !foz")); +ok(! IkiWiki::pagespec_match("foo", "f?? and !foo")); +ok(! IkiWiki::pagespec_match("foo", "* and !foo")); +ok(! IkiWiki::pagespec_match("foo", "foo and !foo")); +ok(! IkiWiki::pagespec_match("foo.png", "* and !*.*")); + +# old style globlists +ok(IkiWiki::pagespec_match("foo", "foo bar"), "simple list"); +ok(IkiWiki::pagespec_match("bar", "foo bar"), "simple list 2"); +ok(IkiWiki::pagespec_match("foo", "f?? !foz")); +ok(! IkiWiki::pagespec_match("foo", "f?? !foo")); +ok(! IkiWiki::pagespec_match("foo", "* !foo")); +ok(! IkiWiki::pagespec_match("foo", "foo !foo")); +ok(! IkiWiki::pagespec_match("foo.png", "* !*.*")); diff --git a/t/pagespec_merge.t b/t/pagespec_merge.t new file mode 100755 index 000000000..c2860709b --- /dev/null +++ b/t/pagespec_merge.t @@ -0,0 +1,44 @@ +#!/usr/bin/perl +use warnings; +use strict; +use Test::More tests => 25; + +sub same { + my $a=shift; + my $b=shift; + my $match=shift; + + my $imatch=(IkiWiki::pagespec_match($match, $a) || + IkiWiki::pagespec_match($match, $b)); + my $cmatch=IkiWiki::pagespec_match($match, IkiWiki::pagespec_merge($a, $b)); + + return $imatch == $cmatch; +} + +BEGIN { use_ok("IkiWiki"); } + +ok(same("foo", "bar", "foo"), "basic match 1"); +ok(same("foo", "bar", "bar"), "basic match 2"); +ok(same("foo", "bar", "foobar"), "basic failed match"); +ok(same("foo", "!bar", "foo"), "basic match with inversion"); +ok(same("foo", "!bar", "bar"), "basic failed match with inversion"); +ok(same("!foo", "bar", "foo"), "basic failed match with inversion 2"); +ok(same("!foo", "bar", "bar"), "basic match with inversion 2"); +ok(same("!foo", "!bar", "foo"), "double inversion failed match"); +ok(same("!foo", "!bar", "bar"), "double inversion failed match 2"); +ok(same("*", "!bar", "foo"), "glob+inversion match"); +ok(same("*", "!bar", "bar"), "matching glob and matching inversion"); +ok(same("* !foo", "!bar", "bar"), "matching glob and matching inversion"); +ok(same("* !foo", "!bar", "foo"), "matching glob with matching inversion and non-matching inversion"); +ok(same("* !foo", "!foo", "foo"), "matching glob with matching inversion and matching inversion"); +ok(same("b??", "!b??", "bar"), "matching glob and matching inverted glob"); +ok(same("f?? !f??", "!bar", "bar"), "matching glob and matching inverted glob"); +ok(same("b??", "!b?z", "bar"), "matching glob and non-matching inverted glob"); +ok(same("f?? !f?z", "!bar", "bar"), "matching glob and non-matching inverted glob"); +ok(same("!foo bar baz", "!bar", "bar"), "matching list and matching inversion"); +ok(IkiWiki::pagespec_match("foo/Discussion", + IkiWiki::pagespec_merge("* !*/Discussion", "*/Discussion")), "should match"); +ok(same("* !*/Discussion", "*/Discussion", "foo/Discussion"), "Discussion merge 1"); +ok(same("*/Discussion", "* !*/Discussion", "foo/Discussion"), "Discussion merge 2"); +ok(same("*/Discussion !*/bar", "*/bar !*/Discussion", "foo/Discussion"), "bidirectional merge 1"); +ok(same("*/Discussion !*/bar", "*/bar !*/Discussion", "foo/bar"), "bidirectional merge 2"); -- cgit v1.2.3