blob: 1eadda2cb6fe87ac59326944f4698e59d5b0edbc [file] [log] [blame]
Cosmos Nicolaoue925f2a2014-09-05 14:47:18 -07001package expect_test
2
3import (
4 "bufio"
5 "bytes"
6 "fmt"
7 "reflect"
8 "strings"
9 "testing"
10 "time"
11
Jiri Simsa519c5072014-09-17 21:37:57 -070012 "veyron.io/veyron/veyron/lib/expect"
Cosmos Nicolaoue925f2a2014-09-05 14:47:18 -070013)
14
15func TestSimple(t *testing.T) {
16 buf := []byte{}
17 buffer := bytes.NewBuffer(buf)
18 buffer.WriteString("bar\n")
19 buffer.WriteString("baz\n")
20 buffer.WriteString("oops\n")
21 s := expect.NewSession(nil, bufio.NewReader(buffer), time.Minute)
22 s.Expect("bar")
23 s.Expect("baz")
24 if err := s.Error(); err != nil {
25 t.Error(err)
26 }
27 // This will fail the test.
28 s.Expect("not oops")
29 if err := s.Error(); err == nil {
30 t.Error("unexpected success")
31 } else {
32 t.Log(s.Error())
33 }
34}
35
36func TestExpectRE(t *testing.T) {
37 buf := []byte{}
38 buffer := bytes.NewBuffer(buf)
39 buffer.WriteString("bar=baz\n")
40 buffer.WriteString("aaa\n")
41 buffer.WriteString("bbb\n")
42 s := expect.NewSession(nil, bufio.NewReader(buffer), time.Minute)
43 if got, want := s.ExpectVar("bar"), "baz"; got != want {
44 t.Errorf("got %v, want %v", got, want)
45 }
46 s.ExpectRE("zzz|aaa", -1)
47 if err := s.Error(); err != nil {
48 t.Error(err)
49 }
50 if got, want := s.ExpectRE("(.*)", -1), [][]string{{"bbb", "bbb"}}; !reflect.DeepEqual(got, want) {
51 t.Errorf("got %v, want %v", got, want)
52 }
53 if got, want := s.ExpectRE("(.*", -1), [][]string{{"bbb", "bbb"}}; !reflect.DeepEqual(got, want) {
54 // this will have failed the test also.
55 if err := s.Error(); err == nil || !strings.Contains(err.Error(), "error parsing regexp") {
56 t.Errorf("missing or wrong error: %v", s.Error())
57 }
58 }
59}
60
61func TestRead(t *testing.T) {
62 buf := []byte{}
63 buffer := bytes.NewBuffer(buf)
64 lines := []string{"some words", "bar=baz", "more words"}
65 for _, l := range lines {
66 buffer.WriteString(l + "\n")
67 }
68 s := expect.NewSession(nil, bufio.NewReader(buffer), time.Minute)
69 for _, l := range lines {
70 if got, want := s.ReadLine(), l; got != want {
71 t.Errorf("got %q, want %q", got, want)
72 }
73 }
74 if s.Failed() {
75 t.Errorf("unexpected error: %s", s.Error())
76 }
77 want := ""
78 for i := 0; i < 100; i++ {
79 m := fmt.Sprintf("%d\n", i)
80 buffer.WriteString(m)
81 want += m
82 }
83 got, err := s.ReadAll()
84 if err != nil {
85 t.Errorf("unexpected error: %s", err)
86 }
87 if got != want {
88 t.Errorf("got %q, want %q", got, want)
89 }
90}