class RubyIndexer::RBSIndexerTest

def test_parse_simple_rbs

def test_parse_simple_rbs
  rbs = <<~RBS
    class File
      def self?.open: (String name, ?String mode, ?Integer perm) -> IO?
          | [T] (String name, ?String mode, ?Integer perm) { (IO) -> T } -> T
    end
  RBS
  signatures = parse_rbs_methods(rbs, "open")
  assert_equal(2, signatures.length)
  parameters = signatures[0].parameters
  assert_equal([:name, :mode, :perm], parameters.map(&:name))
  assert_kind_of(Entry::RequiredParameter, parameters[0])
  assert_kind_of(Entry::OptionalParameter, parameters[1])
  assert_kind_of(Entry::OptionalParameter, parameters[2])
  parameters = signatures[1].parameters
  assert_equal([:name, :mode, :perm, :"<anonymous block>"], parameters.map(&:name))
  assert_kind_of(Entry::RequiredParameter, parameters[0])
  assert_kind_of(Entry::OptionalParameter, parameters[1])
  assert_kind_of(Entry::OptionalParameter, parameters[2])
  assert_kind_of(Entry::BlockParameter, parameters[3])
end