Parcourir la source

Updated menu tests. More coverage.

Steve Thielemann il y a 3 ans
Parent
commit
1a1e50f055
2 fichiers modifiés avec 163 ajouts et 8 suppressions
  1. 65 1
      door/door_test.go
  2. 98 7
      door/menu_test.go

+ 65 - 1
door/door_test.go

@@ -1,8 +1,11 @@
 package door
 
+// Need net, flag for setupSockets
 import (
+	"flag"
 	"fmt"
 	"io/ioutil"
+	"net"
 	"os"
 	"testing"
 	"time"
@@ -49,7 +52,6 @@ func TestReadDropFile(t *testing.T) {
 	tmpFile.WriteString(fmt.Sprintf("%d\n%d\n%d\n%s\n%d\n%s\n%s\n%d\n%d\n%d\n%d\n",
 		dfc.Comm_type, dfc.Comm_handle, dfc.Baudrate, dfc.BBSID, dfc.User_number, dfc.Real_name, dfc.Handle,
 		dfc.Security_level, dfc.Time_left, dfc.Emulation, dfc.Node))
-	// tmpFile.WriteString("2\n20\n0\nTest BBSID\n1701\nReal Username\nHandle This\n880\n25\n0\n12\n")
 	tmpFile.Close()
 
 	d := Door{}
@@ -105,3 +107,65 @@ func TestReadDropFile(t *testing.T) {
 		t.Errorf("TimeOut differences: test %#v door %#v delta %#v", timeout, d.TimeOut, timeoutDelta)
 	}
 }
+
+func TestDetectFail(t *testing.T) {
+	tmpFile, err := ioutil.TempFile(os.TempDir(), "test-")
+	if err != nil {
+		panic("Cannot create temporary file")
+	}
+
+	// Remember to clean up the file afterwards
+	defer os.Remove(tmpFile.Name())
+
+	// establish network socket connection to set Comm_handle
+	server, client := setupSockets()
+
+	// We're not testing closed connections, so:
+	defer server.Close()
+	defer client.Close()
+
+	// Send nothing
+
+	client_conn := client.(*net.TCPConn)
+	client_file, err := client_conn.File()
+	var fd int = int(client_file.Fd())
+
+	// Create door32.sys file
+	dfc := DropfileConfig{2, fd, 1800, "Test BBSID", 1701, "Real Username", "Handle", 880, 28, 0, 13}
+
+	tmpFile.WriteString(fmt.Sprintf("%d\n%d\n%d\n%s\n%d\n%s\n%s\n%d\n%d\n%d\n%d\n",
+		dfc.Comm_type, dfc.Comm_handle, dfc.Baudrate, dfc.BBSID, dfc.User_number, dfc.Real_name, dfc.Handle,
+		dfc.Security_level, dfc.Time_left, dfc.Emulation, dfc.Node))
+	tmpFile.Close()
+
+	d := Door{}
+
+	// Because we're not the only one calling door.Init(), the
+	// door global variables might be from a previous test run.
+
+	Unicode = false
+	CP437 = false
+	Full_CP437 = false
+	Width = 0
+	Height = 0
+
+	// If I call d.Init() more then once flag complains about flag redefined.
+	// Reset flags
+	flag.CommandLine = flag.NewFlagSet(os.Args[0], flag.ExitOnError)
+	// preset commandline args so door can init
+	os.Args = []string{"door", "-d", tmpFile.Name()}
+	d.Init("menu-test")
+
+	// clean up log file
+	// I don't need to.  Tests are run in /tmp/go-buildNNNN.
+	// defer os.Remove("menu-test-13.log")
+
+	if Unicode || CP437 {
+		t.Errorf("Expected FALSE, got Unicode %t CP437 %t", Unicode, CP437)
+	}
+
+	if Width != 0 || Height != 0 {
+		t.Errorf("Expected 0, 0, got Width %d, Height %d", Width, Height)
+	}
+
+}

+ 98 - 7
door/menu_test.go

@@ -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])