The new filter comes with these enhancements: - Processing is rune-wise rather than byte-wise; it assumes UTF-8 input and single-cell wide characters, but this condition should be /usually/ satisfied. - Unprocessed control characters are escaped, `cat -v` style. - A lot of escape sequences is at least recognised, if not processed. - Rudimentary preparation for efficient dynamic updates of task views, through Javascript. We make terminal resets and screen clearing commands flush all output and assume that the terminal has a new origin for any later positioning commands. This appears to work well enough with GRUB, at least. The filter is now exposed through a command line option.
This commit is contained in:
44
terminal_test.go
Normal file
44
terminal_test.go
Normal file
@@ -0,0 +1,44 @@
|
||||
package main
|
||||
|
||||
import "testing"
|
||||
|
||||
// TODO(p): Add a lot more test cases.
|
||||
var tests = []struct {
|
||||
push, want string
|
||||
}{
|
||||
{
|
||||
"\x1bc\x1b[?7l\x1b[2J\x1b[0mSeaBIOS\r",
|
||||
"SeaBIOS\n",
|
||||
},
|
||||
}
|
||||
|
||||
func TestTerminal(t *testing.T) {
|
||||
for _, test := range tests {
|
||||
tw := terminalWriter{}
|
||||
if _, err := tw.Write([]byte(test.push)); err != nil {
|
||||
t.Errorf("%#v: %s", test.push, err)
|
||||
continue
|
||||
}
|
||||
have := string(tw.Serialize(0))
|
||||
if have != test.want {
|
||||
t.Errorf("%#v: %#v; want %#v", test.push, have, test.want)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func TestTerminalExploded(t *testing.T) {
|
||||
Loop:
|
||||
for _, test := range tests {
|
||||
tw := terminalWriter{}
|
||||
for _, b := range []byte(test.push) {
|
||||
if _, err := tw.Write([]byte{b}); err != nil {
|
||||
t.Errorf("%#v: %s", test.push, err)
|
||||
continue Loop
|
||||
}
|
||||
}
|
||||
have := string(tw.Serialize(0))
|
||||
if have != test.want {
|
||||
t.Errorf("%#v: %#v; want %#v", test.push, have, test.want)
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user