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