2 # =============================================================================
3 # $Id: 07_sort.t,v 1.3 2004-09-15 14:11:06 heikki Exp $
6 # =============================================================================
11 push (@INC,'demo','blib/lib','blib/arch');
17 use Test::More tests => 24;
19 # ----------------------------------------------------------------------------
20 # Session opening and closing
24 IDZebra::logFile("test07.log");
25 # IDZebra::logLevel(0x4F);
26 # IDZebra::logLevel(15);
27 use_ok('IDZebra::Session');
32 # ----------------------------------------------------------------------------
33 # Session opening and closing
34 my $sess = IDZebra::Session->open(configFile => 'demo/zebra.cfg',
35 groupName => 'demo2');
36 # ----------------------------------------------------------------------------
37 # Insert some test data
44 $sess->databases('demo1', 'demo2');
45 $ret=$sess->end_trans;
48 for $F (<lib/IDZebra/*.pm>)
50 ($ret,$sysno)=$sess->insert_record (file=>$F, recordType => 'grs.perl.pod');
51 ok( $ret==0, "inserted $F");
52 #print STDERR "Inserted $F ok. ret=$ret sys=$sysno\n";
55 $ret=$sess->end_trans;
56 ok($filecount>0,"Inserted files");
57 is($ret->{inserted},$filecount, "Inserted all");
60 # -----------------------------------------------------------------------------
61 # Search 1 database, retrieve records, sort "titles" locally (dangerous!)
63 my $rs1 = $sess->search(cqlmap => 'demo/cql.map',
65 databases => [qw(demo1)]);
67 my (@unsorted, @sorted, @sortedi);
71 foreach my $rec ($rs1->records()) {
72 if ($rec->{errCode}) {
75 my ($title) = ($rec->buf =~ /\n\s*package\s+([a-zA-Z0-9:]+)\s*\;\s*\n/);
76 push (@unsorted, $title);
78 ok (($wasError == 0), "retrieval");
80 @sorted = sort (@unsorted);
82 @sortedi = sort ({my $a1=$a; $a1 =~ y/[A-Z]/[a-z]/;
83 my $b1=$b; $b1 =~ y/[A-Z]/[a-z]/;
84 ($a1 cmp $b1);} @unsorted);
87 # -----------------------------------------------------------------------------
88 # Sort rs itself ascending
90 isa_ok ($rs1, 'IDZebra::Resultset');
94 isa_ok ($rs1, 'IDZebra::Resultset');
98 foreach my $rec ($rs1->records()) {
99 if ($rec->{errCode}) { $wasError++; }
100 my ($title) = ($rec->buf =~ /\n\s*package\s+([a-zA-Z0-9:]+)\s*\;\s*\n/);
101 if ($sortedi[$rec->position - 1] ne $title) { $sortError++; }
104 ok (($wasError == 0), "retrieval");
105 ok (($sortError == 0), "sorting ascending");
107 # -----------------------------------------------------------------------------
108 # Sort descending, new rs
110 todo_skip "Sort into different rset crashes", 3;
111 print STDERR "\nSort #4: $rs1\n";
113 my $rs2 = $rs1->sort('1=4 id');
114 print STDERR "\nSort #5: $rs1\n";
116 isa_ok ($rs2, 'IDZebra::Resultset');
120 foreach my $rec ($rs1->records()) {
121 if ($rec->{errCode}) { $wasError++; }
122 my ($title) = ($rec->buf =~ /\n\s*package\s+([a-zA-Z0-9:]+)\s*\;\s*\n/);
123 if ($sortedi[$rs2->count - $rec->position] ne $title) { $sortError++; }
127 ok (($wasError == 0), "retrieval");
128 ok (($sortError == 0), "sorting descending");
132 # -----------------------------------------------------------------------------
133 # Search + sort ascending
134 my $rs3 = $sess->search(cql => 'IDZebra',
135 databases => [qw(demo1)],
137 isa_ok ($rs3, 'IDZebra::Resultset');
141 foreach my $rec ($rs3->records()) {
142 if ($rec->{errCode}) { $wasError++; }
143 my ($title) = ($rec->buf =~ /\n\s*package\s+([a-zA-Z0-9:]+)\s*\;\s*\n/);
144 if ($sortedi[$rec->position - 1] ne $title) { $sortError++; }
147 ok (($wasError == 0), "saerch+sort, retrieval");
148 ok (($sortError == 0), "search+sort descending");
150 # ----------------------------------------------------------------------------
154 $rs4 = $rs3->sort("ostrich");
155 ok (($rs4->errCode != 0),"Wrong sort: ".$rs4->errCode."(".$rs4->errString.")");
156 # ----------------------------------------------------------------------------