diff --git a/gospin.go b/gospin.go index 0bc2fb6..602637f 100644 --- a/gospin.go +++ b/gospin.go @@ -134,7 +134,7 @@ func (s *Spinner) walk(seq *string, step *int, str *string, start int, level int } else { // replace parameter string e.g. {hello|what} with selectedOpt stepDiff := len([]rune(*str)[*step:start+1]) - len([]rune(selected)) - *str = strings.Replace(*str, string([]rune(*str)[*step:start+1]), selected, 1) + *str = string([]rune(*str)[:*step]) + selected + string([]rune(*str)[start+1:]) *step = *step - stepDiff start = start - stepDiff } diff --git a/gospin_test.go b/gospin_test.go index 47f5f15..df981dc 100644 --- a/gospin_test.go +++ b/gospin_test.go @@ -33,6 +33,14 @@ func TestSpinner_Spin(t *testing.T) { assert.Error(t, err) } assert.Equal(t, expected, got, "should be equal") + + nested := "The {slow|quick} {brown|blue and {red|yellow}} {fox|deer} {gracefully |}jumps over the {{slow|quick} {fox|deer}}" + expected = "The slow blue and yellow fox jumps over the quick fox" + got, err = spinner.Spin(nested) + if err != nil { + assert.Error(t, err) + } + assert.Equal(t, expected, got, "should be equal") } func TestSpinner_Spin_UTF8(t *testing.T) { @@ -62,6 +70,14 @@ func TestSpinner_Spin_UTF8(t *testing.T) { assert.Error(t, err) } assert.Equal(t, expected, got, "should be equal") + + nested := "{Медленный|Быстрый} {бурый|серый с {рыжими пятнами|золотистыми пятнами}} {лис|олень} {с легкостью |}перепрыгнул через {{сонного|ленивого} {волка|оленя}}" + expected = "Медленный бурый олень перепрыгнул через сонного оленя" + got, err = spinner.Spin(nested) + if err != nil { + assert.Error(t, err) + } + assert.Equal(t, expected, got, "should be equal") } func TestSpinner_Spin_EndCharFirstChar(t *testing.T) {