mukan-ignite/ignite/pkg/cliui/clispinner/clispinner_test.go
Mukan Erkin Törük 26b204bd04
Some checks are pending
Docs Deploy / build_and_deploy (push) Waiting to run
Generate Docs / cli (push) Waiting to run
Generate Config Doc / cli (push) Waiting to run
Go formatting / go-formatting (push) Waiting to run
Check links / markdown-link-check (push) Waiting to run
Integration / pre-test (push) Waiting to run
Integration / test on (push) Blocked by required conditions
Integration / status (push) Blocked by required conditions
Lint / Lint Go code (push) Waiting to run
Test / test (ubuntu-latest) (push) Waiting to run
feat: fork Ignite CLI v29 as Mukan Ignite — remove cosmos-sdk restrictions
2026-05-11 03:31:37 +03:00

121 lines
2.7 KiB
Go

package clispinner
import (
"bytes"
"fmt"
"os"
"sync"
"testing"
"time"
"github.com/stretchr/testify/require"
)
func TestNewUsesSimpleSpinnerForNonTerminalWriter(t *testing.T) {
s := New(WithWriter(&bytes.Buffer{}))
_, ok := s.(*SimpleSpinner)
require.True(t, ok)
}
func TestIsRunningInTerminalFalseForNonFileWriter(t *testing.T) {
require.False(t, isRunningInTerminal(&bytes.Buffer{}))
}
func TestIsRunningInTerminalFalseForRegularFile(t *testing.T) {
f, err := os.CreateTemp(t.TempDir(), "spinner-writer-*")
require.NoError(t, err)
t.Cleanup(func() {
require.NoError(t, f.Close())
})
require.False(t, isRunningInTerminal(f))
}
func TestNewSimpleSpinnerDefaults(t *testing.T) {
s := newSimpleSpinner(Options{})
require.Equal(t, DefaultText, s.text)
require.Equal(t, simpleCharset, s.charset)
require.Equal(t, os.Stdout, s.writer)
}
func TestSimpleSpinnerSetters(t *testing.T) {
s := newSimpleSpinner(Options{})
require.Same(t, s, s.SetText("text"))
require.Same(t, s, s.SetPrefix("prefix"))
require.Same(t, s, s.SetCharset([]string{"1", "2"}))
require.Same(t, s, s.SetColor("red"))
require.Equal(t, "text", s.text)
require.Equal(t, "prefix", s.prefix)
require.Equal(t, []string{"1", "2"}, s.charset)
require.Equal(t, "red", s.color)
}
func TestSimpleSpinnerStartAndStop(t *testing.T) {
oldRefreshRate := simpleRefreshRate
oldColor := simpleColor
simpleRefreshRate = time.Millisecond
simpleColor = func(i ...interface{}) string { return fmt.Sprint(i...) }
t.Cleanup(func() {
simpleRefreshRate = oldRefreshRate
simpleColor = oldColor
})
out := &safeBuffer{}
s := newSimpleSpinner(Options{
writer: out,
text: "working",
charset: []string{"."},
})
require.False(t, s.IsActive())
s.Start()
require.True(t, s.IsActive())
require.Eventually(t, func() bool {
return out.Len() > 0
}, 200*time.Millisecond, 5*time.Millisecond)
s.Stop()
require.False(t, s.IsActive())
}
func TestNewTermSpinnerDefaultsAndSetters(t *testing.T) {
var out bytes.Buffer
s := newTermSpinner(Options{
writer: &out,
text: "booting",
charset: []string{"A", "B"},
})
require.Equal(t, []string{"A", "B"}, s.charset)
require.Equal(t, &out, s.Writer())
require.Equal(t, " booting", s.sp.Suffix)
require.Same(t, s, s.SetText("running"))
require.Same(t, s, s.SetPrefix("ignite"))
require.Same(t, s, s.SetCharset([]string{"X"}))
require.Same(t, s, s.SetColor("green"))
require.Equal(t, "ignite ", s.sp.Prefix)
require.Equal(t, " running", s.sp.Suffix)
}
type safeBuffer struct {
mu sync.Mutex
buf bytes.Buffer
}
func (b *safeBuffer) Write(p []byte) (int, error) {
b.mu.Lock()
defer b.mu.Unlock()
return b.buf.Write(p)
}
func (b *safeBuffer) Len() int {
b.mu.Lock()
defer b.mu.Unlock()
return b.buf.Len()
}