regexp_parser 1.3.0 → 1.6.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG.md +53 -1
- data/Gemfile +3 -3
- data/README.md +10 -14
- data/Rakefile +3 -4
- data/lib/regexp_parser/expression.rb +28 -53
- data/lib/regexp_parser/expression/classes/backref.rb +18 -10
- data/lib/regexp_parser/expression/classes/conditional.rb +7 -2
- data/lib/regexp_parser/expression/classes/escape.rb +0 -4
- data/lib/regexp_parser/expression/classes/group.rb +4 -2
- data/lib/regexp_parser/expression/classes/keep.rb +1 -3
- data/lib/regexp_parser/expression/methods/match.rb +13 -0
- data/lib/regexp_parser/expression/methods/match_length.rb +172 -0
- data/lib/regexp_parser/expression/methods/options.rb +35 -0
- data/lib/regexp_parser/expression/methods/strfregexp.rb +0 -1
- data/lib/regexp_parser/expression/methods/tests.rb +6 -15
- data/lib/regexp_parser/expression/quantifier.rb +2 -2
- data/lib/regexp_parser/expression/sequence.rb +3 -6
- data/lib/regexp_parser/expression/sequence_operation.rb +2 -6
- data/lib/regexp_parser/expression/subexpression.rb +3 -5
- data/lib/regexp_parser/lexer.rb +30 -44
- data/lib/regexp_parser/parser.rb +47 -24
- data/lib/regexp_parser/scanner.rb +1159 -1329
- data/lib/regexp_parser/scanner/char_type.rl +0 -3
- data/lib/regexp_parser/scanner/properties/long.yml +34 -1
- data/lib/regexp_parser/scanner/properties/short.yml +12 -0
- data/lib/regexp_parser/scanner/scanner.rl +82 -190
- data/lib/regexp_parser/syntax/tokens.rb +2 -10
- data/lib/regexp_parser/syntax/tokens/unicode_property.rb +72 -21
- data/lib/regexp_parser/syntax/versions/2.6.0.rb +10 -0
- data/lib/regexp_parser/syntax/versions/2.6.2.rb +10 -0
- data/lib/regexp_parser/syntax/versions/2.6.3.rb +10 -0
- data/lib/regexp_parser/version.rb +1 -1
- data/regexp_parser.gemspec +3 -3
- data/spec/expression/base_spec.rb +94 -0
- data/spec/expression/clone_spec.rb +120 -0
- data/spec/expression/conditional_spec.rb +89 -0
- data/spec/expression/free_space_spec.rb +27 -0
- data/spec/expression/methods/match_length_spec.rb +154 -0
- data/spec/expression/methods/match_spec.rb +25 -0
- data/spec/expression/methods/strfregexp_spec.rb +224 -0
- data/spec/expression/methods/tests_spec.rb +99 -0
- data/spec/expression/methods/traverse_spec.rb +140 -0
- data/spec/expression/options_spec.rb +128 -0
- data/spec/expression/root_spec.rb +9 -0
- data/spec/expression/sequence_spec.rb +9 -0
- data/spec/expression/subexpression_spec.rb +50 -0
- data/spec/expression/to_h_spec.rb +26 -0
- data/spec/expression/to_s_spec.rb +100 -0
- data/spec/lexer/all_spec.rb +22 -0
- data/spec/lexer/conditionals_spec.rb +53 -0
- data/spec/lexer/escapes_spec.rb +14 -0
- data/spec/lexer/keep_spec.rb +10 -0
- data/spec/lexer/literals_spec.rb +89 -0
- data/spec/lexer/nesting_spec.rb +99 -0
- data/spec/lexer/refcalls_spec.rb +55 -0
- data/spec/parser/all_spec.rb +43 -0
- data/spec/parser/alternation_spec.rb +88 -0
- data/spec/parser/anchors_spec.rb +17 -0
- data/spec/parser/conditionals_spec.rb +179 -0
- data/spec/parser/errors_spec.rb +30 -0
- data/spec/parser/escapes_spec.rb +121 -0
- data/spec/parser/free_space_spec.rb +130 -0
- data/spec/parser/groups_spec.rb +108 -0
- data/spec/parser/keep_spec.rb +6 -0
- data/spec/parser/posix_classes_spec.rb +8 -0
- data/spec/parser/properties_spec.rb +115 -0
- data/spec/parser/quantifiers_spec.rb +51 -0
- data/spec/parser/refcalls_spec.rb +112 -0
- data/spec/parser/set/intersections_spec.rb +127 -0
- data/spec/parser/set/ranges_spec.rb +111 -0
- data/spec/parser/sets_spec.rb +178 -0
- data/spec/parser/types_spec.rb +18 -0
- data/spec/scanner/all_spec.rb +18 -0
- data/spec/scanner/anchors_spec.rb +21 -0
- data/spec/scanner/conditionals_spec.rb +128 -0
- data/spec/scanner/errors_spec.rb +68 -0
- data/spec/scanner/escapes_spec.rb +53 -0
- data/spec/scanner/free_space_spec.rb +133 -0
- data/spec/scanner/groups_spec.rb +52 -0
- data/spec/scanner/keep_spec.rb +10 -0
- data/spec/scanner/literals_spec.rb +49 -0
- data/spec/scanner/meta_spec.rb +18 -0
- data/spec/scanner/properties_spec.rb +64 -0
- data/spec/scanner/quantifiers_spec.rb +20 -0
- data/spec/scanner/refcalls_spec.rb +36 -0
- data/spec/scanner/sets_spec.rb +102 -0
- data/spec/scanner/types_spec.rb +14 -0
- data/spec/spec_helper.rb +15 -0
- data/{test → spec}/support/runner.rb +9 -8
- data/spec/support/shared_examples.rb +77 -0
- data/{test → spec}/support/warning_extractor.rb +5 -7
- data/spec/syntax/syntax_spec.rb +48 -0
- data/spec/syntax/syntax_token_map_spec.rb +23 -0
- data/spec/syntax/versions/1.8.6_spec.rb +17 -0
- data/spec/syntax/versions/1.9.1_spec.rb +10 -0
- data/spec/syntax/versions/1.9.3_spec.rb +9 -0
- data/spec/syntax/versions/2.0.0_spec.rb +13 -0
- data/spec/syntax/versions/2.2.0_spec.rb +9 -0
- data/spec/syntax/versions/aliases_spec.rb +37 -0
- data/spec/token/token_spec.rb +85 -0
- metadata +144 -143
- data/test/expression/test_all.rb +0 -12
- data/test/expression/test_base.rb +0 -90
- data/test/expression/test_clone.rb +0 -89
- data/test/expression/test_conditionals.rb +0 -113
- data/test/expression/test_free_space.rb +0 -35
- data/test/expression/test_set.rb +0 -84
- data/test/expression/test_strfregexp.rb +0 -230
- data/test/expression/test_subexpression.rb +0 -58
- data/test/expression/test_tests.rb +0 -99
- data/test/expression/test_to_h.rb +0 -59
- data/test/expression/test_to_s.rb +0 -104
- data/test/expression/test_traverse.rb +0 -161
- data/test/helpers.rb +0 -10
- data/test/lexer/test_all.rb +0 -41
- data/test/lexer/test_conditionals.rb +0 -127
- data/test/lexer/test_keep.rb +0 -24
- data/test/lexer/test_literals.rb +0 -130
- data/test/lexer/test_nesting.rb +0 -132
- data/test/lexer/test_refcalls.rb +0 -56
- data/test/parser/set/test_intersections.rb +0 -127
- data/test/parser/set/test_ranges.rb +0 -111
- data/test/parser/test_all.rb +0 -64
- data/test/parser/test_alternation.rb +0 -92
- data/test/parser/test_anchors.rb +0 -34
- data/test/parser/test_conditionals.rb +0 -187
- data/test/parser/test_errors.rb +0 -63
- data/test/parser/test_escapes.rb +0 -134
- data/test/parser/test_free_space.rb +0 -139
- data/test/parser/test_groups.rb +0 -289
- data/test/parser/test_keep.rb +0 -21
- data/test/parser/test_posix_classes.rb +0 -27
- data/test/parser/test_properties.rb +0 -133
- data/test/parser/test_quantifiers.rb +0 -301
- data/test/parser/test_refcalls.rb +0 -186
- data/test/parser/test_sets.rb +0 -179
- data/test/parser/test_types.rb +0 -50
- data/test/scanner/test_all.rb +0 -38
- data/test/scanner/test_anchors.rb +0 -38
- data/test/scanner/test_conditionals.rb +0 -184
- data/test/scanner/test_errors.rb +0 -91
- data/test/scanner/test_escapes.rb +0 -56
- data/test/scanner/test_free_space.rb +0 -200
- data/test/scanner/test_groups.rb +0 -79
- data/test/scanner/test_keep.rb +0 -35
- data/test/scanner/test_literals.rb +0 -89
- data/test/scanner/test_meta.rb +0 -40
- data/test/scanner/test_properties.rb +0 -312
- data/test/scanner/test_quantifiers.rb +0 -37
- data/test/scanner/test_refcalls.rb +0 -52
- data/test/scanner/test_scripts.rb +0 -53
- data/test/scanner/test_sets.rb +0 -119
- data/test/scanner/test_types.rb +0 -35
- data/test/scanner/test_unicode_blocks.rb +0 -30
- data/test/support/disable_autotest.rb +0 -8
- data/test/syntax/test_all.rb +0 -6
- data/test/syntax/test_syntax.rb +0 -61
- data/test/syntax/test_syntax_token_map.rb +0 -25
- data/test/syntax/versions/test_1.8.rb +0 -55
- data/test/syntax/versions/test_1.9.1.rb +0 -36
- data/test/syntax/versions/test_1.9.3.rb +0 -32
- data/test/syntax/versions/test_2.0.0.rb +0 -37
- data/test/syntax/versions/test_2.2.0.rb +0 -32
- data/test/syntax/versions/test_aliases.rb +0 -129
- data/test/syntax/versions/test_all.rb +0 -5
- data/test/test_all.rb +0 -5
- data/test/token/test_all.rb +0 -2
- data/test/token/test_token.rb +0 -107
data/test/expression/test_all.rb
DELETED
@@ -1,12 +0,0 @@
|
|
1
|
-
require File.expand_path("../../helpers", __FILE__)
|
2
|
-
|
3
|
-
%w{
|
4
|
-
base to_s to_h clone subexpression free_space tests
|
5
|
-
traverse strfregexp
|
6
|
-
}.each do|tc|
|
7
|
-
require File.expand_path("../test_#{tc}", __FILE__)
|
8
|
-
end
|
9
|
-
|
10
|
-
if RUBY_VERSION >= '2.0.0'
|
11
|
-
require File.expand_path("../test_conditionals", __FILE__)
|
12
|
-
end
|
@@ -1,90 +0,0 @@
|
|
1
|
-
require File.expand_path("../../helpers", __FILE__)
|
2
|
-
|
3
|
-
class ExpressionBase < Test::Unit::TestCase
|
4
|
-
|
5
|
-
def test_expression_to_re
|
6
|
-
re_text = '^a*(b([cde]+))+f?$'
|
7
|
-
|
8
|
-
re = RP.parse(re_text).to_re
|
9
|
-
|
10
|
-
assert re.is_a?(::Regexp),
|
11
|
-
'Not a Regexp, but should be'
|
12
|
-
|
13
|
-
assert_equal re.source, re_text
|
14
|
-
end
|
15
|
-
|
16
|
-
def test_expression_level
|
17
|
-
regexp = /^a(b(c(d)))e$/
|
18
|
-
root = RP.parse(regexp)
|
19
|
-
|
20
|
-
%w{^ a (b(c(d))) e $}.each_with_index do |t, i|
|
21
|
-
assert_equal t, root[i].to_s
|
22
|
-
assert_equal 0, root[i].level
|
23
|
-
end
|
24
|
-
|
25
|
-
assert_equal 'b', root[2][0].to_s
|
26
|
-
assert_equal 1, root[2][0].level
|
27
|
-
|
28
|
-
assert_equal 'c', root[2][1][0].to_s
|
29
|
-
assert_equal 2, root[2][1][0].level
|
30
|
-
|
31
|
-
assert_equal 'd', root[2][1][1][0].to_s
|
32
|
-
assert_equal 3, root[2][1][1][0].level
|
33
|
-
end
|
34
|
-
|
35
|
-
def test_expression_terminal?
|
36
|
-
root = RP.parse('^a([b]+)c$')
|
37
|
-
|
38
|
-
assert_equal false, root.terminal?
|
39
|
-
|
40
|
-
assert_equal true, root[0].terminal?
|
41
|
-
assert_equal true, root[1].terminal?
|
42
|
-
assert_equal false, root[2].terminal?
|
43
|
-
assert_equal false, root[2][0].terminal?
|
44
|
-
assert_equal true, root[2][0][0].terminal?
|
45
|
-
assert_equal true, root[3].terminal?
|
46
|
-
assert_equal true, root[4].terminal?
|
47
|
-
end
|
48
|
-
|
49
|
-
def test_expression_alt_terminal?
|
50
|
-
root = RP.parse('^(ab|cd)$')
|
51
|
-
|
52
|
-
assert_equal false, root.terminal?
|
53
|
-
|
54
|
-
assert_equal true, root[0].terminal?
|
55
|
-
assert_equal false, root[1].terminal?
|
56
|
-
assert_equal false, root[1][0].terminal?
|
57
|
-
assert_equal false, root[1][0][0].terminal?
|
58
|
-
assert_equal true, root[1][0][0][0].terminal?
|
59
|
-
assert_equal false, root[1][0][1].terminal?
|
60
|
-
assert_equal true, root[1][0][1][0].terminal?
|
61
|
-
end
|
62
|
-
|
63
|
-
def test_expression_coded_offset
|
64
|
-
root = RP.parse('^a*(b+(c?))$')
|
65
|
-
|
66
|
-
assert_equal '@0+12', root.coded_offset
|
67
|
-
|
68
|
-
# All top level offsets
|
69
|
-
[
|
70
|
-
[ '@0+1', '^' ],
|
71
|
-
[ '@1+2', 'a*' ],
|
72
|
-
[ '@3+8', '(b+(c?))' ],
|
73
|
-
['@11+1', '$' ],
|
74
|
-
].each_with_index do |check, i|
|
75
|
-
against = [ root[i].coded_offset, root[i].to_s ]
|
76
|
-
|
77
|
-
assert_equal check, against
|
78
|
-
end
|
79
|
-
|
80
|
-
# Nested expression
|
81
|
-
assert_equal ['@4+2', 'b+'], [root[2][0].coded_offset, root[2][0].to_s]
|
82
|
-
|
83
|
-
# Nested subexpression
|
84
|
-
assert_equal ['@6+4', '(c?)'], [root[2][1].coded_offset, root[2][1].to_s]
|
85
|
-
|
86
|
-
# Nested subexpression expression
|
87
|
-
assert_equal ['@7+2', 'c?'], [root[2][1][0].coded_offset, root[2][1][0].to_s]
|
88
|
-
end
|
89
|
-
|
90
|
-
end
|
@@ -1,89 +0,0 @@
|
|
1
|
-
require File.expand_path("../../helpers", __FILE__)
|
2
|
-
|
3
|
-
class ExpressionClone < Test::Unit::TestCase
|
4
|
-
|
5
|
-
def test_expression_clone_base
|
6
|
-
root = RP.parse(/^(?i:a)b+$/i)
|
7
|
-
copy = root.clone
|
8
|
-
|
9
|
-
refute_equal copy.object_id, root.object_id
|
10
|
-
|
11
|
-
# The text content is equal but the objects are not.
|
12
|
-
assert_equal copy.text, root.text
|
13
|
-
refute_equal copy.text.object_id, root.text.object_id
|
14
|
-
|
15
|
-
root_1 = root.expressions[1]
|
16
|
-
copy_1 = copy.expressions[1]
|
17
|
-
|
18
|
-
# The options hash contents are equal but the objects are not.
|
19
|
-
assert_equal copy_1.options, root_1.options
|
20
|
-
refute_equal copy_1.options.object_id, root_1.options.object_id
|
21
|
-
|
22
|
-
root_2 = root.expressions[2]
|
23
|
-
copy_2 = copy.expressions[2]
|
24
|
-
|
25
|
-
assert root_2.quantified?
|
26
|
-
assert copy_2.quantified?
|
27
|
-
|
28
|
-
# The quantifier contents are equal but the objects are not.
|
29
|
-
assert_equal copy_2.quantifier.text,
|
30
|
-
root_2.quantifier.text
|
31
|
-
|
32
|
-
refute_equal copy_2.quantifier.text.object_id,
|
33
|
-
root_2.quantifier.text.object_id
|
34
|
-
|
35
|
-
refute_equal copy_2.quantifier.object_id,
|
36
|
-
root_2.quantifier.object_id
|
37
|
-
end
|
38
|
-
|
39
|
-
def test_expression_clone_subexpression
|
40
|
-
root = RP.parse(/^a(b([cde])f)g$/)
|
41
|
-
copy = root.clone
|
42
|
-
|
43
|
-
assert root.respond_to?(:expressions)
|
44
|
-
assert copy.respond_to?(:expressions)
|
45
|
-
|
46
|
-
# The expressions arrays are not equal.
|
47
|
-
refute_equal copy.expressions.object_id,
|
48
|
-
root.expressions.object_id
|
49
|
-
|
50
|
-
# The expressions in the arrays are not equal.
|
51
|
-
copy.expressions.each_with_index do |exp, index|
|
52
|
-
refute_equal exp.object_id,
|
53
|
-
root.expressions[index].object_id
|
54
|
-
end
|
55
|
-
|
56
|
-
# The expressions in nested expressions are not equal.
|
57
|
-
copy.expressions[2].each_with_index do |exp, index|
|
58
|
-
refute_equal exp.object_id,
|
59
|
-
root.expressions[2][index].object_id
|
60
|
-
end
|
61
|
-
end
|
62
|
-
|
63
|
-
# ruby 1.8 does not implement named groups
|
64
|
-
def test_expression_clone_named_group
|
65
|
-
root = RP.parse('^(?<somename>a)+bc$')
|
66
|
-
copy = root.clone
|
67
|
-
|
68
|
-
root_1 = root.expressions[1]
|
69
|
-
copy_1 = copy.expressions[1]
|
70
|
-
|
71
|
-
# The names are equal but their objects are not.
|
72
|
-
assert_equal copy_1.name, root_1.name
|
73
|
-
refute_equal copy_1.name.object_id, root_1.name.object_id
|
74
|
-
|
75
|
-
# Verify super: text objects should be different.
|
76
|
-
assert_equal copy_1.text, root_1.text
|
77
|
-
|
78
|
-
# Verify super: expressions arrays are not equal.
|
79
|
-
refute_equal copy_1.expressions.object_id,
|
80
|
-
root_1.expressions.object_id
|
81
|
-
|
82
|
-
# Verify super: expressions in the arrays are not equal.
|
83
|
-
copy_1.expressions.each_with_index do |exp, index|
|
84
|
-
refute_equal exp.object_id,
|
85
|
-
root_1.expressions[index].object_id
|
86
|
-
end
|
87
|
-
end
|
88
|
-
|
89
|
-
end
|
@@ -1,113 +0,0 @@
|
|
1
|
-
require File.expand_path("../../helpers", __FILE__)
|
2
|
-
|
3
|
-
class ExpressionConditionals < Test::Unit::TestCase
|
4
|
-
|
5
|
-
def setup
|
6
|
-
@root = RP.parse(/^(a(b))(b(?(1)c|(?(2)d|(?(3)e|f)))g)$/)
|
7
|
-
|
8
|
-
@cond_1 = @root[2][1]
|
9
|
-
@cond_2 = @root[2][1][2][0]
|
10
|
-
@cond_3 = @root[2][1][2][0][2][0]
|
11
|
-
end
|
12
|
-
|
13
|
-
def is_conditional_condition?(exp)
|
14
|
-
exp.is_a?(Conditional::Condition)
|
15
|
-
end
|
16
|
-
|
17
|
-
def is_conditional_branch?(exp)
|
18
|
-
exp.is_a?(Conditional::Branch)
|
19
|
-
end
|
20
|
-
|
21
|
-
def test_expression_conditional_root_level
|
22
|
-
%w{^ (a(b)) (b(?(1)c|(?(2)d|(?(3)e|f)))g) $}.each_with_index do |t, i|
|
23
|
-
assert_equal 0, @root[i].conditional_level
|
24
|
-
assert_equal t, @root[i].to_s
|
25
|
-
end
|
26
|
-
|
27
|
-
# First capture group
|
28
|
-
assert_equal 'b', @root[2][0].text
|
29
|
-
assert_equal 0, @root[2][0].conditional_level
|
30
|
-
end
|
31
|
-
|
32
|
-
def test_expression_conditional_level_one
|
33
|
-
condition = @cond_1.condition
|
34
|
-
branch_1 = @cond_1.branches.first
|
35
|
-
|
36
|
-
# Condition
|
37
|
-
assert_equal true, is_conditional_condition?(condition)
|
38
|
-
assert_equal '(1)', condition.text
|
39
|
-
assert_equal 1, condition.conditional_level
|
40
|
-
|
41
|
-
# Branch 1
|
42
|
-
assert_equal true, is_conditional_branch?(branch_1)
|
43
|
-
assert_equal 'c', branch_1.text
|
44
|
-
assert_equal 1, branch_1.conditional_level
|
45
|
-
|
46
|
-
# Literal
|
47
|
-
assert_equal 'c', branch_1.first.text
|
48
|
-
assert_equal 1, branch_1.first.conditional_level
|
49
|
-
|
50
|
-
end
|
51
|
-
|
52
|
-
def test_expression_conditional_level_two
|
53
|
-
condition = @cond_2.condition
|
54
|
-
branch_1 = @cond_2.branches.first
|
55
|
-
branch_2 = @cond_2.branches.last
|
56
|
-
|
57
|
-
assert_equal '(?', @cond_2.text
|
58
|
-
assert_equal 1, @cond_2.conditional_level
|
59
|
-
|
60
|
-
# Condition
|
61
|
-
assert_equal true, is_conditional_condition?(condition)
|
62
|
-
assert_equal '(2)', condition.text
|
63
|
-
assert_equal 2, condition.conditional_level
|
64
|
-
|
65
|
-
# Branch 1
|
66
|
-
assert_equal true, is_conditional_branch?(branch_1)
|
67
|
-
assert_equal 'd', branch_1.text
|
68
|
-
assert_equal 2, branch_1.conditional_level
|
69
|
-
|
70
|
-
# Literal
|
71
|
-
assert_equal 'd', branch_1.first.text
|
72
|
-
assert_equal 2, branch_1.first.conditional_level
|
73
|
-
|
74
|
-
# Branch 2
|
75
|
-
assert_equal '(?', branch_2.first.text
|
76
|
-
assert_equal 2, branch_2.first.conditional_level
|
77
|
-
end
|
78
|
-
|
79
|
-
def test_expression_conditional_level_three
|
80
|
-
condition = @cond_3.condition
|
81
|
-
branch_1 = @cond_3.branches.first
|
82
|
-
branch_2 = @cond_3.branches.last
|
83
|
-
|
84
|
-
# Condition
|
85
|
-
assert_equal true, is_conditional_condition?(condition)
|
86
|
-
assert_equal '(3)', condition.text
|
87
|
-
assert_equal 3, condition.conditional_level
|
88
|
-
|
89
|
-
# Same as branch 2 in level two
|
90
|
-
assert_equal '(?', @cond_3.text
|
91
|
-
assert_equal '(?(3)e|f)', @cond_3.to_s
|
92
|
-
assert_equal 2, @cond_3.conditional_level
|
93
|
-
|
94
|
-
# Branch 1
|
95
|
-
assert_equal true, is_conditional_branch?(branch_1)
|
96
|
-
assert_equal 'e', branch_1.text
|
97
|
-
assert_equal 3, branch_1.conditional_level
|
98
|
-
|
99
|
-
# Literal
|
100
|
-
assert_equal 'e', branch_1.first.text
|
101
|
-
assert_equal 3, branch_1.first.conditional_level
|
102
|
-
|
103
|
-
# Branch 2
|
104
|
-
assert_equal true, is_conditional_branch?(branch_2)
|
105
|
-
assert_equal 'f', branch_2.text
|
106
|
-
assert_equal 3, branch_2.conditional_level
|
107
|
-
|
108
|
-
# Literal
|
109
|
-
assert_equal 'f', branch_2.first.text
|
110
|
-
assert_equal 3, branch_2.first.conditional_level
|
111
|
-
end
|
112
|
-
|
113
|
-
end
|
@@ -1,35 +0,0 @@
|
|
1
|
-
require File.expand_path("../../helpers", __FILE__)
|
2
|
-
|
3
|
-
class ExpressionFreeSpace < Test::Unit::TestCase
|
4
|
-
|
5
|
-
def test_expression_white_space_quantify_raises_error
|
6
|
-
regexp = %r{
|
7
|
-
a # Comment
|
8
|
-
}x
|
9
|
-
|
10
|
-
root = RP.parse(regexp)
|
11
|
-
|
12
|
-
space = root[0]
|
13
|
-
assert_equal FreeSpace::WhiteSpace, space.class
|
14
|
-
|
15
|
-
assert_raise( RuntimeError ) {
|
16
|
-
space.quantify(:dummy, '#')
|
17
|
-
}
|
18
|
-
end
|
19
|
-
|
20
|
-
def test_expression_comment_quantify_raises_error
|
21
|
-
regexp = %r{
|
22
|
-
a # Comment
|
23
|
-
}x
|
24
|
-
|
25
|
-
root = RP.parse(regexp)
|
26
|
-
|
27
|
-
comment = root[3]
|
28
|
-
assert_equal FreeSpace::Comment, comment.class
|
29
|
-
|
30
|
-
assert_raise( RuntimeError ) {
|
31
|
-
comment.quantify(:dummy, '#')
|
32
|
-
}
|
33
|
-
end
|
34
|
-
|
35
|
-
end
|
data/test/expression/test_set.rb
DELETED
@@ -1,84 +0,0 @@
|
|
1
|
-
require File.expand_path("../../helpers", __FILE__)
|
2
|
-
|
3
|
-
class ExpressionSet < Test::Unit::TestCase
|
4
|
-
|
5
|
-
def test_expression_set_expand_members_digit
|
6
|
-
set = RP.parse('[\d]').first
|
7
|
-
|
8
|
-
assert_equal ['0-9'], set.expand_members
|
9
|
-
assert_equal ['\p{Digit}'], set.expand_members(true)
|
10
|
-
end
|
11
|
-
|
12
|
-
def test_expression_set_expand_members_nondigit
|
13
|
-
set = RP.parse('[\D]').first
|
14
|
-
|
15
|
-
assert_equal ['^0-9'], set.expand_members
|
16
|
-
assert_equal ['\P{Digit}'], set.expand_members(true)
|
17
|
-
end
|
18
|
-
|
19
|
-
def test_expression_set_expand_members_word
|
20
|
-
set = RP.parse('[\w]').first
|
21
|
-
|
22
|
-
assert_equal ['A-Za-z0-9_'], set.expand_members
|
23
|
-
assert_equal ['\p{Word}'], set.expand_members(true)
|
24
|
-
end
|
25
|
-
|
26
|
-
def test_expression_set_expand_members_nonword
|
27
|
-
set = RP.parse('[\W]').first
|
28
|
-
|
29
|
-
assert_equal ['^A-Za-z0-9_'], set.expand_members
|
30
|
-
assert_equal ['\P{Word}'], set.expand_members(true)
|
31
|
-
end
|
32
|
-
|
33
|
-
def test_expression_set_expand_members_space
|
34
|
-
set = RP.parse('[\s]').first
|
35
|
-
|
36
|
-
assert_equal [' \t\f\v\n\r'], set.expand_members
|
37
|
-
assert_equal ['\p{Space}'], set.expand_members(true)
|
38
|
-
end
|
39
|
-
|
40
|
-
def test_expression_set_expand_members_nonspace
|
41
|
-
set = RP.parse('[\S]').first
|
42
|
-
|
43
|
-
assert_equal ['^ \t\f\v\n\r'], set.expand_members
|
44
|
-
assert_equal ['\P{Space}'], set.expand_members(true)
|
45
|
-
end
|
46
|
-
|
47
|
-
def test_expression_set_expand_members_xdigit
|
48
|
-
set = RP.parse('[\h]').first
|
49
|
-
|
50
|
-
assert_equal ['0-9A-Fa-f'], set.expand_members
|
51
|
-
assert_equal ['\p{Xdigit}'], set.expand_members(true)
|
52
|
-
end
|
53
|
-
|
54
|
-
def test_expression_set_expand_members_nonxdigit
|
55
|
-
set = RP.parse('[\H]').first
|
56
|
-
|
57
|
-
assert_equal ['^0-9A-Fa-f'], set.expand_members
|
58
|
-
assert_equal ['\P{Xdigit}'], set.expand_members(true)
|
59
|
-
end
|
60
|
-
|
61
|
-
def test_expression_set_include
|
62
|
-
set = RP.parse('[ac-eh\s[:digit:]\x20[b]]').first
|
63
|
-
|
64
|
-
assert set.include?('a')
|
65
|
-
assert set.include?('a', true)
|
66
|
-
assert set.include?('c-e')
|
67
|
-
assert set.include?('h')
|
68
|
-
assert set.include?('\s')
|
69
|
-
assert set.include?('[:digit:]')
|
70
|
-
assert set.include?('\x20')
|
71
|
-
|
72
|
-
assert set.include?('b')
|
73
|
-
refute set.include?('b', true) # should not include b directly
|
74
|
-
|
75
|
-
refute set.include?(']')
|
76
|
-
refute set.include?('[')
|
77
|
-
refute set.include?('x')
|
78
|
-
refute set.include?('\S')
|
79
|
-
|
80
|
-
subset = set.last
|
81
|
-
assert subset.include?('b')
|
82
|
-
refute subset.include?('a')
|
83
|
-
end
|
84
|
-
end
|
@@ -1,230 +0,0 @@
|
|
1
|
-
require File.expand_path("../../helpers", __FILE__)
|
2
|
-
|
3
|
-
class Expressionstrfregexp < Test::Unit::TestCase
|
4
|
-
|
5
|
-
def test_expression_strfre_alias
|
6
|
-
assert_equal true, RP.parse(/a/).respond_to?(:strfre)
|
7
|
-
end
|
8
|
-
|
9
|
-
def test_expression_strfregexp_level
|
10
|
-
root = RP.parse(/a(b(c))/)
|
11
|
-
|
12
|
-
assert_equal 'root', root.strfregexp('%l')
|
13
|
-
|
14
|
-
a = root.first
|
15
|
-
assert_equal '%0', a.strfregexp('%%l')
|
16
|
-
|
17
|
-
b = root[1].first
|
18
|
-
assert_equal '<1>', b.strfregexp('<%l>')
|
19
|
-
|
20
|
-
c = root[1][1].first
|
21
|
-
assert_equal '[at: 2]', c.strfregexp('[at: %l]')
|
22
|
-
end
|
23
|
-
|
24
|
-
def test_expression_strfregexp_start_end
|
25
|
-
root = RP.parse(/a(b(c))/)
|
26
|
-
|
27
|
-
assert_equal '0', root.strfregexp('%s')
|
28
|
-
assert_equal '7', root.strfregexp('%e')
|
29
|
-
|
30
|
-
a = root.first
|
31
|
-
assert_equal '%0', a.strfregexp('%%s')
|
32
|
-
assert_equal '1', a.strfregexp('%e')
|
33
|
-
|
34
|
-
group_1 = root[1]
|
35
|
-
assert_equal 'GRP:1', group_1.strfregexp('GRP:%s')
|
36
|
-
assert_equal '7', group_1.strfregexp('%e')
|
37
|
-
|
38
|
-
b = group_1.first
|
39
|
-
assert_equal '<@2>', b.strfregexp('<@%s>')
|
40
|
-
assert_equal '3', b.strfregexp('%e')
|
41
|
-
|
42
|
-
c = group_1.last.first
|
43
|
-
assert_equal '[at: 4]', c.strfregexp('[at: %s]')
|
44
|
-
assert_equal '5', c.strfregexp('%e')
|
45
|
-
end
|
46
|
-
|
47
|
-
def test_expression_strfregexp_length
|
48
|
-
root = RP.parse(/a[b]c/)
|
49
|
-
|
50
|
-
assert_equal '5', root.strfregexp('%S')
|
51
|
-
|
52
|
-
a = root.first
|
53
|
-
assert_equal '1', a.strfregexp('%S')
|
54
|
-
|
55
|
-
set = root[1]
|
56
|
-
assert_equal '3', set.strfregexp('%S')
|
57
|
-
end
|
58
|
-
|
59
|
-
def test_expression_strfregexp_coded_offset
|
60
|
-
root = RP.parse(/a[b]c/)
|
61
|
-
|
62
|
-
assert_equal '@0+5', root.strfregexp('%o')
|
63
|
-
|
64
|
-
a = root.first
|
65
|
-
assert_equal '@0+1', a.strfregexp('%o')
|
66
|
-
|
67
|
-
set = root[1]
|
68
|
-
assert_equal '@1+3', set.strfregexp('%o')
|
69
|
-
end
|
70
|
-
|
71
|
-
def test_expression_strfregexp_type_token
|
72
|
-
root = RP.parse(/a[b](c)/)
|
73
|
-
|
74
|
-
assert_equal 'expression', root.strfregexp('%y')
|
75
|
-
assert_equal 'root', root.strfregexp('%k')
|
76
|
-
assert_equal 'expression:root', root.strfregexp('%i')
|
77
|
-
assert_equal 'Regexp::Expression::Root', root.strfregexp('%c')
|
78
|
-
|
79
|
-
a = root.first
|
80
|
-
assert_equal 'literal', a.strfregexp('%y')
|
81
|
-
assert_equal 'literal', a.strfregexp('%k')
|
82
|
-
assert_equal 'literal:literal', a.strfregexp('%i')
|
83
|
-
assert_equal 'Regexp::Expression::Literal', a.strfregexp('%c')
|
84
|
-
|
85
|
-
set = root[1]
|
86
|
-
assert_equal 'set', set.strfregexp('%y')
|
87
|
-
assert_equal 'character', set.strfregexp('%k')
|
88
|
-
assert_equal 'set:character', set.strfregexp('%i')
|
89
|
-
assert_equal 'Regexp::Expression::CharacterSet', set.strfregexp('%c')
|
90
|
-
|
91
|
-
group = root.last
|
92
|
-
assert_equal 'group', group.strfregexp('%y')
|
93
|
-
assert_equal 'capture', group.strfregexp('%k')
|
94
|
-
assert_equal 'group:capture', group.strfregexp('%i')
|
95
|
-
assert_equal 'Regexp::Expression::Group::Capture', group.strfregexp('%c')
|
96
|
-
end
|
97
|
-
|
98
|
-
def test_expression_strfregexp_quantifier
|
99
|
-
root = RP.parse(/a+[b](c)?d{3,4}/)
|
100
|
-
|
101
|
-
assert_equal '{1}', root.strfregexp('%q')
|
102
|
-
assert_equal '', root.strfregexp('%Q')
|
103
|
-
assert_equal '1, 1', root.strfregexp('%z, %Z')
|
104
|
-
|
105
|
-
a = root.first
|
106
|
-
assert_equal '{1, or-more}', a.strfregexp('%q')
|
107
|
-
assert_equal '+', a.strfregexp('%Q')
|
108
|
-
assert_equal '1, -1', a.strfregexp('%z, %Z')
|
109
|
-
|
110
|
-
set = root[1]
|
111
|
-
assert_equal '{1}', set.strfregexp('%q')
|
112
|
-
assert_equal '', set.strfregexp('%Q')
|
113
|
-
assert_equal '1, 1', set.strfregexp('%z, %Z')
|
114
|
-
|
115
|
-
group = root[2]
|
116
|
-
assert_equal '{0, 1}', group.strfregexp('%q')
|
117
|
-
assert_equal '?', group.strfregexp('%Q')
|
118
|
-
assert_equal '0, 1', group.strfregexp('%z, %Z')
|
119
|
-
|
120
|
-
d = root.last
|
121
|
-
assert_equal '{3, 4}', d.strfregexp('%q')
|
122
|
-
assert_equal '{3,4}', d.strfregexp('%Q')
|
123
|
-
assert_equal '3, 4', d.strfregexp('%z, %Z')
|
124
|
-
end
|
125
|
-
|
126
|
-
def test_expression_strfregexp_text
|
127
|
-
root = RP.parse(/a(b(c))|[d-gk-p]+/)
|
128
|
-
|
129
|
-
assert_equal 'a(b(c))|[d-gk-p]+', root.strfregexp('%t')
|
130
|
-
assert_equal 'expression:root', root.strfregexp('%~t')
|
131
|
-
|
132
|
-
alt = root.first
|
133
|
-
assert_equal 'a(b(c))|[d-gk-p]+', alt.strfregexp('%t')
|
134
|
-
assert_equal 'a(b(c))|[d-gk-p]+', alt.strfregexp('%T')
|
135
|
-
assert_equal 'meta:alternation', alt.strfregexp('%~t')
|
136
|
-
|
137
|
-
seq_1 = alt.first
|
138
|
-
assert_equal 'a(b(c))', seq_1.strfregexp('%t')
|
139
|
-
assert_equal 'a(b(c))', seq_1.strfregexp('%T')
|
140
|
-
assert_equal 'expression:sequence', seq_1.strfregexp('%~t')
|
141
|
-
|
142
|
-
group = seq_1[1]
|
143
|
-
assert_equal '(b(c))', group.strfregexp('%t')
|
144
|
-
assert_equal '(b(c))', group.strfregexp('%T')
|
145
|
-
assert_equal 'group:capture', group.strfregexp('%~t')
|
146
|
-
|
147
|
-
seq_2 = alt.last
|
148
|
-
assert_equal '[d-gk-p]+', seq_2.strfregexp('%t')
|
149
|
-
assert_equal '[d-gk-p]+', seq_2.strfregexp('%T')
|
150
|
-
|
151
|
-
set = seq_2.first
|
152
|
-
assert_equal '[d-gk-p]', set.strfregexp('%t')
|
153
|
-
assert_equal '[d-gk-p]+', set.strfregexp('%T')
|
154
|
-
assert_equal 'set:character', set.strfregexp('%~t')
|
155
|
-
end
|
156
|
-
|
157
|
-
def test_expression_strfregexp_combined
|
158
|
-
root = RP.parse(/a{5}|[b-d]+/)
|
159
|
-
|
160
|
-
assert_equal '@0+11 expression:root', root.strfregexp('%b')
|
161
|
-
assert_equal root.strfregexp('%o %i'), root.strfregexp('%b')
|
162
|
-
|
163
|
-
assert_equal '@0+11 expression:root {1}', root.strfregexp('%m')
|
164
|
-
assert_equal root.strfregexp('%b %q'), root.strfregexp('%m')
|
165
|
-
|
166
|
-
assert_equal '@0+11 expression:root {1} a{5}|[b-d]+', root.strfregexp('%a')
|
167
|
-
assert_equal root.strfregexp('%m %t'), root.strfregexp('%a')
|
168
|
-
end
|
169
|
-
|
170
|
-
# regression test
|
171
|
-
def test_expression_strfregexp_conditional
|
172
|
-
root = RP.parse('(?<A>a)(?(<A>)b|c)', 'ruby/2.0')
|
173
|
-
|
174
|
-
assert_nothing_raised { root.strfregexp }
|
175
|
-
end
|
176
|
-
|
177
|
-
def test_expression_strfregexp_tree
|
178
|
-
root = RP.parse(/a[b-d]*(e(f+))?/)
|
179
|
-
|
180
|
-
assert_equal(
|
181
|
-
"@0+15 expression:root\n" +
|
182
|
-
" @0+1 a\n" +
|
183
|
-
" @1+6 set:character\n" +
|
184
|
-
" @2+3 set:range\n" +
|
185
|
-
" @2+1 b\n" +
|
186
|
-
" @4+1 d\n" +
|
187
|
-
" @7+8 group:capture\n" +
|
188
|
-
" @8+1 e\n" +
|
189
|
-
" @9+4 group:capture\n" +
|
190
|
-
" @10+2 f+",
|
191
|
-
root.strfregexp_tree('%>%o %~t')
|
192
|
-
)
|
193
|
-
end
|
194
|
-
|
195
|
-
def test_expression_strfregexp_tree_separator
|
196
|
-
root = RP.parse(/a[b-d]*(e(f+))?/)
|
197
|
-
|
198
|
-
assert_equal(
|
199
|
-
"@0+15 expression:root-SEP-" +
|
200
|
-
" @0+1 a-SEP-" +
|
201
|
-
" @1+6 set:character-SEP-" +
|
202
|
-
" @2+3 set:range-SEP-" +
|
203
|
-
" @2+1 b-SEP-" +
|
204
|
-
" @4+1 d-SEP-" +
|
205
|
-
" @7+8 group:capture-SEP-" +
|
206
|
-
" @8+1 e-SEP-" +
|
207
|
-
" @9+4 group:capture-SEP-" +
|
208
|
-
" @10+2 f+",
|
209
|
-
root.strfregexp_tree('%>%o %~t', true, '-SEP-')
|
210
|
-
)
|
211
|
-
end
|
212
|
-
|
213
|
-
def test_expression_strfregexp_tree_exclude_self
|
214
|
-
root = RP.parse(/a[b-d]*(e(f+))?/)
|
215
|
-
|
216
|
-
assert_equal(
|
217
|
-
"@0+1 a\n" +
|
218
|
-
"@1+6 set:character\n" +
|
219
|
-
" @2+3 set:range\n" +
|
220
|
-
" @2+1 b\n" +
|
221
|
-
" @4+1 d\n" +
|
222
|
-
"@7+8 group:capture\n" +
|
223
|
-
" @8+1 e\n" +
|
224
|
-
" @9+4 group:capture\n" +
|
225
|
-
" @10+2 f+",
|
226
|
-
root.strfregexp_tree('%>%o %~t', false)
|
227
|
-
)
|
228
|
-
end
|
229
|
-
|
230
|
-
end
|