diff options
Diffstat (limited to 'layout_test.go')
| -rw-r--r-- | layout_test.go | 96 |
1 files changed, 96 insertions, 0 deletions
diff --git a/layout_test.go b/layout_test.go new file mode 100644 index 0000000..1999c63 --- /dev/null +++ b/layout_test.go @@ -0,0 +1,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{}} + } +} |