aseprite/tests/scripts/userdata.lua

145 lines
3.9 KiB
Lua

-- Copyright (C) 2022-2023 Igara Studio S.A.
--
-- This file is released under the terms of the MIT license.
-- Read LICENSE.txt for more information.
do
local spr = Sprite(1, 1)
spr.properties.a = true
spr.properties.b = 1
spr.properties.c = "hi"
spr.properties.d = 2.3
assert(spr.properties.a == true)
assert(spr.properties.b == 1)
assert(spr.properties.c == "hi")
-- TODO we don't have too much precision saving fixed points in properties
assert(math.abs(spr.properties.d - 2.3) < 0.00001)
assert(#spr.properties == 4)
-- Iterate all properties
local t = {}
for k,v in pairs(spr.properties) do
t[k] = v
end
assert(t.a == true)
assert(t.b == 1)
assert(t.c == "hi")
assert(math.abs(t.d - 2.3) < 0.00001)
spr.properties.a = false
assert(spr.properties.a == false)
spr.properties.b = nil
assert(spr.properties.b == nil)
assert(#spr.properties == 3)
-- We set an unexistent property now, undo it, the property shouldn't exist
spr.properties.b = 5
assert(spr.properties.b == 5)
assert(#spr.properties == 4)
app.undo()
assert(#spr.properties == 3)
spr.properties.v = { 10, 20, 30 }
assert(#spr.properties.v == 3)
assert(spr.properties.v[1] == 10)
assert(spr.properties.v[2] == 20)
assert(spr.properties.v[3] == 30)
spr.properties.u = spr.properties.v -- Copy a property
assert(#spr.properties.u == 3)
assert(spr.properties.u[1] == 10)
assert(spr.properties.u[2] == 20)
assert(spr.properties.u[3] == 30)
spr.properties.m = { a=10,
b="bye",
c={ "a", "b", "c" },
d={ a=1, b="d", c={ x=2, y=0.5, z=0 } },
e=Point(32, 20),
f=Size(40, 80),
g=Rectangle(2, 4, 6, 8) }
assert(#spr.properties == 6)
local m = spr.properties.m
assert(m.a == 10)
assert(m.b == "bye")
assert(m.c[1] == "a")
assert(m.c[2] == "b")
assert(m.c[3] == "c")
assert(m.d.a == 1)
assert(m.d.b == "d")
assert(m.d.c.x == 2)
assert(m.d.c.y == 0.5)
assert(m.d.c.z == 0)
assert(m.e.x == 32)
assert(m.e.y == 20)
assert(m.f.width == 40)
assert(m.f.height == 80)
assert(m.g.x == 2)
assert(m.g.y == 4)
assert(m.g.width == 6)
assert(m.g.height == 8)
-- Set all properties
spr.properties = { a=1000 }
assert(spr.properties.a == 1000)
assert(#spr.properties == 1)
app.undo() -- Test undo/redo
assert(spr.properties.a == false)
assert(#spr.properties == 6)
app.redo()
assert(spr.properties.a == 1000)
assert(#spr.properties == 1)
-- Extension properties
spr.properties.a = 10
spr.properties("ext1").a = 20
assert(spr.properties.a == 10)
assert(spr.properties("ext1").a == 20)
spr.properties("ext1", { a=30, b=35 })
assert(spr.properties("ext1").a == 30)
assert(spr.properties("ext1").b == 35)
app.undo() -- Test undo/redo
assert(spr.properties("ext1").a == 20)
assert(spr.properties("ext1").b == nil)
app.redo()
local ext1 = spr.properties("ext1")
ext1.a = 40
ext1.b = 45
assert(spr.properties("ext1").a == 40)
assert(spr.properties("ext1").b == 45)
spr.properties("", { a=50, b=60 }) -- Empty extension is the user properties
assert(spr.properties.a == 50)
assert(spr.properties.b == 60)
-- Test undo/redo setting/removing one property at a time
spr.properties.a = "hi"
assert(spr.properties.a == "hi")
assert(spr.properties.b == 60)
app.undo()
assert(spr.properties.a == 50)
assert(spr.properties.b == 60)
app.redo()
assert(spr.properties.a == "hi")
assert(spr.properties.b == 60)
assert(#spr.properties == 2)
spr.properties.a = nil
assert(#spr.properties == 1)
assert(spr.properties.a == nil)
assert(spr.properties.b == 60)
app.undo()
assert(#spr.properties == 2)
assert(spr.properties.a == "hi")
assert(spr.properties.b == 60)
end
-- Test crash setting nil user data
-- https://github.com/aseprite/aseprite/issues/4187
do
local spr = Sprite(1, 1)
spr.data = nil
end