better test for attr

still #25
This commit is contained in:
Torsten Ruger
2019-03-07 10:47:48 +02:00
parent 04720d4950
commit 5ed6a07083
8 changed files with 118 additions and 52 deletions

View File

@ -5,7 +5,7 @@ module Parfait
include AST::Sexp
def rewrite(input)
ast = Parser::Ruby22.parse( input )
ast = Parser::CurrentRuby.parse( input )
new_ast = process(ast)
new_ast.to_s
end

View File

@ -20,4 +20,17 @@ module Ruby
$stdout = orig_stdout
end
end
module AttributeTests
include RubyTests
def setup
super
@vool = compile( "class Tryout < Base; #{attr_def};end" ).to_vool
end
def getter
@vool.body.statements.first
end
def setter
@vool.body.statements.last
end
end
end

View File

@ -74,51 +74,4 @@ module Ruby
assert_raises_muted { compile( input ).to_vool}
end
end
class TestClassStatementTransform < MiniTest::Test
include RubyTests
def setup
input = "class Tryout < Base;attr :page ;end"
@vool = compile( input ).to_vool
end
def getter
@vool.body.statements.first
end
def setter
@vool.body.statements.last
end
def test_class
assert_equal Vool::ClassStatement , @vool.class
end
def test_body
assert_equal Vool::Statements , @vool.body.class
end
def test_getter
assert_equal Vool::MethodStatement , getter.class
end
def test_getter_return
assert_equal Vool::ReturnStatement , getter.body.class
end
def test_getter_name
assert_equal :page , getter.name
end
def test_setter
assert_equal Vool::MethodStatement , setter.class
end
def test_setter_assign
assert_equal Vool::Statements , setter.body.class
assert_equal Vool::IvarAssignment , setter.body.first.class
end
def test_setter_return
assert_equal Vool::Statements , setter.body.class
assert_equal Vool::ReturnStatement , setter.body.last.class
end
def test_setter_name
assert_equal :page= , setter.name
end
def test_setter_args
assert_equal [:val] , setter.args
end
end
end

View File

@ -0,0 +1,48 @@
require_relative "helper"
module Ruby
class TestClassStatementTransform < MiniTest::Test
include AttributeTests
def attr_def
"attr :page"
end
def test_class
assert_equal Vool::ClassStatement , @vool.class
end
def test_body
assert_equal Vool::Statements , @vool.body.class
end
def test_method_len
assert_equal 2 , @vool.body.length , "setter, getter"
end
def test_getter
assert_equal Vool::MethodStatement , getter.class
end
def test_getter_return
assert_equal Vool::ReturnStatement , getter.body.class
end
def test_getter_name
assert_equal :page , getter.name
end
def test_setter
assert_equal Vool::MethodStatement , setter.class
end
def test_setter_assign
assert_equal Vool::Statements , setter.body.class
assert_equal Vool::IvarAssignment , setter.body.first.class
end
def test_setter_return
assert_equal Vool::Statements , setter.body.class
assert_equal Vool::ReturnStatement , setter.body.last.class
end
def test_setter_name
assert_equal :page= , setter.name
end
def test_setter_args
assert_equal [:val] , setter.args
end
end
end

View File

@ -0,0 +1,47 @@
require_relative "helper"
module Ruby
class TestClassStatementTransformList < MiniTest::Test
include AttributeTests
def attr_def
"attr :page , :size"
end
def test_class
assert_equal Vool::ClassStatement , @vool.class
end
def test_body
assert_equal Vool::Statements , @vool.body.class
end
def test_method_len
assert_equal 4 , @vool.body.length , "2 setters, 2 getters"
end
def test_getter
assert_equal Vool::MethodStatement , getter.class
end
def test_getter_return
assert_equal Vool::ReturnStatement , getter.body.class
end
def test_getter_name
assert_equal :page , getter.name
end
def test_setter
assert_equal Vool::MethodStatement , setter.class
end
def test_setter_assign
assert_equal Vool::Statements , setter.body.class
assert_equal Vool::IvarAssignment , setter.body.first.class
end
def test_setter_return
assert_equal Vool::Statements , setter.body.class
assert_equal Vool::ReturnStatement , setter.body.last.class
end
def test_setter_name
assert_equal :size= , setter.name
end
def test_setter_args
assert_equal [:val] , setter.args
end
end
end

View File

@ -30,7 +30,7 @@ module RubyX
@comp = RubyXCompiler.ruby_to_binary(code , load_parfait: true , platform: :interpreter)
end
def test_load
def pest_load
object = Parfait.object_space.get_class_by_name(:Object)
assert_equal Parfait::Class , object.class
object = object.instance_type