mirror of https://github.com/aseprite/aseprite.git
				
				
				
			
		
			
				
	
	
		
			170 lines
		
	
	
		
			6.1 KiB
		
	
	
	
		
			Lua
		
	
	
	
			
		
		
	
	
			170 lines
		
	
	
		
			6.1 KiB
		
	
	
	
		
			Lua
		
	
	
	
| -- Copyright (C) 2023  Igara Studio S.A.
 | |
| --
 | |
| -- This file is released under the terms of the MIT license.
 | |
| -- Read LICENSE.txt for more information.
 | |
| 
 | |
| --
 | |
| -- Codification and decodification of aseprite files with user data properties.
 | |
| --
 | |
| dofile('./test_utils.lua')
 | |
| 
 | |
| do
 | |
|   local spr = Sprite{ fromFile="sprites/file-tests-props.aseprite" }
 | |
| 
 | |
|   -- Set sprite custom properties
 | |
|   spr.properties.a = true
 | |
|   spr.properties.b = 1
 | |
|   spr.properties.c = "hi"
 | |
|   spr.properties.d = 2.3
 | |
|   spr.properties("ext").a = {"one", "two", "three"}
 | |
|   -- Set layer custom properties
 | |
|   spr.layers[2].properties.a = "i'm the layer 3"
 | |
|   spr.layers[2].properties("ext").a = 100
 | |
|   -- Set tileset custom properties
 | |
|   spr.layers[1].tileset.properties.a = "i'm a tilemap"
 | |
|   spr.layers[1].tileset.properties.b = 11
 | |
|   spr.layers[1].tileset.properties("ext").a = "text from extension"
 | |
|   -- Create some tiles with properties
 | |
|   local tile = spr:newTile(spr.layers[1].tileset, 1)
 | |
|   tile.properties.a = 320
 | |
|   tile.properties.b = 330
 | |
|   tile = spr:newTile(spr.layers[1].tileset, 2)
 | |
|   tile.properties.a = 640
 | |
|   tile.properties.b = 650
 | |
|   -- Set tags custom properties
 | |
|   spr.tags[1].properties.a = Point(1,2)
 | |
|   spr.tags[1].properties.b = {a="text",b=35.567,c=Rectangle(1,2,3,4)}
 | |
|   spr.tags[1].properties("ext").a = {a=Size(50,60),b=43985943434}
 | |
|   -- Set cels custom properties
 | |
|   spr.layers[4].cels[4].properties = {a={1,2,3}, b={a="4",b="5",c="6"}}
 | |
|   spr.layers[4].cels[4].properties("ext").a = {"a","b","c"}
 | |
|   -- Set slices custom properties
 | |
|   spr.slices[1].properties = {a=Point(3,4), b=Size(10,20)}
 | |
|   spr.slices[1].properties("ext", {a=Rectangle(10,20,30,40)})
 | |
| 
 | |
|   spr:saveAs("_test_userdata_codec_1.aseprite")
 | |
|   spr:close()
 | |
| 
 | |
|   local origSpr = Sprite{ fromFile="sprites/file-tests-props.aseprite" }
 | |
|   spr = Sprite{ fromFile="_test_userdata_codec_1.aseprite" }
 | |
|   assert_sprites_eq(origSpr, spr)
 | |
|   origSpr:close()
 | |
