Support, testing and changelog for multi-word terms quoted by {curly brackets}
[perl-pqf.git] / t / 2-parser.t
1 # $Id: 2-parser.t,v 1.4 2004-12-23 10:24:12 mike Exp $
2
3 use strict;
4 use warnings;
5
6 BEGIN {
7     use vars qw(@tests);
8     @tests = (
9               [ 'brian',
10                 "term: brian" ],
11               [ '"brian"',
12                 "term: brian" ],
13               [ '"brian kernighan"',
14                 "term: brian kernighan" ],
15               [ '{brian kernighan}',
16                 "term: brian kernighan" ],
17               [ '@attr 1=1003 brian',
18                 "term: brian\n\tattr: bib-1 1=1003" ],
19               [ '@attr 1=1003 "brian"',
20                 "term: brian\n\tattr: bib-1 1=1003" ],
21               [ '@attr 1=1003 @attr 2=3 brian',
22                 "term: brian\n\tattr: bib-1 1=1003\n\tattr: bib-1 2=3" ],
23               [ '@and brian dennis',
24                 "and\n\tterm: brian\n\tterm: dennis" ],
25               [ '@set foo123',
26                 "rset: foo123" ],
27               [ '@attr 1=1003 @set foo123',
28                 "rset: foo123\n\tattr: bib-1 1=1003" ],
29               [ '@or brian dennis',
30                 "or\n\tterm: brian\n\tterm: dennis" ],
31               [ '@or ken @and brian dennis',
32                 "or\n\tterm: ken\n\tand\n\t\tterm: brian\n\t\tterm: dennis" ],
33               [ '@attr zthes 1=3 dennis',
34                 "term: dennis\n\tattr: zthes 1=3" ],
35               [ '@attrset zthes @attr 1=3 dennis',
36                 "term: dennis\n\tattr: zthes 1=3" ],
37               [ '@attrset zthes @attr bib-1 1=3 dennis',
38                 "term: dennis\n\tattr: bib-1 1=3" ],
39               [ '@or @attr 1=1003 dennis unix',
40                 "or\n\tterm: dennis\n\t\tattr: bib-1 1=1003\n" .
41                     "\tterm: unix" ],
42               [ '@or dennis @attr 1=4 unix',
43                 "or\n\tterm: dennis\n" .
44                     "\tterm: unix\n\t\tattr: bib-1 1=4" ],
45               [ '@attr bib-1 1=1003 @or dennis @attr 1=4 unix',
46                 "or\n\tterm: dennis\n\t\tattr: bib-1 1=1003\n" .
47                     "\tterm: unix\n\t\tattr: bib-1 1=4" ],
48               [ '@attr 1=1003 @or dennis ken',
49                 "or\n\tterm: dennis\n\t\tattr: bib-1 1=1003\n" .
50                     "\tterm: ken\n\t\tattr: bib-1 1=1003" ],
51               [ '@attr 1=1003 @attr 2=3 @and @or ken @attr 5=3 den ' .
52                 '@attr 1=4 unix',
53                 "and\n\tor\n" .
54                 "\t\tterm: ken\n\t\t\tattr: bib-1 1=1003\n" .
55                 "\t\t\tattr: bib-1 2=3\n" .
56                 "\t\tterm: den\n\t\t\tattr: bib-1 1=1003\n" .
57                 "\t\t\tattr: bib-1 2=3\n" .
58                 "\t\t\tattr: bib-1 5=3\n" .
59                 "\tterm: unix\n\t\tattr: bib-1 1=4\n\t\tattr: bib-1 2=3" ]
60               );
61 }
62 use Test::More tests => 2*scalar(@tests) + 2;
63 BEGIN { use_ok('Net::Z3950::PQF') };
64
65 my $parser = new Net::Z3950::PQF();
66 ok(defined $parser, "created parser");
67
68 foreach my $test (@tests) {
69     my($query, $text) = @$test;
70     my $top = $parser->parse($query);
71     ok(defined $top, "parsed: $query");
72     my $rendered = $top->render(0);
73     my $ok = $rendered eq "$text\n";
74     ok($ok, $ok ? "rendered" : "wanted: '$text\n', got '$rendered'");
75     exit if !$ok;
76 }