The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
%TestML 0.1.0

parse_input(*grammar, *input).Catch ~~ *error

=== Error fails at furthest match
# XXX This one not testing much.
--- grammar
a: b+ c
b: /b/
c: /c/
--- input
bbbbddddd
--- error: ddddd\n

### TODO ###
# === Pegex: Illegal meta rule
# --- grammar
# %grammar Test
# %foobar Quark
# a: /a+/
# --- input
# aaa
# --- error: Illegal meta rule

=== Pegex: Rule header syntax error
--- grammar
a|: /a+/
--- input
aaa
--- error: Rule header syntax error

=== Pegex: Rule ending syntax error
--- grammar
a: /a+/ |
--- input
aaa
--- error: Rule ending syntax error

=== Pegex: Illegal rule modifier
--- grammar
a: /a+/
b: ^<a>1-2
--- input
aaa
--- error: Illegal rule modifier

=== Pegex: Missing > in rule reference
--- grammar
a: /a+/
b: !<a1-2
--- input
aaa
--- error: Missing > in rule reference

=== Pegex: Missing < in rule reference
--- grammar
a: /a+/
b: !a>1-2
--- input
aaa
--- error: Rule ending syntax error
# --- error: Missing < in rule reference

=== Pegex: Illegal character in rule quantifier
--- grammar
a: /a+/
b: !a^1-2
--- input
aaa
--- error: Rule ending syntax error
# --- error: Illegal character in rule quantifier

=== Pegex: Unprotected rule name with numeric quantifier
--- grammar
a: /a+/
b: !a1-2
--- input
aaa
--- error: Parse document failed for some reason
# --- error: Rule ending syntax error
# --- error: Unprotected rule name with numeric quantifier

=== Pegex: Runaway regular expression
--- grammar
a: /a+
--- input
aaa
--- error: Runaway regular expression

=== Pegex: Illegal group rule modifier
--- grammar
a: /a+/
b: !(a =<a>)1-2
--- input
aaa
--- error: Illegal group rule modifier

=== Pegex: Runaway rule group
--- grammar
a: /a+/
b: .(a =<a>1-2
--- input
aaa
--- error: Runaway rule group

=== Pegex: Illegal character in group rule quantifier
--- grammar
a: /a+/
b: .(a =<a>)^2
--- input
aaa
--- error: Rule ending syntax error
# --- error: Illegal character in group rule quantifier

=== Pegex: Multi-line error messages not allowed
--- grammar
a: /a+/
b: `This is legal`
c: `This is
 
illegal`
--- input
aaa
--- error: Multi-line error messages not allowed

=== Pegex: Runaway error message
--- grammar
a: /a+/
b: `This is legal`
c: `This is

illegal
--- input
aaa
--- error: Runaway error message

=== Pegex: Leading separator form (BOK) no longer supported
--- grammar
a: /a+/ %%% ~
--- input
aaa
--- error: Rule ending syntax error
# --- error: Leading separator form (BOK) no longer supported

=== Pegex: Illegal characters in separator indicator
--- grammar
a: /a+/ %%~%%^%% ~
--- input
aaa
--- error: Rule ending syntax error
# --- error: Illegal characters in separator indicator