re2 2.4.3 → 2.10.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.
@@ -1,4 +1,4 @@
1
- # encoding: utf-8
1
+ # frozen_string_literal: true
2
2
 
3
3
  RSpec.describe RE2::Scanner do
4
4
  describe "#regexp" do
@@ -34,6 +34,16 @@ RSpec.describe RE2::Scanner do
34
34
  expect(scanner.scan).to be_nil
35
35
  end
36
36
 
37
+ it "supports scanning inputs with null bytes", :aggregate_failures do
38
+ r = RE2::Regexp.new("(\\w\0\\w)")
39
+ scanner = r.scan("a\0b c\0d e\0f")
40
+
41
+ expect(scanner.scan).to eq(["a\0b"])
42
+ expect(scanner.scan).to eq(["c\0d"])
43
+ expect(scanner.scan).to eq(["e\0f"])
44
+ expect(scanner.scan).to be_nil
45
+ end
46
+
37
47
  it "returns UTF-8 matches if the pattern is UTF-8" do
38
48
  r = RE2::Regexp.new('(\w+)')
39
49
  scanner = r.scan("It")
@@ -43,7 +53,7 @@ RSpec.describe RE2::Scanner do
43
53
  end
44
54
 
45
55
  it "returns ISO-8859-1 matches if the pattern is not UTF-8" do
46
- r = RE2::Regexp.new('(\w+)', :utf8 => false)
56
+ r = RE2::Regexp.new('(\w+)', utf8: false)
47
57
  scanner = r.scan("It")
48
58
  matches = scanner.scan
49
59
 
@@ -75,7 +85,7 @@ RSpec.describe RE2::Scanner do
75
85
  end
76
86
 
77
87
  it "returns nil if the regexp is invalid" do
78
- r = RE2::Regexp.new('???', :log_errors => false)
88
+ r = RE2::Regexp.new('???', log_errors: false)
79
89
  scanner = r.scan("Foo bar")
80
90
 
81
91
  expect(scanner.scan).to be_nil
@@ -173,12 +183,7 @@ RSpec.describe RE2::Scanner do
173
183
  r = RE2::Regexp.new('(\d)')
174
184
  scanner = r.scan("There are 1 some 2 numbers 3")
175
185
 
176
- # Prior to Ruby 1.9, Enumerator was within Enumerable.
177
- if defined?(Enumerator)
178
- expect(scanner.each).to be_a(Enumerator)
179
- elsif defined?(Enumerable::Enumerator)
180
- expect(scanner.each).to be_a(Enumerable::Enumerator)
181
- end
186
+ expect(scanner.each).to be_a(Enumerator)
182
187
  end
183
188
  end
184
189
 
@@ -195,6 +200,18 @@ RSpec.describe RE2::Scanner do
195
200
  expect(scanner.to_enum.first).to eq(["1"])
196
201
  end
197
202
 
203
+ it "supports inputs with null bytes", :aggregate_failures do
204
+ r = RE2::Regexp.new("(\\w\0\\w)")
205
+ scanner = r.scan("a\0b c\0d")
206
+
207
+ expect(scanner.to_enum.first).to eq(["a\0b"])
208
+ expect(scanner.to_enum.first).to eq(["c\0d"])
209
+
210
+ scanner.rewind
211
+
212
+ expect(scanner.to_enum.first).to eq(["a\0b"])
213
+ end
214
+
198
215
  it "resets the eof? check", :aggregate_failures do
199
216
  r = RE2::Regexp.new('(\d)')
200
217
  scanner = r.scan("1")
data/spec/re2/set_spec.rb CHANGED
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  RSpec.describe RE2::Set do
2
4
  describe "#initialize" do
3
5
  it "returns an instance given no args" do
@@ -25,7 +27,7 @@ RSpec.describe RE2::Set do
25
27
  end
26
28
 
27
29
  it "returns an instance given an anchor and options" do
28
- set = RE2::Set.new(:unanchored, :case_sensitive => false)
30
+ set = RE2::Set.new(:unanchored, case_sensitive: false)
29
31
 
30
32
  expect(set).to be_a(RE2::Set)
31
33
  end
@@ -42,7 +44,7 @@ RSpec.describe RE2::Set do
42
44
  end
43
45
 
44
46
  it "raises an error if given an invalid anchor and options" do
