Add path and path_natural sort orders
These correspond to title and title_natural, but compare the entire
path: a < a/b < a/z < ab < b.
(cherry picked from commit 903a5a314f
)
master
parent
5333c113d6
commit
ea313b8133
|
@ -0,0 +1,48 @@
|
||||||
|
#!/usr/bin/perl
|
||||||
|
use warnings;
|
||||||
|
use strict;
|
||||||
|
use Test::More tests => 25;
|
||||||
|
|
||||||
|
BEGIN { use_ok("IkiWiki"); }
|
||||||
|
|
||||||
|
%config=IkiWiki::defaultconfig();
|
||||||
|
$config{srcdir}=$config{destdir}="/dev/null";
|
||||||
|
IkiWiki::checkconfig();
|
||||||
|
|
||||||
|
sub test {
|
||||||
|
my ($before, $after) = @_;
|
||||||
|
|
||||||
|
$IkiWiki::SortSpec::a = $before;
|
||||||
|
$IkiWiki::SortSpec::b = $after;
|
||||||
|
my $r = IkiWiki::SortSpec::cmp_path();
|
||||||
|
|
||||||
|
if ($before eq $after) {
|
||||||
|
is($r, 0);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
is($r, -1);
|
||||||
|
}
|
||||||
|
|
||||||
|
$IkiWiki::SortSpec::a = $after;
|
||||||
|
$IkiWiki::SortSpec::b = $before;
|
||||||
|
$r = IkiWiki::SortSpec::cmp_path();
|
||||||
|
|
||||||
|
if ($before eq $after) {
|
||||||
|
is($r, 0);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
is($r, 1);
|
||||||
|
}
|
||||||
|
|
||||||
|
is_deeply([IkiWiki::SortSpec::sort_pages(\&IkiWiki::SortSpec::cmp_path, $before, $after)],
|
||||||
|
[$before, $after]);
|
||||||
|
is_deeply([IkiWiki::SortSpec::sort_pages(\&IkiWiki::SortSpec::cmp_path, $after, $before)],
|
||||||
|
[$before, $after]);
|
||||||
|
}
|
||||||
|
|
||||||
|
test("a/b/c", "a/b/c");
|
||||||
|
test("a/b", "a/c");
|
||||||
|
test("a/z", "z/a");
|
||||||
|
test("a", "a/b");
|
||||||
|
test("a", "a/b");
|
||||||
|
test("a/z", "ab");
|
|
@ -12,7 +12,7 @@ IkiWiki::checkconfig();
|
||||||
{
|
{
|
||||||
package IkiWiki::SortSpec;
|
package IkiWiki::SortSpec;
|
||||||
|
|
||||||
sub cmp_path { $a cmp $b }
|
sub cmp_raw_path { $a cmp $b }
|
||||||
}
|
}
|
||||||
|
|
||||||
%pagesources=(
|
%pagesources=(
|
||||||
|
@ -53,7 +53,7 @@ is_deeply([pagespec_match_list("foo", "post/*", sort => "title", num => 50, reve
|
||||||
is_deeply([pagespec_match_list("foo", "post/*", sort => "title",
|
is_deeply([pagespec_match_list("foo", "post/*", sort => "title",
|
||||||
filter => sub { $_[0] =~ /3/}) ],
|
filter => sub { $_[0] =~ /3/}) ],
|
||||||
["post/1", "post/2"]);
|
["post/1", "post/2"]);
|
||||||
is_deeply([pagespec_match_list("foo", "*", sort => "path", num => 2)],
|
is_deeply([pagespec_match_list("foo", "*", sort => "raw_path", num => 2)],
|
||||||
["bar", "foo"]);
|
["bar", "foo"]);
|
||||||
is_deeply([pagespec_match_list("foo", "foo* or bar*",
|
is_deeply([pagespec_match_list("foo", "foo* or bar*",
|
||||||
sort => "-age title")], # oldest first, break ties by title
|
sort => "-age title")], # oldest first, break ties by title
|
||||||
|
|
Loading…
Reference in New Issue