vtTools/term/vt220_test.go

156 lines
6.5 KiB
Go

package term
import (
"bytes"
"io"
// "os"
"testing"
// "time"
)
var expected = []byte{
27, 0, 40, 0, 66, // Init
27, 0, 41, 0, 60, // Init
27, 0, 42, 0, 48, // Init
32, 32, 32, 48, 32, 64, 32, 80, 32, 96, 32, 112, 32, 32, 32, 32, 32, 176, 32, 192, 32, 32, 32, 224, 32, 32, 10,
32, 33, 32, 49, 32, 65, 32, 81, 32, 97, 32, 113, 32, 32, 32, 161, 32, 177, 32, 193, 32, 209, 32, 225, 32, 241, 10,
32, 34, 32, 50, 32, 66, 32, 82, 32, 98, 32, 114, 32, 32, 32, 162, 32, 178, 32, 194, 32, 210, 32, 226, 32, 242, 10,
32, 35, 32, 51, 32, 67, 32, 83, 32, 99, 32, 115, 32, 32, 32, 163, 32, 179, 32, 195, 32, 211, 32, 227, 32, 243, 10,
32, 36, 32, 52, 32, 68, 32, 84, 32, 100, 32, 116, 32, 32, 32, 32, 32, 32, 32, 196, 32, 212, 32, 228, 32, 244, 10,
32, 37, 32, 53, 32, 69, 32, 85, 32, 101, 32, 117, 32, 32, 32, 165, 32, 181, 32, 197, 32, 213, 32, 229, 32, 245, 10,
32, 38, 32, 54, 32, 70, 32, 86, 32, 102, 32, 118, 32, 32, 32, 32, 32, 182, 32, 198, 32, 214, 32, 230, 32, 246, 10,
32, 39, 32, 55, 32, 71, 32, 87, 32, 103, 32, 119, 32, 32, 32, 167, 32, 183, 32, 199, 32, 215, 32, 231, 32, 247, 10,
32, 40, 32, 56, 32, 72, 32, 88, 32, 104, 32, 120, 32, 32, 32, 168, 32, 32, 32, 200, 32, 216, 32, 232, 32, 248, 10,
32, 41, 32, 57, 32, 73, 32, 89, 32, 105, 32, 121, 32, 32, 32, 169, 32, 185, 32, 201, 32, 217, 32, 233, 32, 249, 10,
32, 42, 32, 58, 32, 74, 32, 90, 32, 106, 32, 122, 32, 32, 32, 170, 32, 186, 32, 202, 32, 218, 32, 234, 32, 250, 10,
32, 43, 32, 59, 32, 75, 32, 91, 32, 107, 32, 123, 32, 32, 32, 171, 32, 187, 32, 203, 32, 219, 32, 235, 32, 251, 10,
32, 44, 32, 60, 32, 76, 32, 92, 32, 108, 32, 124, 32, 32, 32, 32, 32, 188, 32, 204, 32, 220, 32, 236, 32, 252, 10,
32, 45, 32, 61, 32, 77, 32, 93, 32, 109, 32, 125, 32, 32, 32, 32, 32, 189, 32, 205, 32, 221, 32, 237, 32, 253, 10,
32, 46, 32, 62, 32, 78, 32, 94, 32, 110, 32, 126, 32, 32, 32, 32, 32, 32, 32, 206, 32, 32, 32, 238, 32, 32, 10,
32, 47, 32, 63, 32, 79, 32, 95, 32, 111, 32, 32, 32, 32, 32, 32, 32, 191, 32, 207, 32, 223, 32, 239, 32, 32, 10,
10, // \n
27, 0, 125, // LockShift
32, 32, 32, 48, 32, 64, 32, 80, 32, 96, 32, 112, 32, 32, 32, 32, 32, 48, 32, 64, 32, 80, 32, 224, 32, 240, 10,
32, 33, 32, 49, 32, 65, 32, 81, 32, 97, 32, 113, 32, 32, 32, 33, 32, 49, 32, 65, 32, 81, 32, 225, 32, 241, 10,
32, 34, 32, 50, 32, 66, 32, 82, 32, 98, 32, 114, 32, 32, 32, 34, 32, 50, 32, 66, 32, 82, 32, 226, 32, 242, 10,
32, 35, 32, 51, 32, 67, 32, 83, 32, 99, 32, 115, 32, 32, 32, 35, 32, 51, 32, 67, 32, 83, 32, 227, 32, 243, 10,
32, 36, 32, 52, 32, 68, 32, 84, 32, 100, 32, 116, 32, 32, 32, 36, 32, 52, 32, 68, 32, 84, 32, 228, 32, 244, 10,
32, 37, 32, 53, 32, 69, 32, 85, 32, 101, 32, 117, 32, 32, 32, 37, 32, 53, 32, 69, 32, 85, 32, 229, 32, 245, 10,
32, 38, 32, 54, 32, 70, 32, 86, 32, 102, 32, 118, 32, 32, 32, 38, 32, 54, 32, 70, 32, 86, 32, 230, 32, 246, 10,
32, 39, 32, 55, 32, 71, 32, 87, 32, 103, 32, 119, 32, 32, 32, 39, 32, 55, 32, 71, 32, 87, 32, 231, 32, 247, 10,
32, 40, 32, 56, 32, 72, 32, 88, 32, 104, 32, 120, 32, 32, 32, 40, 32, 56, 32, 72, 32, 88, 32, 232, 32, 248, 10,
32, 41, 32, 57, 32, 73, 32, 89, 32, 105, 32, 121, 32, 32, 32, 41, 32, 57, 32, 73, 32, 89, 32, 233, 32, 249, 10,
32, 42, 32, 58, 32, 74, 32, 90, 32, 106, 32, 122, 32, 32, 32, 42, 32, 58, 32, 74, 32, 90, 32, 234, 32, 250, 10,
32, 43, 32, 59, 32, 75, 32, 91, 32, 107, 32, 123, 32, 32, 32, 43, 32, 59, 32, 75, 32, 91, 32, 235, 32, 251, 10,
32, 44, 32, 60, 32, 76, 32, 92, 32, 108, 32, 124, 32, 32, 32, 44, 32, 60, 32, 76, 32, 92, 32, 236, 32, 252, 10,
32, 45, 32, 61, 32, 77, 32, 93, 32, 109, 32, 125, 32, 32, 32, 45, 32, 61, 32, 77, 32, 93, 32, 237, 32, 253, 10,
32, 46, 32, 62, 32, 78, 32, 94, 32, 110, 32, 126, 32, 32, 32, 46, 32, 62, 32, 78, 32, 94, 32, 238, 32, 254, 10,
32, 47, 32, 63, 32, 79, 32, 95, 32, 111, 32, 32, 32, 32, 32, 47, 32, 63, 32, 79, 32, 223, 32, 239, 32, 32, 10,
10, // \n
27, 0, 126, // LockShift
}
var testMSCASCIIGraphic = [16][6]rune{
{' ', '0', '@', 'P', '`', 'p'},
{'!', '1', 'A', 'Q', 'a', 'q'},
{'"', '2', 'B', 'R', 'b', 'r'},
{'#', '3', 'C', 'S', 'c', 's'},
{'$', '4', 'D', 'T', 'd', 't'},
{'%', '5', 'E', 'U', 'e', 'u'},
{'&', '6', 'F', 'V', 'f', 'v'},
{'\'', '7', 'G', 'W', 'g', 'w'},
{'(', '8', 'H', 'X', 'h', 'x'},
{')', '9', 'I', 'Y', 'i', 'y'},
{'*', ':', 'J', 'Z', 'j', 'z'},
{'+', ';', 'K', '[', 'k', '{'},
{',', '<', 'L', '\\', 'l', '|'},
{'-', '=', 'M', ']', 'm', '}'},
{'.', '>', 'N', '^', 'n', '~'},
{'/', '?', 'O', '_', 'o', '\u007F'},
}
var testMSCSupplementalGraphic = [16][6]rune{
{0, '°', 'À', 0, 'à', 0},
{'¡', '±', 'Á', 'Ñ', 'á', 'ñ'},
{'¢', '²', 'Â', 'Ò', 'â', 'ò'},
{'£', '³', 'Ã', 'Ó', 'ã', 'ó'},
{0, 0, 'Ä', 'Ô', 'ä', 'ô'},
{'¥', 'µ', 'Å', 'Õ', 'å', 'õ'},
{0, '¶', 'Æ', 'Ö', 'æ', 'ö'},
{'§', '·', 'Ç', 'Œ', 'ç', 'œ'},
{'¤', 0, 'È', 'Ø', 'è', 'ø'},
{'©', '¹', 'É', 'Ù', 'é', 'ù'},
{'ª', 'º', 'Ê', 'Ú', 'ê', 'ú'},
{'«', '»', 'Ë', 'Û', 'ë', 'û'},
{0, '¼', 'Ì', 'Ü', 'ì', 'ü'},
{0, '½', 'Í', 'Ÿ', 'í', 'ÿ'},
{0, 0, 'Î', 0, 'î', 0},
{0, '¿', 'Ï', 'ß', 'ï', 0},
}
var testSpecialGraphics = [16][6]rune{
{0, '0', '@', 'P', '♦', '⎻'},
{'!', '1', 'A', 'Q', '█', '―'},
{'"', '2', 'B', 'R', '␉', '⎼'},
{'#', '3', 'C', 'S', '␌', '⎽'},
{'$', '4', 'D', 'T', '␍', '├'},
{'%', '5', 'E', 'U', '␊', '┤'},
{'&', '6', 'F', 'V', '°', '┴'},
{'\'', '7', 'G', 'W', '±', '┬'},
{'(', '8', 'H', 'X', '␤', '│'},
{')', '9', 'I', 'Y', '␋', '≤'},
{'*', ':', 'J', 'Z', '┘', '≥'},
{'+', ';', 'K', '[', '┐', 'π'},
{',', '<', 'L', '\\', '┌', '≠'},
{'-', '=', 'M', ']', '└', '£'},
{'.', '>', 'N', '^', '┼', '·'},
{'/', '?', 'O', '\u2800', '⎺', 0},
}
func printTest(term *VT220, sl, sr [16][6]rune) {
for i := 0; i < 16; i++ {
for j := 0; j < 12; j++ {
term.Print(" ")
if j == 6 {
term.Print(" ")
}
var r rune
if j < 6 {
r = sl[i][j]
} else {
r = sr[i][j-6]
}
if r == 0 || r == '\u007F' {
term.Print(" ")
continue
}
// fmt.Print(string(MustTransRune(r)[:]))
term.Print(string(r))
}
term.Print("\n")
// time.Sleep(time.Millisecond * 250)
}
term.Print("\n")
}
func TestOutput(t *testing.T) {
buf := bytes.Buffer{}
term := NewVT220(&buf)
term.Init()
printTest(term, testMSCASCIIGraphic, testMSCSupplementalGraphic)
term.LockShift(2, true)
printTest(term, testMSCASCIIGraphic, testSpecialGraphics)
term.LockShift(1, true)
if len(expected) != buf.Len() {
t.FailNow()
}
ebi := 0
for b, err := buf.ReadByte(); err != io.EOF; b, err = buf.ReadByte() {
if b != expected[ebi] {
t.FailNow()
}
ebi++
}
}