215 lines
4.0 KiB
Go
215 lines
4.0 KiB
Go
package settings
|
|
|
|
import "testing"
|
|
|
|
func TestDefault(t *testing.T) {
|
|
got := Default()
|
|
|
|
if got.ReadingSpeed != 300 {
|
|
t.Errorf("ReadingSpeed = %d, want 300", got.ReadingSpeed)
|
|
}
|
|
|
|
if got.FontSize != 48 {
|
|
t.Errorf("FontSize = %d, want 48", got.FontSize)
|
|
}
|
|
|
|
if got.Theme != ThemeDark {
|
|
t.Errorf("Theme = %q, want %q", got.Theme, ThemeDark)
|
|
}
|
|
}
|
|
|
|
func TestValidate(t *testing.T) {
|
|
tests := []struct {
|
|
name string
|
|
settings Settings
|
|
want bool
|
|
}{
|
|
{
|
|
name: "valid defaults",
|
|
settings: Default(),
|
|
want: true,
|
|
},
|
|
{
|
|
name: "minimum values",
|
|
settings: Settings{
|
|
ReadingSpeed: MinReadingSpeed,
|
|
FontSize: MinFontSize,
|
|
Theme: ThemeDark,
|
|
},
|
|
want: true,
|
|
},
|
|
{
|
|
name: "maximum values",
|
|
settings: Settings{
|
|
ReadingSpeed: MaxReadingSpeed,
|
|
FontSize: MaxFontSize,
|
|
Theme: ThemeLight,
|
|
},
|
|
want: true,
|
|
},
|
|
{
|
|
name: "invalid reading speed",
|
|
settings: Settings{
|
|
ReadingSpeed: 50,
|
|
FontSize: 48,
|
|
Theme: ThemeDark,
|
|
},
|
|
want: false,
|
|
},
|
|
{
|
|
name: "reading speed too high",
|
|
settings: Settings{
|
|
ReadingSpeed: 1500,
|
|
FontSize: 48,
|
|
Theme: ThemeDark,
|
|
},
|
|
want: false,
|
|
},
|
|
{
|
|
name: "invalid font size",
|
|
settings: Settings{
|
|
ReadingSpeed: 300,
|
|
FontSize: 10,
|
|
Theme: ThemeDark,
|
|
},
|
|
want: false,
|
|
},
|
|
{
|
|
name: "invalid theme",
|
|
settings: Settings{
|
|
ReadingSpeed: 300,
|
|
FontSize: 48,
|
|
Theme: "purple",
|
|
},
|
|
want: false,
|
|
},
|
|
}
|
|
|
|
for _, tt := range tests {
|
|
t.Run(tt.name, func(t *testing.T) {
|
|
if got := tt.settings.Validate(); got != tt.want {
|
|
t.Errorf("Validate() = %t, want %t", got, tt.want)
|
|
}
|
|
})
|
|
}
|
|
}
|
|
func TestNormalize(t *testing.T) {
|
|
tests := []struct {
|
|
name string
|
|
input Settings
|
|
want Settings
|
|
}{
|
|
{
|
|
name: "valid settings unchanged",
|
|
input: Default(),
|
|
want: Default(),
|
|
},
|
|
{
|
|
name: "speed below minimum clamped",
|
|
input: Settings{
|
|
ReadingSpeed: 50,
|
|
FontSize: 48,
|
|
Theme: ThemeDark,
|
|
},
|
|
want: Settings{
|
|
ReadingSpeed: MinReadingSpeed,
|
|
FontSize: 48,
|
|
Theme: ThemeDark,
|
|
},
|
|
},
|
|
{
|
|
name: "speed above maximum clamped",
|
|
input: Settings{
|
|
ReadingSpeed: 1200,
|
|
FontSize: 48,
|
|
Theme: ThemeDark,
|
|
},
|
|
want: Settings{
|
|
ReadingSpeed: MaxReadingSpeed,
|
|
FontSize: 48,
|
|
Theme: ThemeDark,
|
|
},
|
|
},
|
|
{
|
|
name: "font below minimum clamped",
|
|
input: Settings{
|
|
ReadingSpeed: 400,
|
|
FontSize: 10,
|
|
Theme: ThemeLight,
|
|
},
|
|
want: Settings{
|
|
ReadingSpeed: 400,
|
|
FontSize: MinFontSize,
|
|
Theme: ThemeLight,
|
|
},
|
|
},
|
|
{
|
|
name: "font above maximum clamped",
|
|
input: Settings{
|
|
ReadingSpeed: 400,
|
|
FontSize: 120,
|
|
Theme: ThemeLight,
|
|
},
|
|
want: Settings{
|
|
ReadingSpeed: 400,
|
|
FontSize: MaxFontSize,
|
|
Theme: ThemeLight,
|
|
},
|
|
},
|
|
{
|
|
name: "invalid theme replaced",
|
|
input: Settings{
|
|
ReadingSpeed: 400,
|
|
FontSize: 48,
|
|
Theme: "purple",
|
|
},
|
|
want: Settings{
|
|
ReadingSpeed: 400,
|
|
FontSize: 48,
|
|
Theme: ThemeDark,
|
|
},
|
|
},
|
|
{
|
|
name: "theme whitespace and case normalized",
|
|
input: Settings{
|
|
ReadingSpeed: 400,
|
|
FontSize: 48,
|
|
Theme: " LIGHT ",
|
|
},
|
|
want: Settings{
|
|
ReadingSpeed: 400,
|
|
FontSize: 48,
|
|
Theme: ThemeLight,
|
|
},
|
|
},
|
|
}
|
|
|
|
for _, tt := range tests {
|
|
t.Run(tt.name, func(t *testing.T) {
|
|
got := tt.input.Normalize()
|
|
|
|
if got != tt.want {
|
|
t.Errorf("Normalize() = %+v, want %+v", got, tt.want)
|
|
}
|
|
})
|
|
}
|
|
}
|
|
|
|
func TestNormalizeAlwaysProducesValidSettings(t *testing.T) {
|
|
tests := []Settings{
|
|
{},
|
|
{ReadingSpeed: -1, FontSize: -1, Theme: "invalid"},
|
|
{ReadingSpeed: 2000, FontSize: 200, Theme: " BLUE "},
|
|
{ReadingSpeed: 300, FontSize: 48, Theme: " LIGHT "},
|
|
}
|
|
|
|
for _, input := range tests {
|
|
got := input.Normalize()
|
|
|
|
if !got.Validate() {
|
|
t.Errorf("Normalize(%+v) produced invalid settings: %+v",
|
|
input, got)
|
|
}
|
|
}
|
|
}
|