Sha256: 7c89dd063cdfb98f2bf8f86ca4ecbdb1105e784ab19cdc23c73ddfa47798a6ee
Contents?: true
Size: 1.7 KB
Versions: 5
Compression:
Stored size: 1.7 KB
Contents
require "metamorpher/terms/literal" module Metamorpher module Terms shared_examples "a derivation builder" do describe "derivation!" do it "should create an instance of Derivation" do built = subject.derivation!(:method) do |method| Literal.new(name: (method.name.to_s + "s").to_sym) end expect(built.base).to eq([:method]) expect(built.derivation.call(Literal.new(name: :dog))).to eq(Literal.new(name: :dogs)) end it "should capture all arguments as the base" do built = subject.derivation!(:key, :value) expect(built.base).to eq([:key, :value]) end it "should derive the first argument if no block is passed" do built = subject.derivation!(:key, :value) derived = built.derivation.call( Literal.new(name: :dog), Literal.new(name: :lassie) ) expect(derived).to eq(Literal.new(name: :dog)) end it "should provide a builder for use in the block" do built = subject.derivation!(:key, :value) do |key, value, builder| builder.pair(key, value) end derived = built.derivation.call( Literal.new(name: :dog), Literal.new(name: :lassie) ) paired = Literal.new( name: :pair, children: [ Literal.new(name: :dog), Literal.new(name: :lassie) ] ) expect(derived).to eq(paired) end it "should raise if no arguments are passed" do expect { subject.derivation! { nil } }.to raise_error(ArgumentError) end end end end end
Version data entries
5 entries across 5 versions & 1 rubygems