diff --git a/stringy.go b/stringy.go index cfcac33..046edbe 100644 --- a/stringy.go +++ b/stringy.go @@ -180,10 +180,10 @@ func (i *input) Last(length int) string { // function which return StringManipulation interface func (i *input) LcFirst() string { input := getInput(*i) - for i, v := range input { - return string(unicode.ToLower(v)) + input[i+1:] + for _, v := range input { + return string(unicode.ToLower(v)) + input[len(string(v)):] } - return input + return "" } // Lines returns slice of strings by removing white space characters diff --git a/stringy_test.go b/stringy_test.go index 800aff3..715a2fd 100644 --- a/stringy_test.go +++ b/stringy_test.go @@ -123,18 +123,34 @@ func TestInput_KebabCase(t *testing.T) { } func TestInput_LcFirst(t *testing.T) { - str := New("This is an all lower") - against := "this is an all lower" - if val := str.LcFirst(); val != against { - t.Errorf("Expected: to be %s but got: %s", against, val) + tests := []struct { + name string + arg string + want string + }{ + { + name: "leading uppercase", + arg: "This is an all lower", + want: "this is an all lower", + }, + { + name: "empty string", + arg: "", + want: "", + }, + { + name: "multi-byte leading character", + arg: "ΔΔΔ", + want: "δΔΔ", + }, } -} -func TestInput_LcFirstEmpty(t *testing.T) { - str := New("") - against := "" - if val := str.LcFirst(); val != against { - t.Errorf("Expected: to be %s but got: %s", against, val) + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + if got := New(tt.arg).LcFirst(); got != tt.want { + t.Errorf("LcFirst(%v) = %v, want %v", tt.arg, got, tt.want) + } + }) } }