//go:build !windows package singleinstance import ( "errors" "path/filepath" "testing" ) func TestAcquireWithFallbackUsesFallbackWhenPrimaryCannotOpen(t *testing.T) { tempDir := t.TempDir() primary := filepath.Join(tempDir, "missing", "privatevoice-input.lock") fallback := filepath.Join(tempDir, "fallback.lock") lock, err := acquireWithFallback(primary, fallback) if err != nil { t.Fatalf("acquireWithFallback() error = %v", err) } lock.Release() } func TestAcquireWithFallbackDoesNotBypassHeldPrimaryLock(t *testing.T) { tempDir := t.TempDir() primary := filepath.Join(tempDir, "privatevoice-input.lock") fallback := filepath.Join(tempDir, "fallback.lock") held, err := acquirePath(primary) if err != nil { t.Fatalf("acquirePath() error = %v", err) } defer held.Release() lock, err := acquireWithFallback(primary, fallback) if err == nil { lock.Release() t.Fatal("acquireWithFallback() unexpectedly acquired fallback while primary was held") } var unavailable lockUnavailableError if !errors.As(err, &unavailable) { t.Fatalf("acquireWithFallback() error = %T %v, want lockUnavailableError", err, err) } }