113 lines
2.6 KiB
Go
113 lines
2.6 KiB
Go
package state
|
|
|
|
import (
|
|
"encoding/json"
|
|
"os"
|
|
"path/filepath"
|
|
"strings"
|
|
"testing"
|
|
)
|
|
|
|
func TestSetPixel(t *testing.T) {
|
|
s := New(8, 8)
|
|
if err := s.SetPixel(3, 4, 5); err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
if got := s.Snapshot().Pixels[4][3]; got != 5 {
|
|
t.Fatalf("got %d, want 5", got)
|
|
}
|
|
if err := s.SetPixel(8, 0, 1); err != ErrOutOfBounds {
|
|
t.Fatalf("want ErrOutOfBounds, got %v", err)
|
|
}
|
|
if err := s.SetPixel(0, 0, 16); err != ErrInvalidColor {
|
|
t.Fatalf("want ErrInvalidColor, got %v", err)
|
|
}
|
|
}
|
|
|
|
func TestStampImage(t *testing.T) {
|
|
s := New(4, 4)
|
|
img := []Row{{1, 2}, {3, 4}}
|
|
if err := s.StampImage(1, 1, img); err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
p := s.Snapshot().Pixels
|
|
if p[1][1] != 1 || p[1][2] != 2 || p[2][1] != 3 || p[2][2] != 4 {
|
|
t.Fatalf("unexpected pixels: %v", p)
|
|
}
|
|
if err := s.StampImage(3, 3, img); err != nil {
|
|
t.Fatalf("clipping should succeed: %v", err)
|
|
}
|
|
p = s.Snapshot().Pixels
|
|
if p[3][3] != 1 {
|
|
t.Fatalf("clipped stamp wrong: %v", p)
|
|
}
|
|
big := make([]Row, 33)
|
|
for i := range big {
|
|
big[i] = make(Row, 1)
|
|
}
|
|
if err := s.StampImage(0, 0, big); err != ErrImageTooBig {
|
|
t.Fatalf("want ErrImageTooBig, got %v", err)
|
|
}
|
|
}
|
|
|
|
func TestMessages(t *testing.T) {
|
|
s := New(4, 4)
|
|
if err := s.AddMessage(""); err != ErrEmptyMessage {
|
|
t.Fatalf("want ErrEmptyMessage, got %v", err)
|
|
}
|
|
long := make([]byte, 141)
|
|
for i := range long {
|
|
long[i] = 'a'
|
|
}
|
|
if err := s.AddMessage(string(long)); err != ErrMessageLong {
|
|
t.Fatalf("want ErrMessageLong, got %v", err)
|
|
}
|
|
for i := 0; i < 60; i++ {
|
|
if err := s.AddMessage("hi"); err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
}
|
|
if got := len(s.Snapshot().Messages); got != 50 {
|
|
t.Fatalf("ring buffer size %d, want 50", got)
|
|
}
|
|
}
|
|
|
|
func TestPixelsEncodeAsNumbers(t *testing.T) {
|
|
s := New(2, 1)
|
|
s.SetPixel(1, 0, 7)
|
|
data, err := json.Marshal(s.Snapshot())
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
if !strings.Contains(string(data), `"pixels":[[0,7]]`) {
|
|
t.Fatalf("pixels must encode as number arrays, got %s", data)
|
|
}
|
|
}
|
|
|
|
func TestSnapshotRoundtrip(t *testing.T) {
|
|
s := New(16, 8)
|
|
s.SetPixel(5, 5, 9)
|
|
s.AddMessage("hello")
|
|
path := filepath.Join(t.TempDir(), "snap.json")
|
|
if err := s.Save(path); err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
loaded, err := Load(path)
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
snap := loaded.Snapshot()
|
|
if snap.Width != 16 || snap.Height != 8 {
|
|
t.Fatalf("dims %dx%d", snap.Width, snap.Height)
|
|
}
|
|
if snap.Pixels[5][5] != 9 {
|
|
t.Fatalf("pixel not preserved")
|
|
}
|
|
if len(snap.Messages) != 1 || snap.Messages[0].Text != "hello" {
|
|
t.Fatalf("messages not preserved: %v", snap.Messages)
|
|
}
|
|
if _, err := Load(filepath.Join(t.TempDir(), "missing.json")); !os.IsNotExist(err) {
|
|
t.Fatalf("want not-exist error, got %v", err)
|
|
}
|
|
}
|