require_relative 'helper'

module Register
class TestClassStatements < MiniTest::Test
  include Statements

  def test_class_defs
    @string_input = <<HERE
class Bar
  int self.buh()
    return 1
  end
end
class Object
  int main()
    return 1
  end
end
HERE
    @expect =  [Label, LoadConstant,SetSlot,Label,FunctionReturn]
    check
  end

  def test_class_call
    @string_input = <<HERE
class Bar
  int self.buh()
    return 1
  end
end
class Object
  int main()
    return Bar.buh()
  end
end
HERE
    @expect = [Label, GetSlot, LoadConstant, SetSlot, LoadConstant, SetSlot, LoadConstant ,
               SetSlot, LoadConstant, SetSlot, RegisterTransfer, FunctionCall, Label, RegisterTransfer ,
               GetSlot, GetSlot, SetSlot, Label, FunctionReturn]
    check
  end

  def test_class_field_value
    @string_input = <<HERE
class Object
  field int boo1 = 1
  int main()
    return 1
  end
end
HERE
    @expect =  [Label, LoadConstant,SetSlot,Label,FunctionReturn]
    assert_raises{check}
  end

  def test_class_field
    @string_input = <<HERE
class Object
  field int boo2
  int main()
    return self.boo2
  end
end
HERE
    @expect =  [Label, GetSlot,GetSlot,SetSlot,Label,FunctionReturn]
    check
  end
end
end