summary refs log tree commit diff stats
diff options
context:
space:
mode:
authorTomasz Kramkowski <tk@the-tk.com>2021-10-29 10:39:41 +0100
committerGitHub <noreply@github.com>2021-10-29 11:39:41 +0200
commitee703c5db4ceb8d0228b4429c53d85d5f1ff91ea (patch)
treebd6adba483089d41f3163008d4b10e2f8c0b3a54
parent7ba2659f733b97db63b7552415ad048e34d4a11a (diff)
downloadNim-ee703c5db4ceb8d0228b4429c53d85d5f1ff91ea.tar.gz
Fix nimIdentNormalize, fixes #19067 (#19068)
* Make nimIdentNormalize return "" when passed ""; fixes #19067

Fixes #19067

* Add tests for nimIdentNormalize
-rw-r--r--lib/pure/strutils.nim5
-rw-r--r--tests/stdlib/tstrutils.nim7
2 files changed, 10 insertions, 2 deletions
diff --git a/lib/pure/strutils.nim b/lib/pure/strutils.nim
index 2234a8625..e4a4a5ec1 100644
--- a/lib/pure/strutils.nim
+++ b/lib/pure/strutils.nim
@@ -281,8 +281,9 @@ func nimIdentNormalize*(s: string): string =
   runnableExamples:
     doAssert nimIdentNormalize("Foo_bar") == "Foobar"
   result = newString(s.len)
-  if s.len > 0:
-    result[0] = s[0]
+  if s.len == 0:
+    return
+  result[0] = s[0]
   var j = 1
   for i in 1..len(s) - 1:
     if s[i] in {'A'..'Z'}:
diff --git a/tests/stdlib/tstrutils.nim b/tests/stdlib/tstrutils.nim
index 234991bdb..8000b6b07 100644
--- a/tests/stdlib/tstrutils.nim
+++ b/tests/stdlib/tstrutils.nim
@@ -841,5 +841,12 @@ bar
     doAssert s.endsWith('a') == false
     doAssert s.endsWith('\0') == false
 
+  block: # nimIdentNormalize
+    doAssert nimIdentNormalize("") == ""
+    doAssert nimIdentNormalize("foo") == "foo"
+    doAssert nimIdentNormalize("foo_bar") == "foobar"
+    doAssert nimIdentNormalize("Foo_bar") == "Foobar"
+    doAssert nimIdentNormalize("_Foo_bar") == "_foobar"
+
 static: main()
 main()