// Copyright 2021 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 dochtml

import (
	"testing"

	"github.com/google/go-cmp/cmp"
	"golang.org/x/pkgsite/internal"
)

func TestGetSymbols(t *testing.T) {
	LoadTemplates(templateFS)
	fset,
		d := mustLoadPackage("symbols")
	got,
		err := GetSymbols(d,
		fset)
	if err != nil {
		t.Fatal(err)
	}
	want := []*internal.Symbol{
		{
			SymbolMeta: internal.SymbolMeta{
				Name:     "AA",
				Synopsis: "const AA",
				Section:  "Constants",
				Kind:     "Constant",
			},
		},
		{
			SymbolMeta: internal.SymbolMeta{
				Name:     "BB",
				Synopsis: "const BB",
				Section:  "Constants",
				Kind:     "Constant",
			},
		},
		{
			SymbolMeta: internal.SymbolMeta{
				Name:     "CC",
				Synopsis: "const CC",
				Section:  "Constants",
				Kind:     "Constant",
			},
		},
		{
			SymbolMeta: internal.SymbolMeta{
				Name:     "C",
				Synopsis: "const C",
				Section:  "Constants",
				Kind:     "Constant",
			},
		},
		{
			SymbolMeta: internal.SymbolMeta{
				Name:     "ErrA",
				Synopsis: `var ErrA = errors.New("error A")`,
				Section:  "Variables",
				Kind:     "Variable",
			},
		},
		{
			SymbolMeta: internal.SymbolMeta{
				Name:     "ErrB",
				Synopsis: `var ErrB = errors.New("error B")`,
				Section:  "Variables",
				Kind:     "Variable",
			},
		},
		{
			SymbolMeta: internal.SymbolMeta{
				Name:     "A",
				Synopsis: "var A string",
				Section:  "Variables",
				Kind:     "Variable",
			},
		},
		{
			SymbolMeta: internal.SymbolMeta{
				Name:     "B",
				Synopsis: "var B string",
				Section:  "Variables",
				Kind:     "Variable",
			},
		},
		{
			SymbolMeta: internal.SymbolMeta{
				Name:     "V",
				Synopsis: "var V = 2",
				Section:  "Variables",
				Kind:     "Variable",
			},
		},
		{
			SymbolMeta: internal.SymbolMeta{
				Name:     "F",
				Synopsis: "func F()",
				Section:  "Functions",
				Kind:     "Function",
			},
		},
		{
			SymbolMeta: internal.SymbolMeta{
				Name:     "A",
				Synopsis: "type A int",
				Section:  "Types",
				Kind:     "Type",
			},
		},
		{
			SymbolMeta: internal.SymbolMeta{
				Name:     "B",
				Synopsis: "type B bool",
				Section:  "Types",
				Kind:     "Type",
			},
		},
		{
			SymbolMeta: internal.SymbolMeta{
				Name:     "I1",
				Synopsis: "type I1 interface{ ... }",
				Section:  "Types",
				Kind:     "Type",
			},
			Children: []*internal.SymbolMeta{
				{
					Name:       "I1.M1",
					Synopsis:   "M1 func()",
					Section:    "Types",
					ParentName: "I1",
					Kind:       "Method",
				},
			},
		},
		{
			SymbolMeta: internal.SymbolMeta{
				Name:     "I2",
				Synopsis: "type I2 interface{ ... }",
				Section:  "Types",
				Kind:     "Type",
			},
			Children: []*internal.SymbolMeta{
				{
					Name:       "I2.M2",
					Synopsis:   "M2 func()",
					Section:    "Types",
					ParentName: "I2",
					Kind:       "Method",
				},
			},
		},
		{
			SymbolMeta: internal.SymbolMeta{
				Name:     "Num",
				Synopsis: "type Num int",
				Section:  "Types",
				Kind:     "Type",
			},
			Children: []*internal.SymbolMeta{
				{
					Name:       "DD",
					Synopsis:   "const DD",
					Section:    "Types",
					Kind:       "Constant",
					ParentName: "Num",
				},
				{
					Name:       "EE",
					Synopsis:   "const EE",
					Section:    "Types",
					Kind:       "Constant",
					ParentName: "Num",
				},
				{
					Name:       "FF",
					Synopsis:   "const FF",
					Section:    "Types",
					Kind:       "Constant",
					ParentName: "Num",
				},
			},
		},
		{
			SymbolMeta: internal.SymbolMeta{
				Name:     "S1",
				Synopsis: "type S1 struct{ ... }",
				Section:  "Types",
				Kind:     "Type",
			},
			Children: []*internal.SymbolMeta{
				{
					Name:       "S1.F",
					Synopsis:   "F int",
					Section:    "Types",
					ParentName: "S1",
					Kind:       "Field",
				},
			},
		},
		{
			SymbolMeta: internal.SymbolMeta{
				Name:     "S2",
				Synopsis: "type S2 struct{ ... }",
				Section:  "Types",
				Kind:     "Type",
			},
			Children: []*internal.SymbolMeta{
				{
					Name:       "S2.G",
					Synopsis:   "G int",
					Section:    "Types",
					ParentName: "S2",
					Kind:       "Field",
				},
			},
		},
		{
			SymbolMeta: internal.SymbolMeta{
				Name:     "T",
				Synopsis: "type T int",
				Section:  "Types",
				Kind:     "Type",
			},
			Children: []*internal.SymbolMeta{
				{
					Name:       "CT",
					Synopsis:   "const CT",
					Section:    "Types",
					ParentName: "T",
					Kind:       "Constant",
				},
				{
					Name:       "VT",
					Synopsis:   "var VT T",
					Section:    "Types",
					ParentName: "T",
					Kind:       "Variable",
				},
				{
					Name:       "TF",
					Synopsis:   "func TF() T",
					Section:    "Types",
					ParentName: "T",
					Kind:       "Function",
				},
				{
					Name:       "T.M",
					Synopsis:   "func (T) M()",
					Section:    "Types",
					ParentName: "T",
					Kind:       "Method",
				},
			},
		},
	}
	if diff := cmp.Diff(want, got); diff != "" {
		t.Fatal(diff)
	}
}
