| // Copyright 2023 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. | |
| //go:build goexperiment.jsonv2 | |
| package jsontest | |
| import ( | |
| "fmt" | |
| "path" | |
| "runtime" | |
| ) | |
| // TODO(https://go.dev/issue/52751): Replace with native testing support. | |
| // CaseName is a case name annotated with a file and line. | |
| type CaseName struct { | |
| Name string | |
| Where CasePos | |
| } | |
| // Name annotates a case name with the file and line of the caller. | |
| func Name(s string) (c CaseName) { | |
| c.Name = s | |
| runtime.Callers(2, c.Where.pc[:]) | |
| return c | |
| } | |
| // CasePos represents a file and line number. | |
| type CasePos struct{ pc [1]uintptr } | |
| func (pos CasePos) String() string { | |
| frames := runtime.CallersFrames(pos.pc[:]) | |
| frame, _ := frames.Next() | |
| return fmt.Sprintf("%s:%d", path.Base(frame.File), frame.Line) | |
| } | |