2 # =============================================================================
3 # $Id: 07_sort.t,v 1.1 2003-03-03 18:27:25 pop Exp $
6 # =============================================================================
11 push (@INC,'demo','blib/lib','blib/arch');
17 use Test::More tests => 14;
19 # ----------------------------------------------------------------------------
20 # Session opening and closing
23 IDZebra::logFile("test.log");
24 # IDZebra::logLevel(15);
25 use_ok('IDZebra::Session');
30 # ----------------------------------------------------------------------------
31 # Session opening and closing
32 my $sess = IDZebra::Session->open(configFile => 'demo/zebra.cfg',
33 groupName => 'demo2');
34 # ----------------------------------------------------------------------------
37 # -----------------------------------------------------------------------------
38 # Search 1 database, retrieve records, sort "titles" locally (dangerous!)
40 my $rs1 = $sess->search(cqlmap => 'demo/cql.map',
42 databases => [qw(demo1)]);
44 my (@unsorted, @sorted, @sortedi);
48 foreach my $rec ($rs1->records()) {
49 if ($rec->{errCode}) {
52 my ($title) = ($rec->buf =~ /\n\s*package\s+([a-zA-Z0-9:]+)\s*\;\s*\n/);
53 push (@unsorted, $title);
55 ok (($wasError == 0), "retrieval");
57 @sorted = sort (@unsorted);
59 @sortedi = sort ({my $a1=$a; $a1 =~ y/[A-Z]/[a-z]/;
60 my $b1=$b; $b1 =~ y/[A-Z]/[a-z]/;
61 ($a1 cmp $b1);} @unsorted);
64 # -----------------------------------------------------------------------------
65 # Sort rs itself ascending
67 isa_ok ($rs1, 'IDZebra::Resultset');
71 isa_ok ($rs1, 'IDZebra::Resultset');
75 foreach my $rec ($rs1->records()) {
76 if ($rec->{errCode}) { $wasError++; }
77 my ($title) = ($rec->buf =~ /\n\s*package\s+([a-zA-Z0-9:]+)\s*\;\s*\n/);
78 if ($sortedi[$rec->position - 1] ne $title) { $sortError++; }
81 ok (($wasError == 0), "retrieval");
82 ok (($sortError == 0), "sorting ascending");
84 # -----------------------------------------------------------------------------
85 # Sort descending, new rs
87 my $rs2 = $rs1->sort('1=4 id');
89 isa_ok ($rs2, 'IDZebra::Resultset');
93 foreach my $rec ($rs1->records()) {
94 if ($rec->{errCode}) { $wasError++; }
95 my ($title) = ($rec->buf =~ /\n\s*package\s+([a-zA-Z0-9:]+)\s*\;\s*\n/);
96 if ($sortedi[$rs2->count - $rec->position] ne $title) { $sortError++; }
100 ok (($wasError == 0), "retrieval");
101 ok (($sortError == 0), "sorting descending");
103 # -----------------------------------------------------------------------------
104 # Search + sort ascending
105 my $rs3 = $sess->search(cql => 'IDZebra',
106 databases => [qw(demo1)],
108 isa_ok ($rs3, 'IDZebra::Resultset');
112 foreach my $rec ($rs3->records()) {
113 if ($rec->{errCode}) { $wasError++; }
114 my ($title) = ($rec->buf =~ /\n\s*package\s+([a-zA-Z0-9:]+)\s*\;\s*\n/);
115 if ($sortedi[$rec->position - 1] ne $title) { $sortError++; }
118 ok (($wasError == 0), "saerch+sort, retrieval");
119 ok (($sortError == 0), "search+sort descending");
121 # ----------------------------------------------------------------------------
125 $rs4 = $rs3->sort("ostrich");
126 ok (($rs4->errCode != 0),"Wrong sort: ".$rs4->errCode."(".$rs4->errString.")");
127 # ----------------------------------------------------------------------------