require 'spec_helper'

describe Travis::Api::App::Extensions::SubclassTracker do
  let!(:root) { Sinatra.new { register Travis::Api::App::Extensions::SubclassTracker } }
  let!(:left) { Class.new(root) }
  let!(:right) { Class.new(root) }
  let!(:sub1) { Class.new(right) }
  let!(:sub2) { Class.new(right) }

  it 'tracks direct subclasses' do
    classes = root.direct_subclasses
    classes.size.should == 2
    classes.should include(left)
    classes.should include(right)
  end

  it 'tracks leaf subclasses' do
    classes = root.subclasses
    classes.size.should == 3
    classes.should include(left)
    classes.should include(sub1)
    classes.should include(sub2)
  end

  it 'tracks subclasses of subclasses properly' do
    classes = right.subclasses
    classes.size.should == 2
    classes.should include(sub1)
    classes.should include(sub2)
  end
end