...

Package jsontest

import "encoding/json/internal/jsontest"
Overview
Index

Overview ▾

Package jsontest contains functionality to assist in testing JSON.

Variables

Data is a list of JSON testdata.

var Data = func() (entries []Entry) {
    fis := mustGet(fs.ReadDir(testdataFS, "_embed"))
    slices.SortFunc(fis, func(x, y fs.DirEntry) int { return strings.Compare(x.Name(), y.Name()) })
    for _, fi := range fis {
        var entry Entry

        words := strings.Split(strings.TrimSuffix(fi.Name(), ".json.zst"), "_")
        for i := range words {
            words[i] = strings.Title(words[i])
        }
        entry.Name = strings.Join(words, "")

        entry.Data = sync.OnceValue(func() []byte {
            filePath := path.Join("_embed", fi.Name())
            b := mustGet(fs.ReadFile(testdataFS, filePath))
            zr := zstd.NewReader(bytes.NewReader(b))
            return mustGet(io.ReadAll(zr))
        })

        switch entry.Name {
        case "CanadaGeometry":
            entry.New = func() any { return new(canadaRoot) }
        case "CitmCatalog":
            entry.New = func() any { return new(citmRoot) }
        case "GolangSource":
            entry.New = func() any { return new(golangRoot) }
        case "StringEscaped":
            entry.New = func() any { return new(stringRoot) }
        case "StringUnicode":
            entry.New = func() any { return new(stringRoot) }
        case "SyntheaFhir":
            entry.New = func() any { return new(syntheaRoot) }
        case "TwitterStatus":
            entry.New = func() any { return new(twitterRoot) }
        }

        entries = append(entries, entry)
    }
    return entries
}()

type CaseName

CaseName is a case name annotated with a file and line.

type CaseName struct {
    Name  string
    Where CasePos
}

func Name

func Name(s string) (c CaseName)

Name annotates a case name with the file and line of the caller.

type CasePos

CasePos represents a file and line number.

type CasePos struct {
    // contains filtered or unexported fields
}

func (CasePos) String

func (pos CasePos) String() string

type Entry

type Entry struct {
    Name string
    Data func() []byte
    New  func() any // nil if there is no concrete type for this
}