// 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(templateSource)
	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)
	}
}
