Sha256: 5cc4d443589befb910056df37e3295d6280e720f84560028058ef5ee16efba3f

Contents?: true

Size: 1.2 KB

Versions: 3

Compression:

Stored size: 1.2 KB

Contents

require_relative '../../test_helper'

class DuckTest < MiniTest::Test
  def setup
    @class = Class.new
    @object = @class.new
    @mod = Module.new { %w[foo bar baz].each { |x| define_method(x, -> {}) } }
    @subject = DuckPuncher::Duck.new(@class, @mod)
  end

  def test_punch
    @subject.target = Kaia
    refute_respond_to Kaia.new, :baz
    @subject.call
    assert_respond_to Kaia.new, :foo
    assert_respond_to Kaia.new, :bar
    assert_respond_to Kaia.new, :baz
  end

  def test_punch_with_instance
    e = assert_raises ArgumentError do
      @subject.call target: @object
    end
    assert_match /Invalid target #<#{@class}:.*>\. Please pass a module as :target/,
                 e.message
  end

  def test_punch_with_only
    refute_respond_to @object, :foo
    refute_respond_to @object, :bar
    @subject.call(only: :foo)
    refute_respond_to @object, :bar
    assert_respond_to @object, :foo
    @subject.call(only: :bar)
    assert_respond_to @object, :bar
  end

  def test_punch_with_only_target
    refute_respond_to @object, :bar
    @subject.call target: @class, only: [:foo, :bar]
    assert_respond_to @object, :bar
    assert_respond_to @object, :foo
    refute_respond_to @object, :baz
  end
end

Version data entries

3 entries across 3 versions & 1 rubygems

Version Path
duck_puncher-4.5.1 test/lib/duck_puncher/duck_test.rb
duck_puncher-4.5.0 test/lib/duck_puncher/duck_test.rb
duck_puncher-4.4.2 test/lib/duck_puncher/duck_test.rb