45
- expect { RE2::Set.new(:not_a_valid_anchor, :case_sensitive => false) }.to raise_error(
47
+ expect { RE2::Set.new(:not_a_valid_anchor, case_sensitive: false) }.to raise_error(
46
48
  ArgumentError,
47
49
  "anchor should be one of: :unanchored, :anchor_start, :anchor_both"
48
50
  )
@@ -59,19 +61,19 @@ RSpec.describe RE2::Set do
59
61
  end
60
62
 
61
63
  it "rejects invalid patterns when added" do
62
- set = RE2::Set.new(:unanchored, :log_errors => false)
64
+ set = RE2::Set.new(:unanchored, log_errors: false)
63
65
 
64
66
  expect { set.add("???") }.to raise_error(ArgumentError, /str rejected by RE2::Set->Add\(\)/)
65
67
  end
66
68
 
67
69
  it "truncates error messages to 100 characters" do
68
- set = RE2::Set.new(:unanchored, :log_errors => false)
70
+ set = RE2::Set.new(:unanchored, log_errors: false)
69
71
 
70
72
  expect { set.add("(?P<#{'o' * 200}") }.to raise_error(ArgumentError, "str rejected by RE2::Set->Add(): invalid named capture group: (?P<oooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo")
71
73
  end
72
74
 
73
75
  it "raises an error if called after #compile" do
74
- set = RE2::Set.new(:unanchored, :log_errors => false)
76
+ set = RE2::Set.new(:unanchored, log_errors: false)
75
77
  set.add("abc")
76
78
  set.compile
77
79
 
@@ -81,7 +83,7 @@ RSpec.describe RE2::Set do
81
83
  end
82
84
 
83
85
  it "raises an error if given a pattern that can't be coerced to a String" do
84
- set = RE2::Set.new(:unanchored, :log_errors => false)
86
+ set = RE2::Set.new(:unanchored, log_errors: false)
85
87
 
86
88
  expect { set.add(0) }.to raise_error(TypeError)
87
89
  end
@@ -112,7 +114,7 @@ RSpec.describe RE2::Set do
112
114
  set.add("ghi")
113
115
  set.compile
114
116
 
115
- expect(set.match("abcdefghi", :exception => false)).to eq([0, 1, 2])
117
+ expect(set.match("abcdefghi", exception: false)).to eq([0, 1, 2])
116
118
  end
117
119
 
118
120
  it "returns an empty array if there is no match" do
@@ -120,7 +122,15 @@ RSpec.describe RE2::Set do
120
122
  set.add("abc")
121
123
  set.compile
122
124
 
123
- expect(set.match("def", :exception => false)).to be_empty
125
+ expect(set.match("def", exception: false)).to be_empty
126
+ end
127
+
128
+ it "supports matching null bytes", :aggregate_failures do
129
+ set = RE2::Set.new
130
+ set.add("a\0b")
131
+ set.compile
132
+
133
+ expect(set.match("a\0b", exception: false)).to eq([0])
124
134
  end
125
135
 
126
136
  it "returns an empty array if there is no match when :exception is true" do
@@ -136,7 +146,7 @@ RSpec.describe RE2::Set do
136
146
  it "raises an error if called before #compile by default" do
137
147
  skip "Underlying RE2::Set::Match does not output error information" unless RE2::Set.match_raises_errors?
138
148
 
139
- set = RE2::Set.new(:unanchored, :log_errors => false)
149
+ set = RE2::Set.new(:unanchored, log_errors: false)
140
150
 
141
151
  silence_stderr do
142
152
  expect { set.match("") }.to raise_error(RE2::Set::MatchError)
@@ -146,28 +156,28 @@ RSpec.describe RE2::Set do
146
156
  it "raises an error if called before #compile when :exception is true" do
147
157
  skip "Underlying RE2::Set::Match does not output error information" unless RE2::Set.match_raises_errors?
148
158
 
149
- set = RE2::Set.new(:unanchored, :log_errors => false)
159
+ set = RE2::Set.new(:unanchored, log_errors: false)
150
160
 
151
161
  silence_stderr do
152
- expect { set.match("", :exception => true) }.to raise_error(RE2::Set::MatchError)
162
+ expect { set.match("", exception: true) }.to raise_error(RE2::Set::MatchError)
153
163
  end
154
164
  end
155
165
 
156
166
  it "returns an empty array if called before #compile when :exception is false" do
157
- set = RE2::Set.new(:unanchored, :log_errors => false)
167
+ set = RE2::Set.new(:unanchored, log_errors: false)
158
168
 
159
169
  silence_stderr do
160
- expect(set.match("", :exception => false)).to be_empty
170
+ expect(set.match("", exception: false)).to be_empty
161
171
  end
162
172
  end
163
173
 
164
- it "raises an error if :exception is true and re2 does not support it" do
174
+ it "raises an error if :exception is true and RE2 does not support it" do
165
175
  skip "Underlying RE2::Set::Match outputs error information" if RE2::Set.match_raises_errors?
166
176
 
167
- set = RE2::Set.new(:unanchored, :log_errors => false)
177
+ set = RE2::Set.new(:unanchored, log_errors: false)
168
178
 
169
179
  silence_stderr do
170
- expect { set.match("", :exception => true) }.to raise_error(RE2::Set::UnsupportedError)
180
+ expect { set.match("", exception: true) }.to raise_error(RE2::Set::UnsupportedError)
171
181
  end
172
182
  end
173
183
 
@@ -182,7 +192,7 @@ RSpec.describe RE2::Set do
182
192
  set.add("abc")
183
193
  set.compile
184
194
 
185
- expect { set.match(0, :exception => false) }.to raise_error(TypeError)
195
+ expect { set.match(0, exception: false) }.to raise_error(TypeError)
186
196
  end
187
197
 
188
198
  it "accepts input if it can be coerced to a String" do
@@ -190,7 +200,7 @@ RSpec.describe RE2::Set do
190
200
  set.add("abc")
191
201
  set.compile
192
202
 
193
- expect(set.match(StringLike.new("abcdef"), :exception => false)).to contain_exactly(0)
203
+ expect(set.match(StringLike.new("abcdef"), exception: false)).to contain_exactly(0)
194
204
  end
195
205
  end
196
206
 
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require "re2/string"
2
4
 
3
5
  class String
data/spec/re2_spec.rb CHANGED
@@ -1,9 +1,23 @@
1
+ # frozen_string_literal: true
2
+
1
3
  RSpec.describe RE2 do
2
4
  describe ".Replace" do
3
5
  it "only replaces the first occurrence of the pattern" do
4
6
  expect(RE2.Replace("woo", "o", "a")).to eq("wao")
5
7
  end
6
8
 
9
+ it "supports inputs with null bytes" do
10
+ expect(RE2.Replace("w\0oo", "o", "a")).to eq("w\0ao")
11
+ end
12
+
13
+ it "supports patterns with null bytes" do
14
+ expect(RE2.Replace("w\0oo", "\0", "o")).to eq("wooo")
15
+ end
16
+
17
+ it "supports replacements with null bytes" do
18
+ expect(RE2.Replace("woo", "o", "\0")).to eq("w\0o")
19
+ end
20
+
7
21
  it "performs replacement based on regular expressions" do
8
22
  expect(RE2.Replace("woo", "o+", "e")).to eq("we")
9
23
  end
@@ -27,7 +41,7 @@ RSpec.describe RE2 do
27
41
  end
28
42
 
29
43
  it "respects any passed RE2::Regexp's flags" do
30
- re = RE2::Regexp.new('gOOD MORNING', :case_sensitive => false)
44
+ re = RE2::Regexp.new('gOOD MORNING', case_sensitive: false)
31
45
 
32
46
  expect(RE2.Replace("Good morning", re, "hi")).to eq("hi")
33
47
  end
@@ -53,7 +67,7 @@ RSpec.describe RE2 do
53
67
 
54
68
  it "returns ISO-8859-1 strings if the pattern is not UTF-8" do
55
69
  original = "Foo"
56
- replacement = RE2.Replace(original, RE2("oo", :utf8 => false), "ah")
70
+ replacement = RE2.Replace(original, RE2("oo", utf8: false), "ah")
57
71
 
58
72
  expect(replacement.encoding).to eq(Encoding::ISO_8859_1)
59
73
  end
@@ -82,6 +96,18 @@ RSpec.describe RE2 do
82
96
  expect(RE2.GlobalReplace("woo", "o", "a")).to eq("waa")
83
97
  end
84
98
 
99
+ it "supports inputs with null bytes" do
100
+ expect(RE2.GlobalReplace("w\0oo", "o", "a")).to eq("w\0aa")
101
+ end
102
+
103
+ it "supports patterns with null bytes" do
104
+ expect(RE2.GlobalReplace("w\0\0oo", "\0", "a")).to eq("waaoo")
105
+ end
106
+
107
+ it "supports replacements with null bytes" do
108
+ expect(RE2.GlobalReplace("woo", "o", "\0")).to eq("w\0\0")
109
+ end
110
+
85
111
  it "performs replacement based on regular expressions" do
86
112
  expect(RE2.GlobalReplace("woohoo", "o+", "e")).to eq("wehe")
87
113
  end
@@ -105,7 +131,7 @@ RSpec.describe RE2 do
105
131
  end
106
132
 
107
133
  it "respects any passed RE2::Regexp's flags" do
108
- re = RE2::Regexp.new('gOOD MORNING', :case_sensitive => false)
134
+ re = RE2::Regexp.new('gOOD MORNING', case_sensitive: false)
109
135
 
110
136
  expect(RE2.GlobalReplace("Good morning Good morning", re, "hi")).to eq("hi hi")
111
137
  end
@@ -131,7 +157,7 @@ RSpec.describe RE2 do
131
157
 
132
158
  it "returns ISO-8859-1 strings if the pattern is not UTF-8" do
133
159
  original = "Foo"
134
- replacement = RE2.GlobalReplace(original, RE2("oo", :utf8 => false), "ah")
160
+ replacement = RE2.GlobalReplace(original, RE2("oo", utf8: false), "ah")
135
161
 
136
162
  expect(replacement.encoding).to eq(Encoding::ISO_8859_1)
137
163
  end
@@ -167,5 +193,9 @@ RSpec.describe RE2 do
167
193
  it "supports passing something that can be coerced to a String as input" do
168
194
  expect(RE2.QuoteMeta(StringLike.new("1.5"))).to eq('1\.5')
169
195
  end
196
+
197
+ it "supports strings containing null bytes" do
198
+ expect(RE2.QuoteMeta("abc\0def")).to eq('abc\x00def')
199
+ end
170
200
  end
171
201
  end
data/spec/spec_helper.rb CHANGED
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require "re2"
2
4
 
3
5
  # To test passing objects that can be coerced to a String.
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: re2
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.4.3
4
+ version: 2.10.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Paul Mucur
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2023-11-22 00:00:00.000000000 Z
12
+ date: 2024-04-01 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: rake-compiler
@@ -17,28 +17,28 @@ dependencies:
17
17
  requirements:
18
18
  - - "~>"
19
19
  - !ruby/object:Gem::Version
20
- version: 1.2.1
20
+ version: 1.2.5
21
21
  type: :development
22
22
  prerelease: false
23
23
  version_requirements: !ruby/object:Gem::Requirement
24
24
  requirements:
25
25
  - - "~>"
26
26
  - !ruby/object:Gem::Version
27
- version: 1.2.1
27
+ version: 1.2.5
28
28
  - !ruby/object:Gem::Dependency
29
29
  name: rake-compiler-dock
30
30
  requirement: !ruby/object:Gem::Requirement
31
31
  requirements:
32
32
  - - "~>"
33
33
  - !ruby/object:Gem::Version
34
- version: 1.3.0
34
+ version: 1.4.0
35
35
  type: :development
36
36
  prerelease: false
37
37
  version_requirements: !ruby/object:Gem::Requirement
38
38
  requirements:
39
39
  - - "~>"
40
40
  - !ruby/object:Gem::Version
41
- version: 1.3.0
41
+ version: 1.4.0
42
42
  - !ruby/object:Gem::Dependency
43
43
  name: rspec
44
44
  requirement: !ruby/object:Gem::Requirement
@@ -86,11 +86,12 @@ files:
86
86
  - ext/re2/re2.cc
87
87
  - ext/re2/recipes.rb
88
88
  - lib/re2.rb
89
+ - lib/re2/regexp.rb
89
90
  - lib/re2/scanner.rb
90
91
  - lib/re2/string.rb
91
92
  - lib/re2/version.rb
92
- - ports/archives/20230802.1.tar.gz
93
- - ports/archives/re2-2023-11-01.tar.gz
93
+ - ports/archives/20240116.1.tar.gz
94
+ - ports/archives/re2-2024-04-01.tar.gz
94
95
  - re2.gemspec
95
96
  - spec/kernel_spec.rb
96
97
  - spec/re2/match_data_spec.rb
@@ -119,7 +120,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
119
120
  - !ruby/object:Gem::Version
120
121
  version: '0'
121
122
  requirements: []
122
- rubygems_version: 3.4.10
123
+ rubygems_version: 3.4.19
123
124
  signing_key:
124
125
  specification_version: 4
125
126
  summary: Ruby bindings to RE2.
Binary file
Binary file