Sha256: 701e7ef090daa8c5195c24bc6246f9338ad732b5c562a31029448278640a0308

Contents?: true

Size: 1.74 KB

Versions: 4

Compression:

Stored size: 1.74 KB

Contents

# frozen_string_literal: true

require_relative '../spec_helper' # Use the RSpec framework
require 'singleton'

require_relative '../../lib/mini_kraken/core/context'

# Load the class under test
require_relative '../../lib/mini_kraken/core/solver_adapter'


module MiniKraken
  module Core
    describe SolverAdapter do
      let(:ctx) { Context.new }
      let(:fib) { make_fiber(ctx, true, true, false, nil) }
      let(:blk) do
        lambda do |adapter, _context|
          adapter.adaptee.resume
        end
      end
      subject { SolverAdapter.new(fib, &blk) }

      # Factory method.
      def make_fiber(ctx, *args)
        Fiber.new do
          signature = *args
          signature.each do |outcome|
            if outcome
              Fiber.yield ctx.succeeded!
              next
            elsif outcome.nil?
              Fiber.yield nil
              break
            else
              Fiber.yield ctx.failed!
              next
            end
          end
        end
      end

      context 'Initialization:' do
        it 'should be initialized with a Fiber-like object' do
          expect { SolverAdapter.new(fib, &blk) }.not_to raise_error
        end

        it 'should know its adaptee' do
          expect(subject.adaptee).to eq(fib)
        end
      end # context

      context 'Provided services:' do
        it 'should respond to the resume message' do
          result = subject.resume(ctx)
          expect(result).to be_success

          result = subject.resume(ctx)
          expect(result).to be_success

          result = subject.resume(ctx)
          expect(result).to be_failure

          result = subject.resume(ctx)
          expect(result).to be_nil
        end
      end # context
    end # describe
  end # module
end # module

Version data entries

4 entries across 4 versions & 1 rubygems

Version Path
mini_kraken-0.3.03 spec/core/solver_adapter_spec.rb
mini_kraken-0.3.02 spec/core/solver_adapter_spec.rb
mini_kraken-0.3.01 spec/core/solver_adapter_spec.rb
mini_kraken-0.3.00 spec/core/solver_adapter_spec.rb