mirror of
https://github.com/miniflux/v2.git
synced 2025-09-15 18:57:04 +00:00
Add FeedIcon API call and update dependencies
This commit is contained in:
parent
231ebf2daa
commit
27196589fb
262 changed files with 83830 additions and 30061 deletions
4
vendor/golang.org/x/text/secure/bidirule/bidirule.go
generated
vendored
4
vendor/golang.org/x/text/secure/bidirule/bidirule.go
generated
vendored
|
@ -203,10 +203,6 @@ func (t *Transformer) isRTL() bool {
|
|||
return t.seen&isRTL != 0
|
||||
}
|
||||
|
||||
func (t *Transformer) isFinal() bool {
|
||||
return t.state == ruleLTRFinal || t.state == ruleRTLFinal || t.state == ruleInitial
|
||||
}
|
||||
|
||||
// Reset implements transform.Transformer.
|
||||
func (t *Transformer) Reset() { *t = Transformer{} }
|
||||
|
||||
|
|
11
vendor/golang.org/x/text/secure/bidirule/bidirule10.0.0.go
generated
vendored
Normal file
11
vendor/golang.org/x/text/secure/bidirule/bidirule10.0.0.go
generated
vendored
Normal file
|
@ -0,0 +1,11 @@
|
|||
// Copyright 2016 The Go Authors. All rights reserved.
|
||||
// Use of this source code is governed by a BSD-style
|
||||
// license that can be found in the LICENSE file.
|
||||
|
||||
// +build go1.10
|
||||
|
||||
package bidirule
|
||||
|
||||
func (t *Transformer) isFinal() bool {
|
||||
return t.state == ruleLTRFinal || t.state == ruleRTLFinal || t.state == ruleInitial
|
||||
}
|
694
vendor/golang.org/x/text/secure/bidirule/bidirule10.0.0_test.go
generated
vendored
Normal file
694
vendor/golang.org/x/text/secure/bidirule/bidirule10.0.0_test.go
generated
vendored
Normal file
|
@ -0,0 +1,694 @@
|
|||
// Copyright 2016 The Go Authors. All rights reserved.
|
||||
// Use of this source code is governed by a BSD-style
|
||||
// license that can be found in the LICENSE file.
|
||||
|
||||
// +build go1.10
|
||||
|
||||
package bidirule
|
||||
|
||||
import (
|
||||
"golang.org/x/text/transform"
|
||||
"golang.org/x/text/unicode/bidi"
|
||||
)
|
||||
|
||||
var testCases = [][]ruleTest{
|
||||
// Go-specific rules.
|
||||
// Invalid UTF-8 is invalid.
|
||||
0: []ruleTest{{
|
||||
in: "",
|
||||
dir: bidi.LeftToRight,
|
||||
}, {
|
||||
in: "\x80",
|
||||
dir: bidi.LeftToRight,
|
||||
err: ErrInvalid,
|
||||
n: 0,
|
||||
}, {
|
||||
in: "\xcc",
|
||||
dir: bidi.LeftToRight,
|
||||
err: ErrInvalid,
|
||||
n: 0,
|
||||
}, {
|
||||
in: "abc\x80",
|
||||
dir: bidi.LeftToRight,
|
||||
err: ErrInvalid,
|
||||
n: 3,
|
||||
}, {
|
||||
in: "abc\xcc",
|
||||
dir: bidi.LeftToRight,
|
||||
err: ErrInvalid,
|
||||
n: 3,
|
||||
}, {
|
||||
in: "abc\xccdef",
|
||||
dir: bidi.LeftToRight,
|
||||
err: ErrInvalid,
|
||||
n: 3,
|
||||
}, {
|
||||
in: "\xccdef",
|
||||
dir: bidi.LeftToRight,
|
||||
err: ErrInvalid,
|
||||
n: 0,
|
||||
}, {
|
||||
in: strR + "\x80",
|
||||
dir: bidi.RightToLeft,
|
||||
err: ErrInvalid,
|
||||
n: len(strR),
|
||||
}, {
|
||||
in: strR + "\xcc",
|
||||
dir: bidi.RightToLeft,
|
||||
err: ErrInvalid,
|
||||
n: len(strR),
|
||||
}, {
|
||||
in: strAL + "\xcc" + strR,
|
||||
dir: bidi.RightToLeft,
|
||||
err: ErrInvalid,
|
||||
n: len(strAL),
|
||||
}, {
|
||||
in: "\xcc" + strR,
|
||||
dir: bidi.RightToLeft,
|
||||
err: ErrInvalid,
|
||||
n: 0,
|
||||
}},
|
||||
|
||||
// Rule 2.1: The first character must be a character with Bidi property L,
|
||||
// R, or AL. If it has the R or AL property, it is an RTL label; if it has
|
||||
// the L property, it is an LTR label.
|
||||
1: []ruleTest{{
|
||||
in: strL,
|
||||
dir: bidi.LeftToRight,
|
||||
}, {
|
||||
in: strR,
|
||||
dir: bidi.RightToLeft,
|
||||
}, {
|
||||
in: strAL,
|
||||
dir: bidi.RightToLeft,
|
||||
}, {
|
||||
in: strAN,
|
||||
dir: bidi.RightToLeft,
|
||||
err: ErrInvalid,
|
||||
}, {
|
||||
in: strEN,
|
||||
dir: bidi.LeftToRight,
|
||||
err: ErrInvalid,
|
||||
n: len(strEN),
|
||||
}, {
|
||||
in: strES,
|
||||
dir: bidi.LeftToRight,
|
||||
err: ErrInvalid,
|
||||
n: len(strES),
|
||||
}, {
|
||||
in: strET,
|
||||
dir: bidi.LeftToRight,
|
||||
err: ErrInvalid,
|
||||
n: len(strET),
|
||||
}, {
|
||||
in: strCS,
|
||||
dir: bidi.LeftToRight,
|
||||
err: ErrInvalid,
|
||||
n: len(strCS),
|
||||
}, {
|
||||
in: strNSM,
|
||||
dir: bidi.LeftToRight,
|
||||
err: ErrInvalid,
|
||||
n: len(strNSM),
|
||||
}, {
|
||||
in: strBN,
|
||||
dir: bidi.LeftToRight,
|
||||
err: ErrInvalid,
|
||||
n: len(strBN),
|
||||
}, {
|
||||
in: strB,
|
||||
dir: bidi.LeftToRight,
|
||||
err: ErrInvalid,
|
||||
n: len(strB),
|
||||
}, {
|
||||
in: strS,
|
||||
dir: bidi.LeftToRight,
|
||||
err: ErrInvalid,
|
||||
n: len(strS),
|
||||
}, {
|
||||
in: strWS,
|
||||
dir: bidi.LeftToRight,
|
||||
err: ErrInvalid,
|
||||
n: len(strWS),
|
||||
}, {
|
||||
in: strON,
|
||||
dir: bidi.LeftToRight,
|
||||
err: ErrInvalid,
|
||||
n: len(strON),
|
||||
}, {
|
||||
in: strEN + strR,
|
||||
dir: bidi.RightToLeft,
|
||||
err: ErrInvalid,
|
||||
n: 3,
|
||||
}, {
|
||||
in: strES + strR,
|
||||
dir: bidi.RightToLeft,
|
||||
err: ErrInvalid,
|
||||
n: 2,
|
||||
}, {
|
||||
in: strET + strR,
|
||||
dir: bidi.RightToLeft,
|
||||
err: ErrInvalid,
|
||||
n: 1,
|
||||
}, {
|
||||
in: strCS + strR,
|
||||
dir: bidi.RightToLeft,
|
||||
err: ErrInvalid,
|
||||
n: 1,
|
||||
}, {
|
||||
in: strNSM + strR,
|
||||
dir: bidi.RightToLeft,
|
||||
err: ErrInvalid,
|
||||
n: 2,
|
||||
}, {
|
||||
in: strBN + strR,
|
||||
dir: bidi.RightToLeft,
|
||||
err: ErrInvalid,
|
||||
n: 3,
|
||||
}, {
|
||||
in: strB + strR,
|
||||
dir: bidi.RightToLeft,
|
||||
err: ErrInvalid,
|
||||
n: 3,
|
||||
}, {
|
||||
in: strS + strR,
|
||||
dir: bidi.RightToLeft,
|
||||
err: ErrInvalid,
|
||||
n: 1,
|
||||
}, {
|
||||
in: strWS + strR,
|
||||
dir: bidi.RightToLeft,
|
||||
err: ErrInvalid,
|
||||
n: 1,
|
||||
}, {
|
||||
in: strON + strR,
|
||||
dir: bidi.RightToLeft,
|
||||
err: ErrInvalid,
|
||||
n: 1,
|
||||
}},
|
||||
|
||||
// Rule 2.2: In an RTL label, only characters with the Bidi properties R,
|
||||
// AL, AN, EN, ES, CS, ET, ON, BN, or NSM are allowed.
|
||||
2: []ruleTest{{
|
||||
in: strR + strR + strAL,
|
||||
dir: bidi.RightToLeft,
|
||||
}, {
|
||||
in: strR + strAL + strR,
|
||||
dir: bidi.RightToLeft,
|
||||
}, {
|
||||
in: strR + strAN + strAL,
|
||||
dir: bidi.RightToLeft,
|
||||
}, {
|
||||
in: strR + strEN + strR,
|
||||
dir: bidi.RightToLeft,
|
||||
}, {
|
||||
in: strR + strES + strR,
|
||||
dir: bidi.RightToLeft,
|
||||
}, {
|
||||
in: strR + strCS + strR,
|
||||
dir: bidi.RightToLeft,
|
||||
}, {
|
||||
in: strR + strET + strAL,
|
||||
dir: bidi.RightToLeft,
|
||||
}, {
|
||||
in: strR + strON + strR,
|
||||
dir: bidi.RightToLeft,
|
||||
}, {
|
||||
in: strR + strBN + strR,
|
||||
dir: bidi.RightToLeft,
|
||||
}, {
|
||||
in: strR + strNSM + strAL,
|
||||
dir: bidi.RightToLeft,
|
||||
}, {
|
||||
in: strR + strL + strR,
|
||||
dir: bidi.RightToLeft,
|
||||
n: len(strR),
|
||||
err: ErrInvalid,
|
||||
}, {
|
||||
in: strR + strB + strR,
|
||||
dir: bidi.RightToLeft,
|
||||
n: len(strR),
|
||||
err: ErrInvalid,
|
||||
}, {
|
||||
in: strR + strS + strAL,
|
||||
dir: bidi.RightToLeft,
|
||||
n: len(strR),
|
||||
err: ErrInvalid,
|
||||
}, {
|
||||
in: strR + strWS + strAL,
|
||||
dir: bidi.RightToLeft,
|
||||
n: len(strR),
|
||||
err: ErrInvalid,
|
||||
}, {
|
||||
in: strAL + strR + strAL,
|
||||
dir: bidi.RightToLeft,
|
||||
}, {
|
||||
in: strAL + strAL + strR,
|
||||
dir: bidi.RightToLeft,
|
||||
}, {
|
||||
in: strAL + strAN + strAL,
|
||||
dir: bidi.RightToLeft,
|
||||
}, {
|
||||
in: strAL + strEN + strR,
|
||||
dir: bidi.RightToLeft,
|
||||
}, {
|
||||
in: strAL + strES + strR,
|
||||
dir: bidi.RightToLeft,
|
||||
}, {
|
||||
in: strAL + strCS + strR,
|
||||
dir: bidi.RightToLeft,
|
||||
}, {
|
||||
in: strAL + strET + strAL,
|
||||
dir: bidi.RightToLeft,
|
||||
}, {
|
||||
in: strAL + strON + strR,
|
||||
dir: bidi.RightToLeft,
|
||||
}, {
|
||||
in: strAL + strBN + strR,
|
||||
dir: bidi.RightToLeft,
|
||||
}, {
|
||||
in: strAL + strNSM + strAL,
|
||||
dir: bidi.RightToLeft,
|
||||
}, {
|
||||
in: strAL + strL + strR,
|
||||
dir: bidi.RightToLeft,
|
||||
n: len(strAL),
|
||||
err: ErrInvalid,
|
||||
}, {
|
||||
in: strAL + strB + strR,
|
||||
dir: bidi.RightToLeft,
|
||||
n: len(strAL),
|
||||
err: ErrInvalid,
|
||||
}, {
|
||||
in: strAL + strS + strAL,
|
||||
dir: bidi.RightToLeft,
|
||||
n: len(strAL),
|
||||
err: ErrInvalid,
|
||||
}, {
|
||||
in: strAL + strWS + strAL,
|
||||
dir: bidi.RightToLeft,
|
||||
n: len(strAL),
|
||||
err: ErrInvalid,
|
||||
}},
|
||||
|
||||
// Rule 2.3: In an RTL label, the end of the label must be a character with
|
||||
// Bidi property R, AL, EN, or AN, followed by zero or more characters with
|
||||
// Bidi property NSM.
|
||||
3: []ruleTest{{
|
||||
in: strR + strNSM,
|
||||
dir: bidi.RightToLeft,
|
||||
}, {
|
||||
in: strR + strR,
|
||||
dir: bidi.RightToLeft,
|
||||
}, {
|
||||
in: strR + strAL + strNSM,
|
||||
dir: bidi.RightToLeft,
|
||||
}, {
|
||||
in: strR + strEN + strNSM + strNSM,
|
||||
dir: bidi.RightToLeft,
|
||||
}, {
|
||||
in: strR + strAN,
|
||||
dir: bidi.RightToLeft,
|
||||
}, {
|
||||
in: strR + strES + strNSM,
|
||||
dir: bidi.RightToLeft,
|
||||
n: len(strR + strES + strNSM),
|
||||
err: ErrInvalid,
|
||||
}, {
|
||||
in: strR + strCS + strNSM + strNSM,
|
||||
dir: bidi.RightToLeft,
|
||||
n: len(strR + strCS + strNSM + strNSM),
|
||||
err: ErrInvalid,
|
||||
}, {
|
||||
in: strR + strET,
|
||||
dir: bidi.RightToLeft,
|
||||
n: len(strR + strET),
|
||||
err: ErrInvalid,
|
||||
}, {
|
||||
in: strR + strON + strNSM,
|
||||
dir: bidi.RightToLeft,
|
||||
n: len(strR + strON + strNSM),
|
||||
err: ErrInvalid,
|
||||
}, {
|
||||
in: strR + strBN + strNSM + strNSM,
|
||||
dir: bidi.RightToLeft,
|
||||
n: len(strR + strBN + strNSM + strNSM),
|
||||
err: ErrInvalid,
|
||||
}, {
|
||||
in: strR + strL + strNSM,
|
||||
dir: bidi.RightToLeft,
|
||||
n: len(strR),
|
||||
err: ErrInvalid,
|
||||
}, {
|
||||
in: strR + strB + strNSM + strNSM,
|
||||
dir: bidi.RightToLeft,
|
||||
n: len(strR),
|
||||
err: ErrInvalid,
|
||||
}, {
|
||||
in: strR + strS,
|
||||
dir: bidi.RightToLeft,
|
||||
n: len(strR),
|
||||
err: ErrInvalid,
|
||||
}, {
|
||||
in: strR + strWS,
|
||||
dir: bidi.RightToLeft,
|
||||
n: len(strR),
|
||||
err: ErrInvalid,
|
||||
}, {
|
||||
in: strAL + strNSM,
|
||||
dir: bidi.RightToLeft,
|
||||
}, {
|
||||
in: strAL + strR,
|
||||
dir: bidi.RightToLeft,
|
||||
}, {
|
||||
in: strAL + strAL + strNSM,
|
||||
dir: bidi.RightToLeft,
|
||||
}, {
|
||||
in: strAL + strEN + strNSM + strNSM,
|
||||
dir: bidi.RightToLeft,
|
||||
}, {
|
||||
in: strAL + strAN,
|
||||
dir: bidi.RightToLeft,
|
||||
}, {
|
||||
in: strAL + strES + strNSM,
|
||||
dir: bidi.RightToLeft,
|
||||
n: len(strAL + strES + strNSM),
|
||||
err: ErrInvalid,
|
||||
}, {
|
||||
in: strAL + strCS + strNSM + strNSM,
|
||||
dir: bidi.RightToLeft,
|
||||
n: len(strAL + strCS + strNSM + strNSM),
|
||||
err: ErrInvalid,
|
||||
}, {
|
||||
in: strAL + strET,
|
||||
dir: bidi.RightToLeft,
|
||||
n: len(strAL + strET),
|
||||
err: ErrInvalid,
|
||||
}, {
|
||||
in: strAL + strON + strNSM,
|
||||
dir: bidi.RightToLeft,
|
||||
n: len(strAL + strON + strNSM),
|
||||
err: ErrInvalid,
|
||||
}, {
|
||||
in: strAL + strBN + strNSM + strNSM,
|
||||
dir: bidi.RightToLeft,
|
||||
n: len(strAL + strBN + strNSM + strNSM),
|
||||
err: ErrInvalid,
|
||||
}, {
|
||||
in: strAL + strL + strNSM,
|
||||
dir: bidi.RightToLeft,
|
||||
n: len(strAL),
|
||||
err: ErrInvalid,
|
||||
}, {
|
||||
in: strAL + strB + strNSM + strNSM,
|
||||
dir: bidi.RightToLeft,
|
||||
n: len(strAL),
|
||||
err: ErrInvalid,
|
||||
}, {
|
||||
in: strAL + strS,
|
||||
dir: bidi.RightToLeft,
|
||||
n: len(strAL),
|
||||
err: ErrInvalid,
|
||||
}, {
|
||||
in: strAL + strWS,
|
||||
dir: bidi.RightToLeft,
|
||||
n: len(strAL),
|
||||
err: ErrInvalid,
|
||||
}},
|
||||
|
||||
// Rule 2.4: In an RTL label, if an EN is present, no AN may be present,
|
||||
// and vice versa.
|
||||
4: []ruleTest{{
|
||||
in: strR + strEN + strAN,
|
||||
dir: bidi.RightToLeft,
|
||||
n: len(strR + strEN),
|
||||
err: ErrInvalid,
|
||||
}, {
|
||||
in: strR + strAN + strEN + strNSM,
|
||||
dir: bidi.RightToLeft,
|
||||
n: len(strR + strAN),
|
||||
err: ErrInvalid,
|
||||
}, {
|
||||
in: strAL + strEN + strAN,
|
||||
dir: bidi.RightToLeft,
|
||||
n: len(strAL + strEN),
|
||||
err: ErrInvalid,
|
||||
}, {
|
||||
in: strAL + strAN + strEN + strNSM,
|
||||
dir: bidi.RightToLeft,
|
||||
n: len(strAL + strAN),
|
||||
err: ErrInvalid,
|
||||
}},
|
||||
|
||||
// Rule 2.5: In an LTR label, only characters with the Bidi properties L,
|
||||
// EN, ES, CS, ET, ON, BN, or NSM are allowed.
|
||||
5: []ruleTest{{
|
||||
in: strL + strL + strL,
|
||||
dir: bidi.LeftToRight,
|
||||
}, {
|
||||
in: strL + strEN + strL,
|
||||
dir: bidi.LeftToRight,
|
||||
}, {
|
||||
in: strL + strES + strL,
|
||||
dir: bidi.LeftToRight,
|
||||
}, {
|
||||
in: strL + strCS + strL,
|
||||
dir: bidi.LeftToRight,
|
||||
}, {
|
||||
in: strL + strET + strL,
|
||||
dir: bidi.LeftToRight,
|
||||
}, {
|
||||
in: strL + strON + strL,
|
||||
dir: bidi.LeftToRight,
|
||||
}, {
|
||||
in: strL + strBN + strL,
|
||||
dir: bidi.LeftToRight,
|
||||
}, {
|
||||
in: strL + strNSM + strL,
|
||||
dir: bidi.LeftToRight,
|
||||
}, {
|
||||
in: strL + strR + strL,
|
||||
dir: bidi.RightToLeft,
|
||||
n: len(strL),
|
||||
err: ErrInvalid,
|
||||
}, {
|
||||
in: strL + strAL + strL,
|
||||
dir: bidi.RightToLeft,
|
||||
n: len(strL),
|
||||
err: ErrInvalid,
|
||||
}, {
|
||||
in: strL + strAN + strL,
|
||||
dir: bidi.RightToLeft,
|
||||
n: len(strL),
|
||||
err: ErrInvalid,
|
||||
}, {
|
||||
in: strL + strB + strL,
|
||||
dir: bidi.LeftToRight,
|
||||
n: len(strL + strB + strL),
|
||||
err: ErrInvalid,
|
||||
}, {
|
||||
in: strL + strB + strL + strR,
|
||||
dir: bidi.RightToLeft,
|
||||
n: len(strL + strB + strL),
|
||||
err: ErrInvalid,
|
||||
}, {
|
||||
in: strL + strS + strL,
|
||||
dir: bidi.LeftToRight,
|
||||
n: len(strL + strS + strL),
|
||||
err: ErrInvalid,
|
||||
}, {
|
||||
in: strL + strS + strL + strR,
|
||||
dir: bidi.RightToLeft,
|
||||
n: len(strL + strS + strL),
|
||||
err: ErrInvalid,
|
||||
}, {
|
||||
in: strL + strWS + strL,
|
||||
dir: bidi.LeftToRight,
|
||||
n: len(strL + strWS + strL),
|
||||
err: ErrInvalid,
|
||||
}, {
|
||||
in: strL + strWS + strL + strR,
|
||||
dir: bidi.RightToLeft,
|
||||
n: len(strL + strWS + strL),
|
||||
err: ErrInvalid,
|
||||
}},
|
||||
|
||||
// Rule 2.6: In an LTR label, the end of the label must be a character with
|
||||
// Bidi property L or EN, followed by zero or more characters with Bidi
|
||||
// property NSM.
|
||||
6: []ruleTest{{
|
||||
in: strL,
|
||||
dir: bidi.LeftToRight,
|
||||
}, {
|
||||
in: strL + strNSM,
|
||||
dir: bidi.LeftToRight,
|
||||
}, {
|
||||
in: strL + strNSM + strNSM,
|
||||
dir: bidi.LeftToRight,
|
||||
}, {
|
||||
in: strL + strEN,
|
||||
dir: bidi.LeftToRight,
|
||||
}, {
|
||||
in: strL + strEN + strNSM,
|
||||
dir: bidi.LeftToRight,
|
||||
}, {
|
||||
in: strL + strEN + strNSM + strNSM,
|
||||
dir: bidi.LeftToRight,
|
||||
}, {
|
||||
in: strL + strES,
|
||||
dir: bidi.LeftToRight,
|
||||
n: len(strL + strES),
|
||||
err: ErrInvalid,
|
||||
}, {
|
||||
in: strL + strES + strR,
|
||||
dir: bidi.RightToLeft,
|
||||
n: len(strL + strES),
|
||||
err: ErrInvalid,
|
||||
}, {
|
||||
in: strL + strCS,
|
||||
dir: bidi.LeftToRight,
|
||||
n: len(strL + strCS),
|
||||
err: ErrInvalid,
|
||||
}, {
|
||||
in: strL + strCS + strR,
|
||||
dir: bidi.RightToLeft,
|
||||
n: len(strL + strCS),
|
||||
err: ErrInvalid,
|
||||
}, {
|
||||
in: strL + strET,
|
||||
dir: bidi.LeftToRight,
|
||||
n: len(strL + strET),
|
||||
err: ErrInvalid,
|
||||
}, {
|
||||
in: strL + strET + strR,
|
||||
dir: bidi.RightToLeft,
|
||||
n: len(strL + strET),
|
||||
err: ErrInvalid,
|
||||
}, {
|
||||
in: strL + strON,
|
||||
dir: bidi.LeftToRight,
|
||||
n: len(strL + strON),
|
||||
err: ErrInvalid,
|
||||
}, {
|
||||
in: strL + strON + strR,
|
||||
dir: bidi.RightToLeft,
|
||||
n: len(strL + strON),
|
||||
err: ErrInvalid,
|
||||
}, {
|
||||
in: strL + strBN,
|
||||
dir: bidi.LeftToRight,
|
||||
n: len(strL + strBN),
|
||||
err: ErrInvalid,
|
||||
}, {
|
||||
in: strL + strBN + strR,
|
||||
dir: bidi.RightToLeft,
|
||||
n: len(strL + strBN),
|
||||
err: ErrInvalid,
|
||||
}, {
|
||||
in: strL + strR,
|
||||
dir: bidi.RightToLeft,
|
||||
n: len(strL),
|
||||
err: ErrInvalid,
|
||||
}, {
|
||||
in: strL + strAL,
|
||||
dir: bidi.RightToLeft,
|
||||
n: len(strL),
|
||||
err: ErrInvalid,
|
||||
}, {
|
||||
in: strL + strAN,
|
||||
dir: bidi.RightToLeft,
|
||||
n: len(strL),
|
||||
err: ErrInvalid,
|
||||
}, {
|
||||
in: strL + strB,
|
||||
dir: bidi.LeftToRight,
|
||||
n: len(strL + strB),
|
||||
err: ErrInvalid,
|
||||
}, {
|
||||
in: strL + strB + strR,
|
||||
dir: bidi.RightToLeft,
|
||||
n: len(strL + strB),
|
||||
err: ErrInvalid,
|
||||
}, {
|
||||
in: strL + strS,
|
||||
dir: bidi.LeftToRight,
|
||||
n: len(strL + strS),
|
||||
err: ErrInvalid,
|
||||
}, {
|
||||
in: strL + strS + strR,
|
||||
dir: bidi.RightToLeft,
|
||||
n: len(strL + strS),
|
||||
err: ErrInvalid,
|
||||
}, {
|
||||
in: strL + strWS,
|
||||
dir: bidi.LeftToRight,
|
||||
n: len(strL + strWS),
|
||||
err: ErrInvalid,
|
||||
}, {
|
||||
in: strL + strWS + strR,
|
||||
dir: bidi.RightToLeft,
|
||||
n: len(strL + strWS),
|
||||
err: ErrInvalid,
|
||||
}},
|
||||
|
||||
// Incremental processing.
|
||||
9: []ruleTest{{
|
||||
in: "e\u0301", // é
|
||||
dir: bidi.LeftToRight,
|
||||
|
||||
pSrc: 2,
|
||||
nSrc: 1,
|
||||
err0: transform.ErrShortSrc,
|
||||
}, {
|
||||
in: "e\u1000f", // é
|
||||
dir: bidi.LeftToRight,
|
||||
|
||||
pSrc: 3,
|
||||
nSrc: 1,
|
||||
err0: transform.ErrShortSrc,
|
||||
}, {
|
||||
// Remain invalid once invalid.
|
||||
in: strR + "ab",
|
||||
dir: bidi.RightToLeft,
|
||||
n: len(strR),
|
||||
err: ErrInvalid,
|
||||
|
||||
pSrc: len(strR) + 1,
|
||||
nSrc: len(strR),
|
||||
err0: ErrInvalid,
|
||||
}, {
|
||||
// Short destination
|
||||
in: "abcdefghij",
|
||||
dir: bidi.LeftToRight,
|
||||
|
||||
pSrc: 10,
|
||||
szDst: 5,
|
||||
nSrc: 5,
|
||||
err0: transform.ErrShortDst,
|
||||
}, {
|
||||
in: "\U000102f7",
|
||||
dir: bidi.LeftToRight,
|
||||
n: len("\U000102f7"),
|
||||
err: ErrInvalid,
|
||||
}, {
|
||||
// Short destination splitting input rune
|
||||
in: "e\u0301",
|
||||
dir: bidi.LeftToRight,
|
||||
|
||||
pSrc: 3,
|
||||
szDst: 2,
|
||||
nSrc: 1,
|
||||
err0: transform.ErrShortDst,
|
||||
}, {
|
||||
// Unicode 10.0.0 IDNA test string.
|
||||
in: "FAX\u2a77\U0001d186",
|
||||
dir: bidi.LeftToRight,
|
||||
n: len("FAX\u2a77\U0001d186"),
|
||||
err: ErrInvalid,
|
||||
}, {
|
||||
in: "\x80\u0660",
|
||||
dir: bidi.RightToLeft,
|
||||
n: 0,
|
||||
err: ErrInvalid,
|
||||
}},
|
||||
}
|
14
vendor/golang.org/x/text/secure/bidirule/bidirule9.0.0.go
generated
vendored
Normal file
14
vendor/golang.org/x/text/secure/bidirule/bidirule9.0.0.go
generated
vendored
Normal file
|
@ -0,0 +1,14 @@
|
|||
// Copyright 2016 The Go Authors. All rights reserved.
|
||||
// Use of this source code is governed by a BSD-style
|
||||
// license that can be found in the LICENSE file.
|
||||
|
||||
// +build !go1.10
|
||||
|
||||
package bidirule
|
||||
|
||||
func (t *Transformer) isFinal() bool {
|
||||
if !t.isRTL() {
|
||||
return true
|
||||
}
|
||||
return t.state == ruleLTRFinal || t.state == ruleRTLFinal || t.state == ruleInitial
|
||||
}
|
668
vendor/golang.org/x/text/secure/bidirule/bidirule9.0.0_test.go
generated
vendored
Normal file
668
vendor/golang.org/x/text/secure/bidirule/bidirule9.0.0_test.go
generated
vendored
Normal file
|
@ -0,0 +1,668 @@
|
|||
// Copyright 2016 The Go Authors. All rights reserved.
|
||||
// Use of this source code is governed by a BSD-style
|
||||
// license that can be found in the LICENSE file.
|
||||
|
||||
// +build !go1.10
|
||||
|
||||
package bidirule
|
||||
|
||||
import (
|
||||
"golang.org/x/text/transform"
|
||||
"golang.org/x/text/unicode/bidi"
|
||||
)
|
||||
|
||||
var testCases = [][]ruleTest{
|
||||
// Go-specific rules.
|
||||
// Invalid UTF-8 is invalid.
|
||||
0: []ruleTest{{
|
||||
in: "",
|
||||
dir: bidi.LeftToRight,
|
||||
}, {
|
||||
in: "\x80",
|
||||
dir: bidi.LeftToRight,
|
||||
err: ErrInvalid,
|
||||
n: 0,
|
||||
}, {
|
||||
in: "\xcc",
|
||||
dir: bidi.LeftToRight,
|
||||
err: ErrInvalid,
|
||||
n: 0,
|
||||
}, {
|
||||
in: "abc\x80",
|
||||
dir: bidi.LeftToRight,
|
||||
err: ErrInvalid,
|
||||
n: 3,
|
||||
}, {
|
||||
in: "abc\xcc",
|
||||
dir: bidi.LeftToRight,
|
||||
err: ErrInvalid,
|
||||
n: 3,
|
||||
}, {
|
||||
in: "abc\xccdef",
|
||||
dir: bidi.LeftToRight,
|
||||
err: ErrInvalid,
|
||||
n: 3,
|
||||
}, {
|
||||
in: "\xccdef",
|
||||
dir: bidi.LeftToRight,
|
||||
err: ErrInvalid,
|
||||
n: 0,
|
||||
}, {
|
||||
in: strR + "\x80",
|
||||
dir: bidi.RightToLeft,
|
||||
err: ErrInvalid,
|
||||
n: len(strR),
|
||||
}, {
|
||||
in: strR + "\xcc",
|
||||
dir: bidi.RightToLeft,
|
||||
err: ErrInvalid,
|
||||
n: len(strR),
|
||||
}, {
|
||||
in: strAL + "\xcc" + strR,
|
||||
dir: bidi.RightToLeft,
|
||||
err: ErrInvalid,
|
||||
n: len(strAL),
|
||||
}, {
|
||||
in: "\xcc" + strR,
|
||||
dir: bidi.RightToLeft,
|
||||
err: ErrInvalid,
|
||||
n: 0,
|
||||
}},
|
||||
|
||||
// Rule 2.1: The first character must be a character with Bidi property L,
|
||||
// R, or AL. If it has the R or AL property, it is an RTL label; if it has
|
||||
// the L property, it is an LTR label.
|
||||
1: []ruleTest{{
|
||||
in: strL,
|
||||
dir: bidi.LeftToRight,
|
||||
}, {
|
||||
in: strR,
|
||||
dir: bidi.RightToLeft,
|
||||
}, {
|
||||
in: strAL,
|
||||
dir: bidi.RightToLeft,
|
||||
}, {
|
||||
in: strAN,
|
||||
dir: bidi.RightToLeft,
|
||||
err: ErrInvalid,
|
||||
}, {
|
||||
in: strEN,
|
||||
dir: bidi.LeftToRight,
|
||||
err: nil, // not an RTL string
|
||||
}, {
|
||||
in: strES,
|
||||
dir: bidi.LeftToRight,
|
||||
err: nil, // not an RTL string
|
||||
}, {
|
||||
in: strET,
|
||||
dir: bidi.LeftToRight,
|
||||
err: nil, // not an RTL string
|
||||
}, {
|
||||
in: strCS,
|
||||
dir: bidi.LeftToRight,
|
||||
err: nil, // not an RTL string
|
||||
}, {
|
||||
in: strNSM,
|
||||
dir: bidi.LeftToRight,
|
||||
err: nil, // not an RTL string
|
||||
}, {
|
||||
in: strBN,
|
||||
dir: bidi.LeftToRight,
|
||||
err: nil, // not an RTL string
|
||||
}, {
|
||||
in: strB,
|
||||
dir: bidi.LeftToRight,
|
||||
err: nil, // not an RTL string
|
||||
}, {
|
||||
in: strS,
|
||||
dir: bidi.LeftToRight,
|
||||
err: nil, // not an RTL string
|
||||
}, {
|
||||
in: strWS,
|
||||
dir: bidi.LeftToRight,
|
||||
err: nil, // not an RTL string
|
||||
}, {
|
||||
in: strON,
|
||||
dir: bidi.LeftToRight,
|
||||
err: nil, // not an RTL string
|
||||
}, {
|
||||
in: strEN + strR,
|
||||
dir: bidi.RightToLeft,
|
||||
err: ErrInvalid,
|
||||
n: 3,
|
||||
}, {
|
||||
in: strES + strR,
|
||||
dir: bidi.RightToLeft,
|
||||
err: ErrInvalid,
|
||||
n: 2,
|
||||
}, {
|
||||
in: strET + strR,
|
||||
dir: bidi.RightToLeft,
|
||||
err: ErrInvalid,
|
||||
n: 1,
|
||||
}, {
|
||||
in: strCS + strR,
|
||||
dir: bidi.RightToLeft,
|
||||
err: ErrInvalid,
|
||||
n: 1,
|
||||
}, {
|
||||
in: strNSM + strR,
|
||||
dir: bidi.RightToLeft,
|
||||
err: ErrInvalid,
|
||||
n: 2,
|
||||
}, {
|
||||
in: strBN + strR,
|
||||
dir: bidi.RightToLeft,
|
||||
err: ErrInvalid,
|
||||
n: 3,
|
||||
}, {
|
||||
in: strB + strR,
|
||||
dir: bidi.RightToLeft,
|
||||
err: ErrInvalid,
|
||||
n: 3,
|
||||
}, {
|
||||
in: strS + strR,
|
||||
dir: bidi.RightToLeft,
|
||||
err: ErrInvalid,
|
||||
n: 1,
|
||||
}, {
|
||||
in: strWS + strR,
|
||||
dir: bidi.RightToLeft,
|
||||
err: ErrInvalid,
|
||||
n: 1,
|
||||
}, {
|
||||
in: strON + strR,
|
||||
dir: bidi.RightToLeft,
|
||||
err: ErrInvalid,
|
||||
n: 1,
|
||||
}},
|
||||
|
||||
// Rule 2.2: In an RTL label, only characters with the Bidi properties R,
|
||||
// AL, AN, EN, ES, CS, ET, ON, BN, or NSM are allowed.
|
||||
2: []ruleTest{{
|
||||
in: strR + strR + strAL,
|
||||
dir: bidi.RightToLeft,
|
||||
}, {
|
||||
in: strR + strAL + strR,
|
||||
dir: bidi.RightToLeft,
|
||||
}, {
|
||||
in: strR + strAN + strAL,
|
||||
dir: bidi.RightToLeft,
|
||||
}, {
|
||||
in: strR + strEN + strR,
|
||||
dir: bidi.RightToLeft,
|
||||
}, {
|
||||
in: strR + strES + strR,
|
||||
dir: bidi.RightToLeft,
|
||||
}, {
|
||||
in: strR + strCS + strR,
|
||||
dir: bidi.RightToLeft,
|
||||
}, {
|
||||
in: strR + strET + strAL,
|
||||
dir: bidi.RightToLeft,
|
||||
}, {
|
||||
in: strR + strON + strR,
|
||||
dir: bidi.RightToLeft,
|
||||
}, {
|
||||
in: strR + strBN + strR,
|
||||
dir: bidi.RightToLeft,
|
||||
}, {
|
||||
in: strR + strNSM + strAL,
|
||||
dir: bidi.RightToLeft,
|
||||
}, {
|
||||
in: strR + strL + strR,
|
||||
dir: bidi.RightToLeft,
|
||||
n: len(strR),
|
||||
err: ErrInvalid,
|
||||
}, {
|
||||
in: strR + strB + strR,
|
||||
dir: bidi.RightToLeft,
|
||||
n: len(strR),
|
||||
err: ErrInvalid,
|
||||
}, {
|
||||
in: strR + strS + strAL,
|
||||
dir: bidi.RightToLeft,
|
||||
n: len(strR),
|
||||
err: ErrInvalid,
|
||||
}, {
|
||||
in: strR + strWS + strAL,
|
||||
dir: bidi.RightToLeft,
|
||||
n: len(strR),
|
||||
err: ErrInvalid,
|
||||
}, {
|
||||
in: strAL + strR + strAL,
|
||||
dir: bidi.RightToLeft,
|
||||
}, {
|
||||
in: strAL + strAL + strR,
|
||||
dir: bidi.RightToLeft,
|
||||
}, {
|
||||
in: strAL + strAN + strAL,
|
||||
dir: bidi.RightToLeft,
|
||||
}, {
|
||||
in: strAL + strEN + strR,
|
||||
dir: bidi.RightToLeft,
|
||||
}, {
|
||||
in: strAL + strES + strR,
|
||||
dir: bidi.RightToLeft,
|
||||
}, {
|
||||
in: strAL + strCS + strR,
|
||||
dir: bidi.RightToLeft,
|
||||
}, {
|
||||
in: strAL + strET + strAL,
|
||||
dir: bidi.RightToLeft,
|
||||
}, {
|
||||
in: strAL + strON + strR,
|
||||
dir: bidi.RightToLeft,
|
||||
}, {
|
||||
in: strAL + strBN + strR,
|
||||
dir: bidi.RightToLeft,
|
||||
}, {
|
||||
in: strAL + strNSM + strAL,
|
||||
dir: bidi.RightToLeft,
|
||||
}, {
|
||||
in: strAL + strL + strR,
|
||||
dir: bidi.RightToLeft,
|
||||
n: len(strAL),
|
||||
err: ErrInvalid,
|
||||
}, {
|
||||
in: strAL + strB + strR,
|
||||
dir: bidi.RightToLeft,
|
||||
n: len(strAL),
|
||||
err: ErrInvalid,
|
||||
}, {
|
||||
in: strAL + strS + strAL,
|
||||
dir: bidi.RightToLeft,
|
||||
n: len(strAL),
|
||||
err: ErrInvalid,
|
||||
}, {
|
||||
in: strAL + strWS + strAL,
|
||||
dir: bidi.RightToLeft,
|
||||
n: len(strAL),
|
||||
err: ErrInvalid,
|
||||
}},
|
||||
|
||||
// Rule 2.3: In an RTL label, the end of the label must be a character with
|
||||
// Bidi property R, AL, EN, or AN, followed by zero or more characters with
|
||||
// Bidi property NSM.
|
||||
3: []ruleTest{{
|
||||
in: strR + strNSM,
|
||||
dir: bidi.RightToLeft,
|
||||
}, {
|
||||
in: strR + strR,
|
||||
dir: bidi.RightToLeft,
|
||||
}, {
|
||||
in: strR + strAL + strNSM,
|
||||
dir: bidi.RightToLeft,
|
||||
}, {
|
||||
in: strR + strEN + strNSM + strNSM,
|
||||
dir: bidi.RightToLeft,
|
||||
}, {
|
||||
in: strR + strAN,
|
||||
dir: bidi.RightToLeft,
|
||||
}, {
|
||||
in: strR + strES + strNSM,
|
||||
dir: bidi.RightToLeft,
|
||||
n: len(strR + strES + strNSM),
|
||||
err: ErrInvalid,
|
||||
}, {
|
||||
in: strR + strCS + strNSM + strNSM,
|
||||
dir: bidi.RightToLeft,
|
||||
n: len(strR + strCS + strNSM + strNSM),
|
||||
err: ErrInvalid,
|
||||
}, {
|
||||
in: strR + strET,
|
||||
dir: bidi.RightToLeft,
|
||||
n: len(strR + strET),
|
||||
err: ErrInvalid,
|
||||
}, {
|
||||
in: strR + strON + strNSM,
|
||||
dir: bidi.RightToLeft,
|
||||
n: len(strR + strON + strNSM),
|
||||
err: ErrInvalid,
|
||||
}, {
|
||||
in: strR + strBN + strNSM + strNSM,
|
||||
dir: bidi.RightToLeft,
|
||||
n: len(strR + strBN + strNSM + strNSM),
|
||||
err: ErrInvalid,
|
||||
}, {
|
||||
in: strR + strL + strNSM,
|
||||
dir: bidi.RightToLeft,
|
||||
n: len(strR),
|
||||
err: ErrInvalid,
|
||||
}, {
|
||||
in: strR + strB + strNSM + strNSM,
|
||||
dir: bidi.RightToLeft,
|
||||
n: len(strR),
|
||||
err: ErrInvalid,
|
||||
}, {
|
||||
in: strR + strS,
|
||||
dir: bidi.RightToLeft,
|
||||
n: len(strR),
|
||||
err: ErrInvalid,
|
||||
}, {
|
||||
in: strR + strWS,
|
||||
dir: bidi.RightToLeft,
|
||||
n: len(strR),
|
||||
err: ErrInvalid,
|
||||
}, {
|
||||
in: strAL + strNSM,
|
||||
dir: bidi.RightToLeft,
|
||||
}, {
|
||||
in: strAL + strR,
|
||||
dir: bidi.RightToLeft,
|
||||
}, {
|
||||
in: strAL + strAL + strNSM,
|
||||
dir: bidi.RightToLeft,
|
||||
}, {
|
||||
in: strAL + strEN + strNSM + strNSM,
|
||||
dir: bidi.RightToLeft,
|
||||
}, {
|
||||
in: strAL + strAN,
|
||||
dir: bidi.RightToLeft,
|
||||
}, {
|
||||
in: strAL + strES + strNSM,
|
||||
dir: bidi.RightToLeft,
|
||||
n: len(strAL + strES + strNSM),
|
||||
err: ErrInvalid,
|
||||
}, {
|
||||
in: strAL + strCS + strNSM + strNSM,
|
||||
dir: bidi.RightToLeft,
|
||||
n: len(strAL + strCS + strNSM + strNSM),
|
||||
err: ErrInvalid,
|
||||
}, {
|
||||
in: strAL + strET,
|
||||
dir: bidi.RightToLeft,
|
||||
n: len(strAL + strET),
|
||||
err: ErrInvalid,
|
||||
}, {
|
||||
in: strAL + strON + strNSM,
|
||||
dir: bidi.RightToLeft,
|
||||
n: len(strAL + strON + strNSM),
|
||||
err: ErrInvalid,
|
||||
}, {
|
||||
in: strAL + strBN + strNSM + strNSM,
|
||||
dir: bidi.RightToLeft,
|
||||
n: len(strAL + strBN + strNSM + strNSM),
|
||||
err: ErrInvalid,
|
||||
}, {
|
||||
in: strAL + strL + strNSM,
|
||||
dir: bidi.RightToLeft,
|
||||
n: len(strAL),
|
||||
err: ErrInvalid,
|
||||
}, {
|
||||
in: strAL + strB + strNSM + strNSM,
|
||||
dir: bidi.RightToLeft,
|
||||
n: len(strAL),
|
||||
err: ErrInvalid,
|
||||
}, {
|
||||
in: strAL + strS,
|
||||
dir: bidi.RightToLeft,
|
||||
n: len(strAL),
|
||||
err: ErrInvalid,
|
||||
}, {
|
||||
in: strAL + strWS,
|
||||
dir: bidi.RightToLeft,
|
||||
n: len(strAL),
|
||||
err: ErrInvalid,
|
||||
}},
|
||||
|
||||
// Rule 2.4: In an RTL label, if an EN is present, no AN may be present,
|
||||
// and vice versa.
|
||||
4: []ruleTest{{
|
||||
in: strR + strEN + strAN,
|
||||
dir: bidi.RightToLeft,
|
||||
n: len(strR + strEN),
|
||||
err: ErrInvalid,
|
||||
}, {
|
||||
in: strR + strAN + strEN + strNSM,
|
||||
dir: bidi.RightToLeft,
|
||||
n: len(strR + strAN),
|
||||
err: ErrInvalid,
|
||||
}, {
|
||||
in: strAL + strEN + strAN,
|
||||
dir: bidi.RightToLeft,
|
||||
n: len(strAL + strEN),
|
||||
err: ErrInvalid,
|
||||
}, {
|
||||
in: strAL + strAN + strEN + strNSM,
|
||||
dir: bidi.RightToLeft,
|
||||
n: len(strAL + strAN),
|
||||
err: ErrInvalid,
|
||||
}},
|
||||
|
||||
// Rule 2.5: In an LTR label, only characters with the Bidi properties L,
|
||||
// EN, ES, CS, ET, ON, BN, or NSM are allowed.
|
||||
5: []ruleTest{{
|
||||
in: strL + strL + strL,
|
||||
dir: bidi.LeftToRight,
|
||||
}, {
|
||||
in: strL + strEN + strL,
|
||||
dir: bidi.LeftToRight,
|
||||
}, {
|
||||
in: strL + strES + strL,
|
||||
dir: bidi.LeftToRight,
|
||||
}, {
|
||||
in: strL + strCS + strL,
|
||||
dir: bidi.LeftToRight,
|
||||
}, {
|
||||
in: strL + strET + strL,
|
||||
dir: bidi.LeftToRight,
|
||||
}, {
|
||||
in: strL + strON + strL,
|
||||
dir: bidi.LeftToRight,
|
||||
}, {
|
||||
in: strL + strBN + strL,
|
||||
dir: bidi.LeftToRight,
|
||||
}, {
|
||||
in: strL + strNSM + strL,
|
||||
dir: bidi.LeftToRight,
|
||||
}, {
|
||||
in: strL + strR + strL,
|
||||
dir: bidi.RightToLeft,
|
||||
n: len(strL),
|
||||
err: ErrInvalid,
|
||||
}, {
|
||||
in: strL + strAL + strL,
|
||||
dir: bidi.RightToLeft,
|
||||
n: len(strL),
|
||||
err: ErrInvalid,
|
||||
}, {
|
||||
in: strL + strAN + strL,
|
||||
dir: bidi.RightToLeft,
|
||||
n: len(strL),
|
||||
err: ErrInvalid,
|
||||
}, {
|
||||
in: strL + strB + strL,
|
||||
dir: bidi.LeftToRight,
|
||||
n: len(strL + strAN + strL),
|
||||
err: nil,
|
||||
}, {
|
||||
in: strL + strB + strL + strR,
|
||||
dir: bidi.RightToLeft,
|
||||
n: len(strL + strB + strL),
|
||||
err: ErrInvalid,
|
||||
}, {
|
||||
in: strL + strS + strL,
|
||||
dir: bidi.LeftToRight,
|
||||
n: len(strL + strS + strL),
|
||||
err: nil,
|
||||
}, {
|
||||
in: strL + strS + strL + strR,
|
||||
dir: bidi.RightToLeft,
|
||||
n: len(strL + strS + strL),
|
||||
err: ErrInvalid,
|
||||
}, {
|
||||
in: strL + strWS + strL,
|
||||
dir: bidi.LeftToRight,
|
||||
n: len(strL + strWS + strL),
|
||||
err: nil,
|
||||
}, {
|
||||
in: strL + strWS + strL + strR,
|
||||
dir: bidi.RightToLeft,
|
||||
n: len(strL + strWS + strL),
|
||||
err: ErrInvalid,
|
||||
}},
|
||||
|
||||
// Rule 2.6: In an LTR label, the end of the label must be a character with
|
||||
// Bidi property L or EN, followed by zero or more characters with Bidi
|
||||
// property NSM.
|
||||
6: []ruleTest{{
|
||||
in: strL,
|
||||
dir: bidi.LeftToRight,
|
||||
}, {
|
||||
in: strL + strNSM,
|
||||
dir: bidi.LeftToRight,
|
||||
}, {
|
||||
in: strL + strNSM + strNSM,
|
||||
dir: bidi.LeftToRight,
|
||||
}, {
|
||||
in: strL + strEN,
|
||||
dir: bidi.LeftToRight,
|
||||
}, {
|
||||
in: strL + strEN + strNSM,
|
||||
dir: bidi.LeftToRight,
|
||||
}, {
|
||||
in: strL + strEN + strNSM + strNSM,
|
||||
dir: bidi.LeftToRight,
|
||||
}, {
|
||||
in: strL + strES,
|
||||
dir: bidi.LeftToRight,
|
||||
n: len(strL + strES),
|
||||
err: nil,
|
||||
}, {
|
||||
in: strL + strES + strR,
|
||||
dir: bidi.RightToLeft,
|
||||
n: len(strL + strES),
|
||||
err: ErrInvalid,
|
||||
}, {
|
||||
in: strL + strCS,
|
||||
dir: bidi.LeftToRight,
|
||||
n: len(strL + strCS),
|
||||
err: nil,
|
||||
}, {
|
||||
in: strL + strCS + strR,
|
||||
dir: bidi.RightToLeft,
|
||||
n: len(strL + strCS),
|
||||
err: ErrInvalid,
|
||||
}, {
|
||||
in: strL + strET,
|
||||
dir: bidi.LeftToRight,
|
||||
n: len(strL + strET),
|
||||
err: nil,
|
||||
}, {
|
||||
in: strL + strET + strR,
|
||||
dir: bidi.RightToLeft,
|
||||
n: len(strL + strET),
|
||||
err: ErrInvalid,
|
||||
}, {
|
||||
in: strL + strON,
|
||||
dir: bidi.LeftToRight,
|
||||
n: len(strL + strON),
|
||||
err: nil,
|
||||
}, {
|
||||
in: strL + strON + strR,
|
||||
dir: bidi.RightToLeft,
|
||||
n: len(strL + strON),
|
||||
err: ErrInvalid,
|
||||
}, {
|
||||
in: strL + strBN,
|
||||
dir: bidi.LeftToRight,
|
||||
n: len(strL + strBN),
|
||||
err: nil,
|
||||
}, {
|
||||
in: strL + strBN + strR,
|
||||
dir: bidi.RightToLeft,
|
||||
n: len(strL + strBN),
|
||||
err: ErrInvalid,
|
||||
}, {
|
||||
in: strL + strR,
|
||||
dir: bidi.RightToLeft,
|
||||
n: len(strL),
|
||||
err: ErrInvalid,
|
||||
}, {
|
||||
in: strL + strAL,
|
||||
dir: bidi.RightToLeft,
|
||||
n: len(strL),
|
||||
err: ErrInvalid,
|
||||
}, {
|
||||
in: strL + strAN,
|
||||
dir: bidi.RightToLeft,
|
||||
n: len(strL),
|
||||
err: ErrInvalid,
|
||||
}, {
|
||||
in: strL + strB,
|
||||
dir: bidi.LeftToRight,
|
||||
n: len(strL + strB),
|
||||
err: nil,
|
||||
}, {
|
||||
in: strL + strB + strR,
|
||||
dir: bidi.RightToLeft,
|
||||
n: len(strL + strB),
|
||||
err: ErrInvalid,
|
||||
}, {
|
||||
in: strL + strB,
|
||||
dir: bidi.LeftToRight,
|
||||
n: len(strL + strB),
|
||||
err: nil,
|
||||
}, {
|
||||
in: strL + strB + strR,
|
||||
dir: bidi.RightToLeft,
|
||||
n: len(strL + strB),
|
||||
err: ErrInvalid,
|
||||
}, {
|
||||
in: strL + strB,
|
||||
dir: bidi.LeftToRight,
|
||||
n: len(strL + strB),
|
||||
err: nil,
|
||||
}, {
|
||||
in: strL + strB + strR,
|
||||
dir: bidi.RightToLeft,
|
||||
n: len(strL + strB),
|
||||
err: ErrInvalid,
|
||||
}},
|
||||
|
||||
// Incremental processing.
|
||||
9: []ruleTest{{
|
||||
in: "e\u0301", // é
|
||||
dir: bidi.LeftToRight,
|
||||
|
||||
pSrc: 2,
|
||||
nSrc: 1,
|
||||
err0: transform.ErrShortSrc,
|
||||
}, {
|
||||
in: "e\u1000f", // é
|
||||
dir: bidi.LeftToRight,
|
||||
|
||||
pSrc: 3,
|
||||
nSrc: 1,
|
||||
err0: transform.ErrShortSrc,
|
||||
}, {
|
||||
// Remain invalid once invalid.
|
||||
in: strR + "ab",
|
||||
dir: bidi.RightToLeft,
|
||||
n: len(strR),
|
||||
err: ErrInvalid,
|
||||
|
||||
pSrc: len(strR) + 1,
|
||||
nSrc: len(strR),
|
||||
err0: ErrInvalid,
|
||||
}, {
|
||||
// Short destination
|
||||
in: "abcdefghij",
|
||||
dir: bidi.LeftToRight,
|
||||
|
||||
pSrc: 10,
|
||||
szDst: 5,
|
||||
nSrc: 5,
|
||||
err0: transform.ErrShortDst,
|
||||
}, {
|
||||
// Short destination splitting input rune
|
||||
in: "e\u0301",
|
||||
dir: bidi.LeftToRight,
|
||||
|
||||
pSrc: 3,
|
||||
szDst: 2,
|
||||
nSrc: 1,
|
||||
err0: transform.ErrShortDst,
|
||||
}},
|
||||
}
|
683
vendor/golang.org/x/text/secure/bidirule/bidirule_test.go
generated
vendored
683
vendor/golang.org/x/text/secure/bidirule/bidirule_test.go
generated
vendored
|
@ -9,7 +9,6 @@ import (
|
|||
"testing"
|
||||
|
||||
"golang.org/x/text/internal/testtext"
|
||||
"golang.org/x/text/transform"
|
||||
"golang.org/x/text/unicode/bidi"
|
||||
)
|
||||
|
||||
|
@ -43,688 +42,6 @@ type ruleTest struct {
|
|||
err0 error // error after first run
|
||||
}
|
||||
|
||||
var testCases = [][]ruleTest{
|
||||
// Go-specific rules.
|
||||
// Invalid UTF-8 is invalid.
|
||||
0: []ruleTest{{
|
||||
in: "",
|
||||
dir: bidi.LeftToRight,
|
||||
}, {
|
||||
in: "\x80",
|
||||
dir: bidi.LeftToRight,
|
||||
err: ErrInvalid,
|
||||
n: 0,
|
||||
}, {
|
||||
in: "\xcc",
|
||||
dir: bidi.LeftToRight,
|
||||
err: ErrInvalid,
|
||||
n: 0,
|
||||
}, {
|
||||
in: "abc\x80",
|
||||
dir: bidi.LeftToRight,
|
||||
err: ErrInvalid,
|
||||
n: 3,
|
||||
}, {
|
||||
in: "abc\xcc",
|
||||
dir: bidi.LeftToRight,
|
||||
err: ErrInvalid,
|
||||
n: 3,
|
||||
}, {
|
||||
in: "abc\xccdef",
|
||||
dir: bidi.LeftToRight,
|
||||
err: ErrInvalid,
|
||||
n: 3,
|
||||
}, {
|
||||
in: "\xccdef",
|
||||
dir: bidi.LeftToRight,
|
||||
err: ErrInvalid,
|
||||
n: 0,
|
||||
}, {
|
||||
in: strR + "\x80",
|
||||
dir: bidi.RightToLeft,
|
||||
err: ErrInvalid,
|
||||
n: len(strR),
|
||||
}, {
|
||||
in: strR + "\xcc",
|
||||
dir: bidi.RightToLeft,
|
||||
err: ErrInvalid,
|
||||
n: len(strR),
|
||||
}, {
|
||||
in: strAL + "\xcc" + strR,
|
||||
dir: bidi.RightToLeft,
|
||||
err: ErrInvalid,
|
||||
n: len(strAL),
|
||||
}, {
|
||||
in: "\xcc" + strR,
|
||||
dir: bidi.RightToLeft,
|
||||
err: ErrInvalid,
|
||||
n: 0,
|
||||
}},
|
||||
|
||||
// Rule 2.1: The first character must be a character with Bidi property L,
|
||||
// R, or AL. If it has the R or AL property, it is an RTL label; if it has
|
||||
// the L property, it is an LTR label.
|
||||
1: []ruleTest{{
|
||||
in: strL,
|
||||
dir: bidi.LeftToRight,
|
||||
}, {
|
||||
in: strR,
|
||||
dir: bidi.RightToLeft,
|
||||
}, {
|
||||
in: strAL,
|
||||
dir: bidi.RightToLeft,
|
||||
}, {
|
||||
in: strAN,
|
||||
dir: bidi.RightToLeft,
|
||||
err: ErrInvalid,
|
||||
}, {
|
||||
in: strEN,
|
||||
dir: bidi.LeftToRight,
|
||||
err: ErrInvalid,
|
||||
n: len(strEN),
|
||||
}, {
|
||||
in: strES,
|
||||
dir: bidi.LeftToRight,
|
||||
err: ErrInvalid,
|
||||
n: len(strES),
|
||||
}, {
|
||||
in: strET,
|
||||
dir: bidi.LeftToRight,
|
||||
err: ErrInvalid,
|
||||
n: len(strET),
|
||||
}, {
|
||||
in: strCS,
|
||||
dir: bidi.LeftToRight,
|
||||
err: ErrInvalid,
|
||||
n: len(strCS),
|
||||
}, {
|
||||
in: strNSM,
|
||||
dir: bidi.LeftToRight,
|
||||
err: ErrInvalid,
|
||||
n: len(strNSM),
|
||||
}, {
|
||||
in: strBN,
|
||||
dir: bidi.LeftToRight,
|
||||
err: ErrInvalid,
|
||||
n: len(strBN),
|
||||
}, {
|
||||
in: strB,
|
||||
dir: bidi.LeftToRight,
|
||||
err: ErrInvalid,
|
||||
n: len(strB),
|
||||
}, {
|
||||
in: strS,
|
||||
dir: bidi.LeftToRight,
|
||||
err: ErrInvalid,
|
||||
n: len(strS),
|
||||
}, {
|
||||
in: strWS,
|
||||
dir: bidi.LeftToRight,
|
||||
err: ErrInvalid,
|
||||
n: len(strWS),
|
||||
}, {
|
||||
in: strON,
|
||||
dir: bidi.LeftToRight,
|
||||
err: ErrInvalid,
|
||||
n: len(strON),
|
||||
}, {
|
||||
in: strEN + strR,
|
||||
dir: bidi.RightToLeft,
|
||||
err: ErrInvalid,
|
||||
n: 3,
|
||||
}, {
|
||||
in: strES + strR,
|
||||
dir: bidi.RightToLeft,
|
||||
err: ErrInvalid,
|
||||
n: 2,
|
||||
}, {
|
||||
in: strET + strR,
|
||||
dir: bidi.RightToLeft,
|
||||
err: ErrInvalid,
|
||||
n: 1,
|
||||
}, {
|
||||
in: strCS + strR,
|
||||
dir: bidi.RightToLeft,
|
||||
err: ErrInvalid,
|
||||
n: 1,
|
||||
}, {
|
||||
in: strNSM + strR,
|
||||
dir: bidi.RightToLeft,
|
||||
err: ErrInvalid,
|
||||
n: 2,
|
||||
}, {
|
||||
in: strBN + strR,
|
||||
dir: bidi.RightToLeft,
|
||||
err: ErrInvalid,
|
||||
n: 3,
|
||||
}, {
|
||||
in: strB + strR,
|
||||
dir: bidi.RightToLeft,
|
||||
err: ErrInvalid,
|
||||
n: 3,
|
||||
}, {
|
||||
in: strS + strR,
|
||||
dir: bidi.RightToLeft,
|
||||
err: ErrInvalid,
|
||||
n: 1,
|
||||
}, {
|
||||
in: strWS + strR,
|
||||
dir: bidi.RightToLeft,
|
||||
err: ErrInvalid,
|
||||
n: 1,
|
||||
}, {
|
||||
in: strON + strR,
|
||||
dir: bidi.RightToLeft,
|
||||
err: ErrInvalid,
|
||||
n: 1,
|
||||
}},
|
||||
|
||||
// Rule 2.2: In an RTL label, only characters with the Bidi properties R,
|
||||
// AL, AN, EN, ES, CS, ET, ON, BN, or NSM are allowed.
|
||||
2: []ruleTest{{
|
||||
in: strR + strR + strAL,
|
||||
dir: bidi.RightToLeft,
|
||||
}, {
|
||||
in: strR + strAL + strR,
|
||||
dir: bidi.RightToLeft,
|
||||
}, {
|
||||
in: strR + strAN + strAL,
|
||||
dir: bidi.RightToLeft,
|
||||
}, {
|
||||
in: strR + strEN + strR,
|
||||
dir: bidi.RightToLeft,
|
||||
}, {
|
||||
in: strR + strES + strR,
|
||||
dir: bidi.RightToLeft,
|
||||
}, {
|
||||
in: strR + strCS + strR,
|
||||
dir: bidi.RightToLeft,
|
||||
}, {
|
||||
in: strR + strET + strAL,
|
||||
dir: bidi.RightToLeft,
|
||||
}, {
|
||||
in: strR + strON + strR,
|
||||
dir: bidi.RightToLeft,
|
||||
}, {
|
||||
in: strR + strBN + strR,
|
||||
dir: bidi.RightToLeft,
|
||||
}, {
|
||||
in: strR + strNSM + strAL,
|
||||
dir: bidi.RightToLeft,
|
||||
}, {
|
||||
in: strR + strL + strR,
|
||||
dir: bidi.RightToLeft,
|
||||
n: len(strR),
|
||||
err: ErrInvalid,
|
||||
}, {
|
||||
in: strR + strB + strR,
|
||||
dir: bidi.RightToLeft,
|
||||
n: len(strR),
|
||||
err: ErrInvalid,
|
||||
}, {
|
||||
in: strR + strS + strAL,
|
||||
dir: bidi.RightToLeft,
|
||||
n: len(strR),
|
||||
err: ErrInvalid,
|
||||
}, {
|
||||
in: strR + strWS + strAL,
|
||||
dir: bidi.RightToLeft,
|
||||
n: len(strR),
|
||||
err: ErrInvalid,
|
||||
}, {
|
||||
in: strAL + strR + strAL,
|
||||
dir: bidi.RightToLeft,
|
||||
}, {
|
||||
in: strAL + strAL + strR,
|
||||
dir: bidi.RightToLeft,
|
||||
}, {
|
||||
in: strAL + strAN + strAL,
|
||||
dir: bidi.RightToLeft,
|
||||
}, {
|
||||
in: strAL + strEN + strR,
|
||||
dir: bidi.RightToLeft,
|
||||
}, {
|
||||
in: strAL + strES + strR,
|
||||
dir: bidi.RightToLeft,
|
||||
}, {
|
||||
in: strAL + strCS + strR,
|
||||
dir: bidi.RightToLeft,
|
||||
}, {
|
||||
in: strAL + strET + strAL,
|
||||
dir: bidi.RightToLeft,
|
||||
}, {
|
||||
in: strAL + strON + strR,
|
||||
dir: bidi.RightToLeft,
|
||||
}, {
|
||||
in: strAL + strBN + strR,
|
||||
dir: bidi.RightToLeft,
|
||||
}, {
|
||||
in: strAL + strNSM + strAL,
|
||||
dir: bidi.RightToLeft,
|
||||
}, {
|
||||
in: strAL + strL + strR,
|
||||
dir: bidi.RightToLeft,
|
||||
n: len(strAL),
|
||||
err: ErrInvalid,
|
||||
}, {
|
||||
in: strAL + strB + strR,
|
||||
dir: bidi.RightToLeft,
|
||||
n: len(strAL),
|
||||
err: ErrInvalid,
|
||||
}, {
|
||||
in: strAL + strS + strAL,
|
||||
dir: bidi.RightToLeft,
|
||||
n: len(strAL),
|
||||
err: ErrInvalid,
|
||||
}, {
|
||||
in: strAL + strWS + strAL,
|
||||
dir: bidi.RightToLeft,
|
||||
n: len(strAL),
|
||||
err: ErrInvalid,
|
||||
}},
|
||||
|
||||
// Rule 2.3: In an RTL label, the end of the label must be a character with
|
||||
// Bidi property R, AL, EN, or AN, followed by zero or more characters with
|
||||
// Bidi property NSM.
|
||||
3: []ruleTest{{
|
||||
in: strR + strNSM,
|
||||
dir: bidi.RightToLeft,
|
||||
}, {
|
||||
in: strR + strR,
|
||||
dir: bidi.RightToLeft,
|
||||
}, {
|
||||
in: strR + strAL + strNSM,
|
||||
dir: bidi.RightToLeft,
|
||||
}, {
|
||||
in: strR + strEN + strNSM + strNSM,
|
||||
dir: bidi.RightToLeft,
|
||||
}, {
|
||||
in: strR + strAN,
|
||||
dir: bidi.RightToLeft,
|
||||
}, {
|
||||
in: strR + strES + strNSM,
|
||||
dir: bidi.RightToLeft,
|
||||
n: len(strR + strES + strNSM),
|
||||
err: ErrInvalid,
|
||||
}, {
|
||||
in: strR + strCS + strNSM + strNSM,
|
||||
dir: bidi.RightToLeft,
|
||||
n: len(strR + strCS + strNSM + strNSM),
|
||||
err: ErrInvalid,
|
||||
}, {
|
||||
in: strR + strET,
|
||||
dir: bidi.RightToLeft,
|
||||
n: len(strR + strET),
|
||||
err: ErrInvalid,
|
||||
}, {
|
||||
in: strR + strON + strNSM,
|
||||
dir: bidi.RightToLeft,
|
||||
n: len(strR + strON + strNSM),
|
||||
err: ErrInvalid,
|
||||
}, {
|
||||
in: strR + strBN + strNSM + strNSM,
|
||||
dir: bidi.RightToLeft,
|
||||
n: len(strR + strBN + strNSM + strNSM),
|
||||
err: ErrInvalid,
|
||||
}, {
|
||||
in: strR + strL + strNSM,
|
||||
dir: bidi.RightToLeft,
|
||||
n: len(strR),
|
||||
err: ErrInvalid,
|
||||
}, {
|
||||
in: strR + strB + strNSM + strNSM,
|
||||
dir: bidi.RightToLeft,
|
||||
n: len(strR),
|
||||
err: ErrInvalid,
|
||||
}, {
|
||||
in: strR + strS,
|
||||
dir: bidi.RightToLeft,
|
||||
n: len(strR),
|
||||
err: ErrInvalid,
|
||||
}, {
|
||||
in: strR + strWS,
|
||||
dir: bidi.RightToLeft,
|
||||
n: len(strR),
|
||||
err: ErrInvalid,
|
||||
}, {
|
||||
in: strAL + strNSM,
|
||||
dir: bidi.RightToLeft,
|
||||
}, {
|
||||
in: strAL + strR,
|
||||
dir: bidi.RightToLeft,
|
||||
}, {
|
||||
in: strAL + strAL + strNSM,
|
||||
dir: bidi.RightToLeft,
|
||||
}, {
|
||||
in: strAL + strEN + strNSM + strNSM,
|
||||
dir: bidi.RightToLeft,
|
||||
}, {
|
||||
in: strAL + strAN,
|
||||
dir: bidi.RightToLeft,
|
||||
}, {
|
||||
in: strAL + strES + strNSM,
|
||||
dir: bidi.RightToLeft,
|
||||
n: len(strAL + strES + strNSM),
|
||||
err: ErrInvalid,
|
||||
}, {
|
||||
in: strAL + strCS + strNSM + strNSM,
|
||||
dir: bidi.RightToLeft,
|
||||
n: len(strAL + strCS + strNSM + strNSM),
|
||||
err: ErrInvalid,
|
||||
}, {
|
||||
in: strAL + strET,
|
||||
dir: bidi.RightToLeft,
|
||||
n: len(strAL + strET),
|
||||
err: ErrInvalid,
|
||||
}, {
|
||||
in: strAL + strON + strNSM,
|
||||
dir: bidi.RightToLeft,
|
||||
n: len(strAL + strON + strNSM),
|
||||
err: ErrInvalid,
|
||||
}, {
|
||||
in: strAL + strBN + strNSM + strNSM,
|
||||
dir: bidi.RightToLeft,
|
||||
n: len(strAL + strBN + strNSM + strNSM),
|
||||
err: ErrInvalid,
|
||||
}, {
|
||||
in: strAL + strL + strNSM,
|
||||
dir: bidi.RightToLeft,
|
||||
n: len(strAL),
|
||||
err: ErrInvalid,
|
||||
}, {
|
||||
in: strAL + strB + strNSM + strNSM,
|
||||
dir: bidi.RightToLeft,
|
||||
n: len(strAL),
|
||||
err: ErrInvalid,
|
||||
}, {
|
||||
in: strAL + strS,
|
||||
dir: bidi.RightToLeft,
|
||||
n: len(strAL),
|
||||
err: ErrInvalid,
|
||||
}, {
|
||||
in: strAL + strWS,
|
||||
dir: bidi.RightToLeft,
|
||||
n: len(strAL),
|
||||
err: ErrInvalid,
|
||||
}},
|
||||
|
||||
// Rule 2.4: In an RTL label, if an EN is present, no AN may be present,
|
||||
// and vice versa.
|
||||
4: []ruleTest{{
|
||||
in: strR + strEN + strAN,
|
||||
dir: bidi.RightToLeft,
|
||||
n: len(strR + strEN),
|
||||
err: ErrInvalid,
|
||||
}, {
|
||||
in: strR + strAN + strEN + strNSM,
|
||||
dir: bidi.RightToLeft,
|
||||
n: len(strR + strAN),
|
||||
err: ErrInvalid,
|
||||
}, {
|
||||
in: strAL + strEN + strAN,
|
||||
dir: bidi.RightToLeft,
|
||||
n: len(strAL + strEN),
|
||||
err: ErrInvalid,
|
||||
}, {
|
||||
in: strAL + strAN + strEN + strNSM,
|
||||
dir: bidi.RightToLeft,
|
||||
n: len(strAL + strAN),
|
||||
err: ErrInvalid,
|
||||
}},
|
||||
|
||||
// Rule 2.5: In an LTR label, only characters with the Bidi properties L,
|
||||
// EN, ES, CS, ET, ON, BN, or NSM are allowed.
|
||||
5: []ruleTest{{
|
||||
in: strL + strL + strL,
|
||||
dir: bidi.LeftToRight,
|
||||
}, {
|
||||
in: strL + strEN + strL,
|
||||
dir: bidi.LeftToRight,
|
||||
}, {
|
||||
in: strL + strES + strL,
|
||||
dir: bidi.LeftToRight,
|
||||
}, {
|
||||
in: strL + strCS + strL,
|
||||
dir: bidi.LeftToRight,
|
||||
}, {
|
||||
in: strL + strET + strL,
|
||||
dir: bidi.LeftToRight,
|
||||
}, {
|
||||
in: strL + strON + strL,
|
||||
dir: bidi.LeftToRight,
|
||||
}, {
|
||||
in: strL + strBN + strL,
|
||||
dir: bidi.LeftToRight,
|
||||
}, {
|
||||
in: strL + strNSM + strL,
|
||||
dir: bidi.LeftToRight,
|
||||
}, {
|
||||
in: strL + strR + strL,
|
||||
dir: bidi.RightToLeft,
|
||||
n: len(strL),
|
||||
err: ErrInvalid,
|
||||
}, {
|
||||
in: strL + strAL + strL,
|
||||
dir: bidi.RightToLeft,
|
||||
n: len(strL),
|
||||
err: ErrInvalid,
|
||||
}, {
|
||||
in: strL + strAN + strL,
|
||||
dir: bidi.RightToLeft,
|
||||
n: len(strL),
|
||||
err: ErrInvalid,
|
||||
}, {
|
||||
in: strL + strB + strL,
|
||||
dir: bidi.LeftToRight,
|
||||
n: len(strL + strB + strL),
|
||||
err: ErrInvalid,
|
||||
}, {
|
||||
in: strL + strB + strL + strR,
|
||||
dir: bidi.RightToLeft,
|
||||
n: len(strL + strB + strL),
|
||||
err: ErrInvalid,
|
||||
}, {
|
||||
in: strL + strS + strL,
|
||||
dir: bidi.LeftToRight,
|
||||
n: len(strL + strS + strL),
|
||||
err: ErrInvalid,
|
||||
}, {
|
||||
in: strL + strS + strL + strR,
|
||||
dir: bidi.RightToLeft,
|
||||
n: len(strL + strS + strL),
|
||||
err: ErrInvalid,
|
||||
}, {
|
||||
in: strL + strWS + strL,
|
||||
dir: bidi.LeftToRight,
|
||||
n: len(strL + strWS + strL),
|
||||
err: ErrInvalid,
|
||||
}, {
|
||||
in: strL + strWS + strL + strR,
|
||||
dir: bidi.RightToLeft,
|
||||
n: len(strL + strWS + strL),
|
||||
err: ErrInvalid,
|
||||
}},
|
||||
|
||||
// Rule 2.6: In an LTR label, the end of the label must be a character with
|
||||
// Bidi property L or EN, followed by zero or more characters with Bidi
|
||||
// property NSM.
|
||||
6: []ruleTest{{
|
||||
in: strL,
|
||||
dir: bidi.LeftToRight,
|
||||
}, {
|
||||
in: strL + strNSM,
|
||||
dir: bidi.LeftToRight,
|
||||
}, {
|
||||
in: strL + strNSM + strNSM,
|
||||
dir: bidi.LeftToRight,
|
||||
}, {
|
||||
in: strL + strEN,
|
||||
dir: bidi.LeftToRight,
|
||||
}, {
|
||||
in: strL + strEN + strNSM,
|
||||
dir: bidi.LeftToRight,
|
||||
}, {
|
||||
in: strL + strEN + strNSM + strNSM,
|
||||
dir: bidi.LeftToRight,
|
||||
}, {
|
||||
in: strL + strES,
|
||||
dir: bidi.LeftToRight,
|
||||
n: len(strL + strES),
|
||||
err: ErrInvalid,
|
||||
}, {
|
||||
in: strL + strES + strR,
|
||||
dir: bidi.RightToLeft,
|
||||
n: len(strL + strES),
|
||||
err: ErrInvalid,
|
||||
}, {
|
||||
in: strL + strCS,
|
||||
dir: bidi.LeftToRight,
|
||||
n: len(strL + strCS),
|
||||
err: ErrInvalid,
|
||||
}, {
|
||||
in: strL + strCS + strR,
|
||||
dir: bidi.RightToLeft,
|
||||
n: len(strL + strCS),
|
||||
err: ErrInvalid,
|
||||
}, {
|
||||
in: strL + strET,
|
||||
dir: bidi.LeftToRight,
|
||||
n: len(strL + strET),
|
||||
err: ErrInvalid,
|
||||
}, {
|
||||
in: strL + strET + strR,
|
||||
dir: bidi.RightToLeft,
|
||||
n: len(strL + strET),
|
||||
err: ErrInvalid,
|
||||
}, {
|
||||
in: strL + strON,
|
||||
dir: bidi.LeftToRight,
|
||||
n: len(strL + strON),
|
||||
err: ErrInvalid,
|
||||
}, {
|
||||
in: strL + strON + strR,
|
||||
dir: bidi.RightToLeft,
|
||||
n: len(strL + strON),
|
||||
err: ErrInvalid,
|
||||
}, {
|
||||
in: strL + strBN,
|
||||
dir: bidi.LeftToRight,
|
||||
n: len(strL + strBN),
|
||||
err: ErrInvalid,
|
||||
}, {
|
||||
in: strL + strBN + strR,
|
||||
dir: bidi.RightToLeft,
|
||||
n: len(strL + strBN),
|
||||
err: ErrInvalid,
|
||||
}, {
|
||||
in: strL + strR,
|
||||
dir: bidi.RightToLeft,
|
||||
n: len(strL),
|
||||
err: ErrInvalid,
|
||||
}, {
|
||||
in: strL + strAL,
|
||||
dir: bidi.RightToLeft,
|
||||
n: len(strL),
|
||||
err: ErrInvalid,
|
||||
}, {
|
||||
in: strL + strAN,
|
||||
dir: bidi.RightToLeft,
|
||||
n: len(strL),
|
||||
err: ErrInvalid,
|
||||
}, {
|
||||
in: strL + strB,
|
||||
dir: bidi.LeftToRight,
|
||||
n: len(strL + strB),
|
||||
err: ErrInvalid,
|
||||
}, {
|
||||
in: strL + strB + strR,
|
||||
dir: bidi.RightToLeft,
|
||||
n: len(strL + strB),
|
||||
err: ErrInvalid,
|
||||
}, {
|
||||
in: strL + strS,
|
||||
dir: bidi.LeftToRight,
|
||||
n: len(strL + strS),
|
||||
err: ErrInvalid,
|
||||
}, {
|
||||
in: strL + strS + strR,
|
||||
dir: bidi.RightToLeft,
|
||||
n: len(strL + strS),
|
||||
err: ErrInvalid,
|
||||
}, {
|
||||
in: strL + strWS,
|
||||
dir: bidi.LeftToRight,
|
||||
n: len(strL + strWS),
|
||||
err: ErrInvalid,
|
||||
}, {
|
||||
in: strL + strWS + strR,
|
||||
dir: bidi.RightToLeft,
|
||||
n: len(strL + strWS),
|
||||
err: ErrInvalid,
|
||||
}},
|
||||
|
||||
// Incremental processing.
|
||||
9: []ruleTest{{
|
||||
in: "e\u0301", // é
|
||||
dir: bidi.LeftToRight,
|
||||
|
||||
pSrc: 2,
|
||||
nSrc: 1,
|
||||
err0: transform.ErrShortSrc,
|
||||
}, {
|
||||
in: "e\u1000f", // é
|
||||
dir: bidi.LeftToRight,
|
||||
|
||||
pSrc: 3,
|
||||
nSrc: 1,
|
||||
err0: transform.ErrShortSrc,
|
||||
}, {
|
||||
// Remain invalid once invalid.
|
||||
in: strR + "ab",
|
||||
dir: bidi.RightToLeft,
|
||||
n: len(strR),
|
||||
err: ErrInvalid,
|
||||
|
||||
pSrc: len(strR) + 1,
|
||||
nSrc: len(strR),
|
||||
err0: ErrInvalid,
|
||||
}, {
|
||||
// Short destination
|
||||
in: "abcdefghij",
|
||||
dir: bidi.LeftToRight,
|
||||
|
||||
pSrc: 10,
|
||||
szDst: 5,
|
||||
nSrc: 5,
|
||||
err0: transform.ErrShortDst,
|
||||
}, {
|
||||
in: "\U000102f7",
|
||||
dir: bidi.LeftToRight,
|
||||
n: len("\U000102f7"),
|
||||
err: ErrInvalid,
|
||||
}, {
|
||||
// Short destination splitting input rune
|
||||
in: "e\u0301",
|
||||
dir: bidi.LeftToRight,
|
||||
|
||||
pSrc: 3,
|
||||
szDst: 2,
|
||||
nSrc: 1,
|
||||
err0: transform.ErrShortDst,
|
||||
}, {
|
||||
// Unicode 10.0.0 IDNA test string.
|
||||
in: "FAX\u2a77\U0001d186",
|
||||
dir: bidi.LeftToRight,
|
||||
n: len("FAX\u2a77\U0001d186"),
|
||||
err: ErrInvalid,
|
||||
}, {
|
||||
in: "\x80\u0660",
|
||||
dir: bidi.RightToLeft,
|
||||
n: 0,
|
||||
err: ErrInvalid,
|
||||
}},
|
||||
}
|
||||
|
||||
func init() {
|
||||
for rule, cases := range testCases {
|
||||
for i, tc := range cases {
|
||||
|
|
244
vendor/golang.org/x/text/secure/precis/enforce10.0.0_test.go
generated
vendored
Normal file
244
vendor/golang.org/x/text/secure/precis/enforce10.0.0_test.go
generated
vendored
Normal file
|
@ -0,0 +1,244 @@
|
|||
// Copyright 2015 The Go Authors. All rights reserved.
|
||||
// Use of this source code is governed by a BSD-style
|
||||
// license that can be found in the LICENSE file.
|
||||
|
||||
// +build go1.10
|
||||
|
||||
package precis
|
||||
|
||||
import (
|
||||
"golang.org/x/text/secure/bidirule"
|
||||
)
|
||||
|
||||
var enforceTestCases = []struct {
|
||||
name string
|
||||
p *Profile
|
||||
cases []testCase
|
||||
}{
|
||||
{"Basic", NewFreeform(), []testCase{
|
||||
{"e\u0301\u031f", "\u00e9\u031f", nil}, // normalize
|
||||
}},
|
||||
|
||||
{"Context Rule 1", NewFreeform(), []testCase{
|
||||
// Rule 1: zero-width non-joiner (U+200C)
|
||||
// From RFC:
|
||||
// False
|
||||
// If Canonical_Combining_Class(Before(cp)) .eq. Virama Then True;
|
||||
// If RegExpMatch((Joining_Type:{L,D})(Joining_Type:T)*\u200C
|
||||
// (Joining_Type:T)*(Joining_Type:{R,D})) Then True;
|
||||
//
|
||||
// Example runes for different joining types:
|
||||
// Join L: U+A872; PHAGS-PA SUPERFIXED LETTER RA
|
||||
// Join D: U+062C; HAH WITH DOT BELOW
|
||||
// Join T: U+0610; ARABIC SIGN SALLALLAHOU ALAYHE WASSALLAM
|
||||
// Join R: U+0627; ALEF
|
||||
// Virama: U+0A4D; GURMUKHI SIGN VIRAMA
|
||||
// Virama and Join T: U+0ACD; GUJARATI SIGN VIRAMA
|
||||
{"\u200c", "", errContext},
|
||||
{"\u200ca", "", errContext},
|
||||
{"a\u200c", "", errContext},
|
||||
{"\u200c\u0627", "", errContext}, // missing JoinStart
|
||||
{"\u062c\u200c", "", errContext}, // missing JoinEnd
|
||||
{"\u0610\u200c\u0610\u0627", "", errContext}, // missing JoinStart
|
||||
{"\u062c\u0610\u200c\u0610", "", errContext}, // missing JoinEnd
|
||||
|
||||
// Variants of: D T* U+200c T* R
|
||||
{"\u062c\u200c\u0627", "\u062c\u200c\u0627", nil},
|
||||
{"\u062c\u0610\u200c\u0610\u0627", "\u062c\u0610\u200c\u0610\u0627", nil},
|
||||
{"\u062c\u0610\u0610\u200c\u0610\u0610\u0627", "\u062c\u0610\u0610\u200c\u0610\u0610\u0627", nil},
|
||||
{"\u062c\u0610\u200c\u0627", "\u062c\u0610\u200c\u0627", nil},
|
||||
{"\u062c\u200c\u0610\u0627", "\u062c\u200c\u0610\u0627", nil},
|
||||
|
||||
// Variants of: L T* U+200c T* D
|
||||
{"\ua872\u200c\u062c", "\ua872\u200c\u062c", nil},
|
||||
{"\ua872\u0610\u200c\u0610\u062c", "\ua872\u0610\u200c\u0610\u062c", nil},
|
||||
{"\ua872\u0610\u0610\u200c\u0610\u0610\u062c", "\ua872\u0610\u0610\u200c\u0610\u0610\u062c", nil},
|
||||
{"\ua872\u0610\u200c\u062c", "\ua872\u0610\u200c\u062c", nil},
|
||||
{"\ua872\u200c\u0610\u062c", "\ua872\u200c\u0610\u062c", nil},
|
||||
|
||||
// Virama
|
||||
{"\u0a4d\u200c", "\u0a4d\u200c", nil},
|
||||
{"\ua872\u0a4d\u200c", "\ua872\u0a4d\u200c", nil},
|
||||
{"\ua872\u0a4d\u0610\u200c", "", errContext},
|
||||
{"\ua872\u0a4d\u0610\u200c", "", errContext},
|
||||
|
||||
{"\u0acd\u200c", "\u0acd\u200c", nil},
|
||||
{"\ua872\u0acd\u200c", "\ua872\u0acd\u200c", nil},
|
||||
{"\ua872\u0acd\u0610\u200c", "", errContext},
|
||||
{"\ua872\u0acd\u0610\u200c", "", errContext},
|
||||
|
||||
// Using Virama as join T
|
||||
{"\ua872\u0acd\u200c\u062c", "\ua872\u0acd\u200c\u062c", nil},
|
||||
{"\ua872\u200c\u0acd\u062c", "\ua872\u200c\u0acd\u062c", nil},
|
||||
}},
|
||||
|
||||
{"Context Rule 2", NewFreeform(), []testCase{
|
||||
// Rule 2: zero-width joiner (U+200D)
|
||||
{"\u200d", "", errContext},
|
||||
{"\u200da", "", errContext},
|
||||
{"a\u200d", "", errContext},
|
||||
|
||||
{"\u0a4d\u200d", "\u0a4d\u200d", nil},
|
||||
{"\ua872\u0a4d\u200d", "\ua872\u0a4d\u200d", nil},
|
||||
{"\u0a4da\u200d", "", errContext},
|
||||
}},
|
||||
|
||||
{"Context Rule 3", NewFreeform(), []testCase{
|
||||
// Rule 3: middle dot
|
||||
{"·", "", errContext},
|
||||
{"l·", "", errContext},
|
||||
{"·l", "", errContext},
|
||||
{"a·", "", errContext},
|
||||
{"l·a", "", errContext},
|
||||
{"a·a", "", errContext},
|
||||
{"l·l", "l·l", nil},
|
||||
{"al·la", "al·la", nil},
|
||||
}},
|
||||
|
||||
{"Context Rule 4", NewFreeform(), []testCase{
|
||||
// Rule 4: Greek lower numeral U+0375
|
||||
{"͵", "", errContext},
|
||||
{"͵a", "", errContext},
|
||||
{"α͵", "", errContext},
|
||||
{"͵α", "͵α", nil},
|
||||
{"α͵α", "α͵α", nil},
|
||||
{"͵͵α", "͵͵α", nil}, // The numeric sign is itself Greek.
|
||||
{"α͵͵α", "α͵͵α", nil},
|
||||
{"α͵͵", "", errContext},
|
||||
{"α͵͵a", "", errContext},
|
||||
}},
|
||||
|
||||
{"Context Rule 5+6", NewFreeform(), []testCase{
|
||||
// Rule 5+6: Hebrew preceding
|
||||
// U+05f3: Geresh
|
||||
{"׳", "", errContext},
|
||||
{"׳ה", "", errContext},
|
||||
{"a׳b", "", errContext},
|
||||
{"ש׳", "ש׳", nil}, // U+05e9 U+05f3
|
||||
{"ש׳׳׳", "ש׳׳׳", nil}, // U+05e9 U+05f3
|
||||
|
||||
// U+05f4: Gershayim
|
||||
{"״", "", errContext},
|
||||
{"״ה", "", errContext},
|
||||
{"a״b", "", errContext},
|
||||
{"ש״", "ש״", nil}, // U+05e9 U+05f4
|
||||
{"ש״״״", "ש״״״", nil}, // U+05e9 U+05f4
|
||||
{"aש״״״", "aש״״״", nil}, // U+05e9 U+05f4
|
||||
}},
|
||||
|
||||
{"Context Rule 7", NewFreeform(), []testCase{
|
||||
// Rule 7: Katakana middle Dot
|
||||
{"・", "", errContext},
|
||||
{"abc・", "", errContext},
|
||||
{"・def", "", errContext},
|
||||
{"abc・def", "", errContext},
|
||||
{"aヅc・def", "aヅc・def", nil},
|
||||
{"abc・dぶf", "abc・dぶf", nil},
|
||||
{"⺐bc・def", "⺐bc・def", nil},
|
||||
}},
|
||||
|
||||
{"Context Rule 8+9", NewFreeform(), []testCase{
|
||||
// Rule 8+9: Arabic Indic Digit
|
||||
{"١٢٣٤٥۶", "", errContext},
|
||||
{"۱۲۳۴۵٦", "", errContext},
|
||||
{"١٢٣٤٥", "١٢٣٤٥", nil},
|
||||
{"۱۲۳۴۵", "۱۲۳۴۵", nil},
|
||||
}},
|
||||
|
||||
{"Nickname", Nickname, []testCase{
|
||||
{" Swan of Avon ", "Swan of Avon", nil},
|
||||
{"", "", errEmptyString},
|
||||
{" ", "", errEmptyString},
|
||||
{" ", "", errEmptyString},
|
||||
{"a\u00A0a\u1680a\u2000a\u2001a\u2002a\u2003a\u2004a\u2005a\u2006a\u2007a\u2008a\u2009a\u200Aa\u202Fa\u205Fa\u3000a", "a a a a a a a a a a a a a a a a a", nil},
|
||||
{"Foo", "Foo", nil},
|
||||
{"foo", "foo", nil},
|
||||
{"Foo Bar", "Foo Bar", nil},
|
||||
{"foo bar", "foo bar", nil},
|
||||
{"\u03A3", "\u03A3", nil},
|
||||
{"\u03C3", "\u03C3", nil},
|
||||
// Greek final sigma is left as is (do not fold!)
|
||||
{"\u03C2", "\u03C2", nil},
|
||||
{"\u265A", "♚", nil},
|
||||
{"Richard \u2163", "Richard IV", nil},
|
||||
{"\u212B", "Å", nil},
|
||||
{"\uFB00", "ff", nil}, // because of NFKC
|
||||
{"שa", "שa", nil}, // no bidi rule
|
||||
{"동일조건변경허락", "동일조건변경허락", nil},
|
||||
}},
|
||||
{"OpaqueString", OpaqueString, []testCase{
|
||||
{" Swan of Avon ", " Swan of Avon ", nil},
|
||||
{"", "", errEmptyString},
|
||||
{" ", " ", nil},
|
||||
{" ", " ", nil},
|
||||
{"a\u00A0a\u1680a\u2000a\u2001a\u2002a\u2003a\u2004a\u2005a\u2006a\u2007a\u2008a\u2009a\u200Aa\u202Fa\u205Fa\u3000a", "a a a a a a a a a a a a a a a a a", nil},
|
||||
{"Foo", "Foo", nil},
|
||||
{"foo", "foo", nil},
|
||||
{"Foo Bar", "Foo Bar", nil},
|
||||
{"foo bar", "foo bar", nil},
|
||||
{"\u03C3", "\u03C3", nil},
|
||||
{"Richard \u2163", "Richard \u2163", nil},
|
||||
{"\u212B", "Å", nil},
|
||||
{"Jack of \u2666s", "Jack of \u2666s", nil},
|
||||
{"my cat is a \u0009by", "", errDisallowedRune},
|
||||
{"שa", "שa", nil}, // no bidi rule
|
||||
}},
|
||||
{"UsernameCaseMapped", UsernameCaseMapped, []testCase{
|
||||
// TODO: Should this work?
|
||||
// {UsernameCaseMapped, "", "", errDisallowedRune},
|
||||
{"juliet@example.com", "juliet@example.com", nil},
|
||||
{"fussball", "fussball", nil},
|
||||
{"fu\u00DFball", "fu\u00DFball", nil},
|
||||
{"\u03C0", "\u03C0", nil},
|
||||
{"\u03A3", "\u03C3", nil},
|
||||
{"\u03C3", "\u03C3", nil},
|
||||
// Greek final sigma is left as is (do not fold!)
|
||||
{"\u03C2", "\u03C2", nil},
|
||||
{"\u0049", "\u0069", nil},
|
||||
{"\u0049", "\u0069", nil},
|
||||
{"\u03D2", "", errDisallowedRune},
|
||||
{"\u03B0", "\u03B0", nil},
|
||||
{"foo bar", "", errDisallowedRune},
|
||||
{"♚", "", bidirule.ErrInvalid},
|
||||
{"\u007E", "~", nil},
|
||||
{"a", "a", nil},
|
||||
{"!", "!", nil},
|
||||
{"²", "", bidirule.ErrInvalid},
|
||||
{"\t", "", errDisallowedRune},
|
||||
{"\n", "", errDisallowedRune},
|
||||
{"\u26D6", "", bidirule.ErrInvalid},
|
||||
{"\u26FF", "", bidirule.ErrInvalid},
|
||||
{"\uFB00", "", errDisallowedRune},
|
||||
{"\u1680", "", bidirule.ErrInvalid},
|
||||
{" ", "", errDisallowedRune},
|
||||
{" ", "", errDisallowedRune},
|
||||
{"\u01C5", "", errDisallowedRune},
|
||||
{"\u16EE", "", errDisallowedRune}, // Nl RUNIC ARLAUG SYMBOL
|
||||
{"\u0488", "", bidirule.ErrInvalid}, // Me COMBINING CYRILLIC HUNDRED THOUSANDS SIGN
|
||||
{"\u212B", "\u00e5", nil}, // Angstrom sign, NFC -> U+00E5
|
||||
{"A\u030A", "å", nil}, // A + ring
|
||||
{"\u00C5", "å", nil}, // A with ring
|
||||
{"\u00E7", "ç", nil}, // c cedille
|
||||
{"\u0063\u0327", "ç", nil}, // c + cedille
|
||||
{"\u0158", "ř", nil},
|
||||
{"\u0052\u030C", "ř", nil},
|
||||
|
||||
{"\u1E61", "\u1E61", nil}, // LATIN SMALL LETTER S WITH DOT ABOVE
|
||||
|
||||
// Confusable characters ARE allowed and should NOT be mapped.
|
||||
{"\u0410", "\u0430", nil}, // CYRILLIC CAPITAL LETTER A
|
||||
|
||||
// Full width should be mapped to the canonical decomposition.
|
||||
{"AB", "ab", nil},
|
||||
{"שc", "", bidirule.ErrInvalid}, // bidi rule
|
||||
|
||||
}},
|
||||
{"UsernameCasePreserved", UsernameCasePreserved, []testCase{
|
||||
{"ABC", "ABC", nil},
|
||||
{"AB", "AB", nil},
|
||||
{"שc", "", bidirule.ErrInvalid}, // bidi rule
|
||||
{"\uFB00", "", errDisallowedRune},
|
||||
{"\u212B", "\u00c5", nil}, // Angstrom sign, NFC -> U+00E5
|
||||
{"ẛ", "", errDisallowedRune}, // LATIN SMALL LETTER LONG S WITH DOT ABOVE
|
||||
}},
|
||||
}
|
244
vendor/golang.org/x/text/secure/precis/enforce9.0.0_test.go
generated
vendored
Normal file
244
vendor/golang.org/x/text/secure/precis/enforce9.0.0_test.go
generated
vendored
Normal file
|
@ -0,0 +1,244 @@
|
|||
// Copyright 2015 The Go Authors. All rights reserved.
|
||||
// Use of this source code is governed by a BSD-style
|
||||
// license that can be found in the LICENSE file.
|
||||
|
||||
// +build !go1.10
|
||||
|
||||
package precis
|
||||
|
||||
import (
|
||||
"golang.org/x/text/secure/bidirule"
|
||||
)
|
||||
|
||||
var enforceTestCases = []struct {
|
||||
name string
|
||||
p *Profile
|
||||
cases []testCase
|
||||
}{
|
||||
{"Basic", NewFreeform(), []testCase{
|
||||
{"e\u0301\u031f", "\u00e9\u031f", nil}, // normalize
|
||||
}},
|
||||
|
||||
{"Context Rule 1", NewFreeform(), []testCase{
|
||||
// Rule 1: zero-width non-joiner (U+200C)
|
||||
// From RFC:
|
||||
// False
|
||||
// If Canonical_Combining_Class(Before(cp)) .eq. Virama Then True;
|
||||
// If RegExpMatch((Joining_Type:{L,D})(Joining_Type:T)*\u200C
|
||||
// (Joining_Type:T)*(Joining_Type:{R,D})) Then True;
|
||||
//
|
||||
// Example runes for different joining types:
|
||||
// Join L: U+A872; PHAGS-PA SUPERFIXED LETTER RA
|
||||
// Join D: U+062C; HAH WITH DOT BELOW
|
||||
// Join T: U+0610; ARABIC SIGN SALLALLAHOU ALAYHE WASSALLAM
|
||||
// Join R: U+0627; ALEF
|
||||
// Virama: U+0A4D; GURMUKHI SIGN VIRAMA
|
||||
// Virama and Join T: U+0ACD; GUJARATI SIGN VIRAMA
|
||||
{"\u200c", "", errContext},
|
||||
{"\u200ca", "", errContext},
|
||||
{"a\u200c", "", errContext},
|
||||
{"\u200c\u0627", "", errContext}, // missing JoinStart
|
||||
{"\u062c\u200c", "", errContext}, // missing JoinEnd
|
||||
{"\u0610\u200c\u0610\u0627", "", errContext}, // missing JoinStart
|
||||
{"\u062c\u0610\u200c\u0610", "", errContext}, // missing JoinEnd
|
||||
|
||||
// Variants of: D T* U+200c T* R
|
||||
{"\u062c\u200c\u0627", "\u062c\u200c\u0627", nil},
|
||||
{"\u062c\u0610\u200c\u0610\u0627", "\u062c\u0610\u200c\u0610\u0627", nil},
|
||||
{"\u062c\u0610\u0610\u200c\u0610\u0610\u0627", "\u062c\u0610\u0610\u200c\u0610\u0610\u0627", nil},
|
||||
{"\u062c\u0610\u200c\u0627", "\u062c\u0610\u200c\u0627", nil},
|
||||
{"\u062c\u200c\u0610\u0627", "\u062c\u200c\u0610\u0627", nil},
|
||||
|
||||
// Variants of: L T* U+200c T* D
|
||||
{"\ua872\u200c\u062c", "\ua872\u200c\u062c", nil},
|
||||
{"\ua872\u0610\u200c\u0610\u062c", "\ua872\u0610\u200c\u0610\u062c", nil},
|
||||
{"\ua872\u0610\u0610\u200c\u0610\u0610\u062c", "\ua872\u0610\u0610\u200c\u0610\u0610\u062c", nil},
|
||||
{"\ua872\u0610\u200c\u062c", "\ua872\u0610\u200c\u062c", nil},
|
||||
{"\ua872\u200c\u0610\u062c", "\ua872\u200c\u0610\u062c", nil},
|
||||
|
||||
// Virama
|
||||
{"\u0a4d\u200c", "\u0a4d\u200c", nil},
|
||||
{"\ua872\u0a4d\u200c", "\ua872\u0a4d\u200c", nil},
|
||||
{"\ua872\u0a4d\u0610\u200c", "", errContext},
|
||||
{"\ua872\u0a4d\u0610\u200c", "", errContext},
|
||||
|
||||
{"\u0acd\u200c", "\u0acd\u200c", nil},
|
||||
{"\ua872\u0acd\u200c", "\ua872\u0acd\u200c", nil},
|
||||
{"\ua872\u0acd\u0610\u200c", "", errContext},
|
||||
{"\ua872\u0acd\u0610\u200c", "", errContext},
|
||||
|
||||
// Using Virama as join T
|
||||
{"\ua872\u0acd\u200c\u062c", "\ua872\u0acd\u200c\u062c", nil},
|
||||
{"\ua872\u200c\u0acd\u062c", "\ua872\u200c\u0acd\u062c", nil},
|
||||
}},
|
||||
|
||||
{"Context Rule 2", NewFreeform(), []testCase{
|
||||
// Rule 2: zero-width joiner (U+200D)
|
||||
{"\u200d", "", errContext},
|
||||
{"\u200da", "", errContext},
|
||||
{"a\u200d", "", errContext},
|
||||
|
||||
{"\u0a4d\u200d", "\u0a4d\u200d", nil},
|
||||
{"\ua872\u0a4d\u200d", "\ua872\u0a4d\u200d", nil},
|
||||
{"\u0a4da\u200d", "", errContext},
|
||||
}},
|
||||
|
||||
{"Context Rule 3", NewFreeform(), []testCase{
|
||||
// Rule 3: middle dot
|
||||
{"·", "", errContext},
|
||||
{"l·", "", errContext},
|
||||
{"·l", "", errContext},
|
||||
{"a·", "", errContext},
|
||||
{"l·a", "", errContext},
|
||||
{"a·a", "", errContext},
|
||||
{"l·l", "l·l", nil},
|
||||
{"al·la", "al·la", nil},
|
||||
}},
|
||||
|
||||
{"Context Rule 4", NewFreeform(), []testCase{
|
||||
// Rule 4: Greek lower numeral U+0375
|
||||
{"͵", "", errContext},
|
||||
{"͵a", "", errContext},
|
||||
{"α͵", "", errContext},
|
||||
{"͵α", "͵α", nil},
|
||||
{"α͵α", "α͵α", nil},
|
||||
{"͵͵α", "͵͵α", nil}, // The numeric sign is itself Greek.
|
||||
{"α͵͵α", "α͵͵α", nil},
|
||||
{"α͵͵", "", errContext},
|
||||
{"α͵͵a", "", errContext},
|
||||
}},
|
||||
|
||||
{"Context Rule 5+6", NewFreeform(), []testCase{
|
||||
// Rule 5+6: Hebrew preceding
|
||||
// U+05f3: Geresh
|
||||
{"׳", "", errContext},
|
||||
{"׳ה", "", errContext},
|
||||
{"a׳b", "", errContext},
|
||||
{"ש׳", "ש׳", nil}, // U+05e9 U+05f3
|
||||
{"ש׳׳׳", "ש׳׳׳", nil}, // U+05e9 U+05f3
|
||||
|
||||
// U+05f4: Gershayim
|
||||
{"״", "", errContext},
|
||||
{"״ה", "", errContext},
|
||||
{"a״b", "", errContext},
|
||||
{"ש״", "ש״", nil}, // U+05e9 U+05f4
|
||||
{"ש״״״", "ש״״״", nil}, // U+05e9 U+05f4
|
||||
{"aש״״״", "aש״״״", nil}, // U+05e9 U+05f4
|
||||
}},
|
||||
|
||||
{"Context Rule 7", NewFreeform(), []testCase{
|
||||
// Rule 7: Katakana middle Dot
|
||||
{"・", "", errContext},
|
||||
{"abc・", "", errContext},
|
||||
{"・def", "", errContext},
|
||||
{"abc・def", "", errContext},
|
||||
{"aヅc・def", "aヅc・def", nil},
|
||||
{"abc・dぶf", "abc・dぶf", nil},
|
||||
{"⺐bc・def", "⺐bc・def", nil},
|
||||
}},
|
||||
|
||||
{"Context Rule 8+9", NewFreeform(), []testCase{
|
||||
// Rule 8+9: Arabic Indic Digit
|
||||
{"١٢٣٤٥۶", "", errContext},
|
||||
{"۱۲۳۴۵٦", "", errContext},
|
||||
{"١٢٣٤٥", "١٢٣٤٥", nil},
|
||||
{"۱۲۳۴۵", "۱۲۳۴۵", nil},
|
||||
}},
|
||||
|
||||
{"Nickname", Nickname, []testCase{
|
||||
{" Swan of Avon ", "Swan of Avon", nil},
|
||||
{"", "", errEmptyString},
|
||||
{" ", "", errEmptyString},
|
||||
{" ", "", errEmptyString},
|
||||
{"a\u00A0a\u1680a\u2000a\u2001a\u2002a\u2003a\u2004a\u2005a\u2006a\u2007a\u2008a\u2009a\u200Aa\u202Fa\u205Fa\u3000a", "a a a a a a a a a a a a a a a a a", nil},
|
||||
{"Foo", "Foo", nil},
|
||||
{"foo", "foo", nil},
|
||||
{"Foo Bar", "Foo Bar", nil},
|
||||
{"foo bar", "foo bar", nil},
|
||||
{"\u03A3", "\u03A3", nil},
|
||||
{"\u03C3", "\u03C3", nil},
|
||||
// Greek final sigma is left as is (do not fold!)
|
||||
{"\u03C2", "\u03C2", nil},
|
||||
{"\u265A", "♚", nil},
|
||||
{"Richard \u2163", "Richard IV", nil},
|
||||
{"\u212B", "Å", nil},
|
||||
{"\uFB00", "ff", nil}, // because of NFKC
|
||||
{"שa", "שa", nil}, // no bidi rule
|
||||
{"동일조건변경허락", "동일조건변경허락", nil},
|
||||
}},
|
||||
{"OpaqueString", OpaqueString, []testCase{
|
||||
{" Swan of Avon ", " Swan of Avon ", nil},
|
||||
{"", "", errEmptyString},
|
||||
{" ", " ", nil},
|
||||
{" ", " ", nil},
|
||||
{"a\u00A0a\u1680a\u2000a\u2001a\u2002a\u2003a\u2004a\u2005a\u2006a\u2007a\u2008a\u2009a\u200Aa\u202Fa\u205Fa\u3000a", "a a a a a a a a a a a a a a a a a", nil},
|
||||
{"Foo", "Foo", nil},
|
||||
{"foo", "foo", nil},
|
||||
{"Foo Bar", "Foo Bar", nil},
|
||||
{"foo bar", "foo bar", nil},
|
||||
{"\u03C3", "\u03C3", nil},
|
||||
{"Richard \u2163", "Richard \u2163", nil},
|
||||
{"\u212B", "Å", nil},
|
||||
{"Jack of \u2666s", "Jack of \u2666s", nil},
|
||||
{"my cat is a \u0009by", "", errDisallowedRune},
|
||||
{"שa", "שa", nil}, // no bidi rule
|
||||
}},
|
||||
{"UsernameCaseMapped", UsernameCaseMapped, []testCase{
|
||||
// TODO: Should this work?
|
||||
// {UsernameCaseMapped, "", "", errDisallowedRune},
|
||||
{"juliet@example.com", "juliet@example.com", nil},
|
||||
{"fussball", "fussball", nil},
|
||||
{"fu\u00DFball", "fu\u00DFball", nil},
|
||||
{"\u03C0", "\u03C0", nil},
|
||||
{"\u03A3", "\u03C3", nil},
|
||||
{"\u03C3", "\u03C3", nil},
|
||||
// Greek final sigma is left as is (do not fold!)
|
||||
{"\u03C2", "\u03C2", nil},
|
||||
{"\u0049", "\u0069", nil},
|
||||
{"\u0049", "\u0069", nil},
|
||||
{"\u03D2", "", errDisallowedRune},
|
||||
{"\u03B0", "\u03B0", nil},
|
||||
{"foo bar", "", errDisallowedRune},
|
||||
{"♚", "", errDisallowedRune},
|
||||
{"\u007E", "~", nil},
|
||||
{"a", "a", nil},
|
||||
{"!", "!", nil},
|
||||
{"²", "", errDisallowedRune},
|
||||
{"\t", "", errDisallowedRune},
|
||||
{"\n", "", errDisallowedRune},
|
||||
{"\u26D6", "", errDisallowedRune},
|
||||
{"\u26FF", "", errDisallowedRune},
|
||||
{"\uFB00", "", errDisallowedRune},
|
||||
{"\u1680", "", errDisallowedRune},
|
||||
{" ", "", errDisallowedRune},
|
||||
{" ", "", errDisallowedRune},
|
||||
{"\u01C5", "", errDisallowedRune},
|
||||
{"\u16EE", "", errDisallowedRune}, // Nl RUNIC ARLAUG SYMBOL
|
||||
{"\u0488", "", errDisallowedRune}, // Me COMBINING CYRILLIC HUNDRED THOUSANDS SIGN
|
||||
{"\u212B", "\u00e5", nil}, // Angstrom sign, NFC -> U+00E5
|
||||
{"A\u030A", "å", nil}, // A + ring
|
||||
{"\u00C5", "å", nil}, // A with ring
|
||||
{"\u00E7", "ç", nil}, // c cedille
|
||||
{"\u0063\u0327", "ç", nil}, // c + cedille
|
||||
{"\u0158", "ř", nil},
|
||||
{"\u0052\u030C", "ř", nil},
|
||||
|
||||
{"\u1E61", "\u1E61", nil}, // LATIN SMALL LETTER S WITH DOT ABOVE
|
||||
|
||||
// Confusable characters ARE allowed and should NOT be mapped.
|
||||
{"\u0410", "\u0430", nil}, // CYRILLIC CAPITAL LETTER A
|
||||
|
||||
// Full width should be mapped to the canonical decomposition.
|
||||
{"AB", "ab", nil},
|
||||
{"שc", "", bidirule.ErrInvalid}, // bidi rule
|
||||
|
||||
}},
|
||||
{"UsernameCasePreserved", UsernameCasePreserved, []testCase{
|
||||
{"ABC", "ABC", nil},
|
||||
{"AB", "AB", nil},
|
||||
{"שc", "", bidirule.ErrInvalid}, // bidi rule
|
||||
{"\uFB00", "", errDisallowedRune},
|
||||
{"\u212B", "\u00c5", nil}, // Angstrom sign, NFC -> U+00E5
|
||||
{"ẛ", "", errDisallowedRune}, // LATIN SMALL LETTER LONG S WITH DOT ABOVE
|
||||
}},
|
||||
}
|
234
vendor/golang.org/x/text/secure/precis/enforce_test.go
generated
vendored
234
vendor/golang.org/x/text/secure/precis/enforce_test.go
generated
vendored
|
@ -11,7 +11,6 @@ import (
|
|||
"testing"
|
||||
|
||||
"golang.org/x/text/internal/testtext"
|
||||
"golang.org/x/text/secure/bidirule"
|
||||
"golang.org/x/text/transform"
|
||||
)
|
||||
|
||||
|
@ -21,239 +20,6 @@ type testCase struct {
|
|||
err error
|
||||
}
|
||||
|
||||
var enforceTestCases = []struct {
|
||||
name string
|
||||
p *Profile
|
||||
cases []testCase
|
||||
}{
|
||||
{"Basic", NewFreeform(), []testCase{
|
||||
{"e\u0301\u031f", "\u00e9\u031f", nil}, // normalize
|
||||
}},
|
||||
|
||||
{"Context Rule 1", NewFreeform(), []testCase{
|
||||
// Rule 1: zero-width non-joiner (U+200C)
|
||||
// From RFC:
|
||||
// False
|
||||
// If Canonical_Combining_Class(Before(cp)) .eq. Virama Then True;
|
||||
// If RegExpMatch((Joining_Type:{L,D})(Joining_Type:T)*\u200C
|
||||
// (Joining_Type:T)*(Joining_Type:{R,D})) Then True;
|
||||
//
|
||||
// Example runes for different joining types:
|
||||
// Join L: U+A872; PHAGS-PA SUPERFIXED LETTER RA
|
||||
// Join D: U+062C; HAH WITH DOT BELOW
|
||||
// Join T: U+0610; ARABIC SIGN SALLALLAHOU ALAYHE WASSALLAM
|
||||
// Join R: U+0627; ALEF
|
||||
// Virama: U+0A4D; GURMUKHI SIGN VIRAMA
|
||||
// Virama and Join T: U+0ACD; GUJARATI SIGN VIRAMA
|
||||
{"\u200c", "", errContext},
|
||||
{"\u200ca", "", errContext},
|
||||
{"a\u200c", "", errContext},
|
||||
{"\u200c\u0627", "", errContext}, // missing JoinStart
|
||||
{"\u062c\u200c", "", errContext}, // missing JoinEnd
|
||||
{"\u0610\u200c\u0610\u0627", "", errContext}, // missing JoinStart
|
||||
{"\u062c\u0610\u200c\u0610", "", errContext}, // missing JoinEnd
|
||||
|
||||
// Variants of: D T* U+200c T* R
|
||||
{"\u062c\u200c\u0627", "\u062c\u200c\u0627", nil},
|
||||
{"\u062c\u0610\u200c\u0610\u0627", "\u062c\u0610\u200c\u0610\u0627", nil},
|
||||
{"\u062c\u0610\u0610\u200c\u0610\u0610\u0627", "\u062c\u0610\u0610\u200c\u0610\u0610\u0627", nil},
|
||||
{"\u062c\u0610\u200c\u0627", "\u062c\u0610\u200c\u0627", nil},
|
||||
{"\u062c\u200c\u0610\u0627", "\u062c\u200c\u0610\u0627", nil},
|
||||
|
||||
// Variants of: L T* U+200c T* D
|
||||
{"\ua872\u200c\u062c", "\ua872\u200c\u062c", nil},
|
||||
{"\ua872\u0610\u200c\u0610\u062c", "\ua872\u0610\u200c\u0610\u062c", nil},
|
||||
{"\ua872\u0610\u0610\u200c\u0610\u0610\u062c", "\ua872\u0610\u0610\u200c\u0610\u0610\u062c", nil},
|
||||
{"\ua872\u0610\u200c\u062c", "\ua872\u0610\u200c\u062c", nil},
|
||||
{"\ua872\u200c\u0610\u062c", "\ua872\u200c\u0610\u062c", nil},
|
||||
|
||||
// Virama
|
||||
{"\u0a4d\u200c", "\u0a4d\u200c", nil},
|
||||
{"\ua872\u0a4d\u200c", "\ua872\u0a4d\u200c", nil},
|
||||
{"\ua872\u0a4d\u0610\u200c", "", errContext},
|
||||
{"\ua872\u0a4d\u0610\u200c", "", errContext},
|
||||
|
||||
{"\u0acd\u200c", "\u0acd\u200c", nil},
|
||||
{"\ua872\u0acd\u200c", "\ua872\u0acd\u200c", nil},
|
||||
{"\ua872\u0acd\u0610\u200c", "", errContext},
|
||||
{"\ua872\u0acd\u0610\u200c", "", errContext},
|
||||
|
||||
// Using Virama as join T
|
||||
{"\ua872\u0acd\u200c\u062c", "\ua872\u0acd\u200c\u062c", nil},
|
||||
{"\ua872\u200c\u0acd\u062c", "\ua872\u200c\u0acd\u062c", nil},
|
||||
}},
|
||||
|
||||
{"Context Rule 2", NewFreeform(), []testCase{
|
||||
// Rule 2: zero-width joiner (U+200D)
|
||||
{"\u200d", "", errContext},
|
||||
{"\u200da", "", errContext},
|
||||
{"a\u200d", "", errContext},
|
||||
|
||||
{"\u0a4d\u200d", "\u0a4d\u200d", nil},
|
||||
{"\ua872\u0a4d\u200d", "\ua872\u0a4d\u200d", nil},
|
||||
{"\u0a4da\u200d", "", errContext},
|
||||
}},
|
||||
|
||||
{"Context Rule 3", NewFreeform(), []testCase{
|
||||
// Rule 3: middle dot
|
||||
{"·", "", errContext},
|
||||
{"l·", "", errContext},
|
||||
{"·l", "", errContext},
|
||||
{"a·", "", errContext},
|
||||
{"l·a", "", errContext},
|
||||
{"a·a", "", errContext},
|
||||
{"l·l", "l·l", nil},
|
||||
{"al·la", "al·la", nil},
|
||||
}},
|
||||
|
||||
{"Context Rule 4", NewFreeform(), []testCase{
|
||||
// Rule 4: Greek lower numeral U+0375
|
||||
{"͵", "", errContext},
|
||||
{"͵a", "", errContext},
|
||||
{"α͵", "", errContext},
|
||||
{"͵α", "͵α", nil},
|
||||
{"α͵α", "α͵α", nil},
|
||||
{"͵͵α", "͵͵α", nil}, // The numeric sign is itself Greek.
|
||||
{"α͵͵α", "α͵͵α", nil},
|
||||
{"α͵͵", "", errContext},
|
||||
{"α͵͵a", "", errContext},
|
||||
}},
|
||||
|
||||
{"Context Rule 5+6", NewFreeform(), []testCase{
|
||||
// Rule 5+6: Hebrew preceding
|
||||
// U+05f3: Geresh
|
||||
{"׳", "", errContext},
|
||||
{"׳ה", "", errContext},
|
||||
{"a׳b", "", errContext},
|
||||
{"ש׳", "ש׳", nil}, // U+05e9 U+05f3
|
||||
{"ש׳׳׳", "ש׳׳׳", nil}, // U+05e9 U+05f3
|
||||
|
||||
// U+05f4: Gershayim
|
||||
{"״", "", errContext},
|
||||
{"״ה", "", errContext},
|
||||
{"a״b", "", errContext},
|
||||
{"ש״", "ש״", nil}, // U+05e9 U+05f4
|
||||
{"ש״״״", "ש״״״", nil}, // U+05e9 U+05f4
|
||||
{"aש״״״", "aש״״״", nil}, // U+05e9 U+05f4
|
||||
}},
|
||||
|
||||
{"Context Rule 7", NewFreeform(), []testCase{
|
||||
// Rule 7: Katakana middle Dot
|
||||
{"・", "", errContext},
|
||||
{"abc・", "", errContext},
|
||||
{"・def", "", errContext},
|
||||
{"abc・def", "", errContext},
|
||||
{"aヅc・def", "aヅc・def", nil},
|
||||
{"abc・dぶf", "abc・dぶf", nil},
|
||||
{"⺐bc・def", "⺐bc・def", nil},
|
||||
}},
|
||||
|
||||
{"Context Rule 8+9", NewFreeform(), []testCase{
|
||||
// Rule 8+9: Arabic Indic Digit
|
||||
{"١٢٣٤٥۶", "", errContext},
|
||||
{"۱۲۳۴۵٦", "", errContext},
|
||||
{"١٢٣٤٥", "١٢٣٤٥", nil},
|
||||
{"۱۲۳۴۵", "۱۲۳۴۵", nil},
|
||||
}},
|
||||
|
||||
{"Nickname", Nickname, []testCase{
|
||||
{" Swan of Avon ", "Swan of Avon", nil},
|
||||
{"", "", errEmptyString},
|
||||
{" ", "", errEmptyString},
|
||||
{" ", "", errEmptyString},
|
||||
{"a\u00A0a\u1680a\u2000a\u2001a\u2002a\u2003a\u2004a\u2005a\u2006a\u2007a\u2008a\u2009a\u200Aa\u202Fa\u205Fa\u3000a", "a a a a a a a a a a a a a a a a a", nil},
|
||||
{"Foo", "Foo", nil},
|
||||
{"foo", "foo", nil},
|
||||
{"Foo Bar", "Foo Bar", nil},
|
||||
{"foo bar", "foo bar", nil},
|
||||
{"\u03A3", "\u03A3", nil},
|
||||
{"\u03C3", "\u03C3", nil},
|
||||
// Greek final sigma is left as is (do not fold!)
|
||||
{"\u03C2", "\u03C2", nil},
|
||||
{"\u265A", "♚", nil},
|
||||
{"Richard \u2163", "Richard IV", nil},
|
||||
{"\u212B", "Å", nil},
|
||||
{"\uFB00", "ff", nil}, // because of NFKC
|
||||
{"שa", "שa", nil}, // no bidi rule
|
||||
{"동일조건변경허락", "동일조건변경허락", nil},
|
||||
}},
|
||||
{"OpaqueString", OpaqueString, []testCase{
|
||||
{" Swan of Avon ", " Swan of Avon ", nil},
|
||||
{"", "", errEmptyString},
|
||||
{" ", " ", nil},
|
||||
{" ", " ", nil},
|
||||
{"a\u00A0a\u1680a\u2000a\u2001a\u2002a\u2003a\u2004a\u2005a\u2006a\u2007a\u2008a\u2009a\u200Aa\u202Fa\u205Fa\u3000a", "a a a a a a a a a a a a a a a a a", nil},
|
||||
{"Foo", "Foo", nil},
|
||||
{"foo", "foo", nil},
|
||||
{"Foo Bar", "Foo Bar", nil},
|
||||
{"foo bar", "foo bar", nil},
|
||||
{"\u03C3", "\u03C3", nil},
|
||||
{"Richard \u2163", "Richard \u2163", nil},
|
||||
{"\u212B", "Å", nil},
|
||||
{"Jack of \u2666s", "Jack of \u2666s", nil},
|
||||
{"my cat is a \u0009by", "", errDisallowedRune},
|
||||
{"שa", "שa", nil}, // no bidi rule
|
||||
}},
|
||||
{"UsernameCaseMapped", UsernameCaseMapped, []testCase{
|
||||
// TODO: Should this work?
|
||||
// {UsernameCaseMapped, "", "", errDisallowedRune},
|
||||
{"juliet@example.com", "juliet@example.com", nil},
|
||||
{"fussball", "fussball", nil},
|
||||
{"fu\u00DFball", "fu\u00DFball", nil},
|
||||
{"\u03C0", "\u03C0", nil},
|
||||
{"\u03A3", "\u03C3", nil},
|
||||
{"\u03C3", "\u03C3", nil},
|
||||
// Greek final sigma is left as is (do not fold!)
|
||||
{"\u03C2", "\u03C2", nil},
|
||||
{"\u0049", "\u0069", nil},
|
||||
{"\u0049", "\u0069", nil},
|
||||
{"\u03D2", "", errDisallowedRune},
|
||||
{"\u03B0", "\u03B0", nil},
|
||||
{"foo bar", "", errDisallowedRune},
|
||||
{"♚", "", bidirule.ErrInvalid},
|
||||
{"\u007E", "~", nil},
|
||||
{"a", "a", nil},
|
||||
{"!", "!", nil},
|
||||
{"²", "", bidirule.ErrInvalid},
|
||||
{"\t", "", errDisallowedRune},
|
||||
{"\n", "", errDisallowedRune},
|
||||
{"\u26D6", "", bidirule.ErrInvalid},
|
||||
{"\u26FF", "", bidirule.ErrInvalid},
|
||||
{"\uFB00", "", errDisallowedRune},
|
||||
{"\u1680", "", bidirule.ErrInvalid},
|
||||
{" ", "", errDisallowedRune},
|
||||
{" ", "", errDisallowedRune},
|
||||
{"\u01C5", "", errDisallowedRune},
|
||||
{"\u16EE", "", errDisallowedRune}, // Nl RUNIC ARLAUG SYMBOL
|
||||
{"\u0488", "", bidirule.ErrInvalid}, // Me COMBINING CYRILLIC HUNDRED THOUSANDS SIGN
|
||||
{"\u212B", "\u00e5", nil}, // Angstrom sign, NFC -> U+00E5
|
||||
{"A\u030A", "å", nil}, // A + ring
|
||||
{"\u00C5", "å", nil}, // A with ring
|
||||
{"\u00E7", "ç", nil}, // c cedille
|
||||
{"\u0063\u0327", "ç", nil}, // c + cedille
|
||||
{"\u0158", "ř", nil},
|
||||
{"\u0052\u030C", "ř", nil},
|
||||
|
||||
{"\u1E61", "\u1E61", nil}, // LATIN SMALL LETTER S WITH DOT ABOVE
|
||||
|
||||
// Confusable characters ARE allowed and should NOT be mapped.
|
||||
{"\u0410", "\u0430", nil}, // CYRILLIC CAPITAL LETTER A
|
||||
|
||||
// Full width should be mapped to the canonical decomposition.
|
||||
{"AB", "ab", nil},
|
||||
{"שc", "", bidirule.ErrInvalid}, // bidi rule
|
||||
|
||||
}},
|
||||
{"UsernameCasePreserved", UsernameCasePreserved, []testCase{
|
||||
{"ABC", "ABC", nil},
|
||||
{"AB", "AB", nil},
|
||||
{"שc", "", bidirule.ErrInvalid}, // bidi rule
|
||||
{"\uFB00", "", errDisallowedRune},
|
||||
{"\u212B", "\u00c5", nil}, // Angstrom sign, NFC -> U+00E5
|
||||
{"ẛ", "", errDisallowedRune}, // LATIN SMALL LETTER LONG S WITH DOT ABOVE
|
||||
}},
|
||||
}
|
||||
|
||||
func doTests(t *testing.T, fn func(t *testing.T, p *Profile, tc testCase)) {
|
||||
for _, g := range enforceTestCases {
|
||||
for i, tc := range g.cases {
|
||||
|
|
2
vendor/golang.org/x/text/secure/precis/gen.go
generated
vendored
2
vendor/golang.org/x/text/secure/precis/gen.go
generated
vendored
|
@ -265,7 +265,7 @@ func hasCompat(r rune) bool {
|
|||
func writeTables() {
|
||||
propTrie := triegen.NewTrie("derivedProperties")
|
||||
w := gen.NewCodeWriter()
|
||||
defer w.WriteGoFile(*outputFile, "precis")
|
||||
defer w.WriteVersionedGoFile(*outputFile, "precis")
|
||||
gen.WriteUnicodeVersion(w)
|
||||
|
||||
// Iterate over all the runes...
|
||||
|
|
|
@ -1,5 +1,7 @@
|
|||
// Code generated by running "go generate" in golang.org/x/text. DO NOT EDIT.
|
||||
|
||||
// +build go1.10
|
||||
|
||||
package precis
|
||||
|
||||
// UnicodeVersion is the Unicode version from which the tables in this package are derived.
|
3790
vendor/golang.org/x/text/secure/precis/tables9.0.0.go
generated
vendored
Normal file
3790
vendor/golang.org/x/text/secure/precis/tables9.0.0.go
generated
vendored
Normal file
File diff suppressed because it is too large
Load diff
Loading…
Add table
Add a link
Reference in a new issue