tests for ast to code converter

This commit is contained in:
Torsten Ruger 2016-12-10 03:43:44 +02:00
parent 29fb2a50f5
commit 5c2f545f8e
4 changed files with 63 additions and 9 deletions

View File

@ -36,7 +36,7 @@ module Typed
def on_field_def statement
type , name , value = *statement
w = FieldDef.new()
w = Tree::FieldDef.new()
w.type = type
w.name = process(name)
w.value = process(value) if value
@ -45,7 +45,7 @@ module Typed
def on_class_field statement
type , name = *statement
w = ClassField.new()
w = Tree::ClassField.new()
w.type = type
w.name = name
w
@ -53,7 +53,7 @@ module Typed
def on_while_statement statement
branch_type , condition , statements = *statement
w = WhileStatement.new()
w = Tree::WhileStatement.new()
w.branch_type = branch_type
w.condition = process(condition)
w.statements = process(statements)
@ -105,7 +105,7 @@ module Typed
def on_field_access statement
receiver_ast , field_ast = *statement
w = FieldAccess.new()
w = Tree::FieldAccess.new()
w.receiver = process(receiver_ast)
w.field = process(field_ast)
w
@ -148,12 +148,12 @@ module Typed
end
def on_class_name expression
ClassExpression.new(expression.children.first)
Tree::ClassExpression.new(expression.children.first)
end
def on_assignment statement
name , value = *statement
w = Assignment.new()
w = Tree::Assignment.new()
w.name = process name
w.value = process(value)
w

View File

@ -4,6 +4,4 @@ require_relative "lib/test_all"
require_relative "register/test_all"
require_relative "typed/parfait/test_all"
require_relative "typed/type/test_all"
require_relative "typed/test_all"

5
test/typed/test_all.rb Normal file
View File

@ -0,0 +1,5 @@
require_relative "parfait/test_all"
require_relative "type/test_all"
require_relative "test_to_code"

View File

@ -0,0 +1,51 @@
require_relative "helper"
class ToCodeTest < MiniTest::Test
include AST::Sexp
def check clazz
tree = Typed.ast_to_code @statement
assert_equal tree.class , Typed::Tree.const_get( clazz )
end
def test_field_access
@statement = s(:field_access, s(:receiver, s(:name, :m)), s(:field, s(:name, :index)))
check "FieldAccess"
end
def test_field_def_value
@statement = s(:field_def, :Integer, s(:name, :abba), s(:int, 5))
check "FieldDef"
end
def test_class_field
@statement = s(:class_field, :Integer, :fff, s(:int, 3))
check "ClassField"
end
def test_simple_while
@statement = s(:while_statement, :false, s(:conditional,s(:int, 1)), s(:statements))
check "WhileStatement"
end
def test_assignment
@statement = s(:assignment, s(:name, :i), s(:int, 0))
check "Assignment"
end
def test_nil
@statement = s(:nil)
check "NilExpression"
end
def test_true
@statement = s(:true)
check "TrueExpression"
end
def test_false
@statement = s(:false)
check "FalseExpression"
end
def test_name
@statement = s(:name, :foo)
check "NameExpression"
end
def test_class_name
@statement = s(:class_name, :FooBar)
check "ClassExpression"
end
end