33 lines
883 B
Ruby
33 lines
883 B
Ruby
require 'spec_helper'
|
|
require 'dentaku/ast/combinators'
|
|
|
|
require 'dentaku/token'
|
|
|
|
describe Dentaku::AST::And do
|
|
let(:t) { Dentaku::AST::Logical.new Dentaku::Token.new(:logical, true) }
|
|
let(:f) { Dentaku::AST::Logical.new Dentaku::Token.new(:logical, false) }
|
|
|
|
let(:five) { Dentaku::AST::Numeric.new Dentaku::Token.new(:numeric, 5) }
|
|
|
|
it 'performs logical AND' do
|
|
node = described_class.new(t, f)
|
|
expect(node.value).to eq false
|
|
end
|
|
|
|
it 'requires logical operands' do
|
|
expect {
|
|
described_class.new(t, five)
|
|
}.to raise_error(Dentaku::ParseError, /requires logical operands/)
|
|
|
|
expression = Dentaku::AST::LessThanOrEqual.new(five, five)
|
|
expect {
|
|
described_class.new(t, expression)
|
|
}.not_to raise_error
|
|
|
|
expression = Dentaku::AST::Or.new(t, f)
|
|
expect {
|
|
described_class.new(t, expression)
|
|
}.not_to raise_error
|
|
end
|
|
end
|