aboutsummaryrefslogtreecommitdiffstats
path: root/test
diff options
context:
space:
mode:
authorAaron Patterson <aaron.patterson@gmail.com>2010-11-29 14:11:28 -0800
committerAaron Patterson <aaron.patterson@gmail.com>2010-11-29 14:11:28 -0800
commitc86c37e5f32ca76fa7aa77e62018e368dbb37a54 (patch)
treed3e5f7abdd92b4a6349de2ce2d9ebde3723cb234 /test
parentf092ae544f58255508242a5308c456d9b8a13b0c (diff)
downloadrails-c86c37e5f32ca76fa7aa77e62018e368dbb37a54.tar.gz
rails-c86c37e5f32ca76fa7aa77e62018e368dbb37a54.tar.bz2
rails-c86c37e5f32ca76fa7aa77e62018e368dbb37a54.zip
mostly implemented depth-first traversal
Diffstat (limited to 'test')
-rw-r--r--test/visitors/test_depth_first.rb76
1 files changed, 76 insertions, 0 deletions
diff --git a/test/visitors/test_depth_first.rb b/test/visitors/test_depth_first.rb
new file mode 100644
index 0000000000..eff60576fc
--- /dev/null
+++ b/test/visitors/test_depth_first.rb
@@ -0,0 +1,76 @@
+require 'helper'
+
+module Arel
+ module Visitors
+ class TestDepthFirst < MiniTest::Unit::TestCase
+ Collector = Struct.new(:calls) do
+ def call object
+ calls << object
+ end
+ end
+
+ def setup
+ @collector = Collector.new []
+ @visitor = Visitors::DepthFirst.new @collector
+ end
+
+ [
+ Arel::Nodes::And,
+ Arel::Nodes::Assignment,
+ Arel::Nodes::Between,
+ Arel::Nodes::DoesNotMatch,
+ Arel::Nodes::Equality,
+ Arel::Nodes::GreaterThan,
+ Arel::Nodes::GreaterThanOrEqual,
+ Arel::Nodes::In,
+ Arel::Nodes::LessThan,
+ Arel::Nodes::LessThanOrEqual,
+ Arel::Nodes::Matches,
+ Arel::Nodes::NotEqual,
+ Arel::Nodes::NotIn,
+ Arel::Nodes::Or,
+ ].each do |klass|
+ define_method("test_#{klass.name.gsub('::', '_')}") do
+ binary = klass.new(:a, :b)
+ @visitor.accept binary
+ assert_equal [:a, :b, binary], @collector.calls
+ end
+ end
+
+ [
+ Arel::Attributes::Integer,
+ Arel::Attributes::Float,
+ Arel::Attributes::String,
+ Arel::Attributes::Time,
+ Arel::Attributes::Boolean,
+ Arel::Attributes::Attribute
+ ].each do |klass|
+ define_method("test_#{klass.name.gsub('::', '_')}") do
+ binary = klass.new(:a, :b)
+ @visitor.accept binary
+ assert_equal [:a, :b, binary], @collector.calls
+ end
+ end
+
+ def test_table
+ relation = Arel::Table.new(:users)
+ @visitor.accept relation
+ assert_equal ['users', relation], @collector.calls
+ end
+
+ def test_array
+ node = Nodes::Or.new(:a, :b)
+ list = [node]
+ @visitor.accept list
+ assert_equal [:a, :b, node, list], @collector.calls
+ end
+
+ def test_hash
+ node = Nodes::Or.new(:a, :b)
+ hash = { node => node }
+ @visitor.accept hash
+ assert_equal [:a, :b, node, :a, :b, node, hash], @collector.calls
+ end
+ end
+ end
+end