termdash/private/segdisp/segdisp_test.go

171 lines
4.2 KiB
Go
Raw Normal View History

2019-04-29 11:12:55 +08:00
// Copyright 2019 Google Inc.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
package segdisp
import (
"image"
"testing"
"github.com/kylelemons/godebug/pretty"
"github.com/mum4k/termdash/private/canvas"
"github.com/mum4k/termdash/private/canvas/braille"
"github.com/mum4k/termdash/private/canvas/braille/testbraille"
)
func TestRequired(t *testing.T) {
tests := []struct {
desc string
cellArea image.Rectangle
want image.Rectangle
wantErr bool
}{
{
desc: "fails when area isn't wide enough",
cellArea: image.Rect(0, 0, MinCols-1, MinRows),
wantErr: true,
},
{
desc: "fails when area isn't tall enough",
cellArea: image.Rect(0, 0, MinCols, MinRows-1),
wantErr: true,
},
{
desc: "returns same area when no adjustment needed",
cellArea: image.Rect(0, 0, MinCols, MinRows),
want: image.Rect(0, 0, MinCols, MinRows),
},
{
desc: "adjusts width to aspect ratio",
cellArea: image.Rect(0, 0, MinCols+100, MinRows),
want: image.Rect(0, 0, MinCols, MinRows),
},
{
desc: "adjusts height to aspect ratio",
cellArea: image.Rect(0, 0, MinCols, MinRows+100),
want: image.Rect(0, 0, MinCols, MinRows),
},
{
desc: "adjusts larger area to aspect ratio",
cellArea: image.Rect(0, 0, MinCols*2, MinRows*4),
want: image.Rect(0, 0, 12, 10),
},
}
for _, tc := range tests {
t.Run(tc.desc, func(t *testing.T) {
got, err := Required(tc.cellArea)
if (err != nil) != tc.wantErr {
t.Errorf("Required => unexpected error: %v, wantErr: %v", err, tc.wantErr)
}
if err != nil {
return
}
if diff := pretty.Compare(tc.want, got); diff != "" {
t.Errorf("Required => unexpected diff (-want, +got):\n%s", diff)
}
})
}
}
func TestToBraille(t *testing.T) {
tests := []struct {
desc string
cellArea image.Rectangle
wantBC *braille.Canvas
wantAr image.Rectangle
wantErr bool
}{
{
desc: "fails when area isn't wide enough",
cellArea: image.Rect(0, 0, MinCols-1, MinRows),
wantErr: true,
},
{
desc: "canvas creates braille with the desired aspect ratio",
cellArea: image.Rect(0, 0, MinCols, MinRows),
wantBC: testbraille.MustNew(image.Rect(0, 0, MinCols, MinRows)),
wantAr: image.Rect(0, 0, MinCols*braille.ColMult, MinRows*braille.RowMult),
},
}
for _, tc := range tests {
t.Run(tc.desc, func(t *testing.T) {
cvs, err := canvas.New(tc.cellArea)
if err != nil {
t.Fatalf("canvas.New => unexpected error: %v", err)
}
gotBC, gotAr, err := ToBraille(cvs)
if (err != nil) != tc.wantErr {
t.Errorf("ToBraille => unexpected error: %v, wantErr: %v", err, tc.wantErr)
}
if err != nil {
return
}
if diff := pretty.Compare(tc.wantBC, gotBC); diff != "" {
t.Errorf("ToBraille => unexpected braille canvas, diff (-want, +got):\n%s", diff)
}
if diff := pretty.Compare(tc.wantAr, gotAr); diff != "" {
t.Errorf("ToBraille => unexpected area, diff (-want, +got):\n%s", diff)
}
})
}
}
func TestSegmentSize(t *testing.T) {
tests := []struct {
desc string
ar image.Rectangle
want int
}{
{
desc: "zero area",
ar: image.ZR,
want: 0,
},
{
desc: "smallest segment size",
ar: image.Rect(0, 0, 15, 1),
want: 1,
},
{
desc: "allows even size of two",
ar: image.Rect(0, 0, 22, 1),
want: 2,
},
{
desc: "lands on even width, corrected to odd",
ar: image.Rect(0, 0, 44, 1),
want: 5,
},
{
desc: "lands on odd width",
ar: image.Rect(0, 0, 55, 1),
want: 5,
},
}
for _, tc := range tests {
t.Run(tc.desc, func(t *testing.T) {
got := SegmentSize(tc.ar)
if got != tc.want {
t.Errorf("SegmentSize => %d, want %d", got, tc.want)
}
})
}
}