require 'spec_helper' require 'reek/smells/data_clump' require 'reek/smells/smell_detector_shared' include Reek::Smells shared_examples_for 'a data clump detector' do it 'does not report small parameter sets' do src = < 3, DataClump::PARAMETERS_KEY => ['pa', 'pb']}) end it 'reports 3 identical parameter sets' do src = < 3, DataClump::PARAMETERS_KEY => ['pa', 'pb', 'pc']}) end it 'reports re-ordered identical parameter sets' do src = < 3, DataClump::PARAMETERS_KEY => ['pa', 'pb', 'pc']}) end it 'counts only identical parameter sets' do src = < 5) end it 'correctly checks number of occurences' do src = <<-EOS #{@context} Smelly def fa(p1, p2, p3) end def fb(p2, p3, p4) end def fc(p3, p4, p5) end def fd(p4, p5, p1) end def fe(p5, p1, p2) end end EOS src.should_not smell_of(DataClump) end it 'detects clumps smaller than the total number of arguments' do src = <<-EOS #{@context} Smelly def fa(p1, p2, p3) end def fb(p1, p3, p2) end def fc(p4, p1, p2) end end EOS src.should smell_of(DataClump, { DataClump::PARAMETERS_KEY => %w(p1 p2) }) end end describe DataClump do before(:each) do @detector = DataClump.new('newt') end it_should_behave_like 'SmellDetector' context 'in a class' do before :each do @context = 'class' end it_should_behave_like 'a data clump detector' end context 'in a module' do before :each do @context = 'module' end it_should_behave_like 'a data clump detector' end # TODO: include singleton methods in the calcs end