102 lines
3.0 KiB
Go
102 lines
3.0 KiB
Go
package config
|
|
|
|
import (
|
|
"testing"
|
|
|
|
"github.com/emersion/go-message/mail"
|
|
"github.com/go-ini/ini"
|
|
)
|
|
|
|
const multiHeaderStyleset string = `
|
|
msglist_*.fg = salmon
|
|
msglist_*.From,~^"Bob Foo".fg = khaki
|
|
msglist_*.From,~^"Bob Foo".selected.fg = palegreen
|
|
msglist_*.Subject,~PATCH.From,~^"Bob Foo".fg = coral
|
|
msglist_*.From,~^"Bob Foo".Subject,~PATCH.X-Baz,exact.X-Clacks-Overhead,~Pratchett$.fg = plum
|
|
msglist_*.From,~^"Bob Foo".Subject,~PATCH.X-Clacks-Overhead,~Pratchett$.fg = pink
|
|
msglist_*.From,~^"Bob Foo".List-ID,~/lists\.sr\.ht/.fg = pink
|
|
`
|
|
|
|
func TestStyleMultiHeaderPattern(t *testing.T) {
|
|
ini, err := ini.Load([]byte(multiHeaderStyleset))
|
|
if err != nil {
|
|
t.Errorf("failed to load styleset: %v", err)
|
|
}
|
|
|
|
ss := NewStyleSet()
|
|
err = ss.ParseStyleSet(ini)
|
|
if err != nil {
|
|
t.Errorf("failed to parse styleset: %v", err)
|
|
}
|
|
|
|
t.Run("default color", func(t *testing.T) {
|
|
var h mail.Header
|
|
h.SetAddressList("From", []*mail.Address{{"Alice Foo", "alice@foo.org"}})
|
|
|
|
s := ss.Get(STYLE_MSGLIST_DEFAULT, &h)
|
|
if s.Foreground != colorNames["salmon"] {
|
|
t.Errorf("expected:#%v got:#%v", colorNames["salmon"], s.Foreground)
|
|
}
|
|
})
|
|
|
|
t.Run("single header", func(t *testing.T) {
|
|
var h mail.Header
|
|
h.SetAddressList("From", []*mail.Address{{"Bob Foo", "bob@foo.org"}})
|
|
|
|
s := ss.Get(STYLE_MSGLIST_DEFAULT, &h)
|
|
if s.Foreground != colorNames["khaki"] {
|
|
t.Errorf("expected:#%v got:#%v", colorNames["khaki"], s.Foreground)
|
|
}
|
|
})
|
|
|
|
t.Run("two headers", func(t *testing.T) {
|
|
var h mail.Header
|
|
h.SetAddressList("From", []*mail.Address{{"Bob Foo", "Bob@foo.org"}})
|
|
h.SetSubject("[PATCH] tests")
|
|
|
|
s := ss.Get(STYLE_MSGLIST_DEFAULT, &h)
|
|
if s.Foreground != colorNames["coral"] {
|
|
t.Errorf("expected:#%x got:#%x", colorNames["coral"], s.Foreground)
|
|
}
|
|
})
|
|
|
|
t.Run("multiple headers", func(t *testing.T) {
|
|
var h mail.Header
|
|
h.SetAddressList("From", []*mail.Address{{"Bob Foo", "Bob@foo.org"}})
|
|
h.SetSubject("[PATCH] tests")
|
|
h.SetText("X-Clacks-Overhead", "GNU Terry Pratchett")
|
|
|
|
s := ss.Get(STYLE_MSGLIST_DEFAULT, &h)
|
|
if s.Foreground != colorNames["pink"] {
|
|
t.Errorf("expected:#%x got:#%x", colorNames["pink"], s.Foreground)
|
|
}
|
|
})
|
|
|
|
t.Run("preserves order-sensitivity", func(t *testing.T) {
|
|
var h mail.Header
|
|
h.SetAddressList("From", []*mail.Address{{"Bob Foo", "Bob@foo.org"}})
|
|
h.SetSubject("[PATCH] tests")
|
|
h.SetText("X-Clacks-Overhead", "GNU Terry Pratchett")
|
|
h.SetText("X-Baz", "exact")
|
|
|
|
s := ss.Get(STYLE_MSGLIST_DEFAULT, &h)
|
|
|
|
// The "pink" entry comes later, so will overrule the more exact
|
|
// match with color "plum"
|
|
if s.Foreground != colorNames["pink"] {
|
|
t.Errorf("expected:#%x got:#%x", colorNames["pink"], s.Foreground)
|
|
}
|
|
})
|
|
|
|
t.Run("handles uris in regular expressions", func(t *testing.T) {
|
|
var h mail.Header
|
|
h.SetAddressList("From", []*mail.Address{{"Bob Foo", "Bob@foo.org"}})
|
|
h.SetText("List-ID", "List-ID: ~rjarry/aerc-discuss <~rjarry/aerc-discuss.lists.sr.ht>")
|
|
|
|
s := ss.Get(STYLE_MSGLIST_DEFAULT, &h)
|
|
if s.Foreground != colorNames["pink"] {
|
|
t.Errorf("expected:#%x got:#%x", colorNames["pink"], s.Foreground)
|
|
}
|
|
})
|
|
}
|