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.
|
|
|
|
|
2019-04-29 11:08:34 +08:00
|
|
|
package segdisp
|
|
|
|
|
|
|
|
import (
|
|
|
|
"image"
|
|
|
|
"testing"
|
|
|
|
|
|
|
|
"github.com/kylelemons/godebug/pretty"
|
2020-04-11 03:26:45 +08:00
|
|
|
"github.com/mum4k/termdash/private/canvas"
|
|
|
|
"github.com/mum4k/termdash/private/canvas/braille"
|
|
|
|
"github.com/mum4k/termdash/private/canvas/braille/testbraille"
|
2019-04-29 11:08:34 +08:00
|
|
|
)
|
|
|
|
|
|
|
|
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)
|
|
|
|
}
|
|
|
|
})
|
|
|
|
}
|
|
|
|
}
|
2019-04-30 10:56:59 +08:00
|
|
|
|
|
|
|
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)
|
|
|
|
}
|
|
|
|
})
|
|
|
|
}
|
|
|
|
}
|