mirror of
https://github.com/restic/restic.git
synced 2024-09-09 04:40:07 +02:00
2b39f9f4b2
Among others, this updates minio-go, so that the new "eu-west-3" zone for AWS is supported.
115 lines
3.5 KiB
Go
115 lines
3.5 KiB
Go
// 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.
|
|
|
|
package traditionalchinese
|
|
|
|
import (
|
|
"fmt"
|
|
"io/ioutil"
|
|
"strings"
|
|
"testing"
|
|
|
|
"golang.org/x/text/encoding"
|
|
"golang.org/x/text/encoding/internal"
|
|
"golang.org/x/text/encoding/internal/enctest"
|
|
"golang.org/x/text/transform"
|
|
)
|
|
|
|
func dec(e encoding.Encoding) (dir string, t transform.Transformer, err error) {
|
|
return "Decode", e.NewDecoder(), nil
|
|
}
|
|
func enc(e encoding.Encoding) (dir string, t transform.Transformer, err error) {
|
|
return "Encode", e.NewEncoder(), internal.ErrASCIIReplacement
|
|
}
|
|
|
|
func TestNonRepertoire(t *testing.T) {
|
|
testCases := []struct {
|
|
init func(e encoding.Encoding) (string, transform.Transformer, error)
|
|
e encoding.Encoding
|
|
src, want string
|
|
}{
|
|
{dec, Big5, "\x80", "\ufffd"},
|
|
{dec, Big5, "\x81", "\ufffd"},
|
|
{dec, Big5, "\x81\x30", "\ufffd\x30"},
|
|
{dec, Big5, "\x81\x40", "\ufffd"},
|
|
{dec, Big5, "\x81\xa0", "\ufffd"},
|
|
{dec, Big5, "\xff", "\ufffd"},
|
|
|
|
{enc, Big5, "갂", ""},
|
|
{enc, Big5, "a갂", "a"},
|
|
{enc, Big5, "\u43f0갂", "\x87@"},
|
|
}
|
|
for _, tc := range testCases {
|
|
dir, tr, wantErr := tc.init(tc.e)
|
|
t.Run(fmt.Sprintf("%s/%v/%q", dir, tc.e, tc.src), func(t *testing.T) {
|
|
dst := make([]byte, 100)
|
|
src := []byte(tc.src)
|
|
for i := 0; i <= len(tc.src); i++ {
|
|
nDst, nSrc, err := tr.Transform(dst, src[:i], false)
|
|
if err != nil && err != transform.ErrShortSrc && err != wantErr {
|
|
t.Fatalf("error on first call to Transform: %v", err)
|
|
}
|
|
n, _, err := tr.Transform(dst[nDst:], src[nSrc:], true)
|
|
nDst += n
|
|
if err != wantErr {
|
|
t.Fatalf("(%q|%q): got %v; want %v", tc.src[:i], tc.src[i:], err, wantErr)
|
|
}
|
|
if got := string(dst[:nDst]); got != tc.want {
|
|
t.Errorf("(%q|%q):\ngot %q\nwant %q", tc.src[:i], tc.src[i:], got, tc.want)
|
|
}
|
|
}
|
|
})
|
|
}
|
|
}
|
|
|
|
func TestBasics(t *testing.T) {
|
|
// The encoded forms can be verified by the iconv program:
|
|
// $ echo 月日は百代 | iconv -f UTF-8 -t SHIFT-JIS | xxd
|
|
testCases := []struct {
|
|
e encoding.Encoding
|
|
encPrefix string
|
|
encSuffix string
|
|
encoded string
|
|
utf8 string
|
|
}{{
|
|
e: Big5,
|
|
encoded: "A\x87\x40\x87\x41\x87\x45\xa1\x40\xfe\xfd\xfe\xfeZ\xa3\xe1",
|
|
utf8: "A\u43f0\u4c32\U00027267\u3000\U0002910d\u79d4Z€",
|
|
}, {
|
|
e: Big5,
|
|
encoded: "\xaa\xe1\xb6\xa1\xa4\x40\xb3\xfd\xb0\x73\xa1\x41\xbf\x57\xb0\x75" +
|
|
"\xb5\x4c\xac\xdb\xbf\xcb\xa1\x43",
|
|
utf8: "花間一壺酒,獨酌無相親。",
|
|
}}
|
|
|
|
for _, tc := range testCases {
|
|
enctest.TestEncoding(t, tc.e, tc.encoded, tc.utf8, "", "")
|
|
}
|
|
}
|
|
|
|
func TestFiles(t *testing.T) { enctest.TestFile(t, Big5) }
|
|
|
|
func BenchmarkEncoding(b *testing.B) { enctest.Benchmark(b, Big5) }
|
|
|
|
// TestBig5CircumflexAndMacron tests the special cases listed in
|
|
// http://encoding.spec.whatwg.org/#big5
|
|
// Note that these special cases aren't preserved by round-tripping through
|
|
// decoding and encoding (since
|
|
// http://encoding.spec.whatwg.org/index-big5.txt does not have an entry for
|
|
// U+0304 or U+030C), so we can't test this in TestBasics.
|
|
func TestBig5CircumflexAndMacron(t *testing.T) {
|
|
src := "\x88\x5f\x88\x60\x88\x61\x88\x62\x88\x63\x88\x64\x88\x65\x88\x66 " +
|
|
"\x88\xa2\x88\xa3\x88\xa4\x88\xa5\x88\xa6"
|
|
want := "ÓǑÒ\u00ca\u0304Ế\u00ca\u030cỀÊ " +
|
|
"ü\u00ea\u0304ế\u00ea\u030cề"
|
|
dst, err := ioutil.ReadAll(transform.NewReader(
|
|
strings.NewReader(src), Big5.NewDecoder()))
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
if got := string(dst); got != want {
|
|
t.Fatalf("\ngot %q\nwant %q", got, want)
|
|
}
|
|
}
|