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