package report import ( "testing" ) func TestPackageName(t *testing.T) { type testCase struct { name string expect string } for _, c := range []testCase{ // Unrecognized packages: {``, ``}, {`name`, ``}, {`[libjvm.so]`, ``}, {`prefix/name/suffix`, ``}, {`prefix(a.b.c,x.y.z)`, ``}, {`.a.b`, ``}, {`(a.b)`, ``}, // C++ symbols: {`Math.number`, `Math`}, {`std::vector`, `std`}, {`std::internal::vector`, `std`}, // Java symbols: {`pkg.Class.name`, `pkg`}, {`pkg.pkg.Class.name`, `pkg`}, {`pkg.Class.name(a.b.c, x.y.z)`, `pkg`}, {`pkg.pkg.Class.`, `pkg`}, {`pkg.pkg.Class.(a.b.c, x.y.z)`, `pkg`}, // Go symbols: {`pkg.name`, `pkg`}, {`pkg.(*type).name`, `pkg`}, {`path/pkg.name`, `path/pkg`}, {`path/pkg.(*type).name`, `path/pkg`}, {`path/path/pkg.name`, `path/path/pkg`}, {`path/path/pkg.(*type).name`, `path/path/pkg`}, {`some.url.com/path/pkg.fnID`, `some.url.com/path/pkg`}, {`parent-dir/dir/google.golang.org/grpc/transport.NewFramer`, `parent-dir/dir/google.golang.org/grpc/transport`}, {`parent-dir/dir/google.golang.org/grpc.(*Server).handleRawConn`, `parent-dir/dir/google.golang.org/grpc`}, } { t.Run(c.name, func(t *testing.T) { if got := packageName(c.name); got != c.expect { t.Errorf("packageName(%q) = %#v, expecting %#v", c.name, got, c.expect) } }) } }