require File.expand_path("../../helpers", __FILE__) class Expressionstrfregexp < Test::Unit::TestCase def test_expression_strfre_alias assert_equal true, RP.parse(/a/).respond_to?(:strfre) end def test_expression_strfregexp_level root = RP.parse(/a(b(c))/) assert_equal 'root', root.strfregexp('%l') a = root.first assert_equal '%0', a.strfregexp('%%l') b = root[1].first assert_equal '<1>', b.strfregexp('<%l>') c = root[1][1].first assert_equal '[at: 2]', c.strfregexp('[at: %l]') end def test_expression_strfregexp_start_end root = RP.parse(/a(b(c))/) assert_equal '0', root.strfregexp('%s') assert_equal '7', root.strfregexp('%e') a = root.first assert_equal '%0', a.strfregexp('%%s') assert_equal '1', a.strfregexp('%e') group_1 = root[1] assert_equal 'GRP:1', group_1.strfregexp('GRP:%s') assert_equal '7', group_1.strfregexp('%e') b = group_1.first assert_equal '<@2>', b.strfregexp('<@%s>') assert_equal '3', b.strfregexp('%e') c = group_1.last.first assert_equal '[at: 4]', c.strfregexp('[at: %s]') assert_equal '5', c.strfregexp('%e') end def test_expression_strfregexp_length root = RP.parse(/a[b]c/) assert_equal '5', root.strfregexp('%S') a = root.first assert_equal '1', a.strfregexp('%S') set = root[1] assert_equal '3', set.strfregexp('%S') end def test_expression_strfregexp_coded_offset root = RP.parse(/a[b]c/) assert_equal '@0+5', root.strfregexp('%o') a = root.first assert_equal '@0+1', a.strfregexp('%o') set = root[1] assert_equal '@1+3', set.strfregexp('%o') end def test_expression_strfregexp_type_token root = RP.parse(/a[b](c)/) assert_equal 'expression', root.strfregexp('%y') assert_equal 'root', root.strfregexp('%k') assert_equal 'expression:root', root.strfregexp('%i') assert_equal 'Regexp::Expression::Root', root.strfregexp('%c') a = root.first assert_equal 'literal', a.strfregexp('%y') assert_equal 'literal', a.strfregexp('%k') assert_equal 'literal:literal', a.strfregexp('%i') assert_equal 'Regexp::Expression::Literal', a.strfregexp('%c') set = root[1] assert_equal 'set', set.strfregexp('%y') assert_equal 'character', set.strfregexp('%k') assert_equal 'set:character', set.strfregexp('%i') assert_equal 'Regexp::Expression::CharacterSet', set.strfregexp('%c') group = root.last assert_equal 'group', group.strfregexp('%y') assert_equal 'capture', group.strfregexp('%k') assert_equal 'group:capture', group.strfregexp('%i') assert_equal 'Regexp::Expression::Group::Capture', group.strfregexp('%c') end def test_expression_strfregexp_quantifier root = RP.parse(/a+[b](c)?d{3,4}/) assert_equal '{1}', root.strfregexp('%q') assert_equal '', root.strfregexp('%Q') assert_equal '1, 1', root.strfregexp('%z, %Z') a = root.first assert_equal '{1, or-more}', a.strfregexp('%q') assert_equal '+', a.strfregexp('%Q') assert_equal '1, -1', a.strfregexp('%z, %Z') set = root[1] assert_equal '{1}', set.strfregexp('%q') assert_equal '', set.strfregexp('%Q') assert_equal '1, 1', set.strfregexp('%z, %Z') group = root[2] assert_equal '{0, 1}', group.strfregexp('%q') assert_equal '?', group.strfregexp('%Q') assert_equal '0, 1', group.strfregexp('%z, %Z') d = root.last assert_equal '{3, 4}', d.strfregexp('%q') assert_equal '{3,4}', d.strfregexp('%Q') assert_equal '3, 4', d.strfregexp('%z, %Z') end def test_expression_strfregexp_text root = RP.parse(/a(b(c))|[d-gk-p]+/) assert_equal 'a(b(c))|[d-gk-p]+', root.strfregexp('%t') assert_equal 'expression:root', root.strfregexp('%~t') alt = root.first assert_equal 'a(b(c))|[d-gk-p]+', alt.strfregexp('%t') assert_equal 'a(b(c))|[d-gk-p]+', alt.strfregexp('%T') assert_equal 'meta:alternation', alt.strfregexp('%~t') seq_1 = alt.first assert_equal 'a(b(c))', seq_1.strfregexp('%t') assert_equal 'a(b(c))', seq_1.strfregexp('%T') assert_equal 'expression:sequence', seq_1.strfregexp('%~t') group = seq_1[1] assert_equal '(b(c))', group.strfregexp('%t') assert_equal '(b(c))', group.strfregexp('%T') assert_equal 'group:capture', group.strfregexp('%~t') seq_2 = alt.last assert_equal '[d-gk-p]+', seq_2.strfregexp('%t') assert_equal '[d-gk-p]+', seq_2.strfregexp('%T') set = seq_2.first assert_equal '[d-gk-p]', set.strfregexp('%t') assert_equal '[d-gk-p]+', set.strfregexp('%T') assert_equal '[d-gk-p]+', set.strfregexp('%~t') end def test_expression_strfregexp_combined root = RP.parse(/a{5}|[b-d]+/) assert_equal '@0+11 expression:root', root.strfregexp('%b') assert_equal root.strfregexp('%o %i'), root.strfregexp('%b') assert_equal '@0+11 expression:root {1}', root.strfregexp('%m') assert_equal root.strfregexp('%b %q'), root.strfregexp('%m') assert_equal '@0+11 expression:root {1} a{5}|[b-d]+', root.strfregexp('%a') assert_equal root.strfregexp('%m %t'), root.strfregexp('%a') end def test_expression_strfregexp_tree root = RP.parse(/a[b-d]*(e(f+))?/) assert_equal( "@0+15 expression:root\n" + " @0+1 a\n" + " @1+6 [b-d]*\n" + " @7+8 group:capture\n" + " @8+1 e\n" + " @9+4 group:capture\n" + " @10+2 f+", root.strfregexp_tree('%>%o %~t') ) end def test_expression_strfregexp_tree_separator root = RP.parse(/a[b-d]*(e(f+))?/) assert_equal( "@0+15 expression:root-SEP-" + " @0+1 a-SEP-" + " @1+6 [b-d]*-SEP-" + " @7+8 group:capture-SEP-" + " @8+1 e-SEP-" + " @9+4 group:capture-SEP-" + " @10+2 f+", root.strfregexp_tree('%>%o %~t', true, '-SEP-') ) end def test_expression_strfregexp_tree_exclude_self root = RP.parse(/a[b-d]*(e(f+))?/) assert_equal( "@0+1 a\n" + "@1+6 [b-d]*\n" + "@7+8 group:capture\n" + " @8+1 e\n" + " @9+4 group:capture\n" + " @10+2 f+", root.strfregexp_tree('%>%o %~t', false) ) end end