Sha256: 4e943de5f3d64696dc2410472d982b329304f3b969d0b66fbca214e9df60e163

Contents?: true

Size: 1.66 KB

Versions: 1

Compression:

Stored size: 1.66 KB

Contents

require_relative '../../spec_helper'
require_lib 'reek/context/code_context'
require_lib 'reek/smells/nil_check'
require_relative 'smell_detector_shared'

RSpec.describe Reek::Smells::NilCheck do
  it 'reports correctly the basic use case' do
    src = <<-EOS
      def nilcheck foo
        foo.nil?
      end
    EOS
    expect(src).to reek_of :NilCheck,
                           lines: [2],
                           message: 'performs a nil-check'
  end

  it 'reports nothing when scope includes no nil checks' do
    expect('def no_nils; end').not_to reek_of(:NilCheck)
  end

  it 'reports when scope uses multiple nil? methods' do
    src = <<-EOS
    def chk_multi_nil(para)
      para.nil?
      puts "Hello"
      \"\".nil?
    end
    EOS
    expect(src).to reek_of(:NilCheck)
  end

  it 'reports twice when scope uses == nil and === nil' do
    src = <<-EOS
    def chk_eq_nil(para)
      para == nil
      para === nil
    end
    EOS
    expect(src).to reek_of(:NilCheck)
  end

  it 'reports when scope uses nil ==' do
    expect('def chk_eq_nil_rev(para); nil == para; end').to reek_of(:NilCheck)
  end

  it 'reports when scope uses multiple case-clauses checking nil' do
    src = <<-EOS
    def case_nil
      case @inst_var
      when nil then puts "Nil"
      end
      puts "Hello"
      case @inst_var2
      when 1 then puts 1
      when nil then puts nil.inspect
      end
    end
    EOS
    expect(src).to reek_of(:NilCheck)
  end

  it 'reports a when clause that checks nil and other values' do
    src = <<-EOS
    def case_nil
      case @inst_var
      when nil, false then puts "Hello"
      end
    end
    EOS
    expect(src).to reek_of(:NilCheck)
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
reek-4.2.4 spec/reek/smells/nil_check_spec.rb