Sha256: 340d1f8d5732b73948e02eaf30e8510ed71ae62d84cfec5c14e293cd63fcf676

Contents?: true

Size: 897 Bytes

Versions: 4

Compression:

Stored size: 897 Bytes

Contents

# encoding: utf-8

require 'spec_helper'

describe AbstractType::ClassMethods, '#abstract_method' do
  subject { object.abstract_method(:some_method) }

  let(:object)   { Class.new { include AbstractType } }
  let(:subclass) { Class.new(object)                  }

  before do
    Subclass = subclass
  end

  after do
    Object.class_eval { remove_const(:Subclass) }
  end

  it { should equal(object) }

  it 'creates an abstract method' do
    expect { subject }.to change { subclass.method_defined?(:some_method) }.
      from(false).
      to(true)
  end

  it 'creates an abstract method with the expected arity' do
    subject
    object.instance_method(:some_method).arity.should be(-1)
  end

  it 'creates a method that raises an exception' do
    subject
    expect { subclass.new.some_method }.to raise_error(NotImplementedError, 'Subclass#some_method is not implemented')
  end
end

Version data entries

4 entries across 4 versions & 2 rubygems

Version Path
motion_abstract_type-0.0.6 spec/unit/abstract_type/class_methods/abstract_method_spec.rb
abstract_type-0.0.6 spec/unit/abstract_type/class_methods/abstract_method_spec.rb
abstract_type-0.0.5 spec/unit/abstract_type/class_methods/abstract_method_spec.rb
abstract_type-0.0.4 spec/unit/abstract_type/class_methods/abstract_method_spec.rb