class Test::Unit::Fixture::Fixture

def [](type)

def [](type)
  case type
  when :setup
    @setup
  when :cleanup
    @cleanup
  when :teardown
    @teardown
  end
end

def after_callbacks(type)

def after_callbacks(type)
  @cached_after_callbacks[type] ||= collect_after_callbacks(type)
end

def before_callbacks(type)

def before_callbacks(type)
  @cached_before_callbacks[type] ||= collect_before_callbacks(type)
end

def collect_after_callbacks(type)

def collect_after_callbacks(type)
  prepend_callbacks = []
  append_callbacks = []
  target_test_cases.each do |ancestor|
    prepend_callbacks << ancestor.fixture[type].after_prepend_callbacks
    append_callbacks << ancestor.fixture[type].after_append_callbacks
  end
  merge_callbacks(prepend_callbacks, append_callbacks)
end

def collect_before_callbacks(type)

def collect_before_callbacks(type)
  prepend_callbacks = []
  append_callbacks = []
  target_test_cases.each do |ancestor|
    prepend_callbacks << ancestor.fixture[type].before_prepend_callbacks
    append_callbacks << ancestor.fixture[type].before_append_callbacks
  end
  merge_callbacks(prepend_callbacks, append_callbacks)
end

def collect_target_test_cases

def collect_target_test_cases
  ancestors = @test_case.ancestors
  base_index = ancestors.index(::Test::Unit::Fixture)
  interested_ancestors = ancestors[0, base_index].find_all do |ancestor|
    ancestor.is_a?(Class)
  end
  interested_ancestors.reverse
end

def initialize(test_case)

def initialize(test_case)
  @test_case = test_case
  @setup = HookPoint.new(@test_case, :setup, :after => :append)
  @cleanup = HookPoint.new(@test_case, :cleanup, :before => :prepend)
  @teardown = HookPoint.new(@test_case, :teardown, :before => :prepend)
  @cached_before_callbacks = {}
  @cached_after_callbacks = {}
end

def merge_callbacks(prepend_callbacks, append_callbacks)

def merge_callbacks(prepend_callbacks, append_callbacks)
  all_callbacks = []
  prepend_callbacks.reverse_each do |callbacks|
    all_callbacks.concat(callbacks)
  end
  append_callbacks.each do |callbacks|
    all_callbacks.concat(callbacks)
  end
  all_callbacks
end

def target_test_cases

def target_test_cases
  @cached_target_test_cases ||= collect_target_test_cases
end