mirror of
https://github.com/rails/rails.git
synced 2022-11-09 12:12:34 -05:00
89 lines
2.3 KiB
Ruby
89 lines
2.3 KiB
Ruby
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
|
|
|
|
def test_update_statement
|
|
stmt = Nodes::UpdateStatement.new
|
|
stmt.relation = :a
|
|
stmt.values << :b
|
|
stmt.wheres << :c
|
|
stmt.orders << :d
|
|
stmt.limit = :e
|
|
|
|
@visitor.accept stmt
|
|
assert_equal [:a, :b, stmt.values, :c, stmt.wheres, :d, stmt.orders,
|
|
:e, stmt], @collector.calls
|
|
end
|
|
end
|
|
end
|
|
end
|