1package ports
2
3import "testing"
4
5// ToBuffer matches wl_output.transform: the buffer holds the surface rotated
6// counter-clockwise by the transform (after a flip around the vertical axis
7// for flipped values). Checked on the surface's top-left corner of a 3×2
8// surface.
9func TestBufferTransformToBuffer(t *testing.T) {
10 for _, tc := range []struct {
11 t BufferTransform
12 rotated bool
13 bx, by float64 // buffer point of surface (0.5, 0.5)
14 bufW, bufH int
15 }{
16 {0, false, 0.5, 0.5, 3, 2},
17 {1, true, 0.5, 2.5, 2, 3},
18 {2, false, 2.5, 1.5, 3, 2},
19 {3, true, 1.5, 0.5, 2, 3},
20 {4, false, 2.5, 0.5, 3, 2},
21 {5, true, 0.5, 0.5, 2, 3},
22 {6, false, 0.5, 1.5, 3, 2},
23 {7, true, 1.5, 2.5, 2, 3},
24 } {
25 if tc.t.Rotated() != tc.rotated {
26 t.Errorf("%d: rotated %v", tc.t, tc.t.Rotated())
27 }
28 x, y := tc.t.ToBuffer(0.5, 0.5, 3, 2)
29 if x != tc.bx || y != tc.by {
30 t.Errorf("%d: (0.5,0.5) -> (%v,%v), want (%v,%v)", tc.t, x, y, tc.bx, tc.by)
31 }
32 if x < 0 || y < 0 || x > float64(tc.bufW) || y > float64(tc.bufH) {
33 t.Errorf("%d: (%v,%v) outside the %dx%d buffer", tc.t, x, y, tc.bufW, tc.bufH)
34 }
35 }
36}