github.com/go-xe2/third@v1.0.3/golang.org/x/text/encoding/korean/all_test.go (about)

     1  // Copyright 2015 The Go Authors. All rights reserved.
     2  // Use of this source code is governed by a BSD-style
     3  // license that can be found in the LICENSE file.
     4  
     5  package korean
     6  
     7  import (
     8  	"strings"
     9  	"testing"
    10  
    11  	"github.com/go-xe2/third/golang.org/x/text/encoding"
    12  	"github.com/go-xe2/third/golang.org/x/text/encoding/internal"
    13  	"github.com/go-xe2/third/golang.org/x/text/encoding/internal/enctest"
    14  	"github.com/go-xe2/third/golang.org/x/text/transform"
    15  )
    16  
    17  func dec(e encoding.Encoding) (dir string, t transform.Transformer, err error) {
    18  	return "Decode", e.NewDecoder(), nil
    19  }
    20  func enc(e encoding.Encoding) (dir string, t transform.Transformer, err error) {
    21  	return "Encode", e.NewEncoder(), internal.ErrASCIIReplacement
    22  }
    23  
    24  func TestNonRepertoire(t *testing.T) {
    25  	// Pick n large enough to cause an overflow in the destination buffer of
    26  	// transform.String.
    27  	const n = 10000
    28  	testCases := []struct {
    29  		init      func(e encoding.Encoding) (string, transform.Transformer, error)
    30  		e         encoding.Encoding
    31  		src, want string
    32  	}{
    33  		{dec, EUCKR, "\xfe\xfe", "\ufffd"},
    34  		// {dec, EUCKR, "א", "\ufffd"}, // TODO: why is this different?
    35  
    36  		{enc, EUCKR, "א", ""},
    37  		{enc, EUCKR, "aא", "a"},
    38  		{enc, EUCKR, "\uac00א", "\xb0\xa1"},
    39  		// TODO: should we also handle Jamo?
    40  
    41  		{dec, EUCKR, "\x80", "\ufffd"},
    42  		{dec, EUCKR, "\xff", "\ufffd"},
    43  		{dec, EUCKR, "\x81", "\ufffd"},
    44  		{dec, EUCKR, "\xb0\x40", "\ufffd@"},
    45  		{dec, EUCKR, "\xb0\xff", "\ufffd"},
    46  		{dec, EUCKR, "\xd0\x20", "\ufffd "},
    47  		{dec, EUCKR, "\xd0\xff", "\ufffd"},
    48  
    49  		{dec, EUCKR, strings.Repeat("\x81", n), strings.Repeat("걖", n/2)},
    50  	}
    51  	for _, tc := range testCases {
    52  		dir, tr, wantErr := tc.init(tc.e)
    53  
    54  		dst, _, err := transform.String(tr, tc.src)
    55  		if err != wantErr {
    56  			t.Errorf("%s %v(%q): got %v; want %v", dir, tc.e, tc.src, err, wantErr)
    57  		}
    58  		if got := string(dst); got != tc.want {
    59  			t.Errorf("%s %v(%q):\ngot  %q\nwant %q", dir, tc.e, tc.src, got, tc.want)
    60  		}
    61  	}
    62  }
    63  
    64  func TestBasics(t *testing.T) {
    65  	// The encoded forms can be verified by the iconv program:
    66  	// $ echo 月日は百代 | iconv -f UTF-8 -t SHIFT-JIS | xxd
    67  	testCases := []struct {
    68  		e       encoding.Encoding
    69  		encoded string
    70  		utf8    string
    71  	}{{
    72  		// Korean tests.
    73  		//
    74  		// "A\uac02\uac35\uac56\ud401B\ud408\ud620\ud624C\u4f3d\u8a70D" is a
    75  		// nonsense string that contains ASCII, Hangul and CJK ideographs.
    76  		//
    77  		// "세계야, 안녕" translates as "Hello, world".
    78  		e:       EUCKR,
    79  		encoded: "A\x81\x41\x81\x61\x81\x81\xc6\xfeB\xc7\xa1\xc7\xfe\xc8\xa1C\xca\xa1\xfd\xfeD",
    80  		utf8:    "A\uac02\uac35\uac56\ud401B\ud408\ud620\ud624C\u4f3d\u8a70D",
    81  	}, {
    82  		e:       EUCKR,
    83  		encoded: "\xbc\xbc\xb0\xe8\xbe\xdf\x2c\x20\xbe\xc8\xb3\xe7",
    84  		utf8:    "세계야, 안녕",
    85  	}}
    86  
    87  	for _, tc := range testCases {
    88  		enctest.TestEncoding(t, tc.e, tc.encoded, tc.utf8, "", "")
    89  	}
    90  }
    91  
    92  func TestFiles(t *testing.T) { enctest.TestFile(t, EUCKR) }
    93  
    94  func BenchmarkEncoding(b *testing.B) { enctest.Benchmark(b, EUCKR) }