Commit 9f8f967

mo khan <mo@mokhan.ca>
2013-10-13 02:37:20
add specs for in order traversal.
1 parent 1adb262
lib/in_order_traversal.rb
@@ -1,7 +1,7 @@
 class InOrderTraversal
   def traverse(node, visitor)
-    node.left.accept(visitor, self) if node.left
+    visitor.visit(node.left) if node.left
     visitor.visit(node)
-    node.right.accept(visitor, self) if node.right
+    visitor.visit(node.right) if node.right
   end
 end
spec/traversal/in_order_traversal_spec.rb
@@ -0,0 +1,27 @@
+require "spec_helper"
+
+describe "inorder traversal" do
+  let(:sut) { InOrderTraversal.new }
+  let(:node) { double }
+  let(:left_node) { double }
+  let(:right_node) { double }
+  let(:visitor) { double('visitor', :visit => nil) }
+
+  before :each do
+    node.stub(:left).and_return(left_node)
+    node.stub(:right).and_return(right_node)
+    sut.traverse(node, visitor)
+  end
+
+  it "should visit the left node first" do
+    visitor.should have_received(:visit).with(left_node)
+  end
+
+  it "should visit the current node second" do
+    visitor.should have_received(:visit).with(node)
+  end
+
+  it "should visit the right node last" do
+    visitor.should have_received(:visit).with(right_node)
+  end
+end
spec/spec_helper.rb
@@ -1,4 +1,6 @@
 require 'benchmark'
+require_relative '../lib/in_order_traversal'
+
 require_relative '../lib/sorting/bubble_sort'
 require_relative '../lib/sorting/insertion_sort'
 require_relative '../lib/sorting/quick_sort'