blob: 5b40c02dc4f2ad81fecf354380b008dc6f5949a0 [file] [log] [blame]
// 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.
package ir
import (
"testing"
)
func TestSplitPkg(t *testing.T) {
tests := []struct {
in string
pkg string
sym string
}{
{
in: "foo.Bar",
pkg: "foo",
sym: "Bar",
},
{
in: "foo/bar.Baz",
pkg: "foo/bar",
sym: "Baz",
},
{
in: "memeqbody",
pkg: "",
sym: "memeqbody",
},
{
in: `example%2ecom.Bar`,
pkg: `example%2ecom`,
sym: "Bar",
},
{
// Not a real generated symbol name, but easier to catch the general parameter form.
in: `foo.Bar[sync/atomic.Uint64]`,
pkg: `foo`,
sym: "Bar[sync/atomic.Uint64]",
},
{
in: `example%2ecom.Bar[sync/atomic.Uint64]`,
pkg: `example%2ecom`,
sym: "Bar[sync/atomic.Uint64]",
},
{
in: `gopkg.in/yaml%2ev3.Bar[sync/atomic.Uint64]`,
pkg: `gopkg.in/yaml%2ev3`,
sym: "Bar[sync/atomic.Uint64]",
},
{
// This one is a real symbol name.
in: `foo.Bar[go.shape.struct { sync/atomic._ sync/atomic.noCopy; sync/atomic._ sync/atomic.align64; sync/atomic.v uint64 }]`,
pkg: `foo`,
sym: "Bar[go.shape.struct { sync/atomic._ sync/atomic.noCopy; sync/atomic._ sync/atomic.align64; sync/atomic.v uint64 }]",
},
{
in: `example%2ecom.Bar[go.shape.struct { sync/atomic._ sync/atomic.noCopy; sync/atomic._ sync/atomic.align64; sync/atomic.v uint64 }]`,
pkg: `example%2ecom`,
sym: "Bar[go.shape.struct { sync/atomic._ sync/atomic.noCopy; sync/atomic._ sync/atomic.align64; sync/atomic.v uint64 }]",
},
{
in: `gopkg.in/yaml%2ev3.Bar[go.shape.struct { sync/atomic._ sync/atomic.noCopy; sync/atomic._ sync/atomic.align64; sync/atomic.v uint64 }]`,
pkg: `gopkg.in/yaml%2ev3`,
sym: "Bar[go.shape.struct { sync/atomic._ sync/atomic.noCopy; sync/atomic._ sync/atomic.align64; sync/atomic.v uint64 }]",
},
}
for _, tc := range tests {
t.Run(tc.in, func(t *testing.T) {
pkg, sym := splitPkg(tc.in)
if pkg != tc.pkg {
t.Errorf("splitPkg(%q) got pkg %q want %q", tc.in, pkg, tc.pkg)
}
if sym != tc.sym {
t.Errorf("splitPkg(%q) got sym %q want %q", tc.in, sym, tc.sym)
}
})
}
}