regexp_parser 1.0.0 → 1.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/CHANGELOG.md +60 -30
- data/README.md +29 -29
- data/lib/regexp_parser/expression.rb +5 -4
- data/lib/regexp_parser/expression/classes/conditional.rb +27 -23
- data/lib/regexp_parser/expression/classes/group.rb +3 -1
- data/lib/regexp_parser/expression/classes/root.rb +17 -5
- data/lib/regexp_parser/expression/methods/traverse.rb +0 -1
- data/lib/regexp_parser/expression/quantifier.rb +11 -2
- data/lib/regexp_parser/expression/sequence.rb +37 -13
- data/lib/regexp_parser/expression/sequence_operation.rb +1 -6
- data/lib/regexp_parser/expression/subexpression.rb +15 -4
- data/lib/regexp_parser/parser.rb +19 -10
- data/lib/regexp_parser/scanner.rb +8 -8
- data/lib/regexp_parser/scanner/scanner.rl +8 -8
- data/lib/regexp_parser/version.rb +1 -1
- data/test/expression/test_subexpression.rb +9 -0
- data/test/lexer/test_refcalls.rb +3 -0
- data/test/parser/test_all.rb +3 -3
- data/test/parser/test_conditionals.rb +47 -10
- data/test/parser/test_groups.rb +22 -0
- data/test/parser/test_quantifiers.rb +43 -1
- data/test/parser/test_refcalls.rb +36 -20
- data/test/scanner/test_all.rb +4 -4
- data/test/scanner/test_refcalls.rb +3 -2
- metadata +2 -2
data/test/parser/test_groups.rb
CHANGED
@@ -19,6 +19,9 @@ class TestParserGroups < Test::Unit::TestCase
|
|
19
19
|
assert_equal true, t.expressions[0].m?
|
20
20
|
assert_equal false, t.expressions[0].i?
|
21
21
|
assert_equal false, t.expressions[0].x?
|
22
|
+
|
23
|
+
assert_equal true, t.expressions[0].option_changes[:m]
|
24
|
+
assert_equal nil, t.expressions[0].option_changes[:i]
|
22
25
|
end
|
23
26
|
|
24
27
|
def test_parse_self_defeating_option_group
|
@@ -27,6 +30,9 @@ class TestParserGroups < Test::Unit::TestCase
|
|
27
30
|
assert_equal false, t.expressions[0].m?
|
28
31
|
assert_equal false, t.expressions[0].i?
|
29
32
|
assert_equal false, t.expressions[0].x?
|
33
|
+
|
34
|
+
assert_equal false, t.expressions[0].option_changes[:m]
|
35
|
+
assert_equal nil, t.expressions[0].option_changes[:i]
|
30
36
|
end
|
31
37
|
|
32
38
|
def test_parse_nested_options_activate_one
|
@@ -39,6 +45,10 @@ class TestParserGroups < Test::Unit::TestCase
|
|
39
45
|
assert_equal true, t.expressions[0].expressions[1].m?
|
40
46
|
assert_equal false, t.expressions[0].expressions[1].i?
|
41
47
|
assert_equal true, t.expressions[0].expressions[1].x?
|
48
|
+
|
49
|
+
assert_equal true, t.expressions[0].expressions[1].option_changes[:m]
|
50
|
+
assert_equal nil, t.expressions[0].expressions[1].option_changes[:i]
|
51
|
+
assert_equal nil, t.expressions[0].expressions[1].option_changes[:x]
|
42
52
|
end
|
43
53
|
|
44
54
|
def test_parse_nested_options_deactivate_one
|
@@ -51,6 +61,10 @@ class TestParserGroups < Test::Unit::TestCase
|
|
51
61
|
assert_equal false, t.expressions[0].expressions[1].m?
|
52
62
|
assert_equal false, t.expressions[0].expressions[1].i?
|
53
63
|
assert_equal true, t.expressions[0].expressions[1].x?
|
64
|
+
|
65
|
+
assert_equal false, t.expressions[0].expressions[1].option_changes[:i]
|
66
|
+
assert_equal nil, t.expressions[0].expressions[1].option_changes[:m]
|
67
|
+
assert_equal nil, t.expressions[0].expressions[1].option_changes[:x]
|
54
68
|
end
|
55
69
|
|
56
70
|
def test_parse_nested_options_invert_all
|
@@ -63,6 +77,10 @@ class TestParserGroups < Test::Unit::TestCase
|
|
63
77
|
assert_equal true, t.expressions[0].expressions[1].m?
|
64
78
|
assert_equal false, t.expressions[0].expressions[1].i?
|
65
79
|
assert_equal false, t.expressions[0].expressions[1].x?
|
80
|
+
|
81
|
+
assert_equal true, t.expressions[0].expressions[1].option_changes[:m]
|
82
|
+
assert_equal false, t.expressions[0].expressions[1].option_changes[:i]
|
83
|
+
assert_equal false, t.expressions[0].expressions[1].option_changes[:x]
|
66
84
|
end
|
67
85
|
|
68
86
|
def test_parse_nested_options_affect_literal_subexpressions
|
@@ -88,6 +106,10 @@ class TestParserGroups < Test::Unit::TestCase
|
|
88
106
|
assert_equal false, t.expressions[1].m?
|
89
107
|
assert_equal true, t.expressions[1].i?
|
90
108
|
assert_equal false, t.expressions[1].x?
|
109
|
+
|
110
|
+
assert_equal true, t.expressions[1].option_changes[:i]
|
111
|
+
assert_equal false, t.expressions[1].option_changes[:m]
|
112
|
+
assert_equal nil, t.expressions[1].option_changes[:x]
|
91
113
|
end
|
92
114
|
|
93
115
|
def test_parse_option_switch_affects_following_expressions
|
@@ -12,6 +12,13 @@ class TestRegexpParserQuantifiers < Test::Unit::TestCase
|
|
12
12
|
assert_equal 0, exp.quantifier.min
|
13
13
|
assert_equal 1, exp.quantifier.max
|
14
14
|
assert_equal :greedy, exp.quantifier.mode
|
15
|
+
assert_equal true, exp.quantifier.greedy?
|
16
|
+
assert_equal true, exp.greedy?
|
17
|
+
|
18
|
+
assert_equal false, exp.quantifier.reluctant?
|
19
|
+
assert_equal false, exp.reluctant?
|
20
|
+
assert_equal false, exp.quantifier.possessive?
|
21
|
+
assert_equal false, exp.possessive?
|
15
22
|
end
|
16
23
|
|
17
24
|
def test_parse_zero_or_one_reluctant
|
@@ -23,7 +30,13 @@ class TestRegexpParserQuantifiers < Test::Unit::TestCase
|
|
23
30
|
assert_equal 0, exp.quantifier.min
|
24
31
|
assert_equal 1, exp.quantifier.max
|
25
32
|
assert_equal :reluctant, exp.quantifier.mode
|
33
|
+
assert_equal true, exp.quantifier.reluctant?
|
26
34
|
assert_equal true, exp.reluctant?
|
35
|
+
|
36
|
+
assert_equal false, exp.quantifier.greedy?
|
37
|
+
assert_equal false, exp.greedy?
|
38
|
+
assert_equal false, exp.quantifier.possessive?
|
39
|
+
assert_equal false, exp.possessive?
|
27
40
|
end
|
28
41
|
|
29
42
|
def test_parse_zero_or_one_possessive
|
@@ -35,7 +48,13 @@ class TestRegexpParserQuantifiers < Test::Unit::TestCase
|
|
35
48
|
assert_equal 0, exp.quantifier.min
|
36
49
|
assert_equal 1, exp.quantifier.max
|
37
50
|
assert_equal :possessive, exp.quantifier.mode
|
51
|
+
assert_equal true, exp.quantifier.possessive?
|
38
52
|
assert_equal true, exp.possessive?
|
53
|
+
|
54
|
+
assert_equal false, exp.quantifier.greedy?
|
55
|
+
assert_equal false, exp.greedy?
|
56
|
+
assert_equal false, exp.quantifier.reluctant?
|
57
|
+
assert_equal false, exp.reluctant?
|
39
58
|
end
|
40
59
|
|
41
60
|
# *: zero-or-more
|
@@ -48,6 +67,8 @@ class TestRegexpParserQuantifiers < Test::Unit::TestCase
|
|
48
67
|
assert_equal 0, exp.quantifier.min
|
49
68
|
assert_equal(-1, exp.quantifier.max)
|
50
69
|
assert_equal :greedy, exp.quantifier.mode
|
70
|
+
assert_equal true, exp.quantifier.greedy?
|
71
|
+
assert_equal true, exp.greedy?
|
51
72
|
end
|
52
73
|
|
53
74
|
def test_parse_zero_or_more_reluctant
|
@@ -59,6 +80,7 @@ class TestRegexpParserQuantifiers < Test::Unit::TestCase
|
|
59
80
|
assert_equal 0, exp.quantifier.min
|
60
81
|
assert_equal(-1, exp.quantifier.max)
|
61
82
|
assert_equal :reluctant, exp.quantifier.mode
|
83
|
+
assert_equal true, exp.quantifier.reluctant?
|
62
84
|
assert_equal true, exp.reluctant?
|
63
85
|
end
|
64
86
|
|
@@ -71,6 +93,7 @@ class TestRegexpParserQuantifiers < Test::Unit::TestCase
|
|
71
93
|
assert_equal 0, exp.quantifier.min
|
72
94
|
assert_equal(-1, exp.quantifier.max)
|
73
95
|
assert_equal :possessive, exp.quantifier.mode
|
96
|
+
assert_equal true, exp.quantifier.possessive?
|
74
97
|
assert_equal true, exp.possessive?
|
75
98
|
end
|
76
99
|
|
@@ -84,6 +107,8 @@ class TestRegexpParserQuantifiers < Test::Unit::TestCase
|
|
84
107
|
assert_equal 1, exp.quantifier.min
|
85
108
|
assert_equal(-1, exp.quantifier.max)
|
86
109
|
assert_equal :greedy, exp.quantifier.mode
|
110
|
+
assert_equal true, exp.quantifier.greedy?
|
111
|
+
assert_equal true, exp.greedy?
|
87
112
|
end
|
88
113
|
|
89
114
|
def test_parse_one_or_more_reluctant
|
@@ -95,6 +120,7 @@ class TestRegexpParserQuantifiers < Test::Unit::TestCase
|
|
95
120
|
assert_equal 1, exp.quantifier.min
|
96
121
|
assert_equal(-1, exp.quantifier.max)
|
97
122
|
assert_equal :reluctant, exp.quantifier.mode
|
123
|
+
assert_equal true, exp.quantifier.reluctant?
|
98
124
|
assert_equal true, exp.reluctant?
|
99
125
|
end
|
100
126
|
|
@@ -107,6 +133,7 @@ class TestRegexpParserQuantifiers < Test::Unit::TestCase
|
|
107
133
|
assert_equal 1, exp.quantifier.min
|
108
134
|
assert_equal(-1, exp.quantifier.max)
|
109
135
|
assert_equal :possessive, exp.quantifier.mode
|
136
|
+
assert_equal true, exp.quantifier.possessive?
|
110
137
|
assert_equal true, exp.possessive?
|
111
138
|
end
|
112
139
|
|
@@ -120,6 +147,8 @@ class TestRegexpParserQuantifiers < Test::Unit::TestCase
|
|
120
147
|
assert_equal 2, exp.quantifier.min
|
121
148
|
assert_equal 4, exp.quantifier.max
|
122
149
|
assert_equal :greedy, exp.quantifier.mode
|
150
|
+
assert_equal true, exp.quantifier.greedy?
|
151
|
+
assert_equal true, exp.greedy?
|
123
152
|
end
|
124
153
|
|
125
154
|
def test_parse_intervals_min_max_reluctant
|
@@ -131,6 +160,7 @@ class TestRegexpParserQuantifiers < Test::Unit::TestCase
|
|
131
160
|
assert_equal 3, exp.quantifier.min
|
132
161
|
assert_equal 5, exp.quantifier.max
|
133
162
|
assert_equal :reluctant, exp.quantifier.mode
|
163
|
+
assert_equal true, exp.quantifier.reluctant?
|
134
164
|
assert_equal true, exp.reluctant?
|
135
165
|
end
|
136
166
|
|
@@ -143,6 +173,7 @@ class TestRegexpParserQuantifiers < Test::Unit::TestCase
|
|
143
173
|
assert_equal 2, exp.quantifier.min
|
144
174
|
assert_equal 4, exp.quantifier.max
|
145
175
|
assert_equal :possessive, exp.quantifier.mode
|
176
|
+
assert_equal true, exp.quantifier.possessive?
|
146
177
|
assert_equal true, exp.possessive?
|
147
178
|
end
|
148
179
|
|
@@ -156,6 +187,8 @@ class TestRegexpParserQuantifiers < Test::Unit::TestCase
|
|
156
187
|
assert_equal 2, exp.quantifier.min
|
157
188
|
assert_equal(-1, exp.quantifier.max)
|
158
189
|
assert_equal :greedy, exp.quantifier.mode
|
190
|
+
assert_equal true, exp.quantifier.greedy?
|
191
|
+
assert_equal true, exp.greedy?
|
159
192
|
end
|
160
193
|
|
161
194
|
def test_parse_intervals_min_only_reluctant
|
@@ -168,6 +201,7 @@ class TestRegexpParserQuantifiers < Test::Unit::TestCase
|
|
168
201
|
assert_equal 2, exp.quantifier.min
|
169
202
|
assert_equal(-1, exp.quantifier.max)
|
170
203
|
assert_equal :reluctant, exp.quantifier.mode
|
204
|
+
assert_equal true, exp.quantifier.reluctant?
|
171
205
|
assert_equal true, exp.reluctant?
|
172
206
|
end
|
173
207
|
|
@@ -181,6 +215,7 @@ class TestRegexpParserQuantifiers < Test::Unit::TestCase
|
|
181
215
|
assert_equal 3, exp.quantifier.min
|
182
216
|
assert_equal(-1, exp.quantifier.max)
|
183
217
|
assert_equal :possessive, exp.quantifier.mode
|
218
|
+
assert_equal true, exp.quantifier.possessive?
|
184
219
|
assert_equal true, exp.possessive?
|
185
220
|
end
|
186
221
|
|
@@ -194,6 +229,8 @@ class TestRegexpParserQuantifiers < Test::Unit::TestCase
|
|
194
229
|
assert_equal 0, exp.quantifier.min
|
195
230
|
assert_equal 2, exp.quantifier.max
|
196
231
|
assert_equal :greedy, exp.quantifier.mode
|
232
|
+
assert_equal true, exp.quantifier.greedy?
|
233
|
+
assert_equal true, exp.greedy?
|
197
234
|
end
|
198
235
|
|
199
236
|
def test_parse_intervals_max_only_reluctant
|
@@ -205,6 +242,7 @@ class TestRegexpParserQuantifiers < Test::Unit::TestCase
|
|
205
242
|
assert_equal 0, exp.quantifier.min
|
206
243
|
assert_equal 4, exp.quantifier.max
|
207
244
|
assert_equal :reluctant, exp.quantifier.mode
|
245
|
+
assert_equal true, exp.quantifier.reluctant?
|
208
246
|
assert_equal true, exp.reluctant?
|
209
247
|
end
|
210
248
|
|
@@ -217,6 +255,7 @@ class TestRegexpParserQuantifiers < Test::Unit::TestCase
|
|
217
255
|
assert_equal 0, exp.quantifier.min
|
218
256
|
assert_equal 3, exp.quantifier.max
|
219
257
|
assert_equal :possessive, exp.quantifier.mode
|
258
|
+
assert_equal true, exp.quantifier.possessive?
|
220
259
|
assert_equal true, exp.possessive?
|
221
260
|
end
|
222
261
|
|
@@ -230,6 +269,8 @@ class TestRegexpParserQuantifiers < Test::Unit::TestCase
|
|
230
269
|
assert_equal 2, exp.quantifier.min
|
231
270
|
assert_equal 2, exp.quantifier.max
|
232
271
|
assert_equal :greedy, exp.quantifier.mode
|
272
|
+
assert_equal true, exp.quantifier.greedy?
|
273
|
+
assert_equal true, exp.greedy?
|
233
274
|
end
|
234
275
|
|
235
276
|
def test_parse_intervals_exact_reluctant
|
@@ -241,6 +282,7 @@ class TestRegexpParserQuantifiers < Test::Unit::TestCase
|
|
241
282
|
assert_equal 3, exp.quantifier.min
|
242
283
|
assert_equal 3, exp.quantifier.max
|
243
284
|
assert_equal :reluctant, exp.quantifier.mode
|
285
|
+
assert_equal true, exp.quantifier.reluctant?
|
244
286
|
assert_equal true, exp.reluctant?
|
245
287
|
end
|
246
288
|
|
@@ -253,7 +295,7 @@ class TestRegexpParserQuantifiers < Test::Unit::TestCase
|
|
253
295
|
assert_equal 3, exp.quantifier.min
|
254
296
|
assert_equal 3, exp.quantifier.max
|
255
297
|
assert_equal :possessive, exp.quantifier.mode
|
298
|
+
assert_equal true, exp.quantifier.possessive?
|
256
299
|
assert_equal true, exp.possessive?
|
257
300
|
end
|
258
|
-
|
259
301
|
end
|
@@ -3,7 +3,7 @@ require File.expand_path("../../helpers", __FILE__)
|
|
3
3
|
class TestParserRefcalls < Test::Unit::TestCase
|
4
4
|
def test_parse_traditional_number_backref
|
5
5
|
root = RP.parse('(abc)\1', 'ruby/1.9')
|
6
|
-
exp = root
|
6
|
+
exp = root[1]
|
7
7
|
|
8
8
|
assert_instance_of Backreference::Number, exp
|
9
9
|
assert_equal 1, exp.number
|
@@ -11,7 +11,7 @@ class TestParserRefcalls < Test::Unit::TestCase
|
|
11
11
|
|
12
12
|
def test_parse_backref_named_ab
|
13
13
|
root = RP.parse('(?<X>abc)\k<X>', 'ruby/1.9')
|
14
|
-
exp = root
|
14
|
+
exp = root[1]
|
15
15
|
|
16
16
|
assert_instance_of Backreference::Name, exp
|
17
17
|
assert_equal 'X', exp.name
|
@@ -19,7 +19,7 @@ class TestParserRefcalls < Test::Unit::TestCase
|
|
19
19
|
|
20
20
|
def test_parse_backref_named_sq
|
21
21
|
root = RP.parse("(?<X>abc)\\k'X'", 'ruby/1.9')
|
22
|
-
exp = root
|
22
|
+
exp = root[1]
|
23
23
|
|
24
24
|
assert_instance_of Backreference::Name, exp
|
25
25
|
assert_equal 'X', exp.name
|
@@ -27,7 +27,7 @@ class TestParserRefcalls < Test::Unit::TestCase
|
|
27
27
|
|
28
28
|
def test_parse_backref_number_ab
|
29
29
|
root = RP.parse('(abc)\k<1>', 'ruby/1.9')
|
30
|
-
exp = root
|
30
|
+
exp = root[1]
|
31
31
|
|
32
32
|
assert_instance_of Backreference::Number, exp
|
33
33
|
assert_equal 1, exp.number
|
@@ -35,7 +35,7 @@ class TestParserRefcalls < Test::Unit::TestCase
|
|
35
35
|
|
36
36
|
def test_parse_backref_number_sq
|
37
37
|
root = RP.parse("(abc)\\k'1'", 'ruby/1.9')
|
38
|
-
exp = root
|
38
|
+
exp = root[1]
|
39
39
|
|
40
40
|
assert_instance_of Backreference::Number, exp
|
41
41
|
assert_equal 1, exp.number
|
@@ -43,7 +43,7 @@ class TestParserRefcalls < Test::Unit::TestCase
|
|
43
43
|
|
44
44
|
def test_parse_backref_number_relative_ab
|
45
45
|
root = RP.parse('(abc)\k<-1>', 'ruby/1.9')
|
46
|
-
exp = root
|
46
|
+
exp = root[1]
|
47
47
|
|
48
48
|
assert_instance_of Backreference::NumberRelative, exp
|
49
49
|
assert_equal(-1, exp.number)
|
@@ -51,7 +51,7 @@ class TestParserRefcalls < Test::Unit::TestCase
|
|
51
51
|
|
52
52
|
def test_parse_backref_number_relative_sq
|
53
53
|
root = RP.parse("(abc)\\k'-1'", 'ruby/1.9')
|
54
|
-
exp = root
|
54
|
+
exp = root[1]
|
55
55
|
|
56
56
|
assert_instance_of Backreference::NumberRelative, exp
|
57
57
|
assert_equal(-1, exp.number)
|
@@ -59,7 +59,7 @@ class TestParserRefcalls < Test::Unit::TestCase
|
|
59
59
|
|
60
60
|
def test_parse_backref_name_call_ab
|
61
61
|
root = RP.parse('(?<X>abc)\g<X>', 'ruby/1.9')
|
62
|
-
exp = root
|
62
|
+
exp = root[1]
|
63
63
|
|
64
64
|
assert_instance_of Backreference::NameCall, exp
|
65
65
|
assert_equal 'X', exp.name
|
@@ -67,7 +67,7 @@ class TestParserRefcalls < Test::Unit::TestCase
|
|
67
67
|
|
68
68
|
def test_parse_backref_name_call_sq
|
69
69
|
root = RP.parse("(?<X>abc)\\g'X'", 'ruby/1.9')
|
70
|
-
exp = root
|
70
|
+
exp = root[1]
|
71
71
|
|
72
72
|
assert_instance_of Backreference::NameCall, exp
|
73
73
|
assert_equal 'X', exp.name
|
@@ -75,7 +75,7 @@ class TestParserRefcalls < Test::Unit::TestCase
|
|
75
75
|
|
76
76
|
def test_parse_backref_number_call_ab
|
77
77
|
root = RP.parse('(abc)\g<1>', 'ruby/1.9')
|
78
|
-
exp = root
|
78
|
+
exp = root[1]
|
79
79
|
|
80
80
|
assert_instance_of Backreference::NumberCall, exp
|
81
81
|
assert_equal 1, exp.number
|
@@ -83,7 +83,7 @@ class TestParserRefcalls < Test::Unit::TestCase
|
|
83
83
|
|
84
84
|
def test_parse_backref_number_call_sq
|
85
85
|
root = RP.parse("(abc)\\g'1'", 'ruby/1.9')
|
86
|
-
exp = root
|
86
|
+
exp = root[1]
|
87
87
|
|
88
88
|
assert_instance_of Backreference::NumberCall, exp
|
89
89
|
assert_equal 1, exp.number
|
@@ -91,7 +91,7 @@ class TestParserRefcalls < Test::Unit::TestCase
|
|
91
91
|
|
92
92
|
def test_parse_backref_number_relative_call_ab
|
93
93
|
root = RP.parse('(abc)\g<-1>', 'ruby/1.9')
|
94
|
-
exp = root
|
94
|
+
exp = root[1]
|
95
95
|
|
96
96
|
assert_instance_of Backreference::NumberCallRelative, exp
|
97
97
|
assert_equal(-1, exp.number)
|
@@ -99,15 +99,31 @@ class TestParserRefcalls < Test::Unit::TestCase
|
|
99
99
|
|
100
100
|
def test_parse_backref_number_relative_call_sq
|
101
101
|
root = RP.parse("(abc)\\g'-1'", 'ruby/1.9')
|
102
|
-
exp = root
|
102
|
+
exp = root[1]
|
103
103
|
|
104
104
|
assert_instance_of Backreference::NumberCallRelative, exp
|
105
105
|
assert_equal(-1, exp.number)
|
106
106
|
end
|
107
107
|
|
108
|
+
def test_parse_backref_number_relative_forward_call_ab
|
109
|
+
root = RP.parse('\g<+1>(abc)', 'ruby/1.9')
|
110
|
+
exp = root[0]
|
111
|
+
|
112
|
+
assert_instance_of Backreference::NumberCallRelative, exp
|
113
|
+
assert_equal 1, exp.number
|
114
|
+
end
|
115
|
+
|
116
|
+
def test_parse_backref_number_relative_forward_call_sq
|
117
|
+
root = RP.parse("\\g'+1'(abc)", 'ruby/1.9')
|
118
|
+
exp = root[0]
|
119
|
+
|
120
|
+
assert_instance_of Backreference::NumberCallRelative, exp
|
121
|
+
assert_equal 1, exp.number
|
122
|
+
end
|
123
|
+
|
108
124
|
def test_parse_backref_name_recursion_level_ab
|
109
125
|
root = RP.parse('(?<X>abc)\k<X-0>', 'ruby/1.9')
|
110
|
-
exp = root
|
126
|
+
exp = root[1]
|
111
127
|
|
112
128
|
assert_instance_of Backreference::NameRecursionLevel, exp
|
113
129
|
assert_equal 'X', exp.name
|
@@ -116,7 +132,7 @@ class TestParserRefcalls < Test::Unit::TestCase
|
|
116
132
|
|
117
133
|
def test_parse_backref_name_recursion_level_sq
|
118
134
|
root = RP.parse("(?<X>abc)\\k'X-0'", 'ruby/1.9')
|
119
|
-
exp = root
|
135
|
+
exp = root[1]
|
120
136
|
|
121
137
|
assert_instance_of Backreference::NameRecursionLevel, exp
|
122
138
|
assert_equal 'X', exp.name
|
@@ -125,7 +141,7 @@ class TestParserRefcalls < Test::Unit::TestCase
|
|
125
141
|
|
126
142
|
def test_parse_backref_number_recursion_level_ab
|
127
143
|
root = RP.parse('(abc)\k<1-0>', 'ruby/1.9')
|
128
|
-
exp = root
|
144
|
+
exp = root[1]
|
129
145
|
|
130
146
|
assert_instance_of Backreference::NumberRecursionLevel, exp
|
131
147
|
assert_equal 1, exp.number
|
@@ -134,7 +150,7 @@ class TestParserRefcalls < Test::Unit::TestCase
|
|
134
150
|
|
135
151
|
def test_parse_backref_number_recursion_level_sq
|
136
152
|
root = RP.parse("(abc)\\k'1-0'", 'ruby/1.9')
|
137
|
-
exp = root
|
153
|
+
exp = root[1]
|
138
154
|
|
139
155
|
assert_instance_of Backreference::NumberRecursionLevel, exp
|
140
156
|
assert_equal 1, exp.number
|
@@ -143,7 +159,7 @@ class TestParserRefcalls < Test::Unit::TestCase
|
|
143
159
|
|
144
160
|
def test_parse_backref_negative_number_recursion_level
|
145
161
|
root = RP.parse("(abc)\\k'-1+0'", 'ruby/1.9')
|
146
|
-
exp = root
|
162
|
+
exp = root[1]
|
147
163
|
|
148
164
|
assert_instance_of Backreference::NumberRecursionLevel, exp
|
149
165
|
assert_equal(-1, exp.number)
|
@@ -152,7 +168,7 @@ class TestParserRefcalls < Test::Unit::TestCase
|
|
152
168
|
|
153
169
|
def test_parse_backref_number_positive_recursion_level
|
154
170
|
root = RP.parse("(abc)\\k'1+1'", 'ruby/1.9')
|
155
|
-
exp = root
|
171
|
+
exp = root[1]
|
156
172
|
|
157
173
|
assert_instance_of Backreference::NumberRecursionLevel, exp
|
158
174
|
assert_equal 1, exp.number
|
@@ -161,7 +177,7 @@ class TestParserRefcalls < Test::Unit::TestCase
|
|
161
177
|
|
162
178
|
def test_parse_backref_number_negative_recursion_level
|
163
179
|
root = RP.parse("(abc)\\k'1-1'", 'ruby/1.9')
|
164
|
-
exp = root
|
180
|
+
exp = root[1]
|
165
181
|
|
166
182
|
assert_instance_of Backreference::NumberRecursionLevel, exp
|
167
183
|
assert_equal 1, exp.number
|
data/test/scanner/test_all.rb
CHANGED
@@ -1,9 +1,9 @@
|
|
1
1
|
require File.expand_path("../../helpers", __FILE__)
|
2
2
|
|
3
|
-
%w
|
4
|
-
anchors errors escapes free_space groups literals
|
5
|
-
|
6
|
-
|
3
|
+
%w[
|
4
|
+
anchors errors escapes free_space groups literals meta
|
5
|
+
properties quantifiers refcalls scripts sets types unicode_blocks
|
6
|
+
].each do |tc|
|
7
7
|
require File.expand_path("../test_#{tc}", __FILE__)
|
8
8
|
end
|
9
9
|
|
@@ -1,7 +1,6 @@
|
|
1
1
|
require File.expand_path("../../helpers", __FILE__)
|
2
2
|
|
3
3
|
class ScannerRefCalls < Test::Unit::TestCase
|
4
|
-
|
5
4
|
tests = {
|
6
5
|
# Traditional numerical group back-reference
|
7
6
|
'(abc)\1' => [3, :backref, :number, '\1', 5, 7],
|
@@ -26,6 +25,9 @@ class ScannerRefCalls < Test::Unit::TestCase
|
|
26
25
|
'(abc)\g<-1>' => [3, :backref, :number_rel_call_ab, '\g<-1>', 5, 11],
|
27
26
|
"(abc)\\g'-1'" => [3, :backref, :number_rel_call_sq, "\\g'-1'", 5, 11],
|
28
27
|
|
28
|
+
'\g<+1>(abc)' => [0, :backref, :number_rel_call_ab, '\g<+1>', 0, 6],
|
29
|
+
"\\g'+1'(abc)" => [0, :backref, :number_rel_call_sq, "\\g'+1'", 0, 6],
|
30
|
+
|
29
31
|
# Group back-references, with recursion level
|
30
32
|
'(?<X>abc)\k<X-0>' => [3, :backref, :name_recursion_ref_ab, '\k<X-0>', 9, 16],
|
31
33
|
"(?<X>abc)\\k'X-0'" => [3, :backref, :name_recursion_ref_sq, "\\k'X-0'", 9, 16],
|
@@ -47,5 +49,4 @@ class ScannerRefCalls < Test::Unit::TestCase
|
|
47
49
|
assert_equal text, pattern[ts, te]
|
48
50
|
end
|
49
51
|
end
|
50
|
-
|
51
52
|
end
|