1package vt
2
3import "testing"
4
5func TestScreenWindowSizeReports(t *testing.T) {
6 tests := []struct {
7 name string
8 geometry Geometry
9 query string
10 want string
11 }{
12 {name: "window pixels", geometry: Geometry{Cols: 80, Rows: 24, PixelWidth: 640, PixelHeight: 384}, query: "\x1b[14t", want: "\x1b[4;384;640t"},
13 {name: "cell pixels", geometry: Geometry{Cols: 80, Rows: 24, PixelWidth: 640, PixelHeight: 384}, query: "\x1b[16t", want: "\x1b[6;16;8t"},
14 {name: "cell pixels truncate", geometry: Geometry{Cols: 80, Rows: 24, PixelWidth: 803, PixelHeight: 487}, query: "\x1b[16t", want: "\x1b[6;20;10t"},
15 {name: "unknown pixels", geometry: Geometry{Cols: 80, Rows: 24}, query: "\x1b[14t"},
16 {name: "partial pixels are unknown", geometry: Geometry{Cols: 80, Rows: 24, PixelWidth: 640}, query: "\x1b[16t"},
17 {name: "unrelated window query", geometry: Geometry{Cols: 80, Rows: 24, PixelWidth: 640, PixelHeight: 384}, query: "\x1b[18t"},
18 {name: "private parameter is ignored", geometry: Geometry{Cols: 80, Rows: 24, PixelWidth: 640, PixelHeight: 384}, query: "\x1b[?14t"},
19 }
20 for _, tt := range tests {
21 t.Run(tt.name, func(t *testing.T) {
22 s := NewScreen(tt.geometry.Cols, tt.geometry.Rows)
23 s.SetGeometry(tt.geometry)
24 var got string
25 s.OnResponse = func(response []byte) { got += string(response) }
26 s.Write([]byte(tt.query))
27 if got != tt.want {
28 t.Fatalf("response = %q, want %q", got, tt.want)
29 }
30 })
31 }
32}
33
34func TestScreenWindowSizeReportsRequireUsableGeometry(t *testing.T) {
35 s := NewScreen(80, 24)
36 s.SetGeometry(Geometry{Cols: 80, Rows: 24, PixelWidth: 640, PixelHeight: 384})
37 s.geometry.Cols = 0
38 var got string
39 s.OnResponse = func(response []byte) { got += string(response) }
40 s.Write([]byte("\x1b[14t"))
41 if got != "" {
42 t.Fatalf("response = %q", got)
43 }
44}