80 lines
2.2 KiB
Go
80 lines
2.2 KiB
Go
package ui
|
|
|
|
import (
|
|
"image/color"
|
|
"testing"
|
|
|
|
"fyne.io/fyne/v2/test"
|
|
)
|
|
|
|
// nrgba 把颜色转成不透明的 NRGBA,便于直接比较。
|
|
func nrgba(c color.Color) color.NRGBA {
|
|
return color.NRGBAModel.Convert(c).(color.NRGBA)
|
|
}
|
|
|
|
func TestBubbleColorsFollowTheme(t *testing.T) {
|
|
test.NewApp()
|
|
|
|
applyThemeMode(ThemeContrast)
|
|
darkBot := nrgba(colorFor(bubbleBot))
|
|
darkErr := nrgba(colorFor(bubbleError))
|
|
darkBorder := nrgba(borderFor(bubbleUser))
|
|
darkStrong := nrgba(borderFor(bubbleError))
|
|
|
|
// 黑白主题:气泡底色应贴近纯黑,文字侧仍是纯白前景。
|
|
if darkBot.R > 0x30 {
|
|
t.Fatalf("黑白主题下助手气泡应贴近纯黑,实际 %v", darkBot)
|
|
}
|
|
if darkStrong.R != 0xFF {
|
|
t.Fatalf("黑白主题下错误气泡描边应为纯白,实际 %v", darkStrong)
|
|
}
|
|
if darkBorder.R >= darkStrong.R {
|
|
t.Fatalf("错误描边应比普通描边更亮:普通 %v,错误 %v", darkBorder, darkStrong)
|
|
}
|
|
|
|
applyThemeMode(ThemeLight)
|
|
lightBot := nrgba(colorFor(bubbleBot))
|
|
lightErr := nrgba(colorFor(bubbleError))
|
|
lightStrong := nrgba(borderFor(bubbleError))
|
|
|
|
if lightBot.R < 0xD0 {
|
|
t.Fatalf("浅色主题下助手气泡应贴近纯白,实际 %v", lightBot)
|
|
}
|
|
if lightStrong.R != 0x00 {
|
|
t.Fatalf("浅色主题下错误气泡描边应为纯黑,实际 %v", lightStrong)
|
|
}
|
|
if lightBot.R == darkBot.R {
|
|
t.Fatal("切换主题后气泡底色应发生变化")
|
|
}
|
|
if lightErr.R == darkErr.R {
|
|
t.Fatal("切换主题后错误气泡底色应发生变化")
|
|
}
|
|
}
|
|
|
|
func TestChatViewRethemeRepaintsBubbles(t *testing.T) {
|
|
test.NewApp()
|
|
applyThemeMode(ThemeContrast)
|
|
|
|
c := newChatView()
|
|
b := newBubble("助手", bubbleBot)
|
|
c.appendBubble(b)
|
|
|
|
before := nrgba(b.bg.FillColor)
|
|
beforeStroke := nrgba(b.bg.StrokeColor)
|
|
|
|
applyThemeMode(ThemeLight)
|
|
c.retheme()
|
|
|
|
after := nrgba(b.bg.FillColor)
|
|
afterStroke := nrgba(b.bg.StrokeColor)
|
|
if before == after {
|
|
t.Fatalf("换肤后气泡底色应改变:%v -> %v", before, after)
|
|
}
|
|
if beforeStroke == afterStroke {
|
|
t.Fatalf("换肤后气泡描边应改变:%v -> %v", beforeStroke, afterStroke)
|
|
}
|
|
if after != nrgba(colorFor(bubbleBot)) {
|
|
t.Fatalf("换肤后底色应与当前主题一致:%v != %v", after, nrgba(colorFor(bubbleBot)))
|
|
}
|
|
}
|