aboutsummaryrefslogtreecommitdiffstats
path: root/layout_test.go
blob: 1999c633f20098c07693e2599010db51f6eddeb8 (plain) (blame)
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{}}
	}
}