Sha256: c20f98c468a001d941a37c8ffe4870ab2f47209fcb9a61ab5c652ed011904788

Contents?: true

Size: 1.17 KB

Versions: 12

Compression:

Stored size: 1.17 KB

Contents

require_relative 'shared/a_predicate_ast_node'
class Predicate
  describe Factory, 'from_hash' do

    subject{ Factory.from_hash(h) }

    context "when the hash is empty" do
      let(:h){ {} }

      it{ should eq(Factory.tautology) }
    end

    context "when the hash is a singelton" do
      let(:h){ {:x => 12} }

      it_should_behave_like "a predicate AST node"
      it{ should be_a(Eq) }
      it{ should eq([:eq, [:identifier, :x], [:literal, 12]]) }
    end

    context "when the hash is not a singleton" do
      let(:h){ {:x => 12, :y => :z} }
      let(:expected){
        [:and,
          [:eq, [:identifier, :x], [:literal, 12]],
          [:eq, [:identifier, :y], [:identifier, :z]]]
      }

      it_should_behave_like "a predicate AST node"
      it{ should be_a(And) }
      it{ should eq(expected) }
    end

    context "when the hash has array values" do
      let(:h){ {:x => [12], :y => :z} }
      let(:expected){
        [:and,
          [:in, [:identifier, :x], [12]],
          [:eq, [:identifier, :y], [:identifier, :z]]]
      }

      it_should_behave_like "a predicate AST node"
      it{ should be_a(And) }
      it{ should eq(expected) }
    end

  end
end

Version data entries

12 entries across 12 versions & 1 rubygems

Version Path
predicate-2.0.1 spec/factory/test_from_hash.rb
predicate-2.0.0 spec/factory/test_from_hash.rb
predicate-1.3.4 spec/factory/test_from_hash.rb
predicate-1.3.3 spec/factory/test_from_hash.rb
predicate-1.3.2 spec/factory/test_from_hash.rb
predicate-1.3.1 spec/factory/test_from_hash.rb
predicate-1.3.0 spec/factory/test_from_hash.rb
predicate-1.2.0 spec/factory/test_from_hash.rb
predicate-1.1.3 spec/factory/test_from_hash.rb
predicate-1.1.2 spec/factory/test_from_hash.rb
predicate-1.1.1 spec/factory/test_from_hash.rb
predicate-1.1.0 spec/factory/test_from_hash.rb