Files
aego/tools/artstudio/host/effect_templates_test.go

82 lines
2.6 KiB
Go

package host
import (
"bytes"
"image"
"testing"
"aego/art"
)
func TestEffectTemplatesUseOrdinaryDirtyDocumentsAndIndependentHistory(t *testing.T) {
h := New()
for _, template := range art.EffectTemplates() {
t.Run(template.ID, func(t *testing.T) {
a, err := h.NewEffect(template.ID, "")
if err != nil {
t.Fatal(err)
}
b, err := h.NewEffect(template.ID, template.NameEN+".aeart")
if err != nil {
t.Fatal(err)
}
sa, sb := session(t, h, a), session(t, h, b)
if a == b || sa.Document.Info().ID == sb.Document.Info().ID || !sa.Info().Dirty || !sb.Info().Dirty || sa.Info().Undo != 0 || sb.Info().Undo != 0 {
t.Fatal("new template instances must have independent dirty document owners")
}
info := sa.Document.Info()
if info.Properties[art.EffectTemplateProperty] != template.ID || len(info.Frames) != 8 {
t.Fatal("shared template structure was lost")
}
before, err := sa.Document.PNG(sa.Frame, art.Albedo)
if err != nil {
t.Fatal(err)
}
draw(t, sa, 1)
after, _ := sa.Document.PNG(sa.Frame, art.Albedo)
other, _ := sb.Document.PNG(sb.Frame, art.Albedo)
if bytes.Equal(before, after) || !bytes.Equal(before, other) || sa.Info().Undo != 1 || sb.Info().Undo != 0 {
t.Fatal("template edit did not use independent canonical pixels and History")
}
if err = sa.Undo(); err != nil {
t.Fatal(err)
}
restored, _ := sa.Document.PNG(sa.Frame, art.Albedo)
if !bytes.Equal(restored, before) {
t.Fatal("template Undo did not restore pixels")
}
saved := export(t, h, a)
reopened, err := art.Decode(saved.Bytes, art.Limits{})
if err != nil {
t.Fatal(err)
}
if reopened.Info().Properties[art.EffectTemplateProperty] != template.ID || len(reopened.Info().Frames) != 8 {
t.Fatal("template identity/frames lost in native-compatible source")
}
reopened.Close()
if err = h.Close(a, true); err != nil {
t.Fatal(err)
}
if err = h.Close(b, true); err != nil {
t.Fatal(err)
}
})
}
}
func TestEffectCreationRejectsUnknownIDAndActiveGesture(t *testing.T) {
h := New()
key := document(t, h, "current.aeart")
s := session(t, h, key)
if _, err := h.NewEffect("../../external", ""); err == nil || h.Active() != key || len(h.Tabs()) != 1 {
t.Fatal("unknown template changed open documents")
}
if err := s.BeginGesture("pencil", image.Pt(1, 1), art.Brush{Size: 1, Paint: art.Paint{Color: art.Color{R: 255, A: 255}}}, false); err != nil {
t.Fatal(err)
}
if _, err := h.NewEffect("explosion", ""); err == nil || h.Active() != key || len(h.Tabs()) != 1 || !s.Info().Gesture {
t.Fatal("New Effect orphaned an unfinished stroke")
}
s.CancelGesture()
}