Files
wehub-resource-sync a06f331eb8
CI / benchmark (push) Has been skipped
install-script / posix-syntax (push) Successful in 6m1s
CI / build-onnx (push) Failing after 6m43s
init-smoke / dry-run (push) Failing after 15m57s
security / govulncheck (push) Has been cancelled
security / trivy-fs (push) Has been cancelled
CI / test (1.26, ubuntu-latest) (push) Has been cancelled
Scorecard supply-chain security / Scorecard analysis (push) Has been cancelled
CI / test (1.26, macos-latest) (push) Has been cancelled
CI / build-windows (push) Has been cancelled
CI / lint (push) Has been cancelled
install-script / powershell-syntax (push) Has been cancelled
install-script / install (macos-14) (push) Has been cancelled
install-script / install (ubuntu-latest) (push) Has been cancelled
chore: import upstream snapshot with attribution
2026-07-13 12:33:42 +08:00

139 lines
3.1 KiB
Go

package languages
import (
"testing"
"github.com/zzet/gortex/internal/graph"
)
func TestGoFlags_LaunchDarklyVariation(t *testing.T) {
src := `package foo
type LDClient struct{}
func (c *LDClient) BoolVariation(key string, ctx any, def bool) bool { return false }
func Run(ld *LDClient) {
if ld.BoolVariation("signup_v2", nil, false) {
_ = "ok"
}
}
`
fix := runGoExtract(t, src)
flags := fix.nodesByKind[graph.KindFlag]
if len(flags) != 1 {
t.Fatalf("expected 1 KindFlag, got %d: %+v", len(flags), flags)
}
if flags[0].ID != "flag::launchdarkly::signup_v2" {
t.Errorf("flag id = %q", flags[0].ID)
}
if p, _ := flags[0].Meta["provider"].(string); p != "launchdarkly" {
t.Errorf("provider meta = %q", p)
}
toggles := fix.edgesByKind[graph.EdgeTogglesFlag]
if len(toggles) != 1 {
t.Fatalf("expected 1 EdgeTogglesFlag, got %d", len(toggles))
}
if op, _ := toggles[0].Meta["op"].(string); op != "read" {
t.Errorf("op meta = %q", op)
}
}
func TestGoFlags_GrowthBookIsOn(t *testing.T) {
src := `package foo
type GBClient struct{}
func (c *GBClient) IsOn(key string) bool { return false }
func Run(gb *GBClient) {
gb.IsOn("new_pricing")
}
`
fix := runGoExtract(t, src)
flags := fix.nodesByKind[graph.KindFlag]
if len(flags) != 1 {
t.Fatalf("expected 1 flag, got %d", len(flags))
}
if flags[0].ID != "flag::growthbook::new_pricing" {
t.Errorf("id = %q", flags[0].ID)
}
}
func TestGoFlags_UnleashIsEnabled(t *testing.T) {
src := `package foo
type UnleashClient struct{}
func (c *UnleashClient) IsEnabled(name string) bool { return false }
func Run(u *UnleashClient) {
u.IsEnabled("dark_mode")
}
`
fix := runGoExtract(t, src)
flags := fix.nodesByKind[graph.KindFlag]
if len(flags) != 1 {
t.Fatalf("expected 1 flag, got %d", len(flags))
}
if flags[0].ID != "flag::unleash::dark_mode" {
t.Errorf("id = %q", flags[0].ID)
}
}
func TestGoFlags_DuplicateNameDeduplicates(t *testing.T) {
src := `package foo
type GBClient struct{}
func (c *GBClient) IsOn(key string) bool { return false }
func A(gb *GBClient) { gb.IsOn("checkout_v2") }
func B(gb *GBClient) { gb.IsOn("checkout_v2") }
`
fix := runGoExtract(t, src)
flags := fix.nodesByKind[graph.KindFlag]
if len(flags) != 1 {
t.Errorf("expected 1 deduped flag node, got %d", len(flags))
}
if got := len(fix.edgesByKind[graph.EdgeTogglesFlag]); got != 2 {
t.Errorf("expected 2 toggle edges (one per call site), got %d", got)
}
}
func TestGoFlags_NonLiteralArgSkipped(t *testing.T) {
src := `package foo
type GBClient struct{}
func (c *GBClient) IsOn(key string) bool { return false }
func Run(gb *GBClient, name string) {
gb.IsOn(name)
}
`
fix := runGoExtract(t, src)
if got := len(fix.nodesByKind[graph.KindFlag]); got != 0 {
t.Errorf("dynamic flag name should not produce a node, got %d", got)
}
}
func TestGoFlags_NonFlagMethodIgnored(t *testing.T) {
src := `package foo
type Cache struct{}
func (c *Cache) Get(key string) any { return nil }
func Run(c *Cache) {
_ = c.Get("user_123")
}
`
fix := runGoExtract(t, src)
if got := len(fix.nodesByKind[graph.KindFlag]); got != 0 {
t.Errorf("Cache.Get should not match flag heuristic, got %d", got)
}
}