Add path and path_natural sort orders
authorSimon McVittie <smcv@debian.org>
Sat, 12 Nov 2011 16:02:20 +0000 (16:02 +0000)
committerJoey Hess <joey@kitenet.net>
Tue, 6 Dec 2011 18:26:34 +0000 (14:26 -0400)
These correspond to title and title_natural, but compare the entire
path: a < a/b < a/z < ab < b.
(cherry picked from commit 903a5a314f1f5d833dbc208ce128f24195b40e4b)

t/cmp_path.t [new file with mode: 0755]
t/pagespec_match_list.t

diff --git a/t/cmp_path.t b/t/cmp_path.t
new file mode 100755 (executable)
index 0000000..9de79f4
--- /dev/null
@@ -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");
index 244ad91..7ff178a 100755 (executable)
@@ -12,7 +12,7 @@ IkiWiki::checkconfig();
 {
        package IkiWiki::SortSpec;
 
-       sub cmp_path { $a cmp $b }
+       sub cmp_raw_path { $a cmp $b }
 }
 
 %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",
                          filter => sub { $_[0] =~ /3/}) ],
        ["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"]);
 is_deeply([pagespec_match_list("foo", "foo* or bar*",
                sort => "-age title")], # oldest first, break ties by title