~ubuntu-branches/ubuntu/karmic/zim/karmic

« back to all changes in this revision

Viewing changes to t/20_repository.t

  • Committer: Bazaar Package Importer
  • Author(s): Emfox Zhou
  • Date: 2007-08-25 13:04:42 UTC
  • mfrom: (1.1.7 upstream)
  • Revision ID: james.westby@ubuntu.com-20070825130442-q7xffffj9usah8b4
Tags: 0.20-1
* New upstream release
* Fix the bug which cause wrong internal links (Closes: #438612)

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
 
use Test::More tests => 38;
2
 
 
3
 
use strict;
4
 
use Zim;
5
 
use Zim::Repository::Files;
6
 
use File::Spec;
7
 
 
8
 
$| = 1;
9
 
$Zim::CODESET = 'utf8';
10
 
$SIG{__WARN__} = sub {
11
 
        print STDERR @_ unless $_[0] =~ /^(#|Searching|Indexing)/;
12
 
};
13
 
 
14
 
eval 'require Zim::Win32' if $^O eq 'MSWin32';
15
 
die $@ if $@;
16
 
 
17
 
my @clean = qw#
18
 
        .zim.cache
19
 
        Test/bar.txt
20
 
        new copy move Move
21
 
#;
22
 
 
23
 
# Clean
24
 
for (@clean) {
25
 
        my $f = Zim::File->new('t', 'repository', split '/', $_);
26
 
        $f->remove if $f->exists;
27
 
}
28
 
 
29
 
 
30
 
# Test a bunch of stuff in the "Files" backend
31
 
 
32
 
my $root = File::Spec->rel2abs( File::Spec->catdir(qw/t repository/) );
33
 
my $rep = Zim::Repository::Files->new(dir => $root);
34
 
 
35
 
is($rep->{format}, 'wiki', 'format'); # 1
36
 
 
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$#,
39
 
        'filename 1' ); # 2
40
 
 
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
45
 
 
46
 
ok($rep->file('Test:wiki')->path =~ m#/t/repository/Test/wiki.txt$#,
47
 
        'filename 2' ); # 6
48
 
 
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
52
 
 
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
57
 
 
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
62
 
 
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
67
 
 
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
72
 
 
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
77
 
 
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
82
 
 
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
88
 
 
89
 
#$page = $rep->open_page('test:utf8-acchars');
90
 
 
91
 
# Clean again
92
 
for (@clean) {
93
 
        my $f = Zim::File->new('t', 'repository', split '/', $_);
94
 
        $f->remove if $f->exists;
95
 
}
96
 
 
97
 
my @pages = $rep->list_pages(':');
98
 
#warn "Pages: ", map(">>$_<< ", @pages), "\n";
99
 
is_deeply(\@pages, [qw/Test:/], 'list_pages 1'); # 15
100
 
 
101
 
@pages = sort $rep->list_pages(':Test:');
102
 
#warn "Pages: ", map(">>$_<< ", @pages), "\n";
103
 
is_deeply(\@pages, [qw/foo: wiki/], 'list_pages 2'); # 16
104
 
 
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
109
 
 
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
118
 
 
119
 
# create / move / copy / delete
120
 
$page = $rep->get_page(':new');
121
 
ok($page->status eq 'new', 'new page'); # 19
122
 
 
123
 
$page->set_parse_tree(['Page', {}, 'test 1 2 3']);
124
 
$page = $rep->get_page(':new');
125
 
ok($page->exists, 'create page'); # 20
126
 
 
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']]
133
 
 
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 
139
 
 
140
 
$rep->get_page(':move')->move( $rep->get_page(':Move') );
141
 
ok($rep->resolve_name('move') eq ':Move', 'move is case sensitive'); # 25
142
 
 
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
149
 
 
150
 
# Test dispatching to child rep
151
 
$rep = Zim->new(dir => $root);
152
 
 
153
 
$page = $rep->get_page(':test:wiki');
154
 
is($page->{repository}{namespace}, ':', 'Child repository dispatch 1'); # 28
155
 
 
156
 
$page = $rep->get_page(':foo:bar');
157
 
is($page->{repository}{namespace}, ':', 'Child repository dispatch 2'); # 29
158
 
 
159
 
# add child rep
160
 
my $node = File::Spec->catdir($root, 'Foo');
161
 
$rep->add_child(':foo', 'Files', dir => $node);
162
 
 
163
 
$page = $rep->get_page(':test:wiki');
164
 
is($page->{repository}{namespace}, ':', 'Child repository dispatch 3'); # 30
165
 
 
166
 
$page = $rep->get_page(':foo:bar');
167
 
is($page->{repository}{namespace}, ':foo:', 'Child repository dispatch 4'); # 31
168
 
 
169
 
$page = $rep->get_page(':Foo');
170
 
is($page->{repository}{namespace}, ':foo:', 'Child repository dispatch 5'); # 32
171
 
 
172
 
$page = $rep->get_page(':fooBar');
173
 
is($page->{repository}{namespace}, ':', 'Child repository dispatch 6'); # 33
174
 
 
175
 
ok(! -e $node, 'No pre-mature creation of repository dir'); # 34
176
 
 
177
 
# search
178
 
my @res;
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
184
 
 
185
 
# Relative path
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
195