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