github.com/hxx258456/ccgo@v0.0.5-0.20230213014102-48b35f46f66f/xcrypto/pkcs12/bmp-string_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 pkcs12 6 7 import ( 8 "bytes" 9 "encoding/hex" 10 "testing" 11 ) 12 13 var bmpStringTests = []struct { 14 in string 15 expectedHex string 16 shouldFail bool 17 }{ 18 {"", "0000", false}, 19 // Example from https://tools.ietf.org/html/rfc7292#appendix-B. 20 {"Beavis", "0042006500610076006900730000", false}, 21 // Some characters from the "Letterlike Symbols Unicode block". 22 {"\u2115 - Double-struck N", "21150020002d00200044006f00750062006c0065002d00730074007200750063006b0020004e0000", false}, 23 // any character outside the BMP should trigger an error. 24 {"\U0001f000 East wind (Mahjong)", "", true}, 25 } 26 27 func TestBMPString(t *testing.T) { 28 for i, test := range bmpStringTests { 29 expected, err := hex.DecodeString(test.expectedHex) 30 if err != nil { 31 t.Fatalf("#%d: failed to decode expectation", i) 32 } 33 34 out, err := bmpString(test.in) 35 if err == nil && test.shouldFail { 36 t.Errorf("#%d: expected to fail, but produced %x", i, out) 37 continue 38 } 39 40 if err != nil && !test.shouldFail { 41 t.Errorf("#%d: failed unexpectedly: %s", i, err) 42 continue 43 } 44 45 if !test.shouldFail { 46 if !bytes.Equal(out, expected) { 47 t.Errorf("#%d: expected %s, got %x", i, test.expectedHex, out) 48 continue 49 } 50 51 roundTrip, err := decodeBMPString(out) 52 if err != nil { 53 t.Errorf("#%d: decoding output gave an error: %s", i, err) 54 continue 55 } 56 57 if roundTrip != test.in { 58 t.Errorf("#%d: decoding output resulted in %q, but it should have been %q", i, roundTrip, test.in) 59 continue 60 } 61 } 62 } 63 }