github.com/go-xe2/third@v1.0.3/golang.org/x/text/encoding/traditionalchinese/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 traditionalchinese
     6  
     7  import (
     8  	"fmt"
     9  	"io/ioutil"
    10  	"strings"
    11  	"testing"
    12  
    13  	"github.com/go-xe2/third/golang.org/x/text/encoding"
    14  	"github.com/go-xe2/third/golang.org/x/text/encoding/internal"
    15  	"github.com/go-xe2/third/golang.org/x/text/encoding/internal/enctest"
    16  	"github.com/go-xe2/third/golang.org/x/text/transform"
    17  )
    18  
    19  func dec(e encoding.Encoding) (dir string, t transform.Transformer, err error) {
    20  	return "Decode", e.NewDecoder(), nil
    21  }
    22  func enc(e encoding.Encoding) (dir string, t transform.Transformer, err error) {
    23  	return "Encode", e.NewEncoder(), internal.ErrASCIIReplacement
    24  }
    25  
    26  func TestNonRepertoire(t *testing.T) {
    27  	testCases := []struct {
    28  		init      func(e encoding.Encoding) (string, transform.Transformer, error)
    29  		e         encoding.Encoding
    30  		src, want string
    31  	}{
    32  		{dec, Big5, "\x80", "\ufffd"},
    33  		{dec, Big5, "\x81", "\ufffd"},
    34  		{dec, Big5, "\x81\x30", "\ufffd\x30"},
    35  		{dec, Big5, "\x81\x40", "\ufffd"},
    36  		{dec, Big5, "\x81\xa0", "\ufffd"},
    37  		{dec, Big5, "\xff", "\ufffd"},
    38  
    39  		{enc, Big5, "갂", ""},
    40  		{enc, Big5, "a갂", "a"},
    41  		{enc, Big5, "\u43f0갂", "\x87@"},
    42  	}
    43  	for _, tc := range testCases {
    44  		dir, tr, wantErr := tc.init(tc.e)
    45  		t.Run(fmt.Sprintf("%s/%v/%q", dir, tc.e, tc.src), func(t *testing.T) {
    46  			dst := make([]byte, 100)
    47  			src := []byte(tc.src)
    48  			for i := 0; i <= len(tc.src); i++ {
    49  				nDst, nSrc, err := tr.Transform(dst, src[:i], false)
    50  				if err != nil && err != transform.ErrShortSrc && err != wantErr {
    51  					t.Fatalf("error on first call to Transform: %v", err)
    52  				}
    53  				n, _, err := tr.Transform(dst[nDst:], src[nSrc:], true)
    54  				nDst += n
    55  				if err != wantErr {
    56  					t.Fatalf("(%q|%q): got %v; want %v", tc.src[:i], tc.src[i:], err, wantErr)
    57  				}
    58  				if got := string(dst[:nDst]); got != tc.want {
    59  					t.Errorf("(%q|%q):\ngot  %q\nwant %q", tc.src[:i], tc.src[i:], got, tc.want)
    60  				}
    61  			}
    62  		})
    63  	}
    64  }
    65  
    66  func TestBasics(t *testing.T) {
    67  	// The encoded forms can be verified by the iconv program:
    68  	// $ echo 月日は百代 | iconv -f UTF-8 -t SHIFT-JIS | xxd
    69  	testCases := []struct {
    70  		e         encoding.Encoding
    71  		encPrefix string
    72  		encSuffix string
    73  		encoded   string
    74  		utf8      string
    75  	}{{
    76  		e:       Big5,
    77  		encoded: "A\x87\x40\x87\x41\x87\x45\xa1\x40\xfe\xfd\xfe\xfeZ\xa3\xe1",
    78  		utf8:    "A\u43f0\u4c32\U00027267\u3000\U0002910d\u79d4Z€",
    79  	}, {
    80  		e: Big5,
    81  		encoded: "\xaa\xe1\xb6\xa1\xa4\x40\xb3\xfd\xb0\x73\xa1\x41\xbf\x57\xb0\x75" +
    82  			"\xb5\x4c\xac\xdb\xbf\xcb\xa1\x43",
    83  		utf8: "花間一壺酒,獨酌無相親。",
    84  	}}
    85  
    86  	for _, tc := range testCases {
    87  		enctest.TestEncoding(t, tc.e, tc.encoded, tc.utf8, "", "")
    88  	}
    89  }
    90  
    91  func TestFiles(t *testing.T) { enctest.TestFile(t, Big5) }
    92  
    93  func BenchmarkEncoding(b *testing.B) { enctest.Benchmark(b, Big5) }
    94  
    95  // TestBig5CircumflexAndMacron tests the special cases listed in
    96  // http://encoding.spec.whatwg.org/#big5
    97  // Note that these special cases aren't preserved by round-tripping through
    98  // decoding and encoding (since
    99  // http://encoding.spec.whatwg.org/index-big5.txt does not have an entry for
   100  // U+0304 or U+030C), so we can't test this in TestBasics.
   101  func TestBig5CircumflexAndMacron(t *testing.T) {
   102  	src := "\x88\x5f\x88\x60\x88\x61\x88\x62\x88\x63\x88\x64\x88\x65\x88\x66 " +
   103  		"\x88\xa2\x88\xa3\x88\xa4\x88\xa5\x88\xa6"
   104  	want := "ÓǑÒ\u00ca\u0304Ế\u00ca\u030cỀÊ " +
   105  		"ü\u00ea\u0304ế\u00ea\u030cề"
   106  	dst, err := ioutil.ReadAll(transform.NewReader(
   107  		strings.NewReader(src), Big5.NewDecoder()))
   108  	if err != nil {
   109  		t.Fatal(err)
   110  	}
   111  	if got := string(dst); got != want {
   112  		t.Fatalf("\ngot  %q\nwant %q", got, want)
   113  	}
   114  }