rubocop-rspec 1.4.1 → 1.5.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.
- checksums.yaml +4 -4
- data/CHANGELOG.md +19 -3
- data/README.md +1 -1
- data/config/default.yml +14 -2
- data/lib/rubocop-rspec.rb +2 -0
- data/lib/rubocop/cop/rspec/any_instance.rb +8 -5
- data/lib/rubocop/cop/rspec/describe_class.rb +2 -1
- data/lib/rubocop/cop/rspec/example_length.rb +60 -0
- data/lib/rubocop/cop/rspec/file_path.rb +13 -3
- data/lib/rubocop/cop/rspec/focus.rb +67 -0
- data/lib/rubocop/cop/rspec/not_to_not.rb +21 -20
- data/lib/rubocop/cop/rspec/verified_doubles.rb +12 -2
- data/lib/rubocop/rspec/version.rb +1 -1
- data/rubocop-rspec.gemspec +1 -1
- data/spec/rubocop/cop/rspec/any_instance_spec.rb +24 -9
- data/spec/rubocop/cop/rspec/describe_class_spec.rb +28 -8
- data/spec/rubocop/cop/rspec/described_class_spec.rb +107 -53
- data/spec/rubocop/cop/rspec/example_length_spec.rb +83 -0
- data/spec/rubocop/cop/rspec/example_wording_spec.rb +12 -5
- data/spec/rubocop/cop/rspec/file_path_spec.rb +121 -61
- data/spec/rubocop/cop/rspec/focus_spec.rb +70 -0
- data/spec/rubocop/cop/rspec/instance_variable_spec.rb +18 -9
- data/spec/rubocop/cop/rspec/multiple_describes_spec.rb +22 -7
- data/spec/rubocop/cop/rspec/not_to_not_spec.rb +15 -5
- data/spec/rubocop/cop/rspec/verified_doubles_spec.rb +41 -3
- metadata +12 -6
| @@ -12,8 +12,13 @@ describe RuboCop::Cop::RSpec::DescribeClass do | |
| 12 12 | 
             
              end
         | 
| 13 13 |  | 
| 14 14 | 
             
              it 'checks describe statements after a require' do
         | 
