|
@@ -11,6 +11,24 @@ import (
|
|
|
"time"
|
|
|
)
|
|
|
|
|
|
+func TestMenuRender(t *testing.T) {
|
|
|
+ bracket := ColorText("BLUE")
|
|
|
+ option := ColorText("BRI GREEN")
|
|
|
+ upper := ColorText("CYAN")
|
|
|
+ lower := ColorText("MAGENTA")
|
|
|
+
|
|
|
+ render := MakeMenuRender(bracket, option, upper, lower)
|
|
|
+ // Fake menu line
|
|
|
+ input := "[X] BUGZ test"
|
|
|
+ got := render(input)
|
|
|
+ expected := bracket + "[" + option + "X" + bracket + "]"
|
|
|
+ expected += lower + " " + upper + "BUGZ" + lower + " test"
|
|
|
+
|
|
|
+ if got != expected {
|
|
|
+ t.Errorf("MenuRender expected %#v, got %#v", expected, got)
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
func TestMenuConnection(t *testing.T) {
|
|
|
tmpFile, err := ioutil.TempFile(os.TempDir(), "test-")
|
|
|
if err != nil {
|
|
@@ -53,7 +71,7 @@ func TestMenuConnection(t *testing.T) {
|
|
|
os.Args = []string{"door", "-d", tmpFile.Name()}
|
|
|
d.Init("menu-test")
|
|
|
|
|
|
- // clean up log file
|
|
|
+ // clean up log file - not needed in tests
|
|
|
defer os.Remove("menu-test-12.log")
|
|
|
|
|
|
// Ok!
|
|
@@ -103,13 +121,18 @@ func TestMenuConnection(t *testing.T) {
|
|
|
server.Write([]byte(keys))
|
|
|
|
|
|
choice = m.Choose(&d)
|
|
|
+ option := m.GetOption(choice)
|
|
|
|
|
|
if choice != 3 {
|
|
|
- t.Errorf("Expected menu option C, got %d / %c", choice, m.GetOption(choice))
|
|
|
+ t.Errorf("Expected menu option 3, got %d / %c", choice, option)
|
|
|
+ }
|
|
|
+
|
|
|
+ if option != 'C' {
|
|
|
+ t.Errorf("Expected menu option C, got %c / %d", option, choice)
|
|
|
}
|
|
|
|
|
|
// Read the display output
|
|
|
- server.SetReadDeadline(time.Now().Add(time.Millisecond * 200))
|
|
|
+ server.SetReadDeadline(time.Now().Add(time.Millisecond * 50))
|
|
|
r, err := server.Read(buffer)
|
|
|
server.SetReadDeadline(time.Time{})
|
|
|
output := string(buffer[:r])
|
|
@@ -120,19 +143,87 @@ func TestMenuConnection(t *testing.T) {
|
|
|
t.Logf("Got: %#v", part)
|
|
|
}
|
|
|
|
|
|
+ keys = "\x00\x48\r" // up, ENTER
|
|
|
+ server.Write([]byte(keys))
|
|
|
m.Chosen = 1
|
|
|
+ choice = m.Choose(&d)
|
|
|
+ option = m.GetOption(choice)
|
|
|
|
|
|
- keys = "\x00\x48\r" // up, ENTER
|
|
|
+ if choice != 1 {
|
|
|
+ t.Errorf("Expected menu option 1, got %d / %c", choice, option)
|
|
|
+ }
|
|
|
+
|
|
|
+ if option != 'A' {
|
|
|
+ t.Errorf("Expected menu option A, got %c / %d", option, choice)
|
|
|
+ }
|
|
|
+
|
|
|
+ // Read the display output
|
|
|
+ server.SetReadDeadline(time.Now().Add(time.Millisecond * 50))
|
|
|
+ r, err = server.Read(buffer)
|
|
|
+ server.SetReadDeadline(time.Time{})
|
|
|
+ output = string(buffer[:r])
|
|
|
+
|
|
|
+ // Test HOME, END, selecting an option, 8 & 2.
|
|
|
+
|
|
|
+ keys = "\x00\x4f\r" // END, ENTER
|
|
|
server.Write([]byte(keys))
|
|
|
+ m.Chosen = 1
|
|
|
+ choice = m.Choose(&d)
|
|
|
+ option = m.GetOption(choice)
|
|
|
+
|
|
|
+ if choice != 3 || option != 'C' {
|
|
|
+ t.Errorf("Expected 3/C, got %d/%c", choice, option)
|
|
|
+ }
|
|
|
|
|
|
+ // Read the display output
|
|
|
+ server.SetReadDeadline(time.Now().Add(time.Millisecond * 50))
|
|
|
+ r, err = server.Read(buffer)
|
|
|
+ server.SetReadDeadline(time.Time{})
|
|
|
+ output = string(buffer[:r])
|
|
|
+
|
|
|
+ keys = "\x00\x47\r" // HOME, ENTER
|
|
|
+ server.Write([]byte(keys))
|
|
|
+ m.Chosen = 2
|
|
|
choice = m.Choose(&d)
|
|
|
+ option = m.GetOption(choice)
|
|
|
|
|
|
- if choice != 1 {
|
|
|
- t.Errorf("Expected menu option A, got %d / %c", choice, m.GetOption(choice))
|
|
|
+ if choice != 1 || option != 'A' {
|
|
|
+ t.Errorf("Expected 1/A, got %d/%c", choice, option)
|
|
|
+ }
|
|
|
+
|
|
|
+ // Read the display output
|
|
|
+ server.SetReadDeadline(time.Now().Add(time.Millisecond * 50))
|
|
|
+ r, err = server.Read(buffer)
|
|
|
+ server.SetReadDeadline(time.Time{})
|
|
|
+ output = string(buffer[:r])
|
|
|
+
|
|
|
+ server.Write([]byte("B"))
|
|
|
+ m.Chosen = 0
|
|
|
+ choice = m.Choose(&d)
|
|
|
+ option = m.GetOption(choice)
|
|
|
+
|
|
|
+ if choice != 2 || option != 'B' {
|
|
|
+ t.Errorf("Expected 2/B, got %d/%c", choice, option)
|
|
|
+ }
|
|
|
+
|
|
|
+ // Read the display output
|
|
|
+ server.SetReadDeadline(time.Now().Add(time.Millisecond * 50))
|
|
|
+ r, err = server.Read(buffer)
|
|
|
+ server.SetReadDeadline(time.Time{})
|
|
|
+ output = string(buffer[:r])
|
|
|
+
|
|
|
+ keys = "2\r" // "Down", ENTER
|
|
|
+ server.Write([]byte(keys))
|
|
|
+ m.Chosen = 1
|
|
|
+ choice = m.Choose(&d)
|
|
|
+ option = m.GetOption(choice)
|
|
|
+
|
|
|
+ if choice != 3 || option != 'C' {
|
|
|
+ t.Errorf("Expected 3/C, got %d/%c", choice, option)
|
|
|
}
|
|
|
|
|
|
// Read the display output
|
|
|
- server.SetReadDeadline(time.Now().Add(time.Millisecond * 200))
|
|
|
+ server.SetReadDeadline(time.Now().Add(time.Millisecond * 50))
|
|
|
r, err = server.Read(buffer)
|
|
|
server.SetReadDeadline(time.Time{})
|
|
|
output = string(buffer[:r])
|