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