Scan feature added, not documented yet
[idzebra-moved-to-github.git] / perl / t / 08_scan.t
1 #!perl
2 # =============================================================================
3 # $Id: 08_scan.t,v 1.1 2003-03-04 19:33:53 pop Exp $
4 #
5 # Perl API header
6 # =============================================================================
7 BEGIN {
8     if ($ENV{PERL_CORE}) {
9         chdir 't' if -d 't';
10     }
11     push (@INC,'demo','blib/lib','blib/arch');
12 }
13
14 use strict;
15 use warnings;
16
17 use Test::More tests => 17;
18
19 # ----------------------------------------------------------------------------
20 # Session opening and closing
21 BEGIN {
22     use IDZebra;
23     IDZebra::logFile("test.log");
24 #  IDZebra::logLevel(15);
25     use_ok('IDZebra::Session'); 
26     use_ok('pod');
27 }
28
29
30 # ----------------------------------------------------------------------------
31 # Session opening and closing
32 my $sess = IDZebra::Session->open(configFile => 'demo/zebra.cfg',
33                                   groupName => 'demo1');
34
35 #$sess->databases('demo1');
36
37 our $filecount = 8;
38 # -----------------------------------------------------------------------------
39 # Scan titles in multiple databases
40
41 my $sl1 = $sess->scan(expression => "\@attr 1=4 \@attr 6=2 a",
42                       databases => [qw(demo1 demo2)]);
43
44 &test_list($sl1,$filecount, $filecount*2,1);
45 # -----------------------------------------------------------------------------
46 # Scan titles in a single and default database
47 my $sl2 = $sess->scan(expression => "\@attr 1=4 \@attr 6=2 a");
48 &test_list($sl2,$filecount, $filecount,1);
49
50
51 # -----------------------------------------------------------------------------
52 # Scan long list, with position...
53 my $sl3 = $sess->scan(expression  => "\@attr 1=1016 a");
54
55 my @entries = $sl3->entries(position    => 5,
56                             num_entries => 10000);
57
58 my $count = $#entries + 1;
59 ok (($sl3->errCode == 0),"scan successfull");
60 ok (($sl3->num_entries == $count),"fetched $count entries");
61 my $i = 1;
62 my $posok = 1;
63 foreach my $se (@entries) {
64     $posok = 0 if ($se->position != $i); 
65     $i++;
66 }\0
67 ok (($posok),"position of each term");
68
69
70 # -----------------------------------------------------------------------------
71 # Scan error
72 eval {my $sl4 = $sess->scan(expression => "\@attr 1=9999 a");};
73 ok (($@ ne ""),"Wrong scan die");
74 ok (($sess->errCode != 0), 
75     "Error reported in session: ".$sess->errCode.
76     " (". $sess->errString. ")");
77
78
79 # ----------------------------------------------------------------------------
80 # Close session
81 $sess->close;
82
83 # ============================================================================
84 sub test_list {
85     my ($sl, $ecount, $occ, $offset) = @_;
86     my @entries = $sl->entries();
87     my $count = $#entries + 1;
88     ok (($sl->errCode == 0),"scan successfull");
89     ok (($sl->num_entries == $ecount),
90         "number of entries is ".$sl->num_entries);
91     ok (($count == $sl->num_entries),"fetched $count entries");
92     
93     my $occcount=0; 
94     my $posok = 1;
95     my $i = $offset;
96     foreach my $se (@entries) {
97         $occcount += $se->occurrences();
98         $posok = 0 if ($se->position != $i); 
99         $i++;
100     }
101     
102     ok ($occcount == $occ,"occurrences: $occcount");
103     ok (($posok),"position of each term");
104 }