mirror of
https://github.com/zoriya/bubbles.git
synced 2026-08-05 04:36:07 +00:00
* chore(progress)!: migrate progress to lipgloss This removes the dependency on termenv and replaces it with lipgloss. This change also removes the WithColorProfile option, as it is no longer needed. The new API uses `color.Color` types for colors, which are more flexible and allow for more advanced color manipulation. * Update progress/progress_test.go Co-authored-by: Christian Rocha <christian@rocha.is> * Update progress/progress_test.go Co-authored-by: Christian Rocha <christian@rocha.is> * chore: go mod tidy --------- Co-authored-by: Christian Rocha <christian@rocha.is>
65 lines
1.7 KiB
Go
65 lines
1.7 KiB
Go
package progress
|
|
|
|
import (
|
|
"strings"
|
|
"testing"
|
|
|
|
"github.com/charmbracelet/lipgloss/v2"
|
|
)
|
|
|
|
const (
|
|
AnsiReset = "\x1b[m"
|
|
)
|
|
|
|
func TestGradient(t *testing.T) {
|
|
colA := "#FF0000"
|
|
colB := "#00FF00"
|
|
|
|
var p Model
|
|
var descr string
|
|
|
|
for _, scale := range []bool{false, true} {
|
|
opts := []Option{
|
|
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) {
|
|
p = New(opts...)
|
|
|
|
// build the expected colors by colorizing an empty string and then cutting off the following reset sequence
|
|
sb := strings.Builder{}
|
|
sb.WriteString(lipgloss.NewStyle().Foreground(lipgloss.Color(colA)).String())
|
|
expFirst := strings.Split(sb.String(), AnsiReset)[0]
|
|
sb.Reset()
|
|
sb.WriteString(lipgloss.NewStyle().Foreground(lipgloss.Color(colB)).String())
|
|
expLast := strings.Split(sb.String(), AnsiReset)[0]
|
|
|
|
for _, width := range []int{3, 5, 50} {
|
|
p.SetWidth(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])
|
|
}
|
|
}
|
|
})
|
|
}
|
|
}
|