# encoding: utf-8

require "abstract_mapper/rspec"

describe AbstractMapper::Functions, "#subclass?" do

  let(:klass) { Class.new  }
  let(:modul) { Module.new }

  it_behaves_like :transforming_immutable_data do
    let(:arguments) { [:subclass?, klass] }

    let(:input)  { Class.new }
    let(:output) { false     }
  end

  it_behaves_like :transforming_immutable_data do
    let(:arguments) { [:subclass?, klass] }

    let(:input)  { Class.new(Class.new(klass)) }
    let(:output) { true }
  end

  it_behaves_like :transforming_immutable_data do
    let(:arguments) { [:subclass?, modul] }

    let(:input)  { Class.new }
    let(:output) { false }
  end

  it_behaves_like :transforming_immutable_data do
    let(:arguments) { [:subclass?, modul] }

    let(:input)  { Class.new.send :include, modul }
    let(:output) { true }
  end

  it_behaves_like :transforming_immutable_data do
    let(:arguments) { [:subclass?, modul] }

    let(:input)  { Class.new.send :extend, modul }
    let(:output) { false }
  end

  it_behaves_like :transforming_immutable_data do
    let(:arguments) { [:subclass?, modul] }

    let(:input)  { Module.new }
    let(:output) { false }
  end

  it_behaves_like :transforming_immutable_data do
    let(:arguments) { [:subclass?, modul] }

    let(:input)  { Module.new.send :include, modul }
    let(:output) { true }
  end

  it_behaves_like :transforming_immutable_data do
    let(:arguments) { [:subclass?, modul] }

    let(:input)  { Module.new.send :extend, modul }
    let(:output) { false }
  end

end # describe AbstractMapper::Functions#subclass?