package device import ( "os" "path/filepath" "runtime" "strings" "testing" ) func TestBundledPreviewRuntimeWithoutSystemTools(t *testing.T) { t.Chdir(t.TempDir()) t.Setenv("PATH", "") name := "ffmpeg" adbName := "adb" if runtime.GOOS == "windows" { name += ".exe" adbName += ".exe" } for _, relative := range []string{filepath.Join("ffmpeg", name), filepath.Join("platform-tools", adbName), "scrcpy/scrcpy-server-v5.0.1"} { path := filepath.Join("third_party", relative) if err := os.MkdirAll(filepath.Dir(path), 0755); err != nil { t.Fatal(err) } if err := os.WriteFile(path, []byte("fixture"), 0755); err != nil { t.Fatal(err) } } if p, err := resolveScrcpyServer(); err != nil || !filepath.IsAbs(p) { t.Fatalf("server: %q %v", p, err) } if p, err := resolveFFmpeg(); err != nil || !filepath.IsAbs(p) { t.Fatalf("ffmpeg: %q %v", p, err) } if p, err := resolveAdb(); err != nil || !filepath.IsAbs(p) { t.Fatalf("adb: %q %v", p, err) } } func TestMissingPreviewRuntimeGivesRepairInstruction(t *testing.T) { t.Chdir(t.TempDir()) t.Setenv("PATH", "") for _, resolve := range []func() (string, error){resolveScrcpyServer, resolveFFmpeg} { _, err := resolve() if err == nil || !strings.Contains(err.Error(), "完整的 iTuoke 安装包") || strings.Contains(err.Error(), "brew") { t.Fatalf("unexpected repair instruction: %v", err) } } }