2 # =============================================================================
3 # $Id: 07_sort.t,v 1.2 2004-07-28 08:15:47 adam Exp $
6 # =============================================================================
11 push (@INC,'demo','blib/lib','blib/arch');
17 use Test::More tests => 14;
19 # ----------------------------------------------------------------------------
20 # Session opening and closing
24 IDZebra::logFile("test07.log");
25 # IDZebra::logLevel(15);
26 use_ok('IDZebra::Session');
31 # ----------------------------------------------------------------------------
32 # Session opening and closing
33 my $sess = IDZebra::Session->open(configFile => 'demo/zebra.cfg',
34 groupName => 'demo2');
35 # ----------------------------------------------------------------------------
38 # -----------------------------------------------------------------------------
39 # Search 1 database, retrieve records, sort "titles" locally (dangerous!)
41 my $rs1 = $sess->search(cqlmap => 'demo/cql.map',
43 databases => [qw(demo1)]);
45 my (@unsorted, @sorted, @sortedi);
49 foreach my $rec ($rs1->records()) {
50 if ($rec->{errCode}) {
53 my ($title) = ($rec->buf =~ /\n\s*package\s+([a-zA-Z0-9:]+)\s*\;\s*\n/);
54 push (@unsorted, $title);
56 ok (($wasError == 0), "retrieval");
58 @sorted = sort (@unsorted);
60 @sortedi = sort ({my $a1=$a; $a1 =~ y/[A-Z]/[a-z]/;
61 my $b1=$b; $b1 =~ y/[A-Z]/[a-z]/;
62 ($a1 cmp $b1);} @unsorted);
65 # -----------------------------------------------------------------------------
66 # Sort rs itself ascending
68 isa_ok ($rs1, 'IDZebra::Resultset');
72 isa_ok ($rs1, 'IDZebra::Resultset');
76 foreach my $rec ($rs1->records()) {
77 if ($rec->{errCode}) { $wasError++; }
78 my ($title) = ($rec->buf =~ /\n\s*package\s+([a-zA-Z0-9:]+)\s*\;\s*\n/);
79 if ($sortedi[$rec->position - 1] ne $title) { $sortError++; }
82 ok (($wasError == 0), "retrieval");
83 ok (($sortError == 0), "sorting ascending");
85 # -----------------------------------------------------------------------------
86 # Sort descending, new rs
88 my $rs2 = $rs1->sort('1=4 id');
90 isa_ok ($rs2, 'IDZebra::Resultset');
94 foreach my $rec ($rs1->records()) {
95 if ($rec->{errCode}) { $wasError++; }
96 my ($title) = ($rec->buf =~ /\n\s*package\s+([a-zA-Z0-9:]+)\s*\;\s*\n/);
97 if ($sortedi[$rs2->count - $rec->position] ne $title) { $sortError++; }
101 ok (($wasError == 0), "retrieval");
102 ok (($sortError == 0), "sorting descending");
104 # -----------------------------------------------------------------------------
105 # Search + sort ascending
106 my $rs3 = $sess->search(cql => 'IDZebra',
107 databases => [qw(demo1)],
109 isa_ok ($rs3, 'IDZebra::Resultset');
113 foreach my $rec ($rs3->records()) {
114 if ($rec->{errCode}) { $wasError++; }
115 my ($title) = ($rec->buf =~ /\n\s*package\s+([a-zA-Z0-9:]+)\s*\;\s*\n/);
116 if ($sortedi[$rec->position - 1] ne $title) { $sortError++; }
119 ok (($wasError == 0), "saerch+sort, retrieval");
120 ok (($sortError == 0), "search+sort descending");
122 # ----------------------------------------------------------------------------
126 $rs4 = $rs3->sort("ostrich");
127 ok (($rs4->errCode != 0),"Wrong sort: ".$rs4->errCode."(".$rs4->errString.")");
128 # ----------------------------------------------------------------------------