Sha256: 01f13b1d36bbd2df1f1d3d3b49709224b3dbe89b2d6910e4f517ab9f24f2c589

Contents?: true

Size: 1.8 KB

Versions: 23

Compression:

Stored size: 1.8 KB

Contents

require_relative '../../spec_helper'
require_lib 'reek/smell_detectors/too_many_constants'

RSpec.describe Reek::SmellDetectors::ManualDispatch do
  it 'reports the right values' do
    src = <<-EOS
      class Alfa
        def bravo(charlie)
          true if charlie.respond_to?(:to_a)
        end
      end
    EOS

    expect(src).to reek_of(:ManualDispatch,
                           lines:   [3],
                           context: 'Alfa#bravo',
                           message: 'manually dispatches method call',
                           source:  'string')
  end

  it 'does count all occurences' do
    src = <<-EOS
      class Alfa
        def bravo(charlie)
          true if charlie.respond_to?(:to_a)
        end

        def delta(echo)
          true if echo.respond_to?(:to_a)
        end
      end
    EOS

    expect(src).
      to reek_of(:ManualDispatch, lines: [3], context: 'Alfa#bravo').
      and reek_of(:ManualDispatch, lines: [7], context: 'Alfa#delta')
  end

  it 'reports manual dispatch smell when using #respond_to? on implicit self' do
    src = <<-EOS
      class Alfa
        def bravo
          charlie if respond_to?(:delta)
        end
      end
    EOS

    expect(src).to reek_of(:ManualDispatch)
  end

  it 'reports manual dispatch within a conditional' do
    src = <<-EOS
      class Alfa
        def bravo
          charlie.respond_to?(:delta) && charlie.echo
        end
      end
    EOS

    expect(src).to reek_of(:ManualDispatch)
  end

  it 'reports occurences in a single method as one smell warning' do
    src = <<-EOS
      class Alfa
        def bravo(charlie, delta)
          return true if charlie.respond_to?(:to_a)
          true if delta.respond_to?(:to_a)
        end
      end
    EOS

    expect(src).to reek_of(:ManualDispatch, lines: [3, 4], context: 'Alfa#bravo')
  end
end

Version data entries

23 entries across 21 versions & 2 rubygems

Version Path
reek-5.3.1 spec/reek/smell_detectors/manual_dispatch_spec.rb
reek-5.3.0 spec/reek/smell_detectors/manual_dispatch_spec.rb
config_gems_initialization_aim-0.1.4 vendor/bundle/ruby/2.5.0/gems/reek-5.2.0/spec/reek/smell_detectors/manual_dispatch_spec.rb
config_gems_initialization_aim-0.1.4 vendor/bundle/ruby/2.5.0/gems/config_gems_initialization_aim-0.1.1/vendor/bundle/ruby/2.5.0/gems/reek-5.2.0/spec/reek/smell_detectors/manual_dispatch_spec.rb
config_gems_initialization_aim-0.1.3 vendor/bundle/ruby/2.5.0/gems/reek-5.2.0/spec/reek/smell_detectors/manual_dispatch_spec.rb
config_gems_initialization_aim-0.1.3 vendor/bundle/ruby/2.5.0/gems/config_gems_initialization_aim-0.1.1/vendor/bundle/ruby/2.5.0/gems/reek-5.2.0/spec/reek/smell_detectors/manual_dispatch_spec.rb
reek-5.2.0 spec/reek/smell_detectors/manual_dispatch_spec.rb
reek-5.1.0 spec/reek/smell_detectors/manual_dispatch_spec.rb
reek-5.0.2 spec/reek/smell_detectors/manual_dispatch_spec.rb
reek-5.0.1 spec/reek/smell_detectors/manual_dispatch_spec.rb
reek-5.0.0 spec/reek/smell_detectors/manual_dispatch_spec.rb
reek-4.8.2 spec/reek/smell_detectors/manual_dispatch_spec.rb
reek-4.8.1 spec/reek/smell_detectors/manual_dispatch_spec.rb
reek-4.8.0 spec/reek/smell_detectors/manual_dispatch_spec.rb
reek-4.7.3 spec/reek/smell_detectors/manual_dispatch_spec.rb
reek-4.7.2 spec/reek/smell_detectors/manual_dispatch_spec.rb
reek-4.7.1 spec/reek/smell_detectors/manual_dispatch_spec.rb
reek-4.7.0 spec/reek/smell_detectors/manual_dispatch_spec.rb
reek-4.6.2 spec/reek/smell_detectors/manual_dispatch_spec.rb
reek-4.6.1 spec/reek/smell_detectors/manual_dispatch_spec.rb