1
use Test::More tests => 38;
5
use Zim::Repository::Files;
9
$Zim::CODESET = 'utf8';
10
$SIG{__WARN__} = sub {
11
print STDERR @_ unless $_[0] =~ /^(#|Searching|Indexing)/;
14
eval 'require Zim::Win32' if $^O eq 'MSWin32';
25
my $f = Zim::File->new('t', 'repository', split '/', $_);
26
$f->remove if $f->exists;
30
# Test a bunch of stuff in the "Files" backend
32
my $root = File::Spec->rel2abs( File::Spec->catdir(qw/t repository/) );
33
my $rep = Zim::Repository::Files->new(dir => $root);
35
is($rep->{format}, 'wiki', 'format'); # 1
37
print "\n## 2 file(foo:bar) resulted in: ".$rep->file('foo:bar')->path."\n";
38
ok($rep->file('foo:bar')->path =~ m#/t/repository/foo/bar.txt$#,
41
my $page = $rep->get_page(':foo:bar');
42
is($page->status, 'new', 'status new page'); # 3
43
ok(@{$page->get_parse_tree} > 2, 'template'); # 4
44
is($page->{format}, 'Zim::Formats::Wiki', 'format class'); # 5
46
ok($rep->file('Test:wiki')->path =~ m#/t/repository/Test/wiki.txt$#,
49
print "\n## 7 - resolve_name test:WIKI => :Test:wiki\n";
50
my $name = $rep->resolve_name('test:WIKI');
51
is($name, ':Test:wiki', 'resolve_name'); # 7
53
$page = $rep->get_page(':Test:foo:bar');
54
print "\n## 8 - resolve_name Dus => :Test:foo:Dus\n";
55
$name = $page->resolve_name('Dus');
56
is($name, ':Test:foo:Dus', 'resolve_name 1'); # 8
58
$page = $rep->get_page(':Test:foo:bar');
59
print "\n## 9 - resolve_name wIKi => :Test:wiki\n";
60
$name = $page->resolve_name('wIKi');
61
is($name, ':Test:wiki', 'resolve_name 2'); # 9
63
$page = $rep->get_page(':Test:foo:bar');
64
print "\n## 10 - resolve_name Test:Dus => :Test:Dus\n";
65
$name = $page->resolve_name('Test:Dus');
66
is($name, ':Test:Dus', 'resolve_name 3'); # 10
68
$page = $rep->get_page(':Test:foo:bar');
69
print "\n## 11 - resolve_name test:Dus => :Test:Dus\n";
70
$name = $page->resolve_name('test:Dus');
71
is($name, ':Test:Dus', 'resolve_name 4'); # 11
73
$page = $rep->get_page(':Test:foo:bar');
74
print "\n## 12 - resolve_name test:WIKI:bar => :Test:wiki:bar\n";
75
$name = $page->resolve_name('test:WIKI:bar');
76
is($name, ':Test:wiki:bar', 'resolve_name 5'); # 12
78
$page = $rep->get_page(':Test:foo:bar');
79
print "\n## 13 - resolve_name :Dus => :Dus\n";
80
$name = $page->resolve_name(':Dus');
81
is($name, ':Dus', 'resolve_name 6'); # 13
83
$page = $rep->get_page(':Test:foo');
84
print "\n## 14 - resolve_name .bar => Test:foo:bar\n";
85
my (undef, $l) = $page->parse_link('.bar');
86
$name = $page->resolve_name($l);
87
is($name, ':Test:foo:bar', 'resolve_name 7'); # 14
89
#$page = $rep->open_page('test:utf8-acchars');
93
my $f = Zim::File->new('t', 'repository', split '/', $_);
94
$f->remove if $f->exists;
97
my @pages = $rep->list_pages(':');
98
#warn "Pages: ", map(">>$_<< ", @pages), "\n";
99
is_deeply(\@pages, [qw/Test:/], 'list_pages 1'); # 15
101
@pages = sort $rep->list_pages(':Test:');
102
#warn "Pages: ", map(">>$_<< ", @pages), "\n";
103
is_deeply(\@pages, [qw/foo: wiki/], 'list_pages 2'); # 16
105
# repeating previous test to catch bad caching
106
@pages = sort $rep->list_pages(':Test:');
107
#warn "Pages: ", map(">>$_<< ", @pages), "\n";
108
is_deeply(\@pages, [qw/foo: wiki/], 'list_pages 3'); # 17
110
# test caching in combo with new content
111
print "# sleeping 3 seconds ...\n";
112
print "# The following test may fail depending on IO buffering\n";
113
sleep 3; # make sure mtime is changed
114
Zim::File->new(qw/t repository Test bar.txt/)->write("=== Bar ===\n\nfoo bar !\n" );
115
@pages = sort $rep->list_pages(':Test:');
116
#warn "Pages: ", map(">>$_<< ", @pages), "\n";
117
is_deeply(\@pages, [qw/bar foo: wiki/], 'list_pages 4'); # 18
119
# create / move / copy / delete
120
$page = $rep->get_page(':new');
121
ok($page->status eq 'new', 'new page'); # 19
123
$page->set_parse_tree(['Page', {}, 'test 1 2 3']);
124
$page = $rep->get_page(':new');
125
ok($page->exists, 'create page'); # 20
127
$page->move( $rep->get_page(':move') ); # no root wrapper, so need object
128
$page = $rep->get_page(':new');
129
ok(! $page->exists, 'page move 1'); # 21
130
$page = $rep->get_page(':move');
131
ok($page->get_parse_tree()->[2][2] eq 'test 1 2 3', 'page move 2'); # 22
132
# Returns like ['Page', {}, ['Para', {}, 'test 1 2 3']]
134
$page->copy( $rep->get_page(':copy') ); # no root wrapper, so need object
135
$page = $rep->get_page(':move');
136
ok($page->get_parse_tree()->[2][2] eq 'test 1 2 3', 'page copy 1'); #23
137
$page = $rep->get_page(':copy');
138
ok($page->get_parse_tree()->[2][2] eq 'test 1 2 3', 'page copy 2'); # 24
140
$rep->get_page(':move')->move( $rep->get_page(':Move') );
141
ok($rep->resolve_name('move') eq ':Move', 'move is case sensitive'); # 25
143
$rep->get_page(':Move')->delete;
144
$rep->get_page(':copy')->delete;
145
$page = $rep->get_page(':Move');
146
ok(!$page->exists, 'delete page 1'); # 26
147
$page = $rep->get_page(':copy');
148
ok(!$page->exists, 'delete page 2'); # 27
150
# Test dispatching to child rep
151
$rep = Zim->new(dir => $root);
153
$page = $rep->get_page(':test:wiki');
154
is($page->{repository}{namespace}, ':', 'Child repository dispatch 1'); # 28
156
$page = $rep->get_page(':foo:bar');
157
is($page->{repository}{namespace}, ':', 'Child repository dispatch 2'); # 29
160
my $node = File::Spec->catdir($root, 'Foo');
161
$rep->add_child(':foo', 'Files', dir => $node);
163
$page = $rep->get_page(':test:wiki');
164
is($page->{repository}{namespace}, ':', 'Child repository dispatch 3'); # 30
166
$page = $rep->get_page(':foo:bar');
167
is($page->{repository}{namespace}, ':foo:', 'Child repository dispatch 4'); # 31
169
$page = $rep->get_page(':Foo');
170
is($page->{repository}{namespace}, ':foo:', 'Child repository dispatch 5'); # 32
172
$page = $rep->get_page(':fooBar');
173
is($page->{repository}{namespace}, ':', 'Child repository dispatch 6'); # 33
175
ok(! -e $node, 'No pre-mature creation of repository dir'); # 34
179
my $cb = sub { push @res, @_ };
180
$rep->search({string => "\x{2022}\x{2022} Search Me \x{2022}\x{2022}"}, $cb);
181
#use Data::Dumper; print Dumper \@res;
182
ok(scalar( grep {$$_[0] eq ':Test:foo:bar' and $$_[1] > 0} @res),
183
"utf8 search pattern" ); # 34
186
$page = $rep->resolve_page(':test:wiki');
187
my $path = File::Spec->catfile($root, 'foo.pdf');
188
ok($page->relative_path($path) eq '../foo.pdf', 'relative_path 1'); # 36
189
$path = File::Spec->catfile($root, 'Test', 'foo.pdf');
190
warn "### ", $page->relative_path($path), "\n";
191
ok($page->relative_path($path) eq './foo.pdf', 'relative_path 2'); # 37
192
$path = Zim::File->abs_path(
193
File::Spec->catfile($root, '..', '..', 'foo.pdf') );
194
ok($page->relative_path($path) eq $path, 'relative_path 3'); # 38