1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
|
package gui
import (
"image"
"testing"
)
func TestSniffer(t *testing.T) {
root := newDummyEnv(image.Rect(12, 34, 56, 78))
defer func() {
root.kill <- true
<-root.dead
}()
expectSig := "got fooEvent"
sniffer, signal := newSniffer(root, func(e Event) (string, bool) {
if e.String() == "fooEvent" {
return expectSig, true
}
return "", false
})
// First event should be Resize.
eventp, ok := tryRecv(sniffer.Events(), timeout)
if !ok {
t.Fatalf("no Resize event received after %v", timeout)
}
if _, ok := (*eventp).(Resize); !ok {
t.Fatalf("got %v Event; wanted Resize", *eventp)
}
for i := 0; i < 3; i++ { // arbitrary number of iterations
// Send events to sniffer.
events := []Event{dummyEvent{"barEvent"}, dummyEvent{"fooEvent"}}
for _, event := range events {
root.eventsIn <- event
eventp, ok := tryRecv(sniffer.Events(), timeout)
if !ok {
t.Fatalf("no Event received after %v", timeout)
}
if *eventp != event {
t.Errorf("received Event %v; wanted %v", *eventp, event)
}
}
// One of the events should trigger a signal.
sigp, ok := tryRecv(signal, timeout)
if !ok {
t.Fatalf("no signal received after %v", timeout)
}
if *sigp != expectSig {
t.Errorf("received signal %v; wanted %v", *sigp, expectSig)
}
}
}
func TestResizer(t *testing.T) {
root := newDummyEnv(image.Rectangle{})
defer func() {
root.kill <- true
<-root.dead
}()
resizeChan := make(chan image.Rectangle)
defer close(resizeChan)
resizer := newResizer(root, resizeChan)
sizes := []image.Rectangle{
image.Rect(11, 22, 33, 44),
image.Rect(55, 66, 77, 88),
image.Rect(99, 111, 222, 333),
}
for _, size := range sizes {
// First Resize event is sent automatically by root.
if !trySend(resizeChan, size, timeout) {
t.Errorf("resizer did not accept Rectangle after %v", timeout)
}
eventp, ok := tryRecv(resizer.Events(), timeout)
if !ok {
t.Fatalf("no Event received from resizer after %v", timeout)
}
resize, ok := (*eventp).(Resize)
if !ok {
t.Fatalf("received %v Event from resizer; wanted Resize", *eventp)
}
if resize.Rectangle != size {
t.Errorf("got %v from resizer; wanted %v", resize.Rectangle, size)
}
// this event should be replaced by the resizer
root.eventsIn <- Resize{image.Rectangle{}}
}
}
|