Welcome to mirror list, hosted at ThFree Co, Russian Federation.

gitlab.com/gitlab-org/gitlab-foss.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'spec/rubocop/cop/style/regexp_literal_mixed_preserve_spec.rb')
-rw-r--r--spec/rubocop/cop/style/regexp_literal_mixed_preserve_spec.rb131
1 files changed, 131 insertions, 0 deletions
diff --git a/spec/rubocop/cop/style/regexp_literal_mixed_preserve_spec.rb b/spec/rubocop/cop/style/regexp_literal_mixed_preserve_spec.rb
new file mode 100644
index 00000000000..384a834a512
--- /dev/null
+++ b/spec/rubocop/cop/style/regexp_literal_mixed_preserve_spec.rb
@@ -0,0 +1,131 @@
+# frozen_string_literal: true
+
+require 'fast_spec_helper'
+
+require_relative '../../../../rubocop/cop/style/regexp_literal_mixed_preserve'
+
+# This spec contains only relevant examples.
+#
+# See also https://github.com/rubocop/rubocop/pull/9688
+RSpec.describe RuboCop::Cop::Style::RegexpLiteralMixedPreserve, :config do
+ let(:config) do
+ supported_styles = { 'SupportedStyles' => %w[slashes percent_r mixed mixed_preserve] }
+ RuboCop::Config.new('Style/PercentLiteralDelimiters' =>
+ percent_literal_delimiters_config,
+ 'Style/RegexpLiteralMixedPreserve' =>
+ cop_config.merge(supported_styles))
+ end
+
+ let(:percent_literal_delimiters_config) { { 'PreferredDelimiters' => { '%r' => '{}' } } }
+
+ context 'when EnforcedStyle is set to mixed_preserve' do
+ let(:cop_config) { { 'EnforcedStyle' => 'mixed_preserve' } }
+
+ describe 'a single-line `//` regex without slashes' do
+ it 'is accepted' do
+ expect_no_offenses('foo = /a/')
+ end
+ end
+
+ describe 'a single-line `//` regex with slashes' do
+ it 'registers an offense and corrects' do
+ expect_offense(<<~'RUBY')
+ foo = /home\//
+ ^^^^^^^^ Use `%r` around regular expression.
+ RUBY
+
+ expect_correction(<<~'RUBY')
+ foo = %r{home/}
+ RUBY
+ end
+
+ describe 'when configured to allow inner slashes' do
+ before do
+ cop_config['AllowInnerSlashes'] = true
+ end
+
+ it 'is accepted' do
+ expect_no_offenses('foo = /home\\//')
+ end
+ end
+ end
+
+ describe 'a multi-line `//` regex without slashes' do
+ it 'is accepted' do
+ expect_no_offenses(<<~'RUBY')
+ foo = /
+ foo
+ bar
+ /x
+ RUBY
+ end
+ end
+
+ describe 'a multi-line `//` regex with slashes' do
+ it 'registers an offense and corrects' do
+ expect_offense(<<~'RUBY')
+ foo = /
+ ^ Use `%r` around regular expression.
+ https?:\/\/
+ example\.com
+ /x
+ RUBY
+
+ expect_correction(<<~'RUBY')
+ foo = %r{
+ https?://
+ example\.com
+ }x
+ RUBY
+ end
+ end
+
+ describe 'a single-line %r regex without slashes' do
+ it 'is accepted' do
+ expect_no_offenses(<<~RUBY)
+ foo = %r{a}
+ RUBY
+ end
+ end
+
+ describe 'a single-line %r regex with slashes' do
+ it 'is accepted' do
+ expect_no_offenses('foo = %r{home/}')
+ end
+
+ describe 'when configured to allow inner slashes' do
+ before do
+ cop_config['AllowInnerSlashes'] = true
+ end
+
+ it 'is accepted' do
+ expect_no_offenses(<<~RUBY)
+ foo = %r{home/}
+ RUBY
+ end
+ end
+ end
+
+ describe 'a multi-line %r regex without slashes' do
+ it 'is accepted' do
+ expect_no_offenses(<<~RUBY)
+ foo = %r{
+ foo
+ bar
+ }x
+ RUBY
+ end
+ end
+
+ describe 'a multi-line %r regex with slashes' do
+ it 'is accepted' do
+ expect_no_offenses(<<~RUBY)
+ foo = %r{
+ https?://
+ example\.com
+ }x
+ RUBY
+ end
+ end
+ end
+end