Sha256: 1639c7a7557c537fbce73d299617263a69d7a58342f64ada59b5aafa808dbb71

Contents?: true

Size: 1.65 KB

Versions: 8

Compression:

Stored size: 1.65 KB

Contents

RSpec.describe Mutant::Subject::Method::Singleton do

  let(:object)  { described_class.new(config, context, node) }
  let(:config)  { Mutant::Config::DEFAULT                    }
  let(:node)    { s(:defs, s(:self), :foo, s(:args))         }

  let(:context) do
    Mutant::Context::Scope.new(scope, double('Source Path'))
  end

  let(:scope) do
    Class.new do
      def self.foo
      end

      def self.name
        'Test'
      end
    end
  end

  describe '#expression' do
    subject { object.expression }

    it { should eql(Mutant::Expression.parse('Test.foo')) }

    it_should_behave_like 'an idempotent method'
  end

  describe '#match_expression' do
    subject { object.match_expressions }

    it { should eql(%w[Test.foo Test*].map(&Mutant::Expression.method(:parse))) }

    it_should_behave_like 'an idempotent method'
  end

  describe '#prepare' do

    subject { object.prepare }

    it 'undefines method on scope' do
      expect { subject }.to change { scope.methods.include?(:foo) }.from(true).to(false)
    end

    it_should_behave_like 'a command method'
  end

  describe '#source' do
    subject { object.source }

    it { should eql("def self.foo\nend") }
  end

  describe '#public?' do
    subject { object.public? }

    context 'when method is public' do
      it { should be(true) }
    end

    context 'when method is private' do
      before do
        scope.class_eval do
          private_class_method :foo
        end
      end

      it { should be(false) }
    end

    context 'when method is protected' do
      before do
        class << scope
          protected :foo
        end
      end

      it { should be(false) }
    end
  end
end

Version data entries

8 entries across 8 versions & 1 rubygems

Version Path
mutant-0.7.4 spec/unit/mutant/subject/method/singleton_spec.rb
mutant-0.7.3 spec/unit/mutant/subject/method/singleton_spec.rb
mutant-0.7.2 spec/unit/mutant/subject/method/singleton_spec.rb
mutant-0.7.1 spec/unit/mutant/subject/method/singleton_spec.rb
mutant-0.6.7 spec/unit/mutant/subject/method/singleton_spec.rb
mutant-0.6.6 spec/unit/mutant/subject/method/singleton_spec.rb
mutant-0.6.5 spec/unit/mutant/subject/method/singleton_spec.rb
mutant-0.6.4 spec/unit/mutant/subject/method/singleton_spec.rb