//go:build darwin package installer import ( "fmt" "image/png" "os" "os/exec" "path/filepath" "testing" "gitgud.io/mike/mpv-manager/internal/assets" "github.com/stretchr/testify/require" ) func TestNativeMacIconConversion(t *testing.T) { root := t.TempDir() pngData, err := assets.ReadPNGIcon() if err != nil { t.Fatal(err) } input, output := filepath.Join(root, "icon.png"), filepath.Join(root, "icon.icns") if err := os.WriteFile(input, pngData, 0600); err != nil { t.Fatal(err) } if err := ConvertPNGToICNS(input, output); err != nil { t.Fatalf("native macOS icon conversion failed: %v", err) } decoded := filepath.Join(root, "decoded.iconset") diagnostic, err := exec.Command("iconutil", "-c", "iconset", "-o", decoded, output).CombinedOutput() require.NoError(t, err, string(diagnostic)) for _, size := range []int{16, 32, 128, 256, 512} { for _, scale := range []int{1, 2} { name := fmt.Sprintf("icon_%dx%d", size, size) if scale == 2 { name += "@2x" } file, err := os.Open(filepath.Join(decoded, name+".png")) require.NoError(t, err) dimensions, err := png.DecodeConfig(file) require.NoError(t, err) require.NoError(t, file.Close()) require.Equal(t, size*scale, dimensions.Width) require.Equal(t, size*scale, dimensions.Height) } } }