blob: 07639911abc259cc77fab2d2689e55b99761da5f [file] [edit]
// Copyright 2026 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 edge_test
import (
"go/ast"
"testing"
"golang.org/x/tools/go/ast/edge"
)
func TestGetNilConcrete(t *testing.T) {
branchStmt := &ast.BranchStmt{Label: nil}
out := edge.BranchStmt_Label.Get(branchStmt, -1)
if out.(*ast.Ident) != nil {
t.Fatal("out.(*ast.Ident) != nil")
}
}
func TestGetNilIface(t *testing.T) {
ifStmt := &ast.IfStmt{Init: nil}
out := edge.IfStmt_Init.Get(ifStmt, -1) // should not panic
if out != nil {
t.Fatal("out != nil")
}
}
func TestGetPanics(t *testing.T) {
t.Run("-1 with indexable field", func(t *testing.T) {
defer func() { _ = recover() }()
blockstmt := &ast.BlockStmt{List: []ast.Stmt{&ast.IfStmt{}}}
edge.BlockStmt_List.Get(blockstmt, -1) // panic: slice index out of range
t.Fatal("Get did not panic")
})
t.Run("idx with non-indexable field", func(t *testing.T) {
defer func() { _ = recover() }()
id := &ast.IfStmt{Cond: ast.NewIdent("foo")}
edge.IfStmt_Cond.Get(id, 1) // panic: cannot index non-slice
t.Fatal("Get did not panic")
})
}