Sha256: c3e9f0fa353cf2b85483a5ee39c624bb0c535521ef1ba82548208ee8bc167e5c

Contents?: true

Size: 1.23 KB

Versions: 1

Compression:

Stored size: 1.23 KB

Contents

require File.dirname(__FILE__) + '/../../spec_helper.rb'

require 'reek/method_checker'
require 'reek/report'

include Reek

def check(desc, src, expected, pending_str = nil)
  it(desc) do
    pending(pending_str) unless pending_str.nil?
    rpt = Report.new
    cchk = MethodChecker.new(rpt, 'Thing')
    cchk.check_source(src)
    rpt.length.should == expected.length
    (0...rpt.length).each do |smell|
      expected[smell].each { |patt| rpt[smell].detailed_report.should match(patt) }
    end
  end
end

describe MethodChecker, " nested iterators" do

  check 'should report nested iterators in a method',
    'def bad(fred) @fred.each {|item| item.each {|ting| ting.ting} } end', [[/nested iterators/]]

  check 'should not report method with successive iterators',
    'def bad(fred)
      @fred.each {|item| item.each }
      @jim.each {|ting| ting.each }
    end', []

  check 'should not report method with chained iterators',
    'def chained
      @sig.keys.sort_by { |x| x.to_s }.each { |m| md5 << m.to_s }
    end', []

  check 'should report nested iterators only once per method',
    'def bad(fred)
  @fred.each {|item| item.each {|part| @joe.send} }
  @jim.each {|ting| ting.each {|piece| @hal.send} }
end', [[/nested iterators/]]
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
reek-0.3.1 spec/reek/smells/nested_iterators_spec.rb