aboutsummaryrefslogtreecommitdiffstats
path: root/utils/merkletrie/noder
diff options
context:
space:
mode:
authorMáximo Cuadros <mcuadros@gmail.com>2017-08-02 17:45:41 +0200
committerGitHub <noreply@github.com>2017-08-02 17:45:41 +0200
commit3713791015259f9e32cfe5fee76f9c99fc43fffd (patch)
treed6b9a7b601dfbf16af7193aa22cfc849409ec4f7 /utils/merkletrie/noder
parenta0885c5fe132f109aeb7b09aa69ab138952961a6 (diff)
parent5c1a2ec798eb9b78d66b16fbbcbdc3b928d8b496 (diff)
downloadgo-git-3713791015259f9e32cfe5fee76f9c99fc43fffd.tar.gz
Merge pull request #526 from joshbetz/fix/filename-form
Normalize filenames before comparing.
Diffstat (limited to 'utils/merkletrie/noder')
-rw-r--r--utils/merkletrie/noder/path.go8
-rw-r--r--utils/merkletrie/noder/path_test.go12
2 files changed, 18 insertions, 2 deletions
diff --git a/utils/merkletrie/noder/path.go b/utils/merkletrie/noder/path.go
index 85742db..d2e2932 100644
--- a/utils/merkletrie/noder/path.go
+++ b/utils/merkletrie/noder/path.go
@@ -3,6 +3,8 @@ package noder
import (
"bytes"
"strings"
+
+ "golang.org/x/text/unicode/norm"
)
// Path values represent a noder and its ancestors. The root goes first
@@ -78,7 +80,11 @@ func (p Path) Compare(other Path) int {
case i == len(p):
return -1
default:
- cmp := strings.Compare(p[i].Name(), other[i].Name())
+ form := norm.Form(norm.NFC)
+ this := form.String(p[i].Name())
+ that := form.String(other[i].Name())
+
+ cmp := strings.Compare(this, that)
if cmp != 0 {
return cmp
}
diff --git a/utils/merkletrie/noder/path_test.go b/utils/merkletrie/noder/path_test.go
index 44e3c3c..be25444 100644
--- a/utils/merkletrie/noder/path_test.go
+++ b/utils/merkletrie/noder/path_test.go
@@ -1,6 +1,9 @@
package noder
-import . "gopkg.in/check.v1"
+import (
+ "golang.org/x/text/unicode/norm"
+ . "gopkg.in/check.v1"
+)
type PathSuite struct{}
@@ -149,3 +152,10 @@ func (s *PathSuite) TestCompareMixedDepths(c *C) {
c.Assert(p1.Compare(p2), Equals, 1)
c.Assert(p2.Compare(p1), Equals, -1)
}
+
+func (s *PathSuite) TestCompareNormalization(c *C) {
+ p1 := Path([]Noder{&noderMock{name: norm.Form(norm.NFKC).String("페")}})
+ p2 := Path([]Noder{&noderMock{name: norm.Form(norm.NFKD).String("페")}})
+ c.Assert(p1.Compare(p2), Equals, 0)
+ c.Assert(p2.Compare(p1), Equals, 0)
+}