package browsercfg import ( "context" "errors" "io/fs" "os" "time" ) // testFileInfo 是最小的 fs.FileInfo 实现,让单测能伪造 Stat 的返回,从而不依赖真实装没装浏览器。 type testFileInfo struct { mode fs.FileMode dir bool } func (f testFileInfo) Name() string { return "browser" } func (f testFileInfo) Size() int64 { return 0 } func (f testFileInfo) Mode() fs.FileMode { return f.mode } func (f testFileInfo) ModTime() time.Time { return time.Time{} } func (f testFileInfo) IsDir() bool { return f.dir } func (f testFileInfo) Sys() any { return nil } // executableFileInfo 造一个带执行位的普通文件信息(非 Windows 平台才算「可执行」)。 func executableFileInfo() fs.FileInfo { return testFileInfo{mode: 0o755} } // noBrowserProber 返回一个「本机没有浏览器、也没有 CDP 端点」的 Prober(全阴性基线)。 func noBrowserProber() *Prober { return &Prober{ LookPath: func(string) (string, error) { return "", errors.New("not found") }, Stat: func(string) (os.FileInfo, error) { return nil, os.ErrNotExist }, Getenv: func(string) string { return "" }, GOOS: "linux", CheckCDP: func(context.Context, string) error { return errors.New("connection refused") }, } }