123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193 |
- package termutil
- import (
- "bytes"
- "fmt"
- "testing"
- "devt.de/krotik/common/termutil/getch"
- )
- func TestConsoleLineTerminal(t *testing.T) {
- var out bytes.Buffer
-
- stdin = bytes.NewBufferString("test line\n")
-
- getchStart = func() error { return fmt.Errorf("Something is wrong") }
- getchGetch = func() (*getch.KeyEvent, error) { return nil, fmt.Errorf("baa") }
- ct, err := NewConsoleLineTerminal(&out)
- if err != nil {
- t.Error("Console terminal should go into fallback without error:", err)
- return
- }
- ct.StartTerm()
- if !ct.(*consoleLineTerminal).fallback {
- t.Error("Console terminal should be in fallback mode")
- return
- }
- l, err := ct.NextLine()
- if err != nil || l != "test line" {
- t.Error("Unexpected result:", l, err)
- return
- }
- l, err = ct.NextLinePrompt("", '*')
- if err == nil || err.Error() != "Cannot mask input characters" {
- t.Error("Unexpected result:", l, err)
- return
- }
-
- getchStart = func() error { return nil }
- var getchbuffer []*getch.KeyEvent
- addTestKeyEvent := func(kc getch.KeyCode, r rune) {
- getchbuffer = append(getchbuffer, &getch.KeyEvent{
- Code: kc,
- Rune: r,
- })
- }
- getchGetch = func() (*getch.KeyEvent, error) {
- e := getchbuffer[0]
- getchbuffer = getchbuffer[1:]
- if e.Code == getch.KeyQuote {
- return nil, &getch.ErrUnknownEscapeSequence{}
- }
- return e, nil
- }
- if ct, err = NewConsoleLineTerminal(&out); err != nil {
- t.Error(err)
- return
- }
- if ct.(*consoleLineTerminal).fallback {
- t.Error("Console terminal should NOT be in fallback mode")
- return
- }
-
- addTestKeyEvent(getch.KeyT, 't')
- addTestKeyEvent(getch.KeyE, 'e')
- addTestKeyEvent(getch.KeyS, 's')
- addTestKeyEvent(getch.KeyT, 't')
- addTestKeyEvent(getch.KeyEnter, 0x00)
- if line, err := ct.NextLine(); err != nil || line != "test" {
- t.Error("Unexpected result:", "#"+line+"#", err)
- return
- }
- if res := string(out.Bytes()[60:67]); res != `>>>test` {
- t.Error("Unexpected result:", "#"+res+"#")
- return
- }
- out.Reset()
-
- addTestKeyEvent(getch.KeyT, 't')
- addTestKeyEvent(getch.KeyE, 'e')
- addTestKeyEvent(getch.KeyS, 's')
- addTestKeyEvent(getch.KeyT, 't')
- addTestKeyEvent(getch.KeyEnter, 0x00)
- if line, err := ct.NextLinePrompt(">", '*'); err != nil || line != "test" {
- t.Error("Unexpected result:", "#"+line+"#", err)
- return
- }
- if res := string(out.Bytes()[39:44]); res != `>****` {
- t.Error("Unexpected result:", "#"+res+"#")
- return
- }
-
- addTestKeyEvent(getch.KeyT, 't')
- addTestKeyEvent(getch.KeyE, 'e')
- addTestKeyEvent(getch.KeyS, 's')
- addTestKeyEvent(getch.KeyT, 't')
- addTestKeyEvent("", 0x0)
- addTestKeyEvent(getch.KeyEnter, 0x00)
- getchbuffer[2].RawBuf = []byte("s1s")
- if line, err := ct.NextLine(); err != nil || line != "tes1st " {
- t.Error("Unexpected result:", "#"+line+"#", err)
- return
- }
-
- addTestKeyEvent(getch.KeyT, 't')
- addTestKeyEvent(getch.KeyE, 'e')
- addTestKeyEvent(getch.KeyS, 's')
- addTestKeyEvent(getch.KeyT, 't')
- addTestKeyEvent(getch.KeyBackspace, 0x0)
- addTestKeyEvent(getch.KeyBackspace, 0x0)
- addTestKeyEvent(getch.KeyEnter, 0x00)
- if line, err := ct.NextLine(); err != nil || line != "te" {
- t.Error("Unexpected result:", "#"+line+"#", err)
- return
- }
-
- addTestKeyEvent(getch.KeyT, 't')
- addTestKeyEvent(getch.KeyQuote, 0x00)
- addTestKeyEvent(getch.KeyE, 'e')
- addTestKeyEvent(getch.KeyS, 's')
- addTestKeyEvent(getch.KeyT, 't')
- addTestKeyEvent(getch.KeyArrowLeft, 0x0)
- addTestKeyEvent(getch.KeyArrowLeft, 0x0)
- addTestKeyEvent(getch.KeyDelete, 0x0)
- addTestKeyEvent(getch.KeyT, 'x')
- addTestKeyEvent(getch.KeyArrowRight, 0x0)
- addTestKeyEvent(getch.KeyArrowRight, 0x0)
- addTestKeyEvent(getch.KeyT, 'e')
- addTestKeyEvent(getch.KeyT, 'r')
- addTestKeyEvent(getch.KeyHome, 0x0)
- addTestKeyEvent(getch.KeyT, '-')
- addTestKeyEvent(getch.KeyEnd, 0x0)
- addTestKeyEvent(getch.KeyT, '-')
- addTestKeyEvent(getch.KeyEnter, 0x00)
-
- if line, err := ct.NextLine(); err != nil || line != "-texter-" {
- t.Error("Unexpected result:", "#"+line+"#", err)
- return
- }
-
- ct.StopTerm()
- }
|