Additional tests for resultset_records().
[ZOOM-Perl-moved-to-github.git] / t / 13-resultset.t
1 # $Id: 13-resultset.t,v 1.3 2005-11-02 18:24:32 mike Exp $
2
3 # Before `make install' is performed this script should be runnable with
4 # `make test'. After `make install' it should work as `perl 13-resultset.t'
5
6 use strict;
7 use warnings;
8 use Test::More tests => 17;
9 BEGIN { use_ok('Net::Z3950::ZOOM') };
10
11 my($errcode, $errmsg, $addinfo) = (undef, "dummy", "dummy");
12
13 my $host = "indexdata.com/gils";
14 my $conn = Net::Z3950::ZOOM::connection_new($host, 0);
15 $errcode = Net::Z3950::ZOOM::connection_error($conn, $errmsg, $addinfo);
16 ok($errcode == 0, "connection to '$host'");
17
18 my $query = '@attr 1=4 mineral';
19 my $rs = Net::Z3950::ZOOM::connection_search_pqf($conn, $query);
20 $errcode = Net::Z3950::ZOOM::connection_error($conn, $errmsg, $addinfo);
21 ok($errcode == 0, "search for '$query'");
22 ok(Net::Z3950::ZOOM::resultset_size($rs) == 2, "found 2 records");
23
24 my $syntax = "usmarc";
25 Net::Z3950::ZOOM::resultset_option_set($rs, preferredRecordSyntax => $syntax);
26 my $val = Net::Z3950::ZOOM::resultset_option_get($rs, "preferredRecordSyntax");
27 ok($val eq $syntax, "preferred record syntax set to '$val'");
28
29 my $rec = Net::Z3950::ZOOM::resultset_record($rs, 0);
30 my $len = 0;
31 my $data1 = Net::Z3950::ZOOM::record_get($rec, "render", $len);
32 Net::Z3950::ZOOM::resultset_option_set($rs, elementSetName => "b");
33 my $data2 = Net::Z3950::ZOOM::record_get($rec, "render", $len);
34 ok($data2 eq $data1, "record doesn't know about RS options");
35 # Now re-fetch record from result-set with new option
36 $rec = Net::Z3950::ZOOM::resultset_record($rs, 0);
37 $data2 = Net::Z3950::ZOOM::record_get($rec, "render", $len);
38 ok(length($data2) < length($data1), "re-fetched record is brief, old was full");
39
40 Net::Z3950::ZOOM::resultset_option_set($rs, preferredRecordSyntax => "xml");
41 $rec = Net::Z3950::ZOOM::resultset_record($rs, 0);
42 $data2 = Net::Z3950::ZOOM::record_get($rec, "render", $len);
43 ok($data2 =~ /<title>/i, "option for XML syntax is honoured");
44
45 # Now we test ZOOM_resultset_record_immediate(), which should only
46 # work for records that have already been placed in the cache, and
47 # ZOOM_resultset_records() which populates the cache, and
48 # ZOOM_resultset_cache_reset(), which presumably empties it.
49 #
50 $rec = Net::Z3950::ZOOM::resultset_record_immediate($rs, 0);
51 ok(defined $rec, "prefetched record obtained with *_immediate()");
52 my $data3 = Net::Z3950::ZOOM::record_get($rec, "render", $len);
53 ok($data3 eq $data2, "*_immediate record renders as expected");
54 $rec = Net::Z3950::ZOOM::resultset_record_immediate($rs, 1);
55 ok(!defined $rec, "non-prefetched record obtained with *_immediate()");
56 Net::Z3950::ZOOM::resultset_cache_reset($rs);
57 $rec = Net::Z3950::ZOOM::resultset_record_immediate($rs, 0);
58 ok(!defined $rec, "*_immediate(0) fails after cache reset");
59 # Fill both cache slots, but with no record array
60 my $tmp = Net::Z3950::ZOOM::resultset_records($rs, 0, 2, 0);
61 ok(!defined $tmp, "resultset_records() returns undef as expected");
62 $rec = Net::Z3950::ZOOM::resultset_record_immediate($rs, 0);
63 ok(defined $rec, "*_immediate(0) ok after resultset_records()");
64 # Fetch all records at once using records()
65 $tmp = Net::Z3950::ZOOM::resultset_records($rs, 0, 2, 1);
66 { use Data::Dumper; print Dumper($tmp) }
67 ok(@$tmp == 2, "resultset_records() returned two records");
68 #These lines won't work yet, as the array elements are undefined
69 #$data3 = Net::Z3950::ZOOM::record_get($tmp->[0], "render", $len);
70 #ok($data3 eq $data2, "record returned from resultset_records() renders as expected");
71
72 Net::Z3950::ZOOM::resultset_destroy($rs);
73 ok(1, "destroyed result-set");
74 Net::Z3950::ZOOM::connection_destroy($conn);
75 ok(1, "destroyed connection");