From cf89db0e663cc8c7b964a151d7a6f11a5da0a58d Mon Sep 17 00:00:00 2001 From: Alexey Fayzullin Date: Wed, 12 May 2021 12:23:35 +0300 Subject: [PATCH 1/3] test: added test that shows the problem caused by replacement on line 137 in str when we are on level!=1 --- gospin_test.go | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/gospin_test.go b/gospin_test.go index 47f5f15..bb022a8 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 brown deer" + 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) { From aabfeed7207d947d53cc151bbb5b8715020f4511 Mon Sep 17 00:00:00 2001 From: Alexey Fayzullin Date: Wed, 12 May 2021 12:24:30 +0300 Subject: [PATCH 2/3] fix: this is a fix for issue #4 caused by wrong replacement in the original string --- gospin.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) 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 } From 2a8de5f391291f8d62aa48f5714ca85d25f42135 Mon Sep 17 00:00:00 2001 From: Alexey Fayzullin Date: Wed, 12 May 2021 12:26:18 +0300 Subject: [PATCH 3/3] test: updated test expected value --- gospin_test.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gospin_test.go b/gospin_test.go index bb022a8..df981dc 100644 --- a/gospin_test.go +++ b/gospin_test.go @@ -35,7 +35,7 @@ func TestSpinner_Spin(t *testing.T) { 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 brown 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)