CWB

 view release on metacpan or  search on metacpan

t/42_ceql_grammar.t  view on Meta::CPAN

# -*-cperl-*-
## Test various parts of standard CWB::CEQL grammar

use Test::More tests => 101;
use CWB::CEQL;

our $grammar = new CWB::CEQL;
isa_ok($grammar, "CWB::CEQL"); # T1

## basic tests for wildcard patterns
check_query('ordinary', "literal_string", # T2
            'ordinary');
check_query('me\ta".?\"meta', "literal_string",
            'meta""\.\?""meta');
check_query('ord\inary\,', "wildcard_pattern",
            '"ordinary,"');
check_query('inter+', "wildcard_pattern",
            '"inter.+"');
check_query('[over,under]estimate[d,]', "wildcard_pattern",
            '"(over|under)estimate(d)?"');
check_query('part[,ed,,s]', "wildcard_pattern",
            '"part(ed|s)?"');
check_query('aa[b\*,c\+,\[[a+,b+,]\]]aa', "wildcard_pattern",
            '"aa(b\*|c\+|\[(a.+|b.+)?\])aa"');
check_query('\u\L-\L-\u\L', "wildcard_pattern",
            '"\p{Lu}\p{Ll}+-\p{Ll}+-\p{Lu}\p{Ll}+"');
check_error('ab[,]ba', "wildcard_pattern", # T10
            qr/empty list of alternatives/);
check_error('no\\\\good', "wildcard_pattern",
            qr/literal backslash/);
check_error('also_no_good\\', "wildcard_pattern",
            qr/end in a backslash/);
check_error('one,two,three', "wildcard_pattern",
            qr/alternatives.*within brackets/);
check_error('aa[cd,e[fg,h],aa', "wildcard_pattern",
            qr/bracketing.*balanced.*opening/);
check_error('aa[cd,e[fg,]h,]]aa', "wildcard_pattern",
            qr/bracketing.*balanced.*closing/);

## POS tags and simple POS
check_query('NN*', "pos_tag",       # T16
            'pos="NN.*"');
$grammar->SetParam("pos_attribute", "tag");
check_query('VV[INF,FIN]', "pos_tag",
            'tag="VV(INF|FIN)"');
$grammar->SetParam("pos_attribute", "pos");
check_error('N', "simple_pos",
            qr/no simple.*tags.*available/);
$grammar->SetParam("simple_pos", { # -- example from CEQL manpage
                                  "N" => "NN.*", # common nouns
                                  "V" => "V.*",  # any verb forms
                                  "A" => "JJ.*", # adjectives
                                 });
check_query('N', "simple_pos",
            'pos="NN.*"');
check_error('Noun', "simple_pos",
            qr/not.*simple.*tag.*available.* A N V/);
check_query('NN[S,]', "pos_constraint",
            'pos="NN(S)?"');
check_query('{V}', "pos_constraint",
            'pos="V.*"');
check_query('V%', "pos_constraint", # alternative syntax requested by Serge Sharoff
            'pos="V.*"');
check_error('{N', "pos_constraint",
            qr/lonely curly brace/);

## lemma searches and related options
check_query('[over,under]+tion', "word_or_lemma_constraint", # T25
            'word="(over|under).+tion"%c');
check_query('Bath:C', "word_or_lemma_constraint",
            'word="Bath"');
$grammar->SetParam("default_ignore_case", 0);
check_query('Bath', "word_or_lemma_constraint",
            'word="Bath"');
$grammar->SetParam("default_ignore_case", 1);
check_query('DEJA:Cd', "word_or_lemma_constraint",
            'word="DEJA"%d');
check_query('{sing}', "word_or_lemma_constraint",
            'lemma="sing"%c');
check_query('sing%', "word_or_lemma_constraint", # alternative syntax
            'lemma="sing"%c');
check_query('{I}:C', "word_or_lemma_constraint",
            'lemma="I"');
check_query('{\A-\A}:d', "word_or_lemma_constraint",
            'lemma="\pL+-\pL+"%cd');
check_query('\A-\A%:d', "word_or_lemma_constraint", # alternative syntax
            'lemma="\pL+-\pL+"%cd');
check_query('\{[-,--]\%:C', "word_or_lemma_constraint", # escape % in alternative syntax
            'word="\{(-|--)%"');



( run in 1.656 second using v1.01-cache-2.11-cpan-b16cb0d3907 )