regexp_parser 0.4.6 → 0.4.7

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.
@@ -1,12 +1,20 @@
1
1
  require File.expand_path("../../helpers", __FILE__)
2
2
 
3
3
  class TestParserRefcalls < Test::Unit::TestCase
4
+ def test_parse_traditional_number_backref
5
+ root = RP.parse('(abc)\1', 'ruby/1.9')
6
+ exp = root.expressions.at(1)
7
+
8
+ assert_equal true, exp.is_a?(Backreference::Number)
9
+ assert_equal '1', exp.number
10
+ end
4
11
 
5
12
  def test_parse_backref_named_ab
6
13
  root = RP.parse('(?<X>abc)\k<X>', 'ruby/1.9')
7
14
  exp = root.expressions.at(1)
8
15
 
9
16
  assert_equal true, exp.is_a?(Backreference::Name)
17
+ assert_equal 'X', exp.name
10
18
  end
11
19
 
12
20
  def test_parse_backref_named_sq
@@ -14,6 +22,7 @@ class TestParserRefcalls < Test::Unit::TestCase
14
22
  exp = root.expressions.at(1)
15
23
 
16
24
  assert_equal true, exp.is_a?(Backreference::Name)
25
+ assert_equal 'X', exp.name
17
26
  end
18
27
 
19
28
  def test_parse_backref_number_ab
@@ -21,6 +30,7 @@ class TestParserRefcalls < Test::Unit::TestCase
21
30
  exp = root.expressions.at(1)
22
31
 
23
32
  assert_equal true, exp.is_a?(Backreference::Number)
33
+ assert_equal '1', exp.number
24
34
  end
25
35
 
26
36
  def test_parse_backref_number_sq
@@ -28,6 +38,7 @@ class TestParserRefcalls < Test::Unit::TestCase
28
38
  exp = root.expressions.at(1)
29
39
 
30
40
  assert_equal true, exp.is_a?(Backreference::Number)
41
+ assert_equal '1', exp.number
31
42
  end
32
43
 
33
44
  def test_parse_backref_number_relative_ab
@@ -35,6 +46,7 @@ class TestParserRefcalls < Test::Unit::TestCase
35
46
  exp = root.expressions.at(1)
36
47
 
37
48
  assert_equal true, exp.is_a?(Backreference::NumberRelative)
49
+ assert_equal '-1', exp.number
38
50
  end
39
51
 
40
52
  def test_parse_backref_number_relative_sq
@@ -42,6 +54,7 @@ class TestParserRefcalls < Test::Unit::TestCase
42
54
  exp = root.expressions.at(1)
43
55
 
44
56
  assert_equal true, exp.is_a?(Backreference::NumberRelative)
57
+ assert_equal '-1', exp.number
45
58
  end
46
59
 
47
60
  def test_parse_backref_name_call_ab
@@ -154,4 +154,47 @@ class ScannerFreeSpace < Test::Unit::TestCase
154
154
  end
155
155
  end
156
156
 
157
+ def test_scan_free_space_switch_groups
158
+ # Matches 'a bcde f g hi j'
159
+ regexp = /(a (b((?x) (c d) ((?-x)(e f) )g) h)i j)/
160
+ tokens = RS.scan(regexp)
161
+ [
162
+ [ 0, :group, :capture, '(', 0, 1],
163
+ [ 1, :literal, :literal, 'a ', 1, 3],
164
+ [ 2, :group, :capture, '(', 3, 4],
165
+ [ 3, :literal, :literal, 'b', 4, 5],
166
+ [ 4, :group, :capture, '(', 5, 6],
167
+ [ 5, :group, :options, '(?x', 6, 9],
168
+ [ 6, :group, :close, ')', 9, 10],
169
+ [ 7, :free_space, :whitespace, ' ', 10, 11],
170
+ [ 8, :group, :capture, '(', 11, 12],
171
+ [ 9, :literal, :literal, 'c', 12, 13],
172
+ [10, :free_space, :whitespace, ' ', 13, 14],
173
+ [11, :literal, :literal, 'd', 14, 15],
174
+ [12, :group, :close, ')', 15, 16],
175
+ [13, :free_space, :whitespace, ' ', 16, 17],
176
+ [14, :group, :capture, '(', 17, 18],
177
+ [15, :group, :options, '(?-x', 18, 22],
178
+ [16, :group, :close, ')', 22, 23],
179
+ [17, :group, :capture, '(', 23, 24],
180
+ [18, :literal, :literal, 'e f', 24, 27],
181
+ [19, :group, :close, ')', 27, 28],
182
+ [20, :literal, :literal, ' ', 28, 29],
183
+ [21, :group, :close, ')', 29, 30],
184
+ [22, :literal, :literal, 'g', 30, 31],
185
+ [23, :group, :close, ')', 31, 32],
186
+ [24, :literal, :literal, ' h', 32, 34],
187
+ [25, :group, :close, ')', 34, 35],
188
+ [26, :literal, :literal, 'i j', 35, 38],
189
+ [27, :group, :close, ')', 38, 39]
190
+ ].each do |index, type, token, text, ts, te|
191
+ result = tokens[index]
192
+
193
+ assert_equal type, result[0]
194
+ assert_equal token, result[1]
195
+ assert_equal text, result[2]
196
+ assert_equal ts, result[3]
197
+ assert_equal te, result[4]
198
+ end
199
+ end
157
200
  end
@@ -3,6 +3,9 @@ require File.expand_path("../../helpers", __FILE__)
3
3
  class ScannerRefCalls < Test::Unit::TestCase
4
4
 
5
5
  tests = {
6
+ # Traditional numerical group back-reference
7
+ '(abc)\1' => [3, :backref, :number, '\1', 5, 7],
8
+
6
9
  # Group back-references, named, numbered, and relative
7
10
  '(?<X>abc)\k<X>' => [3, :backref, :name_ref_ab, '\k<X>', 9, 14],
8
11
  "(?<X>abc)\\k'X'" => [3, :backref, :name_ref_sq, "\\k'X'", 9, 14],
@@ -23,7 +23,7 @@ class TestSyntaxRuby_V18 < Test::Unit::TestCase
23
23
  :assertion => [Assertion::Lookbehind].flatten,
24
24
 
25
25
  :backref => [
26
- Backreference::All + SubexpressionCall::All
26
+ Backreference::All - [:number] + SubexpressionCall::All
27
27
  ].flatten,
28
28
 
29
29
  :quantifier => [
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: regexp_parser
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.4.6
4
+ version: 0.4.7
5
5
  platform: ruby
6
6
  authors:
7
7
  - Ammar Ali
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2017-09-18 00:00:00.000000000 Z
11
+ date: 2017-10-15 00:00:00.000000000 Z
12
12
  dependencies: []
13
13
  description: A library for tokenizing, lexing, and parsing Ruby regular expressions.
14
14
  email:
@@ -197,7 +197,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
197
197
  version: '0'
198
198
  requirements: []
199
199
  rubyforge_project:
200
- rubygems_version: 2.6.11
200
+ rubygems_version: 2.6.13
201
201
  signing_key:
202
202
  specification_version: 4
203
203
  summary: Scanner, lexer, parser for ruby's regular expressions