Sha256: d9d3f4693ea8bd8921d74dab1458a7486c612566849000806b5f5b647378b82e

Contents?: true

Size: 1.3 KB

Versions: 8

Compression:

Stored size: 1.3 KB

Contents

require "metamorpher/rewriter/traverser"

module Metamorpher
  module Rewriter
    describe Traverser do
      describe "traversing a flat tree" do
        let(:tree) { t(1, 2, 3, 4) }

        it "correctly reports number of nodes" do
          expect(subject.traverse(tree).size).to eq(5)
        end

        it "returns nodes in left-to-right order" do
          expect(subject.traverse(tree).take(5)).to eq([tree, 1, 2, 3, 4])
        end
      end

      describe "traversing a skinny tree" do
        let(:tree) { t(1, t(2, t(3))) }

        it "correctly reports number of nodes" do
          expect(subject.traverse(tree).size).to eq(6)
        end

        it "returns nodes in outermost (root-to-leaves) order" do
          expect(subject.traverse(tree).take(6)).to eq(
            [tree, 1, tree.children.last, 2, tree.children.last.children.last, 3]
          )
        end
      end

      describe "traversing the empty tree" do
        let(:tree) { t }

        it "correctly reports number of nodes" do
          expect(subject.traverse(tree).size).to eq(1)
        end

        it "returns only the original tree" do
          expect(subject.traverse(tree).take(1)).to eq([tree])
        end
      end

      def t(*children)
        Tree.new(children)
      end

      Tree = Struct.new(:children)
    end
  end
end

Version data entries

8 entries across 8 versions & 1 rubygems

Version Path
metamorpher-0.2.6 spec/unit/rewriter/traverser_spec.rb
metamorpher-0.2.5 spec/unit/rewriter/traverser_spec.rb
metamorpher-0.2.4 spec/unit/rewriter/traverser_spec.rb
metamorpher-0.2.3 spec/unit/rewriter/traverser_spec.rb
metamorpher-0.2.2 spec/unit/rewriter/traverser_spec.rb
metamorpher-0.2.1 spec/unit/rewriter/traverser_spec.rb
metamorpher-0.2.0 spec/unit/rewriter/traverser_spec.rb
metamorpher-0.1.1 spec/unit/rewriter/traverser_spec.rb