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++ } }