require_relative "helper" class ToCodeTest < MiniTest::Test include AST::Sexp def check clazz tree = Vm.ast_to_code @statement assert_equal tree.class , Vm::Tree.const_get( clazz ) end def test_field_access @statement = s(:field_access, s(:receiver, s(:ivar, :m)), s(:field, s(:ivar, :index))) check "FieldAccess" end def test_simple_while @statement = s(:while_statement, :false, s(:conditional,s(:int, 1)), s(:statements)) check "WhileStatement" end def test_l_assignment @statement = s(:l_assignment, s(:local, :i), s(:int, 0)) check "LocalAssignment" end def test_a_assignment @statement = s(:a_assignment, s(:arg, :i), s(:int, 0)) check "ArgAssignment" end def test_i_assignment @statement = s(:i_assignment, s(:ivar, :i), s(:int, 0)) check "IvarAssignment" 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_known @statement = s(:known, :self) check "KnownName" end def test_ivar @statement = s(:ivar, :you) check "InstanceName" end def test_class_name @statement =s(:class_name, :FooBar) check "ClassExpression" end end