regexp_parser 0.3.4 → 0.3.5
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 +6 -0
- data/lib/regexp_parser/syntax/ruby/1.9.1.rb +1 -1
- data/lib/regexp_parser/syntax/tokens/escape.rb +2 -0
- data/lib/regexp_parser/version.rb +1 -1
- data/test/expression/test_base.rb +32 -34
- data/test/expression/test_clone.rb +49 -47
- data/test/expression/test_conditionals.rb +40 -40
- data/test/expression/test_free_space.rb +4 -2
- data/test/expression/test_set.rb +16 -16
- data/test/expression/test_strfregexp.rb +74 -74
- data/test/expression/test_subexpression.rb +2 -2
- data/test/expression/test_tests.rb +57 -57
- data/test/expression/test_to_h.rb +11 -6
- data/test/expression/test_to_s.rb +22 -15
- data/test/expression/test_traverse.rb +26 -29
- data/test/lexer/test_all.rb +9 -7
- data/test/lexer/test_conditionals.rb +35 -11
- data/test/lexer/test_keep.rb +6 -6
- data/test/lexer/test_literals.rb +20 -10
- data/test/lexer/test_nesting.rb +14 -7
- data/test/lexer/test_refcalls.rb +12 -5
- data/test/parser/test_all.rb +15 -13
- data/test/parser/test_alternation.rb +29 -26
- data/test/parser/test_anchors.rb +7 -8
- data/test/parser/test_conditionals.rb +43 -41
- data/test/parser/test_escapes.rb +18 -16
- data/test/parser/test_free_space.rb +33 -33
- data/test/parser/test_groups.rb +46 -46
- data/test/parser/test_keep.rb +4 -4
- data/test/parser/test_properties.rb +18 -16
- data/test/parser/test_quantifiers.rb +184 -163
- data/test/parser/test_refcalls.rb +48 -32
- data/test/parser/test_sets.rb +102 -88
- data/test/parser/test_types.rb +7 -8
- data/test/scanner/test_all.rb +6 -4
- data/test/scanner/test_anchors.rb +8 -5
- data/test/scanner/test_conditionals.rb +38 -20
- data/test/scanner/test_escapes.rb +8 -6
- data/test/scanner/test_free_space.rb +89 -65
- data/test/scanner/test_groups.rb +27 -32
- data/test/scanner/test_keep.rb +24 -22
- data/test/scanner/test_literals.rb +11 -7
- data/test/scanner/test_meta.rb +11 -7
- data/test/scanner/test_properties.rb +16 -14
- data/test/scanner/test_quantifiers.rb +8 -9
- data/test/scanner/test_refcalls.rb +26 -23
- data/test/scanner/test_scripts.rb +11 -10
- data/test/scanner/test_sets.rb +8 -5
- data/test/scanner/test_types.rb +17 -15
- data/test/scanner/test_unicode_blocks.rb +11 -10
- data/test/syntax/ruby/test_1.8.rb +4 -8
- data/test/syntax/ruby/test_1.9.1.rb +1 -7
- data/test/syntax/ruby/test_1.9.3.rb +3 -7
- data/test/syntax/ruby/test_2.0.0.rb +1 -7
- data/test/syntax/ruby/test_2.2.0.rb +1 -7
- data/test/token/test_token.rb +29 -31
- metadata +3 -3
@@ -22,13 +22,16 @@ class ScannerAnchors < Test::Unit::TestCase
|
|
22
22
|
"a\\\\Bc" => [1, :escape, :backslash, '\\\\', 1, 3],
|
23
23
|
}
|
24
24
|
|
25
|
-
|
26
|
-
|
27
|
-
define_method "test_scanner_#{test[1]}_#{test[2]}_#{count+=1}" do
|
28
|
-
|
25
|
+
tests.each_with_index do |(pattern, (index, type, token, text, ts, te)), count|
|
26
|
+
define_method "test_scanner_#{type}_#{token}_#{count}" do
|
29
27
|
tokens = RS.scan(pattern)
|
30
|
-
|
28
|
+
result = tokens[index]
|
31
29
|
|
30
|
+
assert_equal type, result[0]
|
31
|
+
assert_equal token, result[1]
|
32
|
+
assert_equal text, result[2]
|
33
|
+
assert_equal ts, result[3]
|
34
|
+
assert_equal te, result[4]
|
32
35
|
end
|
33
36
|
end
|
34
37
|
|
@@ -22,14 +22,16 @@ class ScannerConditionals < Test::Unit::TestCase
|
|
22
22
|
/(?'N'A)(?('N')T|F)/ => [5, :conditional, :condition, "'N'", 10, 13],
|
23
23
|
}
|
24
24
|
|
25
|
-
|
26
|
-
|
27
|
-
define_method "test_scan_#{test[1]}_#{test[2]}_#{count+=1}" do
|
28
|
-
|
25
|
+
tests.each_with_index do |(pattern, (index, type, token, text, ts, te)), count|
|
26
|
+
define_method "test_scanner_#{type}_#{token}_#{count}" do
|
29
27
|
tokens = RS.scan(pattern)
|
30
|
-
|
31
|
-
assert_equal( test[1,5], token )
|
28
|
+
result = tokens[index]
|
32
29
|
|
30
|
+
assert_equal type, result[0]
|
31
|
+
assert_equal token, result[1]
|
32
|
+
assert_equal text, result[2]
|
33
|
+
assert_equal ts, result[3]
|
34
|
+
assert_equal te, result[4]
|
33
35
|
end
|
34
36
|
end
|
35
37
|
|
@@ -80,8 +82,14 @@ class ScannerConditionals < Test::Unit::TestCase
|
|
80
82
|
[40, :conditional, :close, ')', 45, 46],
|
81
83
|
[41, :conditional, :close, ')', 46, 47],
|
82
84
|
[42, :conditional, :close, ')', 47, 48]
|
83
|
-
].each do |
|
84
|
-
|
85
|
+
].each do |index, type, token, text, ts, te|
|
86
|
+
result = tokens[index]
|
87
|
+
|
88
|
+
assert_equal type, result[0]
|
89
|
+
assert_equal token, result[1]
|
90
|
+
assert_equal text, result[2]
|
91
|
+
assert_equal ts, result[3]
|
92
|
+
assert_equal te, result[4]
|
85
93
|
end
|
86
94
|
end
|
87
95
|
|
@@ -139,8 +147,14 @@ class ScannerConditionals < Test::Unit::TestCase
|
|
139
147
|
[47, :conditional, :close, ')', 50, 51],
|
140
148
|
[48, :group, :close, ')', 51, 52],
|
141
149
|
[49, :group, :close, ')', 52, 53]
|
142
|
-
].each do |
|
143
|
-
|
150
|
+
].each do |index, type, token, text, ts, te|
|
151
|
+
result = tokens[index]
|
152
|
+
|
153
|
+
assert_equal type, result[0]
|
154
|
+
assert_equal token, result[1]
|
155
|
+
assert_equal text, result[2]
|
156
|
+
assert_equal ts, result[3]
|
157
|
+
assert_equal te, result[4]
|
144
158
|
end
|
145
159
|
end
|
146
160
|
|
@@ -148,18 +162,22 @@ class ScannerConditionals < Test::Unit::TestCase
|
|
148
162
|
regexp = /(a)(?(1)(b|c|d)|(e|f|g))(h)(?(2)(i|j|k)|(l|m|n))|o|p/
|
149
163
|
tokens = RS.scan(regexp)
|
150
164
|
|
151
|
-
[9, 11, 17, 19, 32, 34, 40, 42, 46, 48].each do |
|
152
|
-
|
153
|
-
|
154
|
-
assert_equal
|
155
|
-
assert_equal
|
165
|
+
[9, 11, 17, 19, 32, 34, 40, 42, 46, 48].each do |index|
|
166
|
+
result = tokens[index]
|
167
|
+
|
168
|
+
assert_equal :meta, result[0]
|
169
|
+
assert_equal :alternation, result[1]
|
170
|
+
assert_equal '|', result[2]
|
171
|
+
assert_equal 1, result[4] - result[3]
|
156
172
|
end
|
157
173
|
|
158
|
-
[14, 37].each do |
|
159
|
-
|
160
|
-
|
161
|
-
assert_equal
|
162
|
-
assert_equal
|
174
|
+
[14, 37].each do |index|
|
175
|
+
result = tokens[index]
|
176
|
+
|
177
|
+
assert_equal :conditional, result[0]
|
178
|
+
assert_equal :separator, result[1]
|
179
|
+
assert_equal '|', result[2]
|
180
|
+
assert_equal 1, result[4] - result[3]
|
163
181
|
end
|
164
182
|
end
|
165
183
|
|
@@ -38,14 +38,16 @@ class ScannerEscapes < Test::Unit::TestCase
|
|
38
38
|
'ab\\\Kcd' => [1, :escape, :backslash, '\\\\', 2, 4],
|
39
39
|
}
|
40
40
|
|
41
|
-
|
42
|
-
|
43
|
-
define_method "test_scan_#{test[1]}_#{test[2]}_#{count+=1}" do
|
44
|
-
|
41
|
+
tests.each_with_index do |(pattern, (index, type, token, text, ts, te)), count|
|
42
|
+
define_method "test_scanner_#{type}_#{token}_#{count}" do
|
45
43
|
tokens = RS.scan(pattern)
|
46
|
-
|
47
|
-
assert_equal( test[1,5], token )
|
44
|
+
result = tokens.at(index)
|
48
45
|
|
46
|
+
assert_equal type, result[0]
|
47
|
+
assert_equal token, result[1]
|
48
|
+
assert_equal text, result[2]
|
49
|
+
assert_equal ts, result[3]
|
50
|
+
assert_equal te, result[4]
|
49
51
|
end
|
50
52
|
end
|
51
53
|
|
@@ -13,21 +13,21 @@ class ScannerFreeSpace < Test::Unit::TestCase
|
|
13
13
|
tokens = RS.scan(regexp)
|
14
14
|
|
15
15
|
0.upto(24) do |i|
|
16
|
-
if i
|
17
|
-
assert_equal
|
18
|
-
assert_equal
|
16
|
+
if i.even?
|
17
|
+
assert_equal :free_space, tokens[i][0]
|
18
|
+
assert_equal :whitespace, tokens[i][1]
|
19
19
|
else
|
20
|
-
|
21
|
-
|
20
|
+
refute_equal :free_space, tokens[i][0]
|
21
|
+
refute_equal :whitespace, tokens[i][1]
|
22
22
|
end
|
23
23
|
end
|
24
24
|
|
25
25
|
[0, 2, 10, 14].each do |i|
|
26
|
-
assert_equal
|
26
|
+
assert_equal "\n ", tokens[i][2]
|
27
27
|
end
|
28
28
|
|
29
29
|
[4, 6, 8, 12].each do |i|
|
30
|
-
assert_equal
|
30
|
+
assert_equal ' ', tokens[i][2]
|
31
31
|
end
|
32
32
|
end
|
33
33
|
|
@@ -42,12 +42,18 @@ class ScannerFreeSpace < Test::Unit::TestCase
|
|
42
42
|
tokens = RS.scan(regexp)
|
43
43
|
|
44
44
|
[
|
45
|
-
[ 5,
|
46
|
-
[11,
|
47
|
-
[17,
|
48
|
-
[29,
|
49
|
-
].each do |index, token|
|
50
|
-
|
45
|
+
[ 5, :free_space, :comment, "# A + comment\n", 11, 25],
|
46
|
+
[11, :free_space, :comment, "# B ? comment\n", 37, 51],
|
47
|
+
[17, :free_space, :comment, "# C {2,3} comment\n", 66, 84],
|
48
|
+
[29, :free_space, :comment, "# D|E comment\n", 100, 114],
|
49
|
+
].each do |index, type, token, text, ts, te|
|
50
|
+
result = tokens[index]
|
51
|
+
|
52
|
+
assert_equal type, result[0]
|
53
|
+
assert_equal token, result[1]
|
54
|
+
assert_equal text, result[2]
|
55
|
+
assert_equal ts, result[3]
|
56
|
+
assert_equal te, result[4]
|
51
57
|
end
|
52
58
|
end
|
53
59
|
|
@@ -57,17 +63,23 @@ class ScannerFreeSpace < Test::Unit::TestCase
|
|
57
63
|
tokens = RS.scan(regexp)
|
58
64
|
|
59
65
|
[
|
60
|
-
[0,
|
61
|
-
[1,
|
62
|
-
[2,
|
63
|
-
[3,
|
64
|
-
[4,
|
65
|
-
[5,
|
66
|
-
[6,
|
67
|
-
[7,
|
68
|
-
[8,
|
69
|
-
].each do |index, token|
|
70
|
-
|
66
|
+
[0, :literal, :literal, 'a b', 0, 3],
|
67
|
+
[1, :group, :options, '(?x:', 3, 7],
|
68
|
+
[2, :literal, :literal, 'c', 7, 8],
|
69
|
+
[3, :free_space, :whitespace, ' ', 8, 9],
|
70
|
+
[4, :literal, :literal, 'd', 9, 10],
|
71
|
+
[5, :free_space, :whitespace, ' ', 10, 11],
|
72
|
+
[6, :literal, :literal, 'e', 11, 12],
|
73
|
+
[7, :group, :close, ')', 12, 13],
|
74
|
+
[8, :literal, :literal, 'f g', 13, 16]
|
75
|
+
].each do |index, type, token, text, ts, te|
|
76
|
+
result = tokens[index]
|
77
|
+
|
78
|
+
assert_equal type, result[0]
|
79
|
+
assert_equal token, result[1]
|
80
|
+
assert_equal text, result[2]
|
81
|
+
assert_equal ts, result[3]
|
82
|
+
assert_equal te, result[4]
|
71
83
|
end
|
72
84
|
end
|
73
85
|
|
@@ -77,21 +89,27 @@ class ScannerFreeSpace < Test::Unit::TestCase
|
|
77
89
|
tokens = RS.scan(regexp)
|
78
90
|
|
79
91
|
[
|
80
|
-
[ 0,
|
81
|
-
[ 1,
|
82
|
-
[ 2,
|
83
|
-
[ 3,
|
84
|
-
[ 4,
|
85
|
-
[ 5,
|
86
|
-
[ 6,
|
87
|
-
[ 7,
|
88
|
-
[ 8,
|
89
|
-
[ 9,
|
90
|
-
[10,
|
91
|
-
[11,
|
92
|
-
[12,
|
93
|
-
].each do |index, token|
|
94
|
-
|
92
|
+
[ 0, :literal, :literal, 'a b', 0, 3],
|
93
|
+
[ 1, :group, :options, '(?x:', 3, 7],
|
94
|
+
[ 2, :literal, :literal, 'c', 7, 8],
|
95
|
+
[ 3, :free_space, :whitespace, ' ', 8, 9],
|
96
|
+
[ 4, :literal, :literal, 'd', 9, 10],
|
97
|
+
[ 5, :group, :options, '(?-x:', 10, 15],
|
98
|
+
[ 6, :literal, :literal, 'e f', 15, 18],
|
99
|
+
[ 7, :group, :close, ')', 18, 19],
|
100
|
+
[ 8, :literal, :literal, 'g', 19, 20],
|
101
|
+
[ 9, :free_space, :whitespace, ' ', 20, 21],
|
102
|
+
[10, :literal, :literal, 'h', 21, 22],
|
103
|
+
[11, :group, :close, ')', 22, 23],
|
104
|
+
[12, :literal, :literal, 'i j', 23, 26]
|
105
|
+
].each do |index, type, token, text, ts, te|
|
106
|
+
result = tokens[index]
|
107
|
+
|
108
|
+
assert_equal type, result[0]
|
109
|
+
assert_equal token, result[1]
|
110
|
+
assert_equal text, result[2]
|
111
|
+
assert_equal ts, result[3]
|
112
|
+
assert_equal te, result[4]
|
95
113
|
end
|
96
114
|
end
|
97
115
|
|
@@ -101,32 +119,38 @@ class ScannerFreeSpace < Test::Unit::TestCase
|
|
101
119
|
tokens = RS.scan(regexp)
|
102
120
|
|
103
121
|
[
|
104
|
-
[ 0,
|
105
|
-
[ 1,
|
106
|
-
[ 2,
|
107
|
-
[ 3,
|
108
|
-
[ 4,
|
109
|
-
[ 5,
|
110
|
-
[ 6,
|
111
|
-
[ 7,
|
112
|
-
[ 8,
|
113
|
-
[ 9,
|
114
|
-
[10,
|
115
|
-
[11,
|
116
|
-
[12,
|
117
|
-
[13,
|
118
|
-
[14,
|
119
|
-
[15,
|
120
|
-
[16,
|
121
|
-
[17,
|
122
|
-
[18,
|
123
|
-
[19,
|
124
|
-
[20,
|
125
|
-
[21,
|
126
|
-
[22,
|
127
|
-
[23,
|
128
|
-
].each do |index, token|
|
129
|
-
|
122
|
+
[ 0, :group, :capture, '(', 0, 1],
|
123
|
+
[ 1, :literal, :literal, 'a ', 1, 3],
|
124
|
+
[ 2, :group, :capture, '(', 3, 4],
|
125
|
+
[ 3, :literal, :literal, 'b', 4, 5],
|
126
|
+
[ 4, :group, :options, '(?x:', 5, 9],
|
127
|
+
[ 5, :free_space, :whitespace, ' ', 9, 10],
|
128
|
+
[ 6, :group, :capture, '(', 10, 11],
|
129
|
+
[ 7, :literal, :literal, 'c', 11, 12],
|
130
|
+
[ 8, :free_space, :whitespace, ' ', 12, 13],
|
131
|
+
[ 9, :literal, :literal, 'd', 13, 14],
|
132
|
+
[10, :group, :close, ')', 14, 15],
|
133
|
+
[11, :free_space, :whitespace, ' ', 15, 16],
|
134
|
+
[12, :group, :options, '(?-x:', 16, 21],
|
135
|
+
[13, :group, :capture, '(', 21, 22],
|
136
|
+
[14, :literal, :literal, 'e f', 22, 25],
|
137
|
+
[15, :group, :close, ')', 25, 26],
|
138
|
+
[16, :literal, :literal, ' ', 26, 27],
|
139
|
+
[17, :group, :close, ')', 27, 28],
|
140
|
+
[18, :literal, :literal, 'g', 28, 29],
|
141
|
+
[19, :group, :close, ')', 29, 30],
|
142
|
+
[20, :literal, :literal, ' h', 30, 32],
|
143
|
+
[21, :group, :close, ')', 32, 33],
|
144
|
+
[22, :literal, :literal, 'i j', 33, 36],
|
145
|
+
[23, :group, :close, ')', 36, 37]
|
146
|
+
].each do |index, type, token, text, ts, te|
|
147
|
+
result = tokens[index]
|
148
|
+
|
149
|
+
assert_equal type, result[0]
|
150
|
+
assert_equal token, result[1]
|
151
|
+
assert_equal text, result[2]
|
152
|
+
assert_equal ts, result[3]
|
153
|
+
assert_equal te, result[4]
|
130
154
|
end
|
131
155
|
end
|
132
156
|
|
data/test/scanner/test_groups.rb
CHANGED
@@ -3,7 +3,7 @@ require File.expand_path("../../helpers", __FILE__)
|
|
3
3
|
class ScannerGroups < Test::Unit::TestCase
|
4
4
|
|
5
5
|
tests = {
|
6
|
-
|
6
|
+
# Options
|
7
7
|
'(?-mix:abc)' => [0, :group, :options, '(?-mix:', 0, 7],
|
8
8
|
'(?m-ix:abc)' => [0, :group, :options, '(?m-ix:', 0, 7],
|
9
9
|
'(?mi-x:abc)' => [0, :group, :options, '(?mi-x:', 0, 7],
|
@@ -38,39 +38,34 @@ class ScannerGroups < Test::Unit::TestCase
|
|
38
38
|
'(?<!abc)' => [0, :assertion, :nlookbehind, '(?<!', 0, 4],
|
39
39
|
}
|
40
40
|
|
41
|
-
count = 0
|
42
|
-
tests.each do |pattern, test|
|
43
|
-
define_method "test_scan_#{test[1]}_#{test[2]}_#{count+=1}" do
|
44
|
-
|
45
|
-
tokens = RS.scan(pattern)
|
46
|
-
assert_equal( test[1,5], tokens[test[0]])
|
47
|
-
assert_equal( test[3], pattern[tokens[test[0]][3], tokens[test[0]][4]])
|
48
|
-
|
49
|
-
end
|
50
|
-
end
|
51
|
-
|
52
41
|
if RUBY_VERSION >= '2.0'
|
53
|
-
|
54
|
-
|
55
|
-
'(?
|
56
|
-
'(
|
57
|
-
'(?
|
58
|
-
'(?da-
|
59
|
-
'(?
|
60
|
-
'(?dau)'
|
61
|
-
'(?
|
62
|
-
'(?
|
63
|
-
'(?
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
tokens = RS.scan(pattern)
|
70
|
-
assert_equal( test[1,5], tokens[test[0]])
|
71
|
-
assert_equal( test[3], pattern[tokens[test[0]][3], tokens[test[0]][4]])
|
42
|
+
tests.merge!({
|
43
|
+
# New options
|
44
|
+
'(?d-mix:abc)' => [0, :group, :options, '(?d-mix:', 0, 8],
|
45
|
+
'(?a-mix:abc)' => [0, :group, :options, '(?a-mix:', 0, 8],
|
46
|
+
'(?u-mix:abc)' => [0, :group, :options, '(?u-mix:', 0, 8],
|
47
|
+
'(?da-m:abc)' => [0, :group, :options, '(?da-m:', 0, 7],
|
48
|
+
'(?du-x:abc)' => [0, :group, :options, '(?du-x:', 0, 7],
|
49
|
+
'(?dau-i:abc)' => [0, :group, :options, '(?dau-i:', 0, 8],
|
50
|
+
'(?dau:abc)' => [0, :group, :options, '(?dau:', 0, 6],
|
51
|
+
'(?dau)' => [0, :group, :options, '(?dau', 0, 5],
|
52
|
+
'(?d:)' => [0, :group, :options, '(?d:', 0, 4],
|
53
|
+
'(?a:)' => [0, :group, :options, '(?a:', 0, 4],
|
54
|
+
'(?u:)' => [0, :group, :options, '(?u:', 0, 4],
|
55
|
+
})
|
56
|
+
end
|
72
57
|
|
73
|
-
|
58
|
+
tests.each_with_index do |(pattern, (index, type, token, text, ts, te)), count|
|
59
|
+
define_method "test_scanner_#{type}_#{token}_#{count}" do
|
60
|
+
tokens = RS.scan(pattern)
|
61
|
+
result = tokens[index]
|
62
|
+
|
63
|
+
assert_equal type, result[0]
|
64
|
+
assert_equal token, result[1]
|
65
|
+
assert_equal text, result[2]
|
66
|
+
assert_equal ts, result[3]
|
67
|
+
assert_equal te, result[4]
|
68
|
+
assert_equal text, pattern[ts, te]
|
74
69
|
end
|
75
70
|
end
|
76
71
|
|
data/test/scanner/test_keep.rb
CHANGED
@@ -3,31 +3,33 @@ require File.expand_path("../../helpers", __FILE__)
|
|
3
3
|
class ScannerKeep < Test::Unit::TestCase
|
4
4
|
|
5
5
|
def test_scan_keep_token
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
assert_equal
|
10
|
-
assert_equal
|
11
|
-
assert_equal
|
12
|
-
assert_equal
|
13
|
-
assert_equal
|
6
|
+
tokens = RS.scan(/ab\Kcd/)
|
7
|
+
result = tokens.at(1)
|
8
|
+
|
9
|
+
assert_equal :keep, result[0]
|
10
|
+
assert_equal :mark, result[1]
|
11
|
+
assert_equal '\\K', result[2]
|
12
|
+
assert_equal 2, result[3]
|
13
|
+
assert_equal 4, result[4]
|
14
14
|
end
|
15
15
|
|
16
16
|
def test_scan_keep_nested
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
assert_equal
|
23
|
-
assert_equal
|
24
|
-
assert_equal
|
25
|
-
|
26
|
-
assert_equal
|
27
|
-
|
28
|
-
assert_equal
|
29
|
-
assert_equal
|
30
|
-
assert_equal
|
17
|
+
tokens = RS.scan(/(a\Kb)|(c\\\Kd)ef/)
|
18
|
+
|
19
|
+
first = tokens.at(2)
|
20
|
+
second = tokens.at(9)
|
21
|
+
|
22
|
+
assert_equal :keep, first[0]
|
23
|
+
assert_equal :mark, first[1]
|
24
|
+
assert_equal '\\K', first[2]
|
25
|
+
assert_equal 2, first[3]
|
26
|
+
assert_equal 4, first[4]
|
27
|
+
|
28
|
+
assert_equal :keep, second[0]
|
29
|
+
assert_equal :mark, second[1]
|
30
|
+
assert_equal '\\K', second[2]
|
31
|
+
assert_equal 11, second[3]
|
32
|
+
assert_equal 13, second[4]
|
31
33
|
end
|
32
34
|
|
33
35
|
end
|