diff --git a/vlib/builtin/string.v b/vlib/builtin/string.v index 6a86b5f592..cd6fe38977 100644 --- a/vlib/builtin/string.v +++ b/vlib/builtin/string.v @@ -1702,13 +1702,14 @@ pub fn (s string) capitalize() string { if s.len == 0 { return '' } - s0 := s[0] - letter := s0.ascii_str() - uletter := letter.to_upper() if s.len == 1 { - return uletter + return s[0].ascii_str().to_upper() } - srest := s[1..] + r := s.runes() + letter := r[0].str() + uletter := letter.to_upper() + rrest := r[1..] + srest := rrest.string() res := uletter + srest return res } @@ -1720,14 +1721,15 @@ pub fn (s string) uncapitalize() string { if s.len == 0 { return '' } - s0 := s[0] - letter := s0.ascii_str() - uletter := letter.to_lower() if s.len == 1 { - return uletter + return s[0].ascii_str().to_lower() } - srest := s[1..] - res := uletter + srest + r := s.runes() + letter := r[0].str() + lletter := letter.to_lower() + rrest := r[1..] + srest := rrest.string() + res := lletter + srest return res } diff --git a/vlib/builtin/string_test.v b/vlib/builtin/string_test.v index 4653044eec..ff2d4d7456 100644 --- a/vlib/builtin/string_test.v +++ b/vlib/builtin/string_test.v @@ -1153,6 +1153,9 @@ fn test_runes_to_lower() { } fn test_capitalize() { + assert ''.capitalize() == '' + assert 'a'.capitalize() == 'A' + assert 'A'.capitalize() == 'A' mut s := 'hello' assert !s.is_capital() assert s.capitalize() == 'Hello' @@ -1172,6 +1175,20 @@ fn test_capitalize() { assert s.is_capital() assert s.capitalize() == 'Test it' assert 'GameMission_t'.capitalize() == 'GameMission_t' + assert 'чорба'.capitalize() == 'Чорба' + assert 'ä ö å æ ã ø ô é ë'.title() == 'Ä Ö Å Æ Ã Ø Ô É Ë' +} + +fn test_uncapitalize() { + assert ''.uncapitalize() == '' + assert 'a'.uncapitalize() == 'a' + assert 'A'.uncapitalize() == 'a' + assert 'hello'.uncapitalize() == 'hello' + assert 'Hello'.uncapitalize() == 'hello' + assert 'HELLO'.uncapitalize() == 'hELLO' + assert 'чорба'.uncapitalize() == 'чорба' + assert 'Чорба'.uncapitalize() == 'чорба' + assert 'ЧОРБА'.uncapitalize() == 'чОРБА' } fn test_title() { @@ -1184,6 +1201,7 @@ fn test_title() { s = 'Hello World' assert s.is_title() assert s.title() == 'Hello World' + assert 'пет корита ябълки'.title() == 'Пет Корита Ябълки' } fn test_for_loop() {