// Copyright 2019 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

package cmdtest

import (
	"fmt"
	"sort"
	"testing"

	"golang.org/x/tools/internal/lsp/tests"
	"golang.org/x/tools/internal/span"
)

func (r *runner) Implementation(t *testing.T, spn span.Span, imp tests.Implementations) {
	var itemStrings []string
	for _, i := range imp.Implementations {
		itemStrings = append(itemStrings, fmt.Sprint(i))
	}
	sort.Strings(itemStrings)
	var expect string
	for _, i := range itemStrings {
		expect += i + "\n"
	}
	expect = r.Normalize(expect)

	uri := spn.URI()
	filename := uri.Filename()
	target := filename + fmt.Sprintf(":%v:%v", spn.Start().Line(), spn.Start().Column())

	got, _ := r.NormalizeGoplsCmd(t, "implementation", target)
	if expect != got {
		t.Errorf("implementation failed for %s expected:\n%s\ngot:\n%s", target, expect, got)
	}
}
