提交 cbd3b0d0 编写于 作者: J Justin Collins

Add basic tests for alias/data flow processing

上级 b66d32ff
class AliasProcessorTests < Test::Unit::TestCase
def assert_alias expected, original
if RUBY_VERSION =~ /^1\.9/
original_sexp = Ruby19Parser.new.parse original
expected_sexp = Ruby19Parser.new.parse expected
else
original_sexp = RubyParser.new.parse original
expected_sexp = RubyParser.new.parse expected
end
processed_sexp = Brakeman::AliasProcessor.new.process_safely original_sexp
result = processed_sexp.last
assert_equal expected_sexp, result
end
def test_addition
assert_alias '10', <<-RUBY
x = 1 + 2 + 3
x += 4
x
RUBY
end
def test_simple_math
assert_alias '42', <<-RUBY
x = 8 * 5
y = 32 / 8
y -= 2
x += y
x
RUBY
end
def test_concatentation
assert_alias "'Hello world!'", <<-RUBY
x = "Hello"
y = x + " "
z = y + "world!"
z
RUBY
end
def test_string_append
assert_alias "'hello world'", <<-RUBY
x = ""
x << "hello" << " " << "world"
x
RUBY
end
def test_array_index
assert_alias "'cookie'", <<-RUBY
dessert = ["fruit", "pie", "ice cream"]
dessert << "cookie"
dessert[1] = "cake"
dessert[1]
index = 2
index = index + 1
dessert[index]
RUBY
end
def test_array_negative_index
assert_alias "'ice cream'", <<-RUBY
dessert = ["fruit", "pie", "ice cream"]
dessert << "cookie"
dessert[1] = "cake"
dessert[1]
index = -3
index = 1 + index
dessert[index]
RUBY
end
def test_array_append
assert_alias '[1, 2, 3]', <<-RUBY
x = [1]
x << 2 << 3
x
RUBY
end
def test_hash_index
assert_alias "'You say goodbye, I say :hello'", <<-RUBY
x = {:goodbye => "goodbye cruel world" }
x[:hello] = "hello world"
x.merge! :goodbye => "You say goodbye, I say :hello"
x[:goodbye]
RUBY
end
def test_obvious_if
assert_alias "'Yes!'", <<-RUBY
condition = true
if condition
x = "Yes!"
else
x = "No!"
end
x
RUBY
end
def test_if
assert_alias "'Awesome!' or 'Else awesome!'", <<-RUBY
if something
x = "Awesome!"
elsif something_else
x = "Else awesome!"
end
x
RUBY
end
def test_or_equal
assert_alias '10', <<-RUBY
x.y = 10
x.y ||= "not this!"
x.y
RUBY
end
def test_unknown_hash
assert_alias '1', <<-RUBY
some_hash[:x] = 1
some_hash[:x]
RUBY
end
def test_global
assert_alias '1', <<-RUBY
$x = 1
$x
RUBY
end
def test_class_var
assert_alias '1', <<-RUBY
@@x = 1
@@x
RUBY
end
def test_constant
assert_alias '1', <<-RUBY
X = 1
X
RUBY
end
def test_addition_chained
assert_alias 'y + 5', <<-RUBY
x = y + 2 + 3
x
RUBY
end
end
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册