diff --git a/chat/message/theme.go b/chat/message/theme.go index 54886a4..37eb724 100644 --- a/chat/message/theme.go +++ b/chat/message/theme.go @@ -174,6 +174,9 @@ var Themes []Theme // Default theme to use var DefaultTheme *Theme +// MonoTheme is a simple theme without colors, useful for testing and bots. +var MonoTheme *Theme + func allColors256() *Palette { colors := []uint8{} var i uint8 @@ -225,6 +228,7 @@ func init() { } DefaultTheme = &Themes[0] + MonoTheme = &Themes[3] /* Some debug helpers for your convenience: diff --git a/chat/message/user.go b/chat/message/user.go index faea90c..3bfca1b 100644 --- a/chat/message/user.go +++ b/chat/message/user.go @@ -182,7 +182,7 @@ func (u *User) render(m Message) string { } else { ts = ts.UTC() } - return cfg.Theme.Timestamp(ts.Format(*cfg.Timeformat) + " " + out + Newline) + return cfg.Theme.Timestamp(ts.Format(*cfg.Timeformat)) + " " + out + Newline } return out + Newline } @@ -238,6 +238,7 @@ func init() { DefaultUserConfig = UserConfig{ Bell: true, Quiet: false, + Theme: DefaultTheme, } // TODO: Seed random? diff --git a/chat/message/user_test.go b/chat/message/user_test.go index f70e674..de8b6dc 100644 --- a/chat/message/user_test.go +++ b/chat/message/user_test.go @@ -1,6 +1,7 @@ package message import ( + "math/rand" "reflect" "testing" ) @@ -10,6 +11,11 @@ func TestMakeUser(t *testing.T) { s := &MockScreen{} u := NewUserScreen(SimpleID("foo"), s) + + cfg := u.Config() + cfg.Theme = MonoTheme // Mono + u.SetConfig(cfg) + m := NewAnnounceMsg("hello") defer u.Close() @@ -22,3 +28,33 @@ func TestMakeUser(t *testing.T) { t.Errorf("Got: `%s`; Expected: `%s`", actual, expected) } } + +func TestRenderTimestamp(t *testing.T) { + var actual, expected []byte + + // Reset seed for username color + rand.Seed(1) + s := &MockScreen{} + u := NewUserScreen(SimpleID("foo"), s) + + cfg := u.Config() + timefmt := "AA:BB" + cfg.Timeformat = &timefmt + u.SetConfig(cfg) + + if got, want := cfg.Theme.Timestamp("foo"), `foo`+Reset; got != want { + t.Errorf("Wrong timestamp formatting:\n got: %q\nwant: %q", got, want) + } + + m := NewPublicMsg("hello", u) + + defer u.Close() + u.Send(m) + u.HandleMsg(u.ConsumeOne()) + + s.Read(&actual) + expected = []byte(`AA:BB` + Reset + ` [foo] hello` + Newline) + if !reflect.DeepEqual(actual, expected) { + t.Errorf("Wrong screen output:\n Got: `%q`;\nWant: `%q`", actual, expected) + } +}