class RubyIndexer::TestCase

def assert_entry(expected_name, type, expected_location, visibility: nil)

def assert_entry(expected_name, type, expected_location, visibility: nil)
  entries = @index[expected_name] #: as !nil
  refute_nil(entries, "Expected #{expected_name} to be indexed")
  refute_empty(entries, "Expected #{expected_name} to be indexed")
  entry = entries.first #: as !nil
  assert_instance_of(type, entry, "Expected #{expected_name} to be a #{type}")
  location = entry.location
  location_string =
    "#{entry.file_path}:#{location.start_line - 1}-#{location.start_column}" \
      ":#{location.end_line - 1}-#{location.end_column}"
  assert_equal(expected_location, location_string)
  assert_equal(visibility, entry.visibility) if visibility
end

def assert_no_entry(entry)

def assert_no_entry(entry)
  refute(@index.indexed?(entry), "Expected '#{entry}' to not be indexed")
end

def assert_no_indexed_entries

def assert_no_indexed_entries
  assert_equal(@default_indexed_entries, @index.instance_variable_get(:@entries))
end

def index(source, uri: URI::Generic.from_path(path: "/fake/path/foo.rb"))

def index(source, uri: URI::Generic.from_path(path: "/fake/path/foo.rb"))
  @index.index_single(uri, source)
end

def refute_entry(expected_name)

def refute_entry(expected_name)
  entries = @index[expected_name]
  assert_nil(entries, "Expected #{expected_name} to not be indexed")
end

def setup

def setup
  @index = Index.new
  RBSIndexer.new(@index).index_ruby_core
  @default_indexed_entries = @index.instance_variable_get(:@entries).dup
end

def teardown

def teardown
  entries = @index.instance_variable_get(:@entries).values.flatten
  entries.each do |entry|
    assert_includes([:public, :private, :protected], entry.visibility)
  end
end