-
Notifications
You must be signed in to change notification settings - Fork 4
/
ebcdic_test.go
92 lines (81 loc) · 2.18 KB
/
ebcdic_test.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
//
// Tests for package ebcdic
//
package ebcdic
import (
"bytes"
"testing"
)
var (
// Valid string, can translate both ways
unicodeString = "Testing, 123"
ebcdicBytes = []byte{0xE3, 0x85, 0xA2, 0xA3, 0x89, 0x95, 0x87, 0x6B, 0x40, 0xF1, 0xF2, 0xF3}
// Invalid string, contains Unicode code-points higher than 255. Invalid characters replaced with NUL
failString = "Testing, 1日2本3語"
failBytes = []byte{0xE3, 0x85, 0xA2, 0xA3, 0x89, 0x95, 0x87, 0x6B, 0x40, 0xF1, 0x00, 0xF2, 0x00, 0xF3, 0x00}
failResult = "Testing, 1\x002\x003\x00"
)
// Test Encoding of valid string
func TestEncode(t *testing.T) {
out, err := Encode(unicodeString)
if err != nil {
t.Error(err)
}
if !bytes.Equal(out, ebcdicBytes) {
t.Error("encountered Encoding error.")
}
}
// Test Decoding of valid string
func TestDecode(t *testing.T) {
if Decode(ebcdicBytes) != unicodeString {
t.Error("encountered Decoding error.")
}
}
// Test Encoding of invalid string
func TestEncodeFail(t *testing.T) {
out, err := Encode(failString)
if err != nil && err != ErrEncode {
t.Error("encountered Encoding Failure error.")
}
if !bytes.Equal(out, failBytes) {
t.Error("encountered Encoding Failure error.")
}
}
// Test Decoding of invalid string
func TestDecodeFail(t *testing.T) {
if string(Decode(failBytes)) != failResult {
t.Error("encountered Decoding Failure error.")
}
}
// Test Encoding of entire Unicode <= 0xFF character map
func TestEncodeCharMap(t *testing.T) {
out, err := Encode(string(unicodeMap))
if err != nil {
t.Error(err)
}
if !bytes.Equal(out, orderedBytes()) {
t.Error("encountered Encoding CharMap error.")
}
}
// Test Decoding of entire EBCDIC character map
func TestDecodeCharMap(t *testing.T) {
if Decode(ebcdicMap) != orderedRunes() {
t.Error("encountered Decoding CharMap error.")
}
}
// Output an ordered byte-slice, 0x00..0x100
func orderedBytes() []byte {
out := make([]byte, charMapLength+1)
for i := 0; i <= charMapLength; i++ {
out[i] = byte(i)
}
return out
}
// Output an ordered rune-slice, 0x00..0x100, as a string
func orderedRunes() string {
out := make([]rune, charMapLength+1)
for i := 0; i <= charMapLength; i++ {
out[i] = rune(i)
}
return string(out)
}