require_relative "helper"

module Vool
  class TestMethodExpression < MiniTest::Test
    include VoolCompile

    def setup
      Parfait.boot!(Parfait.default_test_options)
      ruby_tree = Ruby::RubyCompiler.compile( as_main("a = 5") )
      @clazz = ruby_tree.to_vool
    end
    def method
      @clazz.body.first
    end
    def test_setup
      assert_equal ClassExpression , @clazz.class
      assert_equal Statements , @clazz.body.class
      assert_equal MethodExpression , method.class
    end
    def test_fail
      assert_raises{ method.to_parfait }
    end
    def test_method
      assert_equal Parfait::Class , @clazz.to_parfait.class
    end
    def test_is_instance_method
      main = @clazz.to_parfait.get_instance_method(:main)
      assert_equal Parfait::VoolMethod , main.class
      assert_equal :main , main.name
    end

  end
  class TestMethodExpressionDoubleDef < MiniTest::Test
    include VoolCompile

    def setup
      Parfait.boot!(Parfait.default_test_options)
      ruby_tree = Ruby::RubyCompiler.compile( as_main("a = 5") + ";" + as_main("a = 5") )
      @clazz = ruby_tree.to_vool
    end
    def method
      @clazz.body.first
    end
    def test_no_double
      assert_raises {@clazz.to_parfait}
    end
  end
end