require_relative '../test-util'

describe 'Model::Message' do
  before do
    @a = Model::Message.new("next", PioneInteger.new(1).to_seq)
    @b = Model::Message.new("substring", PioneString.new("abcdefg").to_seq, PioneInteger.new(2).to_seq, PioneInteger.new(3).to_seq)
  end

  it 'should equal' do
    @a.should == Model::Message.new("next", PioneInteger.new(1).to_seq)
    @b.should == Model::Message.new("substring", PioneString.new("abcdefg").to_seq, PioneInteger.new(2).to_seq, PioneInteger.new(3).to_seq)
  end

  it 'should not equal' do
    @a.should.not == @b
  end

  it 'should send message' do
    @a.eval(VariableTable.new).should == PioneInteger.new(2).to_seq
    @b.eval(VariableTable.new).should == PioneString.new("bcd").to_seq
  end

  it 'should get the method result from variable table' do
    vtable = VariableTable.new
    vtable.set(Variable.new("X"), @a)
    vtable.get(Variable.new("X")).should == PioneInteger.new(2).to_seq
    vtable.to_hash[Variable.new("X")].should == @a
  end

  it 'should not include variables' do
    @a.should.not.include_variable
  end

  it 'should include variables' do
    Message.new(
      "next", Variable.new("N")
    ).should.include_variable
    Message.new(
      "substring", "abcdef", Variable.new("FROM"), Variable.new("TO")
    ).should.include_variable
  end
end