]> Cypherpunks repositories - gostls13.git/commitdiff
unicode: change SimpleFold to handle invalid runes
authorRuss Cox <rsc@golang.org>
Wed, 12 Oct 2016 17:11:02 +0000 (13:11 -0400)
committerRuss Cox <rsc@golang.org>
Wed, 12 Oct 2016 18:30:29 +0000 (18:30 +0000)
Functions like ToLower and ToUpper return the invalid rune back,
so we might as well do the same here.

I changed my mind about panicking when I tried to document the behavior.

Fixes #16690 (again).

Change-Id: If1c68bfcd66daea160fd19948e7672b0e1add106
Reviewed-on: https://go-review.googlesource.com/30935
Run-TryBot: Russ Cox <rsc@golang.org>
Reviewed-by: Rob Pike <r@golang.org>
src/unicode/letter.go
src/unicode/letter_test.go

index 462daf88b93018e7cebe36addaa5faaf75adbb01..b43cc66e7d3a8598fa58bcc4bd3ada6df204e801 100644 (file)
@@ -320,6 +320,7 @@ type foldPair struct {
 // the Unicode-defined simple case folding. Among the code points
 // equivalent to rune (including rune itself), SimpleFold returns the
 // smallest rune > r if one exists, or else the smallest rune >= 0.
+// If r is not a valid Unicode code point, SimpleFold(r) returns r.
 //
 // For example:
 //     SimpleFold('A') = 'a'
@@ -331,9 +332,11 @@ type foldPair struct {
 //
 //     SimpleFold('1') = '1'
 //
+//     SimpleFold(-2) = -2
+//
 func SimpleFold(r rune) rune {
-       if r < 0 {
-               panic("unicode: negative rune is disallowed")
+       if r < 0 || r > MaxRune {
+               return r
        }
 
        if int(r) < len(asciiFold) {
index 15e4ade2a32b42685f1c0c8b86f732438e2a2981..3fe72ff13d24168b0130fba969be7e39deb3c0af 100644 (file)
@@ -432,19 +432,9 @@ func TestSimpleFold(t *testing.T) {
                        r = out
                }
        }
-}
 
-func TestSimpleFoldPanic(t *testing.T) {
-       got := func() (r interface{}) {
-               defer func() { r = recover() }()
-               SimpleFold(-1)
-               return nil
-       }()
-       want := "unicode: negative rune is disallowed"
-
-       s, _ := got.(string)
-       if s != want {
-               t.Errorf("SimpleFold(-1) should panic, got: %q, want: %q", got, want)
+       if r := SimpleFold(-42); r != -42 {
+               t.Errorf("SimpleFold(-42) = %v, want -42", r)
        }
 }