96 lines
2.5 KiB
Go
96 lines
2.5 KiB
Go
package mujica
|
|
|
|
import (
|
|
"slices"
|
|
"testing"
|
|
|
|
"github.com/egoist/mygo/ui"
|
|
)
|
|
|
|
func TestLinkOpensURL(t *testing.T) {
|
|
tt := ui.NewTester(func(c *ui.Context) {
|
|
Use(c, Settings{})
|
|
Link(c, "Charter", LinkOptions{URL: "https://example.com/charter"})
|
|
}, 300, 100)
|
|
if err := tt.Click("Charter"); err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
tt.Key(0, ui.KeyTab)
|
|
tt.Key(0, ui.KeyEnter)
|
|
want := []string{"https://example.com/charter", "https://example.com/charter"}
|
|
if got := tt.OpenedURLs(); !slices.Equal(got, want) {
|
|
t.Fatalf("opened %v", got)
|
|
}
|
|
}
|
|
|
|
func TestLinkAction(t *testing.T) {
|
|
n := 0
|
|
tt := ui.NewTester(func(c *ui.Context) {
|
|
Use(c, Settings{})
|
|
if Link(c, "Show details", LinkOptions{}).Clicked() {
|
|
n++
|
|
}
|
|
}, 300, 100)
|
|
tt.Key(0, ui.KeyTab)
|
|
tt.Key(0, ui.KeyEnter)
|
|
if n != 1 || len(tt.OpenedURLs()) != 0 {
|
|
t.Fatalf("clicks %d, opened %v", n, tt.OpenedURLs())
|
|
}
|
|
}
|
|
|
|
func TestLinkInvalidURLIsNotOpened(t *testing.T) {
|
|
n := 0
|
|
tt := ui.NewTester(func(c *ui.Context) {
|
|
Use(c, Settings{})
|
|
if Link(c, "Broken", LinkOptions{URL: "https://"}).Clicked() {
|
|
n++
|
|
}
|
|
}, 400, 100)
|
|
if err := tt.Click("Broken"); err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
if n != 1 || len(tt.OpenedURLs()) != 0 {
|
|
t.Fatalf("clicks %d, opened %v", n, tt.OpenedURLs())
|
|
}
|
|
if !tt.HasText("This link cannot be opened: https://") {
|
|
t.Fatalf("texts %v", tt.Texts())
|
|
}
|
|
}
|
|
|
|
func TestLinkCallerError(t *testing.T) {
|
|
tt := ui.NewTester(func(c *ui.Context) {
|
|
Use(c, Settings{Locale: ZhCN})
|
|
Link(c, "手册", LinkOptions{URL: "https://example.com", Error: "没有可以打开此链接的应用"})
|
|
}, 400, 100)
|
|
tt.Frame()
|
|
if !tt.HasText("没有可以打开此链接的应用") {
|
|
t.Fatalf("texts %v", tt.Texts())
|
|
}
|
|
}
|
|
|
|
func TestLinkCheck(t *testing.T) {
|
|
for raw, want := range map[string][2]bool{
|
|
"https://example.com": {true, true},
|
|
"https://": {true, false},
|
|
"mailto:a@b.c": {true, true},
|
|
"/notes/42": {false, true},
|
|
"?tab=info": {false, true},
|
|
"http://[::1": {false, false},
|
|
} {
|
|
ext, ok := linkCheck(raw)
|
|
if ext != want[0] || ok != want[1] {
|
|
t.Errorf("%q: external %v ok %v", raw, ext, ok)
|
|
}
|
|
}
|
|
}
|
|
|
|
func TestLinkSnapshot(t *testing.T) {
|
|
snapshot(t, "link", 420, 140, func(c *ui.Context) {
|
|
ui.Column(c).Padding(20).Gap(12).AlignItems(ui.Start).Children(func() {
|
|
Link(c, "Read the court charter", LinkOptions{URL: "https://example.com"})
|
|
Link(c, "Show the guest list", LinkOptions{})
|
|
Link(c, "Broken link", LinkOptions{URL: "https://"})
|
|
})
|
|
})
|
|
}
|