| 15 | 
            -
                inspect_source( | 
| 16 | 
            -
             | 
| 15 | 
            +
                inspect_source(
         | 
| 16 | 
            +
                  cop,
         | 
| 17 | 
            +
                  [
         | 
| 18 | 
            +
                    "require 'spec_helper'",
         | 
| 19 | 
            +
                    'describe "bad describe" do; end'
         | 
| 20 | 
            +
                  ]
         | 
| 21 | 
            +
                )
         | 
| 17 22 | 
             
                expect(cop.offenses.size).to eq(1)
         | 
| 18 23 | 
             
                expect(cop.offenses.map(&:line).sort).to eq([2])
         | 
| 19 24 | 
             
                expect(cop.messages).to eq(['The first argument to describe should be ' \
         | 
| @@ -21,9 +26,14 @@ describe RuboCop::Cop::RSpec::DescribeClass do | |
| 21 26 | 
             
              end
         | 
| 22 27 |  | 
| 23 28 | 
             
              it 'ignores nested describe statements' do
         | 
| 24 | 
            -
                inspect_source( | 
| 25 | 
            -
             | 
| 26 | 
            -
             | 
| 29 | 
            +
                inspect_source(
         | 
| 30 | 
            +
                  cop,
         | 
| 31 | 
            +
                  [
         | 
| 32 | 
            +
                    'describe Some::Class do',
         | 
| 33 | 
            +
                    '  describe "bad describe" do; end',
         | 
| 34 | 
            +
                    'end'
         | 
| 35 | 
            +
                  ]
         | 
| 36 | 
            +
                )
         | 
| 27 37 | 
             
                expect(cop.offenses).to be_empty
         | 
| 28 38 | 
             
              end
         | 
| 29 39 |  | 
| @@ -38,9 +48,14 @@ describe RuboCop::Cop::RSpec::DescribeClass do | |
| 38 48 | 
             
              end
         | 
| 39 49 |  | 
| 40 50 | 
             
              it 'ignores feature specs - also with complex options' do
         | 
| 41 | 
            -
                inspect_source( | 
| 42 | 
            -
             | 
| 43 | 
            -
             | 
| 51 | 
            +
                inspect_source(
         | 
| 52 | 
            +
                  cop,
         | 
| 53 | 
            +
                  [
         | 
| 54 | 
            +
                    "describe 'my new feature',",
         | 
| 55 | 
            +
                    '  :test, :type => :feature, :foo => :bar do;',
         | 
| 56 | 
            +
                    'end'
         | 
| 57 | 
            +
                  ]
         | 
| 58 | 
            +
                )
         | 
| 44 59 | 
             
                expect(cop.offenses).to be_empty
         | 
| 45 60 | 
             
              end
         | 
| 46 61 |  | 
| @@ -49,6 +64,11 @@ describe RuboCop::Cop::RSpec::DescribeClass do | |
| 49 64 | 
             
                expect(cop.offenses).to be_empty
         | 
| 50 65 | 
             
              end
         | 
| 51 66 |  | 
| 67 | 
            +
              it 'ignores view specs' do
         | 
| 68 | 
            +
                inspect_source(cop, "describe 'widgets/index', type: :view do; end")
         | 
| 69 | 
            +
                expect(cop.offenses).to be_empty
         | 
| 70 | 
            +
              end
         | 
| 71 | 
            +
             | 
| 52 72 | 
             
              it "doesn't blow up on single-line describes" do
         | 
| 53 73 | 
             
                inspect_source(cop, 'describe Some::Class')
         | 
| 54 74 | 
             
                expect(cop.offenses).to be_empty
         | 
| @@ -4,11 +4,16 @@ describe RuboCop::Cop::RSpec::DescribedClass do | |
| 4 4 | 
             
              subject(:cop) { described_class.new }
         | 
| 5 5 |  | 
| 6 6 | 
             
              it 'checks for the use of the described class' do
         | 
| 7 | 
            -
                inspect_source( | 
| 8 | 
            -
             | 
| 9 | 
            -
             | 
| 10 | 
            -
             | 
| 11 | 
            -
             | 
| 7 | 
            +
                inspect_source(
         | 
| 8 | 
            +
                  cop,
         | 
| 9 | 
            +
                  [
         | 
| 10 | 
            +
                    'describe MyClass do',
         | 
| 11 | 
            +
                    '  include MyClass',
         | 
| 12 | 
            +
                    '  subject { MyClass.do_something }',
         | 
| 13 | 
            +
                    '  before { MyClass.do_something }',
         | 
| 14 | 
            +
                    'end'
         | 
| 15 | 
            +
                  ]
         | 
| 16 | 
            +
                )
         | 
| 12 17 | 
             
                expect(cop.offenses.size).to eq(3)
         | 
| 13 18 | 
             
                expect(cop.offenses.map(&:line).sort).to eq([2, 3, 4])
         | 
| 14 19 | 
             
                expect(cop.messages)
         | 
| @@ -17,41 +22,61 @@ describe RuboCop::Cop::RSpec::DescribedClass do | |
| 17 22 | 
             
              end
         | 
| 18 23 |  | 
| 19 24 | 
             
              it 'ignores described class as string' do
         | 
| 20 | 
            -
                inspect_source( | 
| 21 | 
            -
             | 
| 22 | 
            -
             | 
| 25 | 
            +
                inspect_source(
         | 
| 26 | 
            +
                  cop,
         | 
| 27 | 
            +
                  [
         | 
| 28 | 
            +
                    'describe MyClass do',
         | 
| 29 | 
            +
                    '  subject { "MyClass" }',
         | 
| 30 | 
            +
                    'end'
         | 
| 31 | 
            +
                  ]
         | 
| 32 | 
            +
                )
         | 
| 23 33 | 
             
                expect(cop.offenses).to be_empty
         | 
| 24 34 | 
             
              end
         | 
| 25 35 |  | 
| 26 36 | 
             
              it 'ignores describe that do not referece to a class' do
         | 
| 27 | 
            -
                inspect_source( | 
| 28 | 
            -
             | 
| 29 | 
            -
             | 
| 37 | 
            +
                inspect_source(
         | 
| 38 | 
            +
                  cop,
         | 
| 39 | 
            +
                  [
         | 
| 40 | 
            +
                    'describe "MyClass" do',
         | 
| 41 | 
            +
                    '  subject { "MyClass" }',
         | 
| 42 | 
            +
                    'end'
         | 
| 43 | 
            +
                  ]
         | 
| 44 | 
            +
                )
         | 
| 30 45 | 
             
                expect(cop.offenses).to be_empty
         | 
| 31 46 | 
             
              end
         | 
| 32 47 |  | 
| 33 48 | 
             
              it 'ignores class if the scope is changing' do
         | 
| 34 | 
            -
                inspect_source( | 
| 35 | 
            -
             | 
| 36 | 
            -
             | 
| 37 | 
            -
             | 
| 38 | 
            -
             | 
| 39 | 
            -
             | 
| 40 | 
            -
             | 
| 41 | 
            -
             | 
| 42 | 
            -
             | 
| 43 | 
            -
             | 
| 44 | 
            -
             | 
| 49 | 
            +
                inspect_source(
         | 
| 50 | 
            +
                  cop,
         | 
| 51 | 
            +
                  [
         | 
| 52 | 
            +
                    'describe MyClass do',
         | 
| 53 | 
            +
                    '  def method',
         | 
| 54 | 
            +
                    '    include MyClass',
         | 
| 55 | 
            +
                    '  end',
         | 
| 56 | 
            +
                    '  class OtherClass',
         | 
| 57 | 
            +
                    '    include MyClass',
         | 
| 58 | 
            +
                    '  end',
         | 
| 59 | 
            +
                    '  module MyModle',
         | 
| 60 | 
            +
                    '    include MyClass',
         | 
| 61 | 
            +
                    '  end',
         | 
| 62 | 
            +
                    'end'
         | 
| 63 | 
            +
                  ]
         | 
| 64 | 
            +
                )
         | 
| 45 65 | 
             
                expect(cop.offenses).to be_empty
         | 
| 46 66 | 
             
              end
         | 
| 47 67 |  | 
| 48 68 | 
             
              it 'only takes class from top level describes' do
         | 
| 49 | 
            -
                inspect_source( | 
| 50 | 
            -
             | 
| 51 | 
            -
             | 
| 52 | 
            -
             | 
| 53 | 
            -
             | 
| 54 | 
            -
             | 
| 69 | 
            +
                inspect_source(
         | 
| 70 | 
            +
                  cop,
         | 
| 71 | 
            +
                  [
         | 
| 72 | 
            +
                    'describe MyClass do',
         | 
| 73 | 
            +
                    '  describe MyClass::Foo do',
         | 
| 74 | 
            +
                    '    subject { MyClass::Foo }',
         | 
| 75 | 
            +
                    '    let(:foo) { MyClass }',
         | 
| 76 | 
            +
                    '  end',
         | 
| 77 | 
            +
                    'end'
         | 
| 78 | 
            +
                  ]
         | 
| 79 | 
            +
                )
         | 
| 55 80 | 
             
                expect(cop.offenses.size).to eq(1)
         | 
| 56 81 | 
             
                expect(cop.offenses.map(&:line).sort).to eq([4])
         | 
| 57 82 | 
             
                expect(cop.messages)
         | 
| @@ -60,24 +85,39 @@ describe RuboCop::Cop::RSpec::DescribedClass do | |
| 60 85 | 
             
              end
         | 
| 61 86 |  | 
| 62 87 | 
             
              it 'ignores subclasses' do
         | 
| 63 | 
            -
                inspect_source( | 
| 64 | 
            -
             | 
| 65 | 
            -
             | 
| 88 | 
            +
                inspect_source(
         | 
| 89 | 
            +
                  cop,
         | 
| 90 | 
            +
                  [
         | 
| 91 | 
            +
                    'describe MyClass do',
         | 
| 92 | 
            +
                    '  subject { MyClass::SubClass }',
         | 
| 93 | 
            +
                    'end'
         | 
| 94 | 
            +
                  ]
         | 
| 95 | 
            +
                )
         | 
| 66 96 | 
             
                expect(cop.offenses).to be_empty
         | 
| 67 97 | 
             
              end
         | 
| 68 98 |  | 
| 69 99 | 
             
              it 'ignores if namespace is not matching' do
         | 
| 70 | 
            -
                inspect_source( | 
| 71 | 
            -
             | 
| 72 | 
            -
             | 
| 73 | 
            -
             | 
| 100 | 
            +
                inspect_source(
         | 
| 101 | 
            +
                  cop,
         | 
| 102 | 
            +
                  [
         | 
| 103 | 
            +
                    'describe MyNamespace::MyClass do',
         | 
| 104 | 
            +
                    '  subject { ::MyClass }',
         | 
| 105 | 
            +
                    '  let(:foo) { MyClass }',
         | 
| 106 | 
            +
                    'end'
         | 
| 107 | 
            +
                  ]
         | 
| 108 | 
            +
                )
         | 
| 74 109 | 
             
                expect(cop.offenses).to be_empty
         | 
| 75 110 | 
             
              end
         | 
| 76 111 |  | 
| 77 112 | 
             
              it 'checks for the use of described class with namespace' do
         | 
| 78 | 
            -
                inspect_source( | 
| 79 | 
            -
             | 
| 80 | 
            -
             | 
| 113 | 
            +
                inspect_source(
         | 
| 114 | 
            +
                  cop,
         | 
| 115 | 
            +
                  [
         | 
| 116 | 
            +
                    'describe MyNamespace::MyClass do',
         | 
| 117 | 
            +
                    '  subject { MyNamespace::MyClass }',
         | 
| 118 | 
            +
                    'end'
         | 
| 119 | 
            +
                  ]
         | 
| 120 | 
            +
                )
         | 
| 81 121 | 
             
                expect(cop.offenses.size).to eq(1)
         | 
| 82 122 | 
             
                expect(cop.offenses.map(&:line).sort).to eq([2])
         | 
| 83 123 | 
             
                expect(cop.messages)
         | 
| @@ -87,11 +127,16 @@ describe RuboCop::Cop::RSpec::DescribedClass do | |
| 87 127 |  | 
| 88 128 | 
             
              it 'checks for the use of described class with module' do
         | 
| 89 129 | 
             
                skip
         | 
| 90 | 
            -
                inspect_source( | 
| 91 | 
            -
             | 
| 92 | 
            -
             | 
| 93 | 
            -
             | 
| 94 | 
            -
             | 
| 130 | 
            +
                inspect_source(
         | 
| 131 | 
            +
                  lcop,
         | 
| 132 | 
            +
                  [
         | 
| 133 | 
            +
                    'module MyNamespace',
         | 
| 134 | 
            +
                    '  describe MyClass do',
         | 
| 135 | 
            +
                    '    subject { MyNamespace::MyClass }',
         | 
| 136 | 
            +
                    '  end',
         | 
| 137 | 
            +
                    'end'
         | 
| 138 | 
            +
                  ]
         | 
| 139 | 
            +
                )
         | 
| 95 140 | 
             
                expect(cop.offenses.size).to eq(1)
         | 
| 96 141 | 
             
                expect(cop.offenses.map(&:line).sort).to eq([2])
         | 
| 97 142 | 
             
                expect(cop.messages)
         | 
| @@ -100,15 +145,24 @@ describe RuboCop::Cop::RSpec::DescribedClass do | |
| 100 145 | 
             
              end
         | 
| 101 146 |  | 
| 102 147 | 
             
              it 'autocorrects an offenses' do
         | 
| 103 | 
            -
                new_source = autocorrect_source( | 
| 104 | 
            -
             | 
| 105 | 
            -
             | 
| 106 | 
            -
             | 
| 107 | 
            -
             | 
| 108 | 
            -
             | 
| 109 | 
            -
             | 
| 110 | 
            -
             | 
| 111 | 
            -
             | 
| 112 | 
            -
             | 
| 148 | 
            +
                new_source = autocorrect_source(
         | 
| 149 | 
            +
                  cop,
         | 
| 150 | 
            +
                  [
         | 
| 151 | 
            +
                    'describe MyClass do',
         | 
| 152 | 
            +
                    '  include MyClass',
         | 
| 153 | 
            +
                    '  subject { MyClass.do_something }',
         | 
| 154 | 
            +
                    '  before { MyClass.do_something }',
         | 
| 155 | 
            +
                    'end'
         | 
| 156 | 
            +
                  ]
         | 
| 157 | 
            +
                )
         | 
| 158 | 
            +
                expect(new_source).to eq(
         | 
| 159 | 
            +
                  [
         | 
| 160 | 
            +
                    'describe MyClass do',
         | 
| 161 | 
            +
                    '  include described_class',
         | 
| 162 | 
            +
                    '  subject { described_class.do_something }',
         | 
| 163 | 
            +
                    '  before { described_class.do_something }',
         | 
| 164 | 
            +
                    'end'
         | 
| 165 | 
            +
                  ].join("\n")
         | 
| 166 | 
            +
                )
         | 
| 113 167 | 
             
              end
         | 
| 114 168 | 
             
            end
         | 
| @@ -0,0 +1,83 @@ | |
| 1 | 
            +
            # encoding: utf-8
         | 
| 2 | 
            +
             | 
| 3 | 
            +
            describe RuboCop::Cop::RSpec::ExampleLength, :config do
         | 
| 4 | 
            +
              subject(:cop) { described_class.new(config) }
         | 
| 5 | 
            +
              let(:cop_config) { { 'Max' => 3 } }
         | 
| 6 | 
            +
             | 
| 7 | 
            +
              it 'allows an empty example' do
         | 
| 8 | 
            +
                inspect_source(
         | 
| 9 | 
            +
                  cop,
         | 
| 10 | 
            +
                  [
         | 
| 11 | 
            +
                    'it do',
         | 
| 12 | 
            +
                    'end'
         | 
| 13 | 
            +
                  ]
         | 
| 14 | 
            +
                )
         | 
| 15 | 
            +
                expect(cop.offenses).to be_empty
         | 
| 16 | 
            +
              end
         | 
| 17 | 
            +
             | 
| 18 | 
            +
              it 'allows a short example' do
         | 
| 19 | 
            +
                inspect_source(
         | 
| 20 | 
            +
                  cop,
         | 
| 21 | 
            +
                  [
         | 
| 22 | 
            +
                    'it do',
         | 
| 23 | 
            +
                    '  line 1',
         | 
| 24 | 
            +
                    '  line 2',
         | 
| 25 | 
            +
                    '  line 3',
         | 
| 26 | 
            +
                    'end'
         | 
| 27 | 
            +
                  ]
         | 
| 28 | 
            +
                )
         | 
| 29 | 
            +
                expect(cop.offenses).to be_empty
         | 
| 30 | 
            +
              end
         | 
| 31 | 
            +
             | 
| 32 | 
            +
              it 'doesn\t allow a long example' do
         | 
| 33 | 
            +
                inspect_source(
         | 
| 34 | 
            +
                  cop,
         | 
| 35 | 
            +
                  [
         | 
| 36 | 
            +
                    'it do',
         | 
| 37 | 
            +
                    '  line 1',
         | 
| 38 | 
            +
                    '  line 2',
         | 
| 39 | 
            +
                    '  line 3',
         | 
| 40 | 
            +
                    '  line 4',
         | 
| 41 | 
            +
                    'end'
         | 
| 42 | 
            +
                  ]
         | 
| 43 | 
            +
                )
         | 
| 44 | 
            +
                expect(cop.offenses.size).to eq(1)
         | 
| 45 | 
            +
                expect(cop.offenses.map(&:line).sort).to eq([1])
         | 
| 46 | 
            +
                expect(cop.messages).to eq(['Example has too many lines. [4/3]'])
         | 
| 47 | 
            +
              end
         | 
| 48 | 
            +
             | 
| 49 | 
            +
              it 'ignores comments' do
         | 
| 50 | 
            +
                inspect_source(
         | 
| 51 | 
            +
                  cop,
         | 
| 52 | 
            +
                  [
         | 
| 53 | 
            +
                    'it do',
         | 
| 54 | 
            +
                    '  line 1',
         | 
| 55 | 
            +
                    '  line 2',
         | 
| 56 | 
            +
                    '  # comment',
         | 
| 57 | 
            +
                    '  line 3',
         | 
| 58 | 
            +
                    'end'
         | 
| 59 | 
            +
                  ]
         | 
| 60 | 
            +
                )
         | 
| 61 | 
            +
                expect(cop.offenses).to be_empty
         | 
| 62 | 
            +
              end
         | 
| 63 | 
            +
             | 
| 64 | 
            +
              context 'with CountComments enabled' do
         | 
| 65 | 
            +
                before { cop_config['CountComments'] = true }
         | 
| 66 | 
            +
             | 
| 67 | 
            +
                it 'counts comments' do
         | 
| 68 | 
            +
                  inspect_source(
         | 
| 69 | 
            +
                    cop, [
         | 
| 70 | 
            +
                      'it do',
         | 
| 71 | 
            +
                      '  line 1',
         | 
| 72 | 
            +
                      '  line 2',
         | 
| 73 | 
            +
                      '  # comment',
         | 
| 74 | 
            +
                      '  line 3',
         | 
| 75 | 
            +
                      'end'
         | 
| 76 | 
            +
                    ]
         | 
| 77 | 
            +
                  )
         | 
| 78 | 
            +
                  expect(cop.offenses.size).to eq(1)
         | 
| 79 | 
            +
                  expect(cop.offenses.map(&:line).sort).to eq([1])
         | 
| 80 | 
            +
                  expect(cop.messages).to eq(['Example has too many lines. [4/3]'])
         | 
| 81 | 
            +
                end
         | 
| 82 | 
            +
              end
         | 
| 83 | 
            +
            end
         | 
| @@ -37,9 +37,14 @@ describe RuboCop::Cop::RSpec::ExampleWording, :config do | |
| 37 37 | 
             
              end
         | 
| 38 38 |  | 
| 39 39 | 
             
              it 'skips descriptions without `should` at the beginning' do
         | 
| 40 | 
            -
                inspect_source( | 
| 41 | 
            -
             | 
| 42 | 
            -
             | 
| 40 | 
            +
                inspect_source(
         | 
| 41 | 
            +
                  cop,
         | 
| 42 | 
            +
                  [
         | 
| 43 | 
            +
                    "it 'finds no should ' \\",
         | 
| 44 | 
            +
                    "   'here' do",
         | 
| 45 | 
            +
                    'end'
         | 
| 46 | 
            +
                  ]
         | 
| 47 | 
            +
                )
         | 
| 43 48 | 
             
                expect(cop.offenses).to be_empty
         | 
| 44 49 | 
             
              end
         | 
| 45 50 |  | 
| @@ -60,8 +65,10 @@ describe RuboCop::Cop::RSpec::ExampleWording, :config do | |
| 60 65 | 
             
              end
         | 
| 61 66 |  | 
| 62 67 | 
             
              it "autocorrects shouldn't" do
         | 
| 63 | 
            -
                new_source =
         | 
| 64 | 
            -
                   | 
| 68 | 
            +
                new_source = autocorrect_source(
         | 
| 69 | 
            +
                  cop,
         | 
| 70 | 
            +
                  'it "shouldn\'t return something" do; end'
         | 
| 71 | 
            +
                )
         | 
| 65 72 | 
             
                expect(new_source).to eq('it "does not return something" do; end')
         | 
| 66 73 | 
             
              end
         | 
| 67 74 | 
             
            end
         | 
| @@ -5,9 +5,11 @@ describe RuboCop::Cop::RSpec::FilePath, :config do | |
| 5 5 | 
             
              let(:cop_config) { { 'CustomTransform' => { 'FooFoo' => 'foofoo' } } }
         | 
| 6 6 |  | 
| 7 7 | 
             
              it 'checks the path' do
         | 
| 8 | 
            -
                inspect_source( | 
| 9 | 
            -
             | 
| 10 | 
            -
             | 
| 8 | 
            +
                inspect_source(
         | 
| 9 | 
            +
                  cop,
         | 
| 10 | 
            +
                  "describe MyClass, 'foo' do; end",
         | 
| 11 | 
            +
                  'wrong_path_foo_spec.rb'
         | 
| 12 | 
            +
                )
         | 
| 11 13 | 
             
                expect(cop.offenses.size).to eq(1)
         | 
| 12 14 | 
             
                expect(cop.offenses.map(&:line).sort).to eq([1])
         | 
| 13 15 | 
             
                expect(cop.messages)
         | 
| @@ -15,9 +17,11 @@ describe RuboCop::Cop::RSpec::FilePath, :config do | |
| 15 17 | 
             
              end
         | 
| 16 18 |  | 
| 17 19 | 
             
              it 'checks the path' do
         | 
| 18 | 
            -
                inspect_source( | 
| 19 | 
            -
             | 
| 20 | 
            -
             | 
| 20 | 
            +
                inspect_source(
         | 
| 21 | 
            +
                  cop,
         | 
| 22 | 
            +
                  "describe MyClass, '#foo' do; end",
         | 
| 23 | 
            +
                  'wrong_class_foo_spec.rb'
         | 
| 24 | 
            +
                )
         | 
| 21 25 | 
             
                expect(cop.offenses.size).to eq(1)
         | 
| 22 26 | 
             
                expect(cop.offenses.map(&:line).sort).to eq([1])
         | 
| 23 27 | 
             
                expect(cop.messages)
         | 
| @@ -25,9 +29,11 @@ describe RuboCop::Cop::RSpec::FilePath, :config do | |
| 25 29 | 
             
              end
         | 
| 26 30 |  | 
| 27 31 | 
             
              it 'checks class spec paths' do
         | 
| 28 | 
            -
                inspect_source( | 
| 29 | 
            -
             | 
| 30 | 
            -
             | 
| 32 | 
            +
                inspect_source(
         | 
| 33 | 
            +
                  cop,
         | 
| 34 | 
            +
                  'describe MyClass do; end',
         | 
| 35 | 
            +
                  'wrong_class_spec.rb'
         | 
| 36 | 
            +
                )
         | 
| 31 37 | 
             
                expect(cop.offenses.size).to eq(1)
         | 
| 32 38 | 
             
                expect(cop.offenses.map(&:line).sort).to eq([1])
         | 
| 33 39 | 
             
                expect(cop.messages)
         | 
| @@ -35,24 +41,32 @@ describe RuboCop::Cop::RSpec::FilePath, :config do | |
| 35 41 | 
             
              end
         | 
| 36 42 |  | 
| 37 43 | 
             
              it 'skips specs that do not describe a class / method' do
         | 
| 38 | 
            -
                inspect_source( | 
| 39 | 
            -
             | 
| 40 | 
            -
             | 
| 44 | 
            +
                inspect_source(
         | 
| 45 | 
            +
                  cop,
         | 
| 46 | 
            +
                  "describe 'Test something' do; end",
         | 
| 47 | 
            +
                  'some/class/spec.rb'
         | 
| 48 | 
            +
                )
         | 
| 41 49 | 
             
                expect(cop.offenses).to be_empty
         | 
| 42 50 | 
             
              end
         | 
| 43 51 |  | 
| 44 52 | 
             
              it 'skips specs that do have multiple top level describes' do
         | 
| 45 | 
            -
                inspect_source( | 
| 46 | 
            -
             | 
| 47 | 
            -
             | 
| 48 | 
            -
             | 
| 53 | 
            +
                inspect_source(
         | 
| 54 | 
            +
                  cop,
         | 
| 55 | 
            +
                  [
         | 
| 56 | 
            +
                    "describe MyClass, 'do_this' do; end",
         | 
| 57 | 
            +
                    "describe MyClass, 'do_that' do; end"
         | 
| 58 | 
            +
                  ],
         | 
| 59 | 
            +
                  'some/class/spec.rb'
         | 
| 60 | 
            +
                )
         | 
| 49 61 | 
             
                expect(cop.offenses).to be_empty
         | 
| 50 62 | 
             
              end
         | 
| 51 63 |  | 
| 52 64 | 
             
              it 'ignores second argument if is not a string' do
         | 
| 53 | 
            -
                inspect_source( | 
| 54 | 
            -
             | 
| 55 | 
            -
             | 
| 65 | 
            +
                inspect_source(
         | 
| 66 | 
            +
                  cop,
         | 
| 67 | 
            +
                  'describe MyClass, :foo do; end',
         | 
| 68 | 
            +
                  'wrong_class_spec.rb'
         | 
| 69 | 
            +
                )
         | 
| 56 70 | 
             
                expect(cop.offenses.size).to eq(1)
         | 
| 57 71 | 
             
                expect(cop.offenses.map(&:line).sort).to eq([1])
         | 
| 58 72 | 
             
                expect(cop.messages)
         | 
| @@ -60,100 +74,146 @@ describe RuboCop::Cop::RSpec::FilePath, :config do | |
| 60 74 | 
             
              end
         | 
| 61 75 |  | 
| 62 76 | 
             
              it 'checks class specs' do
         | 
| 63 | 
            -
                inspect_source( | 
| 64 | 
            -
             | 
| 65 | 
            -
             | 
| 77 | 
            +
                inspect_source(
         | 
| 78 | 
            +
                  cop,
         | 
| 79 | 
            +
                  'describe Some::Class do; end',
         | 
| 80 | 
            +
                  'some/class_spec.rb'
         | 
| 81 | 
            +
                )
         | 
| 66 82 | 
             
                expect(cop.offenses).to be_empty
         | 
| 67 83 | 
             
              end
         | 
| 68 84 |  | 
| 69 85 | 
             
              it 'handles CamelCaps class names' do
         | 
| 70 | 
            -
                inspect_source( | 
| 71 | 
            -
             | 
| 72 | 
            -
             | 
| 86 | 
            +
                inspect_source(
         | 
| 87 | 
            +
                  cop,
         | 
| 88 | 
            +
                  'describe MyClass do; end',
         | 
| 89 | 
            +
                  'my_class_spec.rb'
         | 
| 90 | 
            +
                )
         | 
| 73 91 | 
             
                expect(cop.offenses).to be_empty
         | 
| 74 92 | 
             
              end
         | 
| 75 93 |  | 
| 76 94 | 
             
              it 'handles ACRONYMClassNames' do
         | 
| 77 | 
            -
                inspect_source( | 
| 78 | 
            -
             | 
| 79 | 
            -
             | 
| 95 | 
            +
                inspect_source(
         | 
| 96 | 
            +
                  cop,
         | 
| 97 | 
            +
                  'describe ABCOne::Two do; end',
         | 
| 98 | 
            +
                  'abc_one/two_spec.rb'
         | 
| 99 | 
            +
                )
         | 
| 80 100 | 
             
                expect(cop.offenses).to be_empty
         | 
| 81 101 | 
             
              end
         | 
| 82 102 |  | 
| 83 103 | 
             
              it 'handles ALLCAPS class names' do
         | 
| 84 | 
            -
                inspect_source( | 
| 85 | 
            -
             | 
| 86 | 
            -
             | 
| 104 | 
            +
                inspect_source(
         | 
| 105 | 
            +
                  cop,
         | 
| 106 | 
            +
                  'describe ALLCAPS do; end',
         | 
| 107 | 
            +
                  'allcaps_spec.rb'
         | 
| 108 | 
            +
                )
         | 
| 109 | 
            +
                expect(cop.offenses).to be_empty
         | 
| 110 | 
            +
              end
         | 
| 111 | 
            +
             | 
| 112 | 
            +
              it 'handles alphanumeric class names' do
         | 
| 113 | 
            +
                inspect_source(
         | 
| 114 | 
            +
                  cop,
         | 
| 115 | 
            +
                  'describe IPV6 do; end',
         | 
| 116 | 
            +
                  'ipv6_spec.rb'
         | 
| 117 | 
            +
                )
         | 
| 87 118 | 
             
                expect(cop.offenses).to be_empty
         | 
| 88 119 | 
             
              end
         | 
| 89 120 |  | 
| 90 121 | 
             
              it 'checks instance methods' do
         | 
| 91 | 
            -
                inspect_source( | 
| 92 | 
            -
             | 
| 93 | 
            -
             | 
| 122 | 
            +
                inspect_source(
         | 
| 123 | 
            +
                  cop,
         | 
| 124 | 
            +
                  "describe Some::Class, '#inst' do; end",
         | 
| 125 | 
            +
                  'some/class/inst_spec.rb'
         | 
| 126 | 
            +
                )
         | 
| 94 127 | 
             
                expect(cop.offenses).to be_empty
         | 
| 95 128 | 
             
              end
         | 
| 96 129 |  | 
| 97 130 | 
             
              it 'checks class methods' do
         | 
| 98 | 
            -
                inspect_source( | 
| 99 | 
            -
             | 
| 100 | 
            -
             | 
| 131 | 
            +
                inspect_source(
         | 
| 132 | 
            +
                  cop,
         | 
| 133 | 
            +
                  "describe Some::Class, '.inst' do; end",
         | 
| 134 | 
            +
                  'some/class/inst_spec.rb'
         | 
| 135 | 
            +
                )
         | 
| 101 136 | 
             
                expect(cop.offenses).to be_empty
         | 
| 102 137 | 
             
              end
         | 
| 103 138 |  | 
| 104 139 | 
             
              it 'allows flat hierarchies for instance methods' do
         | 
| 105 | 
            -
                inspect_source( | 
| 106 | 
            -
             | 
| 107 | 
            -
             | 
| 140 | 
            +
                inspect_source(
         | 
| 141 | 
            +
                  cop,
         | 
| 142 | 
            +
                  "describe Some::Class, '#inst' do; end",
         | 
| 143 | 
            +
                  'some/class_inst_spec.rb'
         | 
| 144 | 
            +
                )
         | 
| 108 145 | 
             
                expect(cop.offenses).to be_empty
         | 
| 109 146 | 
             
              end
         | 
| 110 147 |  | 
| 111 148 | 
             
              it 'allows flat hierarchies for class methods' do
         | 
| 112 | 
            -
                inspect_source( | 
| 113 | 
            -
             | 
| 114 | 
            -
             | 
| 149 | 
            +
                inspect_source(
         | 
| 150 | 
            +
                  cop,
         | 
| 151 | 
            +
                  "describe Some::Class, '.inst' do; end",
         | 
| 152 | 
            +
                  'some/class_inst_spec.rb'
         | 
| 153 | 
            +
                )
         | 
| 115 154 | 
             
                expect(cop.offenses).to be_empty
         | 
| 116 155 | 
             
              end
         | 
| 117 156 |  | 
| 118 157 | 
             
              it 'allows subdirs for instance methods' do
         | 
| 119 | 
            -
                inspect_source( | 
| 120 | 
            -
             | 
| 121 | 
            -
             | 
| 158 | 
            +
                inspect_source(
         | 
| 159 | 
            +
                  cop,
         | 
| 160 | 
            +
                  "describe Some::Class, '#inst' do; end",
         | 
| 161 | 
            +
                  'some/class/instance_methods/inst_spec.rb'
         | 
| 162 | 
            +
                )
         | 
| 122 163 | 
             
                expect(cop.offenses).to be_empty
         | 
| 123 164 | 
             
              end
         | 
| 124 165 |  | 
| 125 166 | 
             
              it 'allows subdirs for class methods' do
         | 
| 126 | 
            -
                inspect_source( | 
| 127 | 
            -
             | 
| 128 | 
            -
             | 
| 167 | 
            +
                inspect_source(
         | 
| 168 | 
            +
                  cop,
         | 
| 169 | 
            +
                  "describe Some::Class, '.inst' do; end",
         | 
| 170 | 
            +
                  'some/class/class_methods/inst_spec.rb'
         | 
| 171 | 
            +
                )
         | 
| 129 172 | 
             
                expect(cop.offenses).to be_empty
         | 
| 130 173 | 
             
              end
         | 
| 131 174 |  | 
| 132 175 | 
             
              it 'ignores non-alphanumeric characters' do
         | 
| 133 | 
            -
                inspect_source( | 
| 134 | 
            -
             | 
| 135 | 
            -
             | 
| 176 | 
            +
                inspect_source(
         | 
| 177 | 
            +
                  cop,
         | 
| 178 | 
            +
                  "describe Some::Class, '#pred?' do; end",
         | 
| 179 | 
            +
                  'some/class/pred_spec.rb'
         | 
| 180 | 
            +
                )
         | 
| 136 181 | 
             
                expect(cop.offenses).to be_empty
         | 
| 137 182 | 
             
              end
         | 
| 138 183 |  | 
| 139 184 | 
             
              it 'allows flexibility with predicates' do
         | 
| 140 | 
            -
                inspect_source( | 
| 141 | 
            -
             | 
| 142 | 
            -
             | 
| 185 | 
            +
                inspect_source(
         | 
| 186 | 
            +
                  cop,
         | 
| 187 | 
            +
                  "describe Some::Class, '#thing?' do; end",
         | 
| 188 | 
            +
                  'some/class/thing_predicate_spec.rb'
         | 
| 189 | 
            +
                )
         | 
| 143 190 | 
             
                expect(cop.offenses).to be_empty
         | 
| 144 191 | 
             
              end
         | 
| 145 192 |  | 
| 146 193 | 
             
              it 'allows flexibility with operators' do
         | 
| 147 | 
            -
                inspect_source( | 
| 148 | 
            -
             | 
| 149 | 
            -
             | 
| 194 | 
            +
                inspect_source(
         | 
| 195 | 
            +
                  cop,
         | 
| 196 | 
            +
                  "describe MyClass, '#<=>' do; end",
         | 
| 197 | 
            +
                  'my_class/spaceship_operator_spec.rb'
         | 
| 198 | 
            +
                )
         | 
| 150 199 | 
             
                expect(cop.offenses).to be_empty
         | 
| 151 200 | 
             
              end
         | 
| 152 201 |  | 
| 153 202 | 
             
              it 'respects custom module name transformation' do
         | 
| 154 | 
            -
                inspect_source( | 
| 155 | 
            -
             | 
| 156 | 
            -
             | 
| 203 | 
            +
                inspect_source(
         | 
| 204 | 
            +
                  cop,
         | 
| 205 | 
            +
                  "describe FooFoo::Some::Class, '#bar' do; end",
         | 
| 206 | 
            +
                  'foofoo/some/class/bar_spec.rb'
         | 
| 207 | 
            +
                )
         | 
| 208 | 
            +
                expect(cop.offenses).to be_empty
         | 
| 209 | 
            +
              end
         | 
| 210 | 
            +
             | 
| 211 | 
            +
              it 'ignores routing specs' do
         | 
| 212 | 
            +
                inspect_source(
         | 
| 213 | 
            +
                  cop,
         | 
| 214 | 
            +
                  'describe MyController, type: :routing do; end',
         | 
| 215 | 
            +
                  'foofoo/some/class/bar_spec.rb'
         | 
| 216 | 
            +
                )
         | 
| 157 217 | 
             
                expect(cop.offenses).to be_empty
         | 
| 158 218 | 
             
              end
         | 
| 159 219 | 
             
            end
         |