re2 2.0.0.beta1-x64-mingw32

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.
@@ -0,0 +1,168 @@
1
+ RSpec.describe RE2::Set do
2
+ describe "#initialize" do
3
+ it "returns an instance given no args" do
4
+ set = RE2::Set.new
5
+
6
+ expect(set).to be_a(RE2::Set)
7
+ end
8
+
9
+ it "returns an instance given only an anchor of :unanchored" do
10
+ set = RE2::Set.new(:unanchored)
11
+
12
+ expect(set).to be_a(RE2::Set)
13
+ end
14
+
15
+ it "returns an instance given only an anchor of :anchor_start" do
16
+ set = RE2::Set.new(:anchor_start)
17
+
18
+ expect(set).to be_a(RE2::Set)
19
+ end
20
+
21
+ it "returns an instance given only an anchor of :anchor_both" do
22
+ set = RE2::Set.new(:anchor_both)
23
+
24
+ expect(set).to be_a(RE2::Set)
25
+ end
26
+
27
+ it "returns an instance given an anchor and options" do
28
+ set = RE2::Set.new(:unanchored, :case_sensitive => false)
29
+
30
+ expect(set).to be_a(RE2::Set)
31
+ end
32
+
33
+ it "raises an error if given an inappropriate type" do
34
+ expect { RE2::Set.new(0) }.to raise_error(TypeError)
35
+ end
36
+
37
+ it "raises an error if given an invalid anchor" do
38
+ expect { RE2::Set.new(:not_a_valid_anchor) }.to raise_error(
39
+ ArgumentError,
40
+ "anchor should be one of: :unanchored, :anchor_start, :anchor_both"
41
+ )
42
+ end
43
+ end
44
+
45
+ describe "#add" do
46
+ it "allows multiple patterns to be added", :aggregate_failures do
47
+ set = RE2::Set.new
48
+
49
+ expect(set.add("abc")).to eq(0)
50
+ expect(set.add("def")).to eq(1)
51
+ expect(set.add("ghi")).to eq(2)
52
+ end
53
+
54
+ it "rejects invalid patterns when added" do
55
+ set = RE2::Set.new(:unanchored, :log_errors => false)
56
+
57
+ expect { set.add("???") }.to raise_error(ArgumentError, /str rejected by RE2::Set->Add()/)
58
+ end
59
+
60
+ it "raises an error if called after #compile" do
61
+ set = RE2::Set.new(:unanchored, :log_errors => false)
62
+ set.add("abc")
63
+ set.compile
64
+
65
+ silence_stderr do
66
+ expect { set.add("def") }.to raise_error(ArgumentError)
67
+ end
68
+ end
69
+
70
+ it "raises an error if given a non-string pattern" do
71
+ set = RE2::Set.new(:unanchored, :log_errors => false)
72
+
73
+ expect { set.add(0) }.to raise_error(TypeError)
74
+ end
75
+ end
76
+
77
+ describe "#compile" do
78
+ it "compiles the set without error" do
79
+ set = RE2::Set.new
80
+ set.add("abc")
81
+ set.add("def")
82
+ set.add("ghi")
83
+
84
+ expect(set.compile).to be_truthy
85
+ end
86
+ end
87
+
88
+ describe "#match" do
89
+ it "matches against multiple patterns" do
90
+ set = RE2::Set.new
91
+ set.add("abc")
92
+ set.add("def")
93
+ set.add("ghi")
94
+ set.compile
95
+
96
+ expect(set.match("abcdefghi", :exception => false)).to eq([0, 1, 2])
97
+ end
98
+
99
+ it "raises an error if called before #compile by default" do
100
+ skip "Underlying RE2::Set::Match does not output error information" unless RE2::Set.match_raises_errors?
101
+
102
+ set = RE2::Set.new(:unanchored, :log_errors => false)
103
+
104
+ silence_stderr do
105
+ expect { set.match("") }.to raise_error(RE2::Set::MatchError)
106
+ end
107
+ end
108
+
109
+ it "raises an error if called before #compile when :exception is true" do
110
+ skip "Underlying RE2::Set::Match does not output error information" unless RE2::Set.match_raises_errors?
111
+
112
+ set = RE2::Set.new(:unanchored, :log_errors => false)
113
+
114
+ silence_stderr do
115
+ expect { set.match("", :exception => true) }.to raise_error(RE2::Set::MatchError)
116
+ end
117
+ end
118
+
119
+ it "returns an empty array if called before #compile when :exception is false" do
120
+ set = RE2::Set.new(:unanchored, :log_errors => false)
121
+
122
+ silence_stderr do
123
+ expect(set.match("", :exception => false)).to be_empty
124
+ end
125
+ end
126
+
127
+ it "raises an error if :exception is true and re2 does not support it" do
128
+ skip "Underlying RE2::Set::Match outputs error information" if RE2::Set.match_raises_errors?
129
+
130
+ set = RE2::Set.new(:unanchored, :log_errors => false)
131
+
132
+ silence_stderr do
133
+ expect { set.match("", :exception => true) }.to raise_error(RE2::Set::UnsupportedError)
134
+ end
135
+ end
136
+
137
+ it "raises an error if given non-hash options" do
138
+ set = RE2::Set.new
139
+
140
+ expect { set.match("", 0) }.to raise_error(TypeError)
141
+ end
142
+ end
143
+
144
+ def silence_stderr
145
+ original_stream = STDERR
146
+
147
+ if File.const_defined?(:NULL)
148
+ STDERR.reopen(File::NULL)
149
+ else
150
+ platform = RUBY_PLATFORM == 'java' ? RbConfig::CONFIG['host_os'] : RUBY_PLATFORM
151
+
152
+ case platform
153
+ when /mswin|mingw/i
154
+ STDERR.reopen('NUL')
155
+ when /amiga/i
156
+ STDERR.reopen('NIL')
157
+ when /openvms/i
158
+ STDERR.reopen('NL:')
159
+ else
160
+ STDERR.reopen('/dev/null')
161
+ end
162
+ end
163
+
164
+ yield
165
+ ensure
166
+ STDERR.reopen(original_stream)
167
+ end
168
+ end
@@ -0,0 +1,56 @@
1
+ require "re2/string"
2
+
3
+ class String
4
+ include RE2::String
5
+ end
6
+
7
+ RSpec.describe RE2::String do
8
+ describe "#re2_sub" do
9
+ it "delegates to RE2.Replace to perform replacement" do
10
+ expect("My name is Robert Paulson".re2_sub('Robert', 'Crobert')).to eq("My name is Crobert Paulson")
11
+ end
12
+
13
+ it "doesn't perform an in-place replacement" do
14
+ string = "My name is Robert Paulson"
15
+ expect(string.re2_sub('Robert', 'Crobert')).to_not equal(string)
16
+ end
17
+ end
18
+
19
+ describe "#re2_gsub" do
20
+ it "delegates to RE2.GlobalReplace to perform replacement" do
21
+ expect("My name is Robert Paulson".re2_gsub('a', 'e')).to eq("My neme is Robert Peulson")
22
+ end
23
+
24
+ it "doesn't perform an in-place replacement" do
25
+ string = "My name is Robert Paulson"
26
+ expect(string.re2_gsub('a', 'e')).to_not equal(string)
27
+ end
28
+ end
29
+
30
+ describe "#re2_match" do
31
+ it "delegates to RE2::Regexp#match to perform matches" do
32
+ md = "My name is Robert Paulson".re2_match('My name is (\S+) (\S+)')
33
+ expect(md).to be_a(RE2::MatchData)
34
+ expect(md[0]).to eq("My name is Robert Paulson")
35
+ expect(md[1]).to eq("Robert")
36
+ expect(md[2]).to eq("Paulson")
37
+ end
38
+
39
+ it "supports limiting the number of matches" do
40
+ md = "My name is Robert Paulson".re2_match('My name is (\S+) (\S+)', 0)
41
+ expect(md).to eq(true)
42
+ end
43
+ end
44
+
45
+ describe "#re2_escape" do
46
+ it "escapes the string for use in regular expressions" do
47
+ expect("1.5-2.0?".re2_escape).to eq('1\.5\-2\.0\?')
48
+ end
49
+ end
50
+
51
+ describe "#re2_quote" do
52
+ it "escapes the string for use in regular expressions" do
53
+ expect("1.5-2.0?".re2_quote).to eq('1\.5\-2\.0\?')
54
+ end
55
+ end
56
+ end
data/spec/re2_spec.rb ADDED
@@ -0,0 +1,75 @@
1
+ RSpec.describe RE2 do
2
+ describe "#Replace" do
3
+ it "only replaces the first occurrence of the pattern" do
4
+ expect(RE2.Replace("woo", "o", "a")).to eq("wao")
5
+ end
6
+
7
+ it "performs replacement based on regular expressions" do
8
+ expect(RE2.Replace("woo", "o+", "e")).to eq("we")
9
+ end
10
+
11
+ it "supports flags in patterns" do
12
+ expect(RE2.Replace("Good morning", "(?i)gOOD MORNING", "hi")).to eq("hi")
13
+ end
14
+
15
+ it "does not perform replacements in-place" do
16
+ name = "Robert"
17
+ replacement = RE2.Replace(name, "R", "Cr")
18
+ expect(name).to_not equal(replacement)
19
+ end
20
+
21
+ it "supports passing an RE2::Regexp as the pattern" do
22
+ re = RE2::Regexp.new('wo{2}')
23
+ expect(RE2.Replace("woo", re, "miaow")).to eq("miaow")
24
+ end
25
+
26
+ it "respects any passed RE2::Regexp's flags" do
27
+ re = RE2::Regexp.new('gOOD MORNING', :case_sensitive => false)
28
+ expect(RE2.Replace("Good morning", re, "hi")).to eq("hi")
29
+ end
30
+
31
+ if String.method_defined?(:encoding)
32
+ it "preserves the original string's encoding" do
33
+ original = "Foo"
34
+ replacement = RE2.Replace(original, "oo", "ah")
35
+ expect(original.encoding).to eq(replacement.encoding)
36
+ end
37
+ end
38
+ end
39
+
40
+ describe "#GlobalReplace" do
41
+ it "replaces every occurrence of a pattern" do
42
+ expect(RE2.GlobalReplace("woo", "o", "a")).to eq("waa")
43
+ end
44
+
45
+ it "performs replacement based on regular expressions" do
46
+ expect(RE2.GlobalReplace("woohoo", "o+", "e")).to eq("wehe")
47
+ end
48
+
49
+ it "supports flags in patterns" do
50
+ expect(RE2.GlobalReplace("Robert", "(?i)r", "w")).to eq("wobewt")
51
+ end
52
+
53
+ it "does not perform replacement in-place" do
54
+ name = "Robert"
55
+ replacement = RE2.GlobalReplace(name, "(?i)R", "w")
56
+ expect(name).to_not equal(replacement)
57
+ end
58
+
59
+ it "supports passing an RE2::Regexp as the pattern" do
60
+ re = RE2::Regexp.new('wo{2,}')
61
+ expect(RE2.GlobalReplace("woowooo", re, "miaow")).to eq("miaowmiaow")
62
+ end
63
+
64
+ it "respects any passed RE2::Regexp's flags" do
65
+ re = RE2::Regexp.new('gOOD MORNING', :case_sensitive => false)
66
+ expect(RE2.GlobalReplace("Good morning Good morning", re, "hi")).to eq("hi hi")
67
+ end
68
+ end
69
+
70
+ describe "#QuoteMeta" do
71
+ it "escapes a string so it can be used as a regular expression" do
72
+ expect(RE2.QuoteMeta("1.5-2.0?")).to eq('1\.5\-2\.0\?')
73
+ end
74
+ end
75
+ end
@@ -0,0 +1,19 @@
1
+ require "re2"
2
+
3
+ RSpec.configure do |config|
4
+ config.expect_with :rspec do |expectations|
5
+ expectations.include_chain_clauses_in_custom_matcher_descriptions = true
6
+ end
7
+
8
+ config.mock_with :rspec do |mocks|
9
+ mocks.verify_partial_doubles = true
10
+ end
11
+
12
+ config.filter_run :focus
13
+ config.run_all_when_everything_filtered = true
14
+ config.disable_monkey_patching!
15
+ config.warnings = true
16
+ config.default_formatter = 'doc' if config.files_to_run.one?
17
+ config.order = :random
18
+ Kernel.srand config.seed
19
+ end
metadata ADDED
@@ -0,0 +1,119 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: re2
3
+ version: !ruby/object:Gem::Version
4
+ version: 2.0.0.beta1
5
+ platform: x64-mingw32
6
+ authors:
7
+ - Paul Mucur
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2023-09-07 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: rake-compiler
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: 1.2.1
20
+ type: :development
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: 1.2.1
27
+ - !ruby/object:Gem::Dependency
28
+ name: rake-compiler-dock
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - "~>"
32
+ - !ruby/object:Gem::Version
33
+ version: 1.3.0
34
+ type: :development
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - "~>"
39
+ - !ruby/object:Gem::Version
40
+ version: 1.3.0
41
+ - !ruby/object:Gem::Dependency
42
+ name: rspec
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - "~>"
46
+ - !ruby/object:Gem::Version
47
+ version: '3.2'
48
+ type: :development
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - "~>"
53
+ - !ruby/object:Gem::Version
54
+ version: '3.2'
55
+ description: Ruby bindings to re2, "an efficient, principled regular expression library".
56
+ email:
57
+ executables: []
58
+ extensions: []
59
+ extra_rdoc_files: []
60
+ files:
61
+ - ".rspec"
62
+ - Gemfile
63
+ - LICENSE.txt
64
+ - README.md
65
+ - Rakefile
66
+ - dependencies.yml
67
+ - ext/re2/extconf.rb
68
+ - ext/re2/re2.cc
69
+ - ext/re2/recipes.rb
70
+ - lib/2.7/re2.so
71
+ - lib/3.0/re2.so
72
+ - lib/re2.rb
73
+ - lib/re2/scanner.rb
74
+ - lib/re2/string.rb
75
+ - lib/re2/version.rb
76
+ - re2.gemspec
77
+ - spec/kernel_spec.rb
78
+ - spec/re2/match_data_spec.rb
79
+ - spec/re2/regexp_spec.rb
80
+ - spec/re2/scanner_spec.rb
81
+ - spec/re2/set_spec.rb
82
+ - spec/re2/string_spec.rb
83
+ - spec/re2_spec.rb
84
+ - spec/spec_helper.rb
85
+ homepage: https://github.com/mudge/re2
86
+ licenses:
87
+ - BSD-3-Clause
88
+ metadata: {}
89
+ post_install_message:
90
+ rdoc_options: []
91
+ require_paths:
92
+ - lib
93
+ required_ruby_version: !ruby/object:Gem::Requirement
94
+ requirements:
95
+ - - ">="
96
+ - !ruby/object:Gem::Version
97
+ version: '2.7'
98
+ - - "<"
99
+ - !ruby/object:Gem::Version
100
+ version: 3.1.dev
101
+ required_rubygems_version: !ruby/object:Gem::Requirement
102
+ requirements:
103
+ - - ">"
104
+ - !ruby/object:Gem::Version
105
+ version: 1.3.1
106
+ requirements: []
107
+ rubygems_version: 3.3.26
108
+ signing_key:
109
+ specification_version: 4
110
+ summary: Ruby bindings to re2.
111
+ test_files:
112
+ - spec/spec_helper.rb
113
+ - spec/re2_spec.rb
114
+ - spec/kernel_spec.rb
115
+ - spec/re2/regexp_spec.rb
116
+ - spec/re2/match_data_spec.rb
117
+ - spec/re2/string_spec.rb
118
+ - spec/re2/set_spec.rb
119
+ - spec/re2/scanner_spec.rb