- dialog.NewCustom selalu menambah tombol dismiss walau labelnya kosong; modal kita pakai baris tombol sendiri, jadi pindah ke NewCustomWithoutButtons (ditambah tes yang menolak pemakaian dialog.NewCustom lagi) - Ikon: SVG/webp/gif/bmp/ico/jpeg semuanya dikonversi ke PNG saat dipasang (desktop environment tidak konsisten membaca format lain), gambar besar diperkecil ke maksimal 512px - Filter file picker ikon menambah webp/gif/bmp - Perbaiki data race pada endpoint pencarian ikon (iconifyBase) yang ditemukan oleh go test -race; tes UI menunggu goroutine pencarian selesai - go test -race -count=1 ./... hijau untuk semua paket
73 lines
1.9 KiB
Go
73 lines
1.9 KiB
Go
package ui
|
|
|
|
import (
|
|
"os"
|
|
"path/filepath"
|
|
"strings"
|
|
"testing"
|
|
"time"
|
|
|
|
"fyne.io/fyne/v2/test"
|
|
|
|
"lazyrun/internal/icon"
|
|
)
|
|
|
|
// TestNoEmptyDismissButton memastikan modal tidak memakai dialog.NewCustom,
|
|
// yang selalu menambah tombol dismiss walau labelnya kosong (tombol hantu
|
|
// di bagian bawah modal). Kita punya baris tombol sendiri, jadi harus memakai
|
|
// NewCustomWithoutButtons.
|
|
func TestNoEmptyDismissButton(t *testing.T) {
|
|
files, err := filepath.Glob("*.go")
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
for _, file := range files {
|
|
if strings.HasSuffix(file, "_test.go") {
|
|
continue
|
|
}
|
|
data, err := os.ReadFile(file)
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
if strings.Contains(string(data), "dialog.NewCustom(") {
|
|
t.Errorf("%s memakai dialog.NewCustom (menambah tombol kosong); gunakan NewCustomWithoutButtons", file)
|
|
}
|
|
}
|
|
}
|
|
|
|
// TestDialogsOpenWithoutPanic membuka semua modal di test driver.
|
|
func TestDialogsOpenWithoutPanic(t *testing.T) {
|
|
a := test.NewApp()
|
|
defer a.Quit()
|
|
|
|
// pencarian ikon diarahkan ke port mati: tes tidak boleh menyentuh internet
|
|
// dan tidak boleh mengubah UI dari goroutine latar.
|
|
icon.SetSearchEndpoint("http://127.0.0.1:1")
|
|
defer icon.SetSearchEndpoint("https://api.iconify.design")
|
|
|
|
ui, err := build(a, "test")
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
ui.win.Show()
|
|
|
|
ui.showExecutableDialog()
|
|
if top := ui.win.Canvas().Overlays().Top(); top == nil {
|
|
t.Fatal("modal executable tidak muncul")
|
|
}
|
|
ui.showWebAppDialog()
|
|
if len(ui.browsers) > 0 {
|
|
if top := ui.win.Canvas().Overlays().Top(); top == nil {
|
|
t.Fatal("modal web app tidak muncul")
|
|
}
|
|
}
|
|
ui.showIconSearch("whatsapp", func(icon.Result, []byte) {})
|
|
if top := ui.win.Canvas().Overlays().Top(); top == nil {
|
|
t.Fatal("modal pencarian ikon tidak muncul")
|
|
}
|
|
|
|
// tunggu goroutine pencarian selesai: test driver menjalankan fyne.Do inline,
|
|
// jadi sisa goroutine bisa bertabrakan dengan tes berikutnya kalau dibiarkan.
|
|
time.Sleep(300 * time.Millisecond)
|
|
}
|