package runtimeinfo import ( "runtime/debug" "testing" ) func TestVersion(t *testing.T) { tests := []struct { name string injected string info *debug.BuildInfo ok bool want string }{ { name: "injected version takes precedence", injected: "v1.2.3", info: &debug.BuildInfo{Main: debug.Module{Version: "v4.5.6"}}, ok: true, want: "v1.2.3", }, { name: "main module version", info: &debug.BuildInfo{Main: debug.Module{Version: "v4.5.6"}}, ok: true, want: "v4.5.6", }, { name: "missing build information", want: "dev", }, { name: "development main module", info: &debug.BuildInfo{Main: debug.Module{Version: "(devel)"}}, ok: true, want: "dev", }, { name: "empty main module version", info: &debug.BuildInfo{Main: debug.Module{}}, ok: true, want: "dev", }, } for _, test := range tests { t.Run(test.name, func(t *testing.T) { got := version(test.injected, func() (*debug.BuildInfo, bool) { return test.info, test.ok }) if got != test.want { t.Fatalf("version() = %q, want %q", got, test.want) } }) } }