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
|
require 'spec_helper'
RSpec.describe('RefCall lexing') do
# Traditional numerical group back-reference
include_examples 'lex', '(abc)\1',
3 => [:backref, :number, '\1', 5, 7, 0, 0, 0]
# Group back-references, named, numbered, and relative
include_examples 'lex', '(?<X>abc)\k<X>',
3 => [:backref, :name_ref, '\k<X>', 9, 14, 0, 0, 0]
include_examples 'lex', "(?<X>abc)\\k'X'",
3 => [:backref, :name_ref, "\\k'X'", 9, 14, 0, 0, 0]
include_examples 'lex', '(abc)\k<1>',
3 => [:backref, :number_ref, '\k<1>', 5, 10, 0, 0, 0]
include_examples 'lex', "(abc)\\k'1'",
3 => [:backref, :number_ref, "\\k'1'", 5, 10, 0, 0, 0]
include_examples 'lex', '(abc)\k<-1>',
3 => [:backref, :number_rel_ref, '\k<-1>', 5, 11, 0, 0, 0]
include_examples 'lex', "(abc)\\k'-1'",
3 => [:backref, :number_rel_ref, "\\k'-1'", 5, 11, 0, 0, 0]
# Sub-expression invocation, named, numbered, and relative
include_examples 'lex', '(?<X>abc)\g<X>',
3 => [:backref, :name_call, '\g<X>', 9, 14, 0, 0, 0]
include_examples 'lex', "(?<X>abc)\\g'X'",
3 => [:backref, :name_call, "\\g'X'", 9, 14, 0, 0, 0]
include_examples 'lex', '(abc)\g<1>',
3 => [:backref, :number_call, '\g<1>', 5, 10, 0, 0, 0]
include_examples 'lex', "(abc)\\g'1'",
3 => [:backref, :number_call, "\\g'1'", 5, 10, 0, 0, 0]
include_examples 'lex', '\g<0>',
0 => [:backref, :number_call, '\g<0>', 0, 5, 0, 0, 0]
include_examples 'lex', "\\g'0'",
0 => [:backref, :number_call, "\\g'0'", 0, 5, 0, 0, 0]
include_examples 'lex', '(abc)\g<-1>',
3 => [:backref, :number_rel_call, '\g<-1>', 5, 11, 0, 0, 0]
include_examples 'lex', "(abc)\\g'-1'",
3 => [:backref, :number_rel_call, "\\g'-1'", 5, 11, 0, 0, 0]
include_examples 'lex', '(abc)\g<+1>',
3 => [:backref, :number_rel_call, '\g<+1>', 5, 11, 0, 0, 0]
include_examples 'lex', "(abc)\\g'+1'",
3 => [:backref, :number_rel_call, "\\g'+1'", 5, 11, 0, 0, 0]
# Group back-references, with nesting level
include_examples 'lex', '(?<X>abc)\k<X-0>',
3 => [:backref, :name_recursion_ref, '\k<X-0>', 9, 16, 0, 0, 0]
include_examples 'lex', "(?<X>abc)\\k'X-0'",
3 => [:backref, :name_recursion_ref, "\\k'X-0'", 9, 16, 0, 0, 0]
include_examples 'lex', '(abc)\k<1-0>',
3 => [:backref, :number_recursion_ref, '\k<1-0>', 5, 12, 0, 0, 0]
include_examples 'lex', "(abc)\\k'1-0'",
3 => [:backref, :number_recursion_ref, "\\k'1-0'", 5, 12, 0, 0, 0]
end
|