File: 23-resultset.t

package info (click to toggle)
libnet-z3950-zoom-perl 1.32-4
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 420 kB
  • sloc: perl: 1,535; makefile: 14
file content (105 lines) | stat: -rw-r--r-- 4,151 bytes parent folder | download | duplicates (2)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
# Before `make install' is performed this script should be runnable with
# `make test'. After `make install' it should work as `perl 23-resultset.t'

use strict;
use warnings;
use Test::More tests => 27;
BEGIN { use_ok('ZOOM') };

my $host = "localhost:9996";
my $conn;
eval { $conn = new ZOOM::Connection($host, 0) };
ok(!$@, "connection to '$host'");

my $query = '@attr 1=4 mineral';
my $rs;
eval { $rs = $conn->search_pqf($query) };
ok(!$@, "search for '$query'");
ok($rs->size() == 20, "expected 20 records (got " .  $rs->size() . ")");

my $syntax = "canmarc";		# not supported
$rs->option(preferredRecordSyntax => $syntax);
ok(1, "preferred record syntax was set to '$syntax'");
my $val = $rs->option("preferredRecordSyntax");
ok($val eq $syntax, "preferred record syntax is '$val'");
$val = $rs->option("preferredRecordSyntax");
ok($val eq $syntax, "preferred record syntax is still '$val'");

# At this point, we used to try to fetch a record in CANMARC and note
# that it fails, as it should, with BIB-1 diagnostic 238. But now
# we're testing against yaz-ztest instead of Zebra, it just blithely
# returns an XML record instead. So there's no point doing that test.
# 
# my $rec = $rs->record(0);
# my($errcode, $errmsg) = $rec->error();
# ok($errcode == 238, "can't fetch CANMARC ($errmsg)");

$rs->option(preferredRecordSyntax => "usmarc");
my $rec = $rs->record(0);
my $data1 = $rec->render();
$rs->option(elementSetName => "b");
my $data2 = $rec->render();
ok($data2 eq $data1, "record doesn't know about RS options");
# Now re-fetch record from result-set with new option
$rec = $rs->record(0);
$data2 = $rec->render();

# We would like to test that the brief record is shorter than the full
# one, but yaz-ztest returns the same data for both. So the best we
# can do is test that the brief record is not LONGER than the full.

ok(length($data2) <= length($data1), "brief record is not larger than full");

# If you ask yaz-ztest for an XML record with _any_ element-set
# specified, it fails with a surrogate diagnostic [14] System error in
# presenting records. So we need to reset to no element-set.
$rs->option(elementSetName => "");

$rs->option(preferredRecordSyntax => "xml");
$rec = $rs->record(0);
ok(defined $rec, "fetched XML record");
$data1 = $rec->render();
ok($data1 =~ /<controlfield tag="008">/i, "option for XML syntax is honoured");
my $cloned = $rec->clone();
ok(defined $cloned, "cloned record");
$data2 = $cloned->render();
ok($data2 =~ /<controlfield tag="008">/i, "cloned record XML is good");

# Now we test ZOOM_resultset_record_immediate(), which should only
# work for records that have already been placed in the cache, and
# ZOOM_resultset_records() which populates the cache, and
# ZOOM_resultset_cache_reset(), which presumably empties it.
#
$rec = $rs->record_immediate(0);
ok(defined $rec, "prefetched record obtained with _immediate()");
my $data3 = $rec->render();
ok($data3 eq $data2, "_immediate record renders as expected");
$rec = $rs->record_immediate(1);
#{ use Data::Dumper; print "rec=$rec = ", Dumper($rec) }
ok(!defined $rec, "non-prefetched record obtained with _immediate()");
$rs->cache_reset();
$rec = $rs->record_immediate(0);
ok(!defined $rec, "_immediate(0) fails after cache reset");
# Fill both cache slots, but with no record array
my $tmp = $rs->records(0, 2, 0);
ok(!defined $tmp, "resultset_records() returns undef as expected");
$rec = $rs->record_immediate(0);
ok(defined $rec, "_immediate(0) ok after resultset_records()");
# Fetch all records at once using records()
$tmp = $rs->records(0, 2, 1);
ok(@$tmp == 2, "resultset_records() returned two records");
$data3 = $tmp->[0]->render();
ok($data3 eq $data2, "record returned from resultset_records() renders as expected");
$rec = $rs->record_immediate(1);
ok(defined $rec, "_immediate(1) ok after resultset_records()");

$rs->destroy();
ok(1, "destroyed result-set");
$conn->destroy();
ok(1, "destroyed connection");

$data3 = $cloned->render();
ok(1, "rendered cloned record after its result-set was destroyed");
ok($data3 eq $data2, "render of clone as expected");
$cloned->destroy();
ok(1, "destroyed cloned record");