describe :thread_start, shared: true do before :each do ScratchPad.clear end it "raises an ArgumentError if not passed a block" do -> { Thread.send(@method) }.should.raise(ArgumentError) end it "spawns a new Thread running the block" do run = false t = Thread.send(@method) { run = true } t.should.is_a?(Thread) t.join run.should == true end it "respects Thread subclasses" do c = Class.new(Thread) t = c.send(@method) { } t.should.is_a?(c) t.join end it "does not call #initialize" do c = Class.new(Thread) do def initialize ScratchPad.record :bad end end t = c.send(@method) { } t.join ScratchPad.recorded.should == nil end end