layout: bar atas workspace ala mock draf-tia + bar TAB membentang penuh
CI / test (push) Successful in 27s
CI / test (push) Successful in 27s
- Bar workspace jadi panel: judul 'workspace' di border, subjudul daftar seksi (stack, kontainer, image, volume, jaringan), pill Cari + tombol [+ stack] dan [konversi] di kanan — semua klikable (klik = paritas tombol huruf). - Detail kontainer: bar TAB kini membentang penuh di atas TAB content dan kolom Aksi Tab (mock TAB ACTION); hit-test tab & kolom disesuaikan. - Tes: unit TestWorkspaceBar (lebar 40/80/120) + e2e TestWorkspaceBar (subjudul tampil, klik [+ stack] membuka modal); posisi klik e2e lain digeser mengikuti tinggi bar.
This commit is contained in:
1 parent
b7866f917b
commit
75ead4be8a
5 files changed
+128
-60
No files matched your search
+30
-4
@@ -22,6 +22,7 @@ import (
|
||||
"github.com/creack/pty"
|
||||
|
||||
"gitea.oxpoe.qzz.io/oxpoe/tia-love/internal/docker"
|
||||
"gitea.oxpoe.qzz.io/oxpoe/tia-love/internal/i18n"
|
||||
)
|
||||
|
||||
const (
|
||||
@@ -711,6 +712,31 @@ func TestTabActionColumn(t *testing.T) {
|
||||
}
|
||||
}
|
||||
|
||||
// TestWorkspaceBar — bar atas workspace (mock draf-tia): judul, subjudul
|
||||
// daftar seksi, dan tombol [+ stack] yang bisa diklik (membuka modal konverter).
|
||||
func TestWorkspaceBar(t *testing.T) {
|
||||
sub := strings.ToLower(i18n.T("section.stacks")) + ", " +
|
||||
strings.ToLower(i18n.T("section.containers")) + ", " +
|
||||
strings.ToLower(i18n.T("section.images")) + ", " +
|
||||
strings.ToLower(i18n.T("section.volumes")) + ", " +
|
||||
strings.ToLower(i18n.T("section.networks"))
|
||||
u := startTUI(t)
|
||||
u.waitContains("beranda", 5*time.Second)
|
||||
u.send("2")
|
||||
u.waitContains(sub, 5*time.Second)
|
||||
u.waitContains("workspace", 3*time.Second)
|
||||
if !u.clickText("+ stack") {
|
||||
t.Fatal("tombol [+ stack] tidak ditemukan di bar workspace")
|
||||
}
|
||||
u.waitContains("Konversi docker run", 3*time.Second) // modal terbuka
|
||||
u.send("\x03") // Ctrl+C = tutup modal (bukan keluar)
|
||||
u.waitContains(sub, 3*time.Second)
|
||||
u.send("q")
|
||||
if code := u.waitExit(5 * time.Second); code != 0 {
|
||||
t.Fatalf("exit code %d, mau 0", code)
|
||||
}
|
||||
}
|
||||
|
||||
// TestConvertCommand — CLI `tia-love convert`: hasil di stdout, exit code jelas.
|
||||
func TestConvertCommand(t *testing.T) {
|
||||
out, err := exec.Command(binPath, "convert", "docker run -p 80:80 --name web nginx").CombinedOutput()
|
||||
@@ -877,7 +903,7 @@ func TestMouseAndNavigateKeys(t *testing.T) {
|
||||
u.waitContains("Kontainer", 3*time.Second)
|
||||
u.send("j")
|
||||
u.send("k")
|
||||
u.send("\x1b[<0;10;4M\x1b[<0;10;4m") // klik kiri di area sidebar
|
||||
u.send("\x1b[<0;10;8M\x1b[<0;10;8m") // klik kiri di baris daftar sidebar
|
||||
u.send("r") // muat ulang
|
||||
u.send("q")
|
||||
if code := u.waitExit(5 * time.Second); code != 0 {
|
||||
@@ -916,9 +942,9 @@ func TestClickSelectsContainer(t *testing.T) {
|
||||
u.waitContains(short(items[0].Name), 5*time.Second)
|
||||
u.waitHighlighted(short(items[0].Name), 3*time.Second) // seleksi awal (kursor 0)
|
||||
|
||||
// klik baris item ke-2: xterm y=5 (1-based) → app row 4 → indeks 1
|
||||
// (header + toolbar + border panel di atasnya).
|
||||
u.send("\x1b[<0;10;5M\x1b[<0;10;5m")
|
||||
// klik baris item ke-2: xterm y=8 (1-based) → app row 7 → indeks 1
|
||||
// (header + bar workspace 4 baris + border panel di atasnya).
|
||||
u.send("\x1b[<0;10;8M\x1b[<0;10;8m")
|
||||
u.waitHighlighted(short(items[1].Name), 3*time.Second)
|
||||
|
||||
u.send("q")
|
||||
|
||||
Reference in new issue
Block a user