Use "none" as default stemmer
[amuse-wiki:amuse-wiki.git] / Text-Muse / t / Text-Muse-Wiki-Search.t
1 # -*- mode: cperl -*-
2
3 use strict;
4 use warnings;
5 use utf8;
6 binmode STDOUT, ":encoding(UTF-8)";
7 binmode STDERR, ":encoding(UTF-8)";
8 binmode STDIN, ":encoding(UTF-8)";
9
10
11 # Before `make install' is performed this script should be runnable with
12 # `make test'. After `make install' it should work as `perl Text-Muse-Wiki-Search.t'
13
14 #########################
15
16 # change 'tests => 1' to 'tests => last_test_to_print';
17
18 use Test::More tests => 37;
19 BEGIN { use_ok('Text::Muse::Wiki::Search') };
20
21 #########################
22
23 # Insert your test code below, the Test::More module is use()ed here so read
24 # its man page ( perldoc Test::More ) for help writing this test script.
25
26 use Text::Muse::Wiki::Search qw/xapian_update_db xapian_search_db/;
27 use File::Temp qw/tempdir tempfile/;
28 use Data::Dumper;
29 use File::Spec::Functions;
30
31 my $xapiandb = tempdir(CLEANUP => 1);
32 my $filedir = "t/searching";
33 my @files;
34 opendir (my $dh, $filedir) || die "can't opendir $filedir: $!\n";
35 my @filenames = grep { /\.muse$/ } readdir($dh);
36 closedir $dh;
37
38 foreach my $file (@filenames) {
39   push @files, catfile($filedir, $file);
40 }
41
42 my $config = {
43               prefixes => {
44                            'title' => 'S',
45                            'LISTtitle' => 'S',
46                            'SORTauthors' => 'A',
47                            'source' => 'XSOURCE',
48                            'SORTtopics' => 'K',
49                            'topic' => 'K',
50                            'topics' => 'K',
51                            'author' => 'A',
52                            'date' => 'Y',
53                            'notes' => 'XNOTES',
54                            'pagename' => 'Q',
55                            'url' => 'Q',
56                           },
57               stemming => "none"
58              };
59
60
61 # run 3 times
62 ok(xapian_update_db($xapiandb, $config, @files),
63    "Checking (blindling) if the database has been updated");
64 ok(xapian_update_db($xapiandb, $config, @files),
65    "Checking (blindling) if the database has been updated");
66 ok(xapian_update_db($xapiandb, $config, @files),
67    "Checking (blindling) if the database has been updated");
68
69
70 # Empirical tests.
71
72 # The array contains hashrefs with the following keys:
73
74 #   rank => the rank of the search (numeric)
75 #   relevance => the percent of relevance as seen by Xapian
76 #   pagename => the name of the file without the suffix
77
78
79
80 my ($result, $total);
81
82 ($result, $total) = xapian_search_db($xapiandb, $config, "Pippo");
83 is($total, 1, "1 match for Pippo");
84 is($result->[0]->{pagename}, "second-file", "pippo");
85
86 ($result, $total) = xapian_search_db($xapiandb, $config, "paperi");
87 is($total, 1, "1 match for paperi");
88 is($result->[0]->{pagename}, "third-file", "paperi");
89
90 ($result, $total) = xapian_search_db($xapiandb, $config, "date:1867");
91 is($total, 1, "1 match for 1867");
92 is($result->[0]->{pagename}, "first-file", "date:1867");
93
94 ($result, $total) = xapian_search_db($xapiandb, $config, "author:Èmile");
95 is($total, 1, "1 match for Èmile");
96 is($result->[0]->{pagename}, "second-file", "author:Èmile");
97
98 ($result, $total) = xapian_search_db($xapiandb, $config, "title:comedy");
99 is($total, 1, "1 match for comedy");
100 is($result->[0]->{pagename}, "second-file", "title:comedy");
101
102 ($result, $total) = xapian_search_db($xapiandb, $config, "topic:trash");
103 is($total, 1, "1 match for trash");
104 is($result->[0]->{pagename}, "second-file", "topic:trash");
105
106 ($result, $total) = xapian_search_db($xapiandb, $config, "notes:publisher");
107 is($total, 2, "2 matches for notes:publisher");
108 is($result->[0]->{pagename}, "second-file", "notes:publisher 1");
109 is($result->[1]->{pagename}, "first-file", "notes:publisher 2");
110
111 ($result, $total) = xapian_search_db($xapiandb, $config, "source:retrieved");
112 is($total, 2, "2 matches for source:retrieved");
113 is($result->[0]->{pagename}, "second-file", "source:retrieved 1");
114 is($result->[1]->{pagename}, "first-file", "source:retrieved 2");
115
116 ($result, $total) = xapian_search_db($xapiandb, $config, "\"nothing here to see\"");
117 is($total, 1, "1 match for \"nothing here to see\"");
118 is($result->[0]->{pagename}, "second-file", "\"nothing here to see\"");
119
120 ($result, $total) = xapian_search_db($xapiandb, $config, "\"common term\"");
121 is($total, 3, "3 matches for \"common term\"");
122
123 print Dumper($result);
124 ok(((($result->[0]->{pagename} eq "third-file") &&
125      ($result->[1]->{pagename} eq "second-file")) ||
126     (($result->[0]->{pagename} eq "second-file") &&
127      ($result->[1]->{pagename} eq "third-file"))),
128    "common term (100%)");
129
130 ok((($result->[0]->{relevance} == 100) && ($result->[1]->{relevance} == 100)),
131    "Testing common terms relevance");
132
133 is($result->[2]->{pagename}, "first-file", "\"common term\" 3");
134
135 ($result, $total) = xapian_search_db($xapiandb, $config, "url:first-file");
136 is($total, 1, "1 match for url:first-file");
137 is($result->[0]->{pagename}, "first-file", "The first file");
138
139 ($result, $total) = xapian_search_db($xapiandb, $config, "pippo OR paperoga");
140 is($total, 2, "2 matches for pippo or paperoga");
141
142 print Dumper($result);
143 ok((($result->[0]->{relevance} == 50) && ($result->[1]->{relevance} == 50)),
144    "Testing relevance");
145 ok(((($result->[0]->{pagename} eq "third-file") &&
146      ($result->[1]->{pagename} eq "second-file")) ||
147     (($result->[0]->{pagename} eq "second-file") &&
148      ($result->[1]->{pagename} eq "third-file"))),
149    "Testing pippo or paperoga (50%)");
150
151 ($result, $total) = xapian_search_db($xapiandb, $config, "pippo OR paperoga NOT title:\"Storie di paperi\"");
152 is($total, 1, "1 matches for pippo or paperoga not title:\"Storie di paperi\"");
153 is($result->[0]->{pagename}, "second-file", "pippo 50%");
154
155 ($result, $total) = xapian_search_db($xapiandb, $config, "pippo AND paperoga");
156 is($result, 0, "0 matches for pippo and paperoga");
157
158 ($result, $total) = xapian_search_db($xapiandb, $config, "ambarabacicicoco");
159 is($result, 0, "only in the deleted file");
160
161