You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

140 lines
2.6 KiB
Go

package rgbmatrix
import (
"image/color"
"testing"
. "gopkg.in/check.v1"
)
func Test(t *testing.T) { TestingT(t) }
type CanvasSuite struct{}
var _ = Suite(&CanvasSuite{})
func (s *CanvasSuite) TestNewCanvas(c *C) {
canvas := NewCanvas(NewMatrixMock())
c.Assert(canvas, NotNil)
c.Assert(canvas.w, Equals, 64)
c.Assert(canvas.h, Equals, 32)
}
func (s *CanvasSuite) TestRender(c *C) {
m := NewMatrixMock()
canvas := &Canvas{m: m}
canvas.Render()
c.Assert(m.called["Render"], Equals, true)
}
func (s *CanvasSuite) TestColorModel(c *C) {
canvas := &Canvas{}
c.Assert(canvas.ColorModel(), Equals, color.RGBAModel)
}
func (s *CanvasSuite) TestBounds(c *C) {
canvas := &Canvas{w: 10, h: 20}
b := canvas.Bounds()
c.Assert(b.Min.X, Equals, 0)
c.Assert(b.Min.Y, Equals, 0)
c.Assert(b.Max.X, Equals, 10)
c.Assert(b.Max.Y, Equals, 20)
}
func (s *CanvasSuite) TestAt(c *C) {
m := NewMatrixMock()
canvas := &Canvas{w: 10, h: 20, m: m}
canvas.At(5, 15)
c.Assert(m.called["At"], Equals, 155)
}
func (s *CanvasSuite) TestSet(c *C) {
m := NewMatrixMock()
canvas := &Canvas{w: 10, h: 20, m: m}
canvas.Set(5, 15, color.White)
c.Assert(m.called["Set"], Equals, 155)
c.Assert(m.colors[155], Equals, color.White)
}
func (s *CanvasSuite) TestClear(c *C) {
m := NewMatrixMock()
canvas := &Canvas{w: 10, h: 20, m: m}
err := canvas.Clear()
c.Assert(err, IsNil)
for _, px := range m.colors {
c.Assert(px, Equals, color.Black)
}
c.Assert(m.called["Render"], Equals, true)
}
func (s *CanvasSuite) TestClose(c *C) {
m := NewMatrixMock()
canvas := &Canvas{w: 10, h: 20, m: m}
err := canvas.Close()
c.Assert(err, IsNil)
for _, px := range m.colors {
c.Assert(px, Equals, color.Black)
}
c.Assert(m.called["Render"], Equals, true)
}
type MatrixMock struct {
called map[string]interface{}
colors []color.Color
}
func NewMatrixMock() *MatrixMock {
return &MatrixMock{
called: make(map[string]interface{}, 0),
colors: make([]color.Color, 200),
}
}
func (m *MatrixMock) Geometry() (width, height int) {
return 64, 32
}
func (m *MatrixMock) Initialize() error {
m.called["Initialize"] = true
return nil
}
func (m *MatrixMock) At(position int) color.Color {
m.called["At"] = position
return color.Black
}
func (m *MatrixMock) Set(position int, c color.Color) {
m.called["Set"] = position
m.colors[position] = c
}
func (m *MatrixMock) Apply(leds []color.Color) error {
for position, l := range leds {
m.Set(position, l)
}
return m.Render()
}
func (m *MatrixMock) Render() error {
m.called["Render"] = true
return nil
}
func (m *MatrixMock) Close() error {
m.called["Close"] = true
return nil
}