New -- tests OO interface to advanced result-set functionality.
[ZOOM-Perl-moved-to-github.git] / t / 23-resultset.t
1 # $Id: 23-resultset.t,v 1.1 2005-11-03 16:32:41 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 23-resultset.t'
5
6 use strict;
7 use warnings;
8 use Test::More tests => 19;
9 BEGIN { use_ok('ZOOM') };
10
11
12
13
14 my($errcode, $errmsg, $addinfo) = (undef, "dummy", "dummy");
15
16
17
18
19 my $host = "indexdata.com/gils";
20 my $conn;
21 eval { $conn = new ZOOM::Connection($host, 0) };
22 ok(!$@, "connection to '$host'");
23
24 my $query = '@attr 1=4 mineral';
25 my $rs;
26 eval { $rs = $conn->search_pqf($query) };
27 ok(!$@, "search for '$query'");
28 ok($rs->size() == 2, "found 2 records");
29
30 my $syntax = "usmarc";
31 $rs->option(preferredRecordSyntax => $syntax);
32 my $val = $rs->option("preferredRecordSyntax");
33 ok($val eq $syntax, "preferred record syntax set to '$val'");
34
35 my $rec = $rs->record(0);
36 my $data1 = $rec->render();
37 $rs->option(elementSetName => "b");
38 my $data2 = $rec->render();
39 ok($data2 eq $data1, "record doesn't know about RS options");
40 # Now re-fetch record from result-set with new option
41 $rec = $rs->record(0);
42 $data2 = $rec->render();
43 ok(length($data2) < length($data1), "re-fetched record is brief, old was full");
44
45 $rs->option(preferredRecordSyntax => "xml");
46 $rec = $rs->record(0);
47 $data2 = $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 = $rs->record_immediate(0);
56 ok(defined $rec, "prefetched record obtained with _immediate()");
57 my $data3 = $rec->render();
58 ok($data3 eq $data2, "_immediate record renders as expected");
59 $rec = $rs->record_immediate(1);
60 #{ use Data::Dumper; print "rec=$rec = ", Dumper($rec) }
61 ok(!defined $rec, "non-prefetched record obtained with _immediate()");
62 $rs->cache_reset();
63 $rec = $rs->record_immediate(0);
64 ok(!defined $rec, "_immediate(0) fails after cache reset");
65 # Fill both cache slots, but with no record array
66 my $tmp = $rs->records(0, 2, 0);
67 ok(!defined $tmp, "resultset_records() returns undef as expected");
68 $rec = $rs->record_immediate(0);
69 ok(defined $rec, "_immediate(0) ok after resultset_records()");
70 # Fetch all records at once using records()
71 $tmp = $rs->records(0, 2, 1);
72 ok(@$tmp == 2, "resultset_records() returned two records");
73 $data3 = $tmp->[0]->render();
74 ok($data3 eq $data2, "record returned from resultset_records() renders as expected");
75 $rec = $rs->record_immediate(1);
76 ok(defined $rec, "_immediate(1) ok after resultset_records()");
77
78 $rs->destroy();
79 ok(1, "destroyed result-set");
80 $conn->destroy();
81 ok(1, "destroyed connection");