Files
MujicaUI/relative_time_test.go
T

84 lines
2.6 KiB
Go

package mujica
import (
"testing"
"time"
"github.com/egoist/mygo/ui"
)
func TestRelativeTimeWording(t *testing.T) {
var en, zh []string
cases := []time.Duration{10 * time.Second, -90 * time.Second, 3 * time.Minute, 5 * time.Hour, -25 * time.Hour, 40 * 24 * time.Hour, 800 * 24 * time.Hour}
for _, loc := range []Locale{EnUS, ZhCN} {
ui.NewTester(func(c *ui.Context) {
Use(c, Settings{Locale: loc})
var out []string
for _, d := range cases {
out = append(out, RelativeTimeText(c, d))
}
if loc == EnUS {
en = out
} else {
zh = out
}
}, 10, 10)
}
wantEn := []string{"just now", "in 1 minute", "3 minutes ago", "5 hours ago", "in 1 day", "1 month ago", "2 years ago"}
wantZh := []string{"刚刚", "1 分钟后", "3 分钟前", "5 小时前", "1 天后", "1 个月前", "2 年前"}
for i := range cases {
if en[i] != wantEn[i] || zh[i] != wantZh[i] {
t.Fatalf("%v: %q %q", cases[i], en[i], zh[i])
}
}
}
func TestRelativeTimeRefreshFollowsDistance(t *testing.T) {
for _, c := range []struct{ d, next time.Duration }{
{10*time.Second + 300*time.Millisecond, 700 * time.Millisecond},
{5*time.Minute + 20*time.Second, 40 * time.Second},
{3*time.Hour + 15*time.Minute, 45 * time.Minute},
{-(90 * time.Second), 1 * time.Second},
} {
if got := relativeTimeNext(c.d); got != c.next {
t.Errorf("%v: next %v, want %v", c.d, got, c.next)
}
}
}
func TestRelativeTimeShowsExactTimeAndStopsWhenHidden(t *testing.T) {
at := time.Date(2026, time.October, 5, 9, 0, 0, 0, time.UTC)
shown := true
tt := ui.NewTester(func(c *ui.Context) {
Use(c, Settings{})
if shown {
RelativeTime(c, at, RelativeTimeOptions{Location: calTokyo, Now: at.Add(3 * time.Hour)})
}
}, 300, 100)
if !tt.HasText("3 hours ago, 2026-10-05 18:00 JST") {
t.Fatalf("texts %v", tt.Texts())
}
shown = false
tt.Frame()
if tt.HasText("ago") {
t.Fatal("hidden text remains")
}
defer func() {
if recover() == nil {
t.Fatal("expected panic without Location")
}
}()
ui.NewTester(func(c *ui.Context) { Use(c, Settings{}); RelativeTime(c, at, RelativeTimeOptions{}) }, 10, 10)
}
func TestRelativeTimeSnapshot(t *testing.T) {
at := time.Date(2026, time.October, 5, 9, 0, 0, 0, calTokyo)
snapshot(t, "relative_time", 260, 120, func(c *ui.Context) {
ui.Column(c).Padding(16).Gap(8).Children(func() {
RelativeTime(c, at, RelativeTimeOptions{Location: calTokyo, Now: at.Add(20 * time.Second)})
RelativeTime(c, at, RelativeTimeOptions{Location: calTokyo, Now: at.Add(-2 * time.Hour)})
RelativeTime(c, at, RelativeTimeOptions{Location: calTokyo, Now: at.Add(72 * time.Hour)})
})
})
}