require File.expand_path(File.join(File.dirname(__FILE__), '..', 'lib', 'wortsammler', 'class.Traceable.rb')) require 'tmpdir' describe TraceableSet do before :all do @set=TraceableSet.new @second_set=TraceableSet.new end it "should return a blank instance" do TraceableSet.new.class.should == TraceableSet end it "allows to add Traceables" do x=Traceable.new x.id="foo0" x.origin="0" @set.add(x) @set["foo"].nil?.should == true @set["foo0"].id.should == "foo0" end it "delivers the first of the duplicates" do x=Traceable.new x.id="xfoo" x.origin="1" @set.add(x) x=Traceable.new x.id="xfoo" x.origin="2" @set.add(x) y=@set["xfoo"] y.id.should == "xfoo" y.class.should == Traceable y.origin.should == "1" x.origin="2.2" @set["xfoo"].origin.should == "1" end it "advertises duplicates" do x=Traceable.new x.id="foo" x.origin="1" @set.add(x) x=Traceable.new x.id="bar" x.origin="2" @set.add(x) x=Traceable.new x.id="foo" x.origin="3" @set.add(x) x=Traceable.new x.id="bar" x.origin="4" @set.add(x) x=Traceable.new x.id="foobar" x.origin="5" @set.add(x) @set.duplicate_ids.count.should == 3 @set.duplicate_ids[0].should == "bar" @set.duplicate_ids[1].should == "foo" @set.duplicate_traces[0][0].origin.should == "2" @set.duplicate_traces[0][1].origin.should == "4" @set.duplicate_traces[1][0].origin.should == "1" @set.duplicate_traces[1][1].origin.should == "3" end it "adertises undefined traceables" do x=Traceable.new x.id="rs_xy_001" x.origin="1" x.contributes_to = ["rs_xy_002", "rs_xy_003", "rs_xy_004", "rs_xy_005"] @set.add(x) x=Traceable.new x.id="rs_xy_002" x.origin="2" x.contributes_to = ["rs_xy_001", "rs_xy_003", "rs_xy_004", "rs_xy_005"] @set.add(x) undefineds = @set.undefined_ids undefineds.count.should == 3 end it "advertises all traceables" do @set.all_trace_ids.should == ["bar", "foo", "foo0", "foobar", "rs_xy_001", "rs_xy_002", "xfoo"] end it "advertises a hash of supporting traces" do @set.uptrace_ids["rs_xy_001"].should == ["rs_xy_002"] end it "advertises traceable ids of a particular category" do x=Traceable.new x.id="rs_spec_000" x.origin="1" x.category=:spec_item @set.add(x) x=Traceable.new x.id="rs_spec_001" x.origin="2" x.category=:spec_item @set.add(x) @set.all_trace_ids(:spec_item).should == ["rs_spec_000", "rs_spec_001"] end it "advertises ttraceables of a particular category" do @set.all_traces(:spec_item).first.id.should == "rs_spec_000" end it "merges traceables" do x=Traceable.new x.id="rs_merge_001" x.origin="2" @second_set.add(x) x=Traceable.new x.id="rs_merge_002" x.origin="2" x.category=:spec_item @second_set.add(x) x=Traceable.new x.id="rs_merge_002" x.origin="2" x.category=:spec_item @set.add(x) @second_set.merge(@set) wanted = ["bar", "foo", "foo0", "foobar", "rs_merge_001", "rs_merge_002", "rs_spec_000", "rs_spec_001", "rs_xy_001", "rs_xy_002", "xfoo"] got = @second_set.all_trace_ids dups = @second_set.duplicate_ids @second_set.all_trace_ids.should == wanted end it "exposes deleted Traceables" do x=Traceable.new x.id="rs_deleted_001" x.origin="2" x.category=:spec_item @second_set.add(x) @set.deleted_trace_ids(@second_set).should == ["rs_deleted_001", "rs_merge_001"] end it "exposes added Traceables" do x=Traceable.new x.id="rs_added_001" x.origin="2" x.category=:spec_item @set.add(x) @set.added_trace_ids(@second_set).should == ["rs_added_001"] end it "exposes deleted Traceables of category" do @set.deleted_trace_ids(@second_set, :spec_item).should == ["rs_deleted_001"] end it "exposes added Traceables of category" do x=Traceable.new @set.added_trace_ids(@second_set, :spec_item).should == ["rs_added_001"] end it "exploses changed traceids as array of [Traceid, levensthein, diff_as_html]" do x=Traceable.new x.id="rs_changed_001" x.header_orig="this is headline" x.body_orig="Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet." x.origin="3" x.category=:spec_item @set.add(x) y=Traceable.new y.id="rs_changed_001" y.header_orig="this is the headline" y.body_orig="Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sede diam nonumy diadem tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet." y.origin="4" y.category=:spec_item y.origin="4" @second_set.add(y) puts @set.changed_trace_ids(@second_set).should == [["rs_changed_001", "n/a", "