|   assert(#spr.properties == 4)
 | |
|   assert(#spr.properties("ext") == 1)
 | |
|   assert(spr.properties.a == true)
 | |
|   assert(spr.properties.b == 1)
 | |
|   assert(spr.properties.c == "hi")
 | |
|   assert(spr.properties.d == 2.3)
 | |
|   assert(spr.properties("ext").a[1] == "one")
 | |
|   assert(spr.properties("ext").a[2] == "two")
 | |
|   assert(spr.properties("ext").a[3] == "three")
 | |
|   assert(#spr.layers[2].properties == 1)
 | |
|   assert(#spr.layers[2].properties("ext") == 1)
 | |
|   assert(spr.layers[2].properties.a == "i'm the layer 3")
 | |
|   assert(spr.layers[2].properties("ext").a == 100)
 | |
|   assert(#spr.layers[1].tileset.properties == 2)
 | |
|   assert(#spr.layers[1].tileset.properties("ext") == 1)
 | |
|   assert(spr.layers[1].tileset.properties.a == "i'm a tilemap")
 | |
|   assert(spr.layers[1].tileset.properties.b == 11)
 | |
|   assert(spr.layers[1].tileset.properties("ext").a == "text from extension")
 | |
|   assert(spr.layers[1].tileset:tile(1).properties.a == 320)
 | |
|   assert(spr.layers[1].tileset:tile(1).properties.b == 330)
 | |
|   assert(spr.layers[1].tileset:tile(2).properties.a == 640)
 | |
|   assert(spr.layers[1].tileset:tile(2).properties.b == 650)
 | |
|   assert(#spr.tags[1].properties == 2)
 | |
|   assert(#spr.tags[1].properties("ext") == 1)
 | |
|   assert(spr.tags[1].properties.a.x == 1)
 | |
|   assert(spr.tags[1].properties.a.y == 2)
 | |
|   assert(spr.tags[1].properties.b.a == "text")
 | |
|   assert(spr.tags[1].properties.b.b == 35.567)
 | |
|   assert(spr.tags[1].properties.b.c.x == 1)
 | |
|   assert(spr.tags[1].properties.b.c.y == 2)
 | |
|   assert(spr.tags[1].properties.b.c.width == 3)
 | |
|   assert(spr.tags[1].properties.b.c.height == 4)
 | |
|   assert(spr.tags[1].properties("ext").a.a.width == 50)
 | |
|   assert(spr.tags[1].properties("ext").a.a.height == 60)
 | |
|   assert(spr.tags[1].properties("ext").a.b == 43985943434)
 | |
|   assert(#spr.layers[4].cels[4].properties == 2)
 | |
|   assert(#spr.layers[4].cels[4].properties("ext") == 1)
 | |
|   assert(spr.layers[4].cels[4].properties.a[1] == 1)
 | |
|   assert(spr.layers[4].cels[4].properties.a[2] == 2)
 | |
|   assert(spr.layers[4].cels[4].properties.a[3] == 3)
 | |
|   assert(spr.layers[4].cels[4].properties.b.a == "4")
 | |
|   assert(spr.layers[4].cels[4].properties.b.b == "5")
 | |
|   assert(spr.layers[4].cels[4].properties.b.c == "6")
 | |
|   assert(spr.layers[4].cels[4].properties("ext").a[1] == "a")
 | |
|   assert(spr.layers[4].cels[4].properties("ext").a[2] == "b")
 | |
|   assert(spr.layers[4].cels[4].properties("ext").a[3] == "c")
 | |
|   assert(#spr.slices[1].properties == 2)
 | |
|   assert(#spr.slices[1].properties("ext") == 1)
 | |
|   assert(spr.slices[1].properties.a.x == 3)
 | |
|   assert(spr.slices[1].properties.a.y == 4)
 | |
|   assert(spr.slices[1].properties.b.width == 10)
 | |
|   assert(spr.slices[1].properties.b.height == 20)
 | |
|   assert(spr.slices[1].properties("ext").a.x == 10)
 | |
|   assert(spr.slices[1].properties("ext").a.y == 20)
 | |
|   assert(spr.slices[1].properties("ext").a.width == 30)
 | |
|   assert(spr.slices[1].properties("ext").a.height == 40)
 | |
| end
 | |
| 
 | |
| -- Test bug saving empty properties map with a empty set of properties
 | |
| do
 | |
|   local spr = Sprite(32, 32)
 | |
|   spr:newLayer("B")
 | |
| 
 | |
|   -- Just create an empty property
 | |
|   local properties1 = spr.layers[1].properties("ext")
 | |
|   if properties1.categories then
 | |
|     -- do nothing
 | |
|   end
 | |
| 
 | |
|   local properties2 = spr.layers[2].properties("ext")
 | |
|   properties2.b = 32
 | |
| 
 | |
|   spr:saveAs("_test_userdata_codec_2.aseprite")
 | |
|   assert(#spr.layers == 2)
 | |
|   spr:close()
 | |
| 
 | |
|   spr = Sprite{ fromFile="_test_userdata_codec_2.aseprite" }
 | |
|   assert(#spr.layers[1].properties("ext") == 0)
 | |
|   assert(#spr.layers[2].properties("ext") == 1)
 | |
|   assert(spr.layers[2].properties("ext").b == 32)
 | |
| end
 | |
| 
 | |
| -- Test save vector with different types inside
 | |
| do
 | |
|   local spr = Sprite(32, 32)
 | |
|   spr.properties.a = { 3, "hi", {4, 5, 6}, {a="bye", b=10} }
 | |
| 
 | |
|   spr:saveAs("_test_userdata_codec_3.aseprite")
 | |
|   spr:close()
 | |
| 
 | |
|   spr = Sprite{ fromFile="_test_userdata_codec_3.aseprite" }
 | |
|   assert(#spr.properties.a == 4)
 | |
|   assert(spr.properties.a[1] == 3)
 | |
|   assert(spr.properties.a[2] == "hi")
 | |
|   assert(#spr.properties.a[3] == 3)
 | |
|   assert(spr.properties.a[3][1] == 4)
 | |
|   assert(spr.properties.a[3][2] == 5)
 | |
|   assert(spr.properties.a[3][3] == 6)
 | |
|   assert(spr.properties.a[4].a == "bye")
 | |
|   assert(spr.properties.a[4].b == 10)
 | |
| end
 | |
| 
 | |
| -- Test save UUID
 | |
| do
 | |
|   local a = Uuid()
 | |
|   local b = Uuid()
 | |
|   local spr = Sprite(1, 1)
 | |
|   spr.properties.a = a
 | |
|   spr.properties.b = b
 | |
| 
 | |
|   spr:saveAs("_test_userdata_codec_4.aseprite")
 | |
|   spr:close()
 | |
| 
 | |
|   spr = Sprite{ fromFile="_test_userdata_codec_4.aseprite" }
 | |
|   assert(#spr.properties == 2)
 | |
|   assert(spr.properties.a == a)
 | |
|   assert(spr.properties.b == b)
 | |
| end
 |