mirror of
https://github.com/zoriya/bubbles.git
synced 2026-08-05 20:56:17 +00:00
68 lines
1.9 KiB
Go
68 lines
1.9 KiB
Go
package progress
|
|
|
|
import (
|
|
"strings"
|
|
"testing"
|
|
|
|
tea "github.com/charmbracelet/bubbletea"
|
|
"github.com/charmbracelet/lipgloss"
|
|
"github.com/muesli/termenv"
|
|
)
|
|
|
|
const (
|
|
AnsiReset = "\x1b[0m"
|
|
)
|
|
|
|
func TestGradient(t *testing.T) {
|
|
colA := "#FF0000"
|
|
colB := "#00FF00"
|
|
|
|
var p Model
|
|
var descr string
|
|
|
|
for _, scale := range []bool{false, true} {
|
|
opts := []Option{
|
|
WithColorProfile(termenv.TrueColor), WithoutPercentage(),
|
|
}
|
|
if scale {
|
|
descr = "progress bar with scaled gradient"
|
|
opts = append(opts, WithScaledGradient(colA, colB))
|
|
} else {
|
|
descr = "progress bar with gradient"
|
|
opts = append(opts, WithGradient(colA, colB))
|
|
}
|
|
|
|
t.Run(descr, func(t *testing.T) {
|
|
ctx := &tea.Context{Renderer: lipgloss.DefaultRenderer()}
|
|
p = New(ctx, opts...)
|
|
|
|
// build the expected colors by colorizing an empty string and then cutting off the following reset sequence
|
|
sb := strings.Builder{}
|
|
sb.WriteString(termenv.String("").Foreground(p.color(colA)).String())
|
|
expFirst := strings.Split(sb.String(), AnsiReset)[0]
|
|
sb.Reset()
|
|
sb.WriteString(termenv.String("").Foreground(p.color(colB)).String())
|
|
expLast := strings.Split(sb.String(), AnsiReset)[0]
|
|
|
|
for _, width := range []int{3, 5, 50} {
|
|
p.Width = width
|
|
res := p.ViewAs(1.0)
|
|
|
|
// extract colors from the progrss bar by splitting at p.Full+AnsiReset, leaving us with just the color sequences
|
|
colors := strings.Split(res, string(p.Full)+AnsiReset)
|
|
|
|
// discard the last color, because it is empty (no new color comes after the last char of the bar)
|
|
colors = colors[0 : len(colors)-1]
|
|
|
|
if expFirst != colors[0] {
|
|
t.Errorf("expected first color of bar to be first gradient color %q, instead got %q", expFirst, colors[0])
|
|
}
|
|
|
|
if expLast != colors[len(colors)-1] {
|
|
t.Errorf("expected last color of bar to be second gradient color %q, instead got %q", expLast, colors[len(colors)-1])
|
|
}
|
|
}
|
|
})
|
|
}
|
|
